func hailstone(n) { gather { while (n > 1) { take(n) n = (n.is_even ? (n/2) : (take(3*n + 1)/2)) } take(1) } } if (__FILE__ == __MAIN__) { # true when not imported var seq = hailstone(27) say "hailstone(27) - #{seq.len} elements: #{seq.first(4)} [...] #{seq.last(4)}" var n = 0 var max = 0 100_000.times { |i| var seq = hailstone(i) if (seq.len > max) { max = seq.len n = i } } say "Longest sequence is for #{n}: #{max}" }