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