32 lines
626 B
Crystal
32 lines
626 B
Crystal
def yellowstone
|
|
used = Set(Int32).new
|
|
penult, last = 2, 3
|
|
start = 4
|
|
iter = Iterator.of do
|
|
while start.in? used
|
|
used.delete start
|
|
start += 1
|
|
end
|
|
(start..).each do |n|
|
|
if !used.includes?(n) && n.gcd(last) == 1 && n.gcd(penult) > 1
|
|
used << n
|
|
penult, last = last, n
|
|
break n
|
|
end
|
|
end
|
|
end
|
|
(1..3).each.chain iter
|
|
end
|
|
|
|
p yellowstone.first(30).to_a
|
|
|
|
values = yellowstone.first(100).to_a
|
|
height = (values.max - 1) // 8
|
|
|
|
(0..height).reverse_each do |i|
|
|
values.each do |v|
|
|
d = v - i*8
|
|
print d <= 0 ? ' ' : d >= 8 ? '█' : '\u2580' + d
|
|
end
|
|
puts
|
|
end
|