27 lines
539 B
Ruby
27 lines
539 B
Ruby
def create_generator(ar)
|
|
Enumerator.new do |y|
|
|
cycle = ar.cycle
|
|
s = []
|
|
loop do
|
|
t = cycle.next
|
|
s.push(t)
|
|
v = s.shift
|
|
y << v
|
|
(v-1).times{s.push(t)}
|
|
end
|
|
end
|
|
end
|
|
|
|
def rle(ar)
|
|
ar.slice_when{|a,b| a != b}.map(&:size)
|
|
end
|
|
|
|
[[20, [1,2]],
|
|
[20, [2,1]],
|
|
[30, [1,3,1,2]],
|
|
[30, [1,3,2,1]]].each do |num,ar|
|
|
puts "\nFirst #{num} of the sequence generated by #{ar.inspect}:"
|
|
p res = create_generator(ar).take(num)
|
|
puts "Possible Kolakoski sequence? #{res.join.start_with?(rle(res).join)}"
|
|
end
|