-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a ruby source code syntax test with source and output
- Loading branch information
Showing
2 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
[3;38;2;249;38;114mclass[0m[38;2;166;226;46m [0m[4;38;2;102;217;239mRepeatedSubstring[0m | ||
[38;2;166;226;46m [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mfind_repeated_substring[0m[38;2;255;255;255m([0m[3;38;2;253;151;31ms[0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m [0m[38;2;117;113;94m#[0m[38;2;117;113;94m catch the edge cases[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;230;219;116mNONE[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m | ||
[38;2;248;248;242m [0m[38;2;117;113;94m#[0m[38;2;117;113;94m check if the string consists of only one character => "aaaaaa" => "a"[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m s[0m[38;2;248;248;242m.[0m[38;2;248;248;242msplit[0m[38;2;255;255;255m([0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242muniq[0m[38;2;248;248;242m[[0m[38;2;190;132;255m0[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s[0m[38;2;248;248;242m.[0m[38;2;248;248;242msplit[0m[38;2;255;255;255m([0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242muniq[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m | ||
|
||
[38;2;248;248;242m searched [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242m][0m | ||
[38;2;248;248;242m longest_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;190;132;255m0[0m | ||
[38;2;248;248;242m long_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m | ||
[38;2;248;248;242m [0m[38;2;255;255;255m([0m[38;2;190;132;255m0[0m[38;2;249;38;114m..[0m[38;2;248;248;242ms[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mnext[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m searched[0m[38;2;248;248;242m.[0m[38;2;102;217;239minclude?[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m | ||
|
||
[38;2;248;248;242m searched[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpush[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m next_occurrences [0m[38;2;249;38;114m=[0m[38;2;248;248;242m next_index[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m,[0m[38;2;248;248;242m i [0m[38;2;249;38;114m+[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m,[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m next_occurrences[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mnext_occurrence[0m[38;2;248;248;242m|[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mnext[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m next_occurrence [0m[38;2;249;38;114m==[0m[38;2;248;248;242m [0m[38;2;249;38;114m-[0m[38;2;190;132;255m1[0m | ||
|
||
[38;2;248;248;242m prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m ge_prefix[0m[38;2;255;255;255m([0m[38;2;248;248;242ms[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;249;38;114m..[0m[38;2;248;248;242mnext_occurrence [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;248;248;242m][0m[38;2;248;248;242m,[0m[38;2;248;248;242m s[0m[38;2;248;248;242m[[0m[38;2;248;248;242mnext_occurrence[0m[38;2;249;38;114m..[0m[38;2;248;248;242ms[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m][0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength [0m[38;2;249;38;114m>[0m[38;2;248;248;242m longest_prefix[0m | ||
[38;2;248;248;242m longest_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m | ||
[38;2;248;248;242m long_prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m prefix[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;248;248;242m [0m[38;2;117;113;94m#[0m[38;2;117;113;94m if prefix == " " it is a invalid sequence[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;230;219;116mNONE[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m long_prefix[0m[38;2;248;248;242m.[0m[38;2;248;248;242mstrip[0m[38;2;248;248;242m.[0m[38;2;248;248;242mempty?[0m | ||
|
||
[38;2;248;248;242m long_prefix[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
|
||
[38;2;248;248;242m [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mget_prefix[0m[38;2;255;255;255m([0m[3;38;2;253;151;31ms1[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31ms2[0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m prefix [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m | ||
[38;2;248;248;242m min_length [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242ms1[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m,[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;248;248;242m][0m[38;2;248;248;242m.[0m[38;2;248;248;242mmin[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m [0m[38;2;249;38;114m'[0m[38;2;249;38;114m'[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m.[0m[38;2;102;217;239mnil?[0m[38;2;248;248;242m [0m[38;2;249;38;114m||[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m.[0m[38;2;102;217;239mnil?[0m | ||
|
||
[38;2;248;248;242m [0m[38;2;255;255;255m([0m[38;2;190;132;255m0[0m[38;2;249;38;114m..[0m[38;2;248;248;242mmin_length [0m[38;2;249;38;114m-[0m[38;2;248;248;242m [0m[38;2;190;132;255m1[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mreturn[0m[38;2;248;248;242m prefix [0m[38;2;249;38;114mif[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m!=[0m[38;2;248;248;242m s2[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m | ||
|
||
[38;2;248;248;242m prefix [0m[38;2;249;38;114m+=[0m[38;2;248;248;242m s1[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;248;248;242m prefix[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
|
||
[38;2;248;248;242m [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mnext_index[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mseq[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mindex[0m[38;2;248;248;242m,[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mvalue[0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m indexes [0m[38;2;249;38;114m=[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[38;2;248;248;242m][0m | ||
[38;2;248;248;242m [0m[38;2;255;255;255m([0m[38;2;102;217;239mindex[0m[38;2;249;38;114m..[0m[38;2;248;248;242mseq[0m[38;2;248;248;242m.[0m[38;2;248;248;242mlength[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach [0m[38;2;249;38;114mdo[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mi[0m[38;2;248;248;242m|[0m | ||
[38;2;248;248;242m indexes[0m[38;2;248;248;242m.[0m[38;2;248;248;242mpush[0m[38;2;255;255;255m([0m[38;2;248;248;242mi[0m[38;2;255;255;255m)[0m[38;2;248;248;242m [0m[38;2;249;38;114mif[0m[38;2;248;248;242m seq[0m[38;2;248;248;242m[[0m[38;2;248;248;242mi[0m[38;2;248;248;242m][0m[38;2;248;248;242m [0m[38;2;249;38;114m==[0m[38;2;248;248;242m value[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;248;248;242m indexes[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
|
||
[38;2;248;248;242m [0m[3;38;2;249;38;114mdef[0m[38;2;248;248;242m [0m[38;2;246;170;17mfind_repeated_substring_file[0m[38;2;255;255;255m([0m[3;38;2;253;151;31mfile_path[0m[38;2;255;255;255m)[0m | ||
[38;2;248;248;242m [0m[38;2;102;217;239mFile[0m[38;2;248;248;242m.[0m[38;2;102;217;239mopen[0m[38;2;255;255;255m([0m[38;2;248;248;242mfile_path[0m[38;2;255;255;255m)[0m[38;2;248;248;242m.[0m[38;2;248;248;242mread[0m[38;2;248;248;242m.[0m[38;2;248;248;242meach_line[0m[38;2;248;248;242m.[0m[38;2;248;248;242mmap [0m[38;2;248;248;242m{[0m[38;2;248;248;242m [0m[38;2;248;248;242m|[0m[3;38;2;253;151;31mline[0m[38;2;248;248;242m|[0m[38;2;248;248;242m find_repeated_substring[0m[38;2;255;255;255m([0m[38;2;248;248;242mline[0m[38;2;255;255;255m)[0m[38;2;248;248;242m [0m[38;2;248;248;242m}[0m | ||
[38;2;248;248;242m [0m[38;2;249;38;114mend[0m | ||
[38;2;249;38;114mend[0m |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
class RepeatedSubstring | ||
def find_repeated_substring(s) | ||
# catch the edge cases | ||
return 'NONE' if s == '' | ||
# check if the string consists of only one character => "aaaaaa" => "a" | ||
return s.split('').uniq[0] if s.split('').uniq.length == 1 | ||
|
||
searched = [] | ||
longest_prefix = 0 | ||
long_prefix = '' | ||
(0..s.length - 1).each do |i| | ||
next if searched.include? s[i] | ||
|
||
searched.push(s[i]) | ||
next_occurrences = next_index(s, i + 1, s[i]) | ||
next_occurrences.each do |next_occurrence| | ||
next if next_occurrence == -1 | ||
|
||
prefix = ge_prefix(s[i..next_occurrence - 1], s[next_occurrence..s.length]) | ||
if prefix.length > longest_prefix | ||
longest_prefix = prefix.length | ||
long_prefix = prefix | ||
end | ||
end | ||
end | ||
# if prefix == " " it is a invalid sequence | ||
return 'NONE' if long_prefix.strip.empty? | ||
|
||
long_prefix | ||
end | ||
|
||
def get_prefix(s1, s2) | ||
prefix = '' | ||
min_length = [s1.length, s2.length].min | ||
return '' if s1.nil? || s2.nil? | ||
|
||
(0..min_length - 1).each do |i| | ||
return prefix if s1[i] != s2[i] | ||
|
||
prefix += s1[i] | ||
end | ||
prefix | ||
end | ||
|
||
def next_index(seq, index, value) | ||
indexes = [] | ||
(index..seq.length).each do |i| | ||
indexes.push(i) if seq[i] == value | ||
end | ||
indexes | ||
end | ||
|
||
def find_repeated_substring_file(file_path) | ||
File.open(file_path).read.each_line.map { |line| find_repeated_substring(line) } | ||
end | ||
end |