mirror of
https://github.com/sharkdp/bat.git
synced 2025-08-17 11:32:54 +02:00
Add a ruby source code syntax test with source and output
This commit is contained in:
committed by
David Peter
parent
0ac211140a
commit
0c3344d0c4
56
tests/syntax-tests/source/Ruby/output.rb
Normal file
56
tests/syntax-tests/source/Ruby/output.rb
Normal file
@ -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
|
Reference in New Issue
Block a user