#* http://rosettacode.org/wiki/Hailstone_sequence
  Generate 'hailstone' sequence - http://en.wikipedia.org/wiki/Collatz_conjecture
*#

hailstone = { num |
  sequence = [num]
  while { num != 1 }
    { true? num % 2 == 0
      { num = num / 2 }
      { num = num * 3 + 1 }
      sequence << num
    }

  sequence
}

#Check sequence for 27
seq = hailstone 27
true? (seq[0,3] == [27 82 41 124] && seq[-1, -4] == [8 4 2 1])
  { p "Sequence for 27 is correct" }
  { p "Sequence for 27 is not correct!" }

#Find longest sequence for numbers < 100,000
longest = [number: 0 length: 0]

1.to 99999 { index |
    seq = hailstone index
    true? seq.length > longest[:length]
      { longest[:length] = seq.length
        longest[:number] = index
        p "Longest so far: #{index} @ #{longest[:length]} elements"
      }

    index = index + 1
  }

p "Longest was starting from #{longest[:number]} and was of length #{longest[:length]}"