Project Euler Problem #14
Longest hailstone sequence with starting number under one-million.
let hailstone n = Seq.unfold (function 0L -> None | 1L -> Some(1L, 0L)
| n when n % 2L = 0L -> Some(n, n / 2L)
| n -> Some(n, 3L * n + 1L)) n
let chainLen n = hailstone n |> Seq.length
let naturals = Seq.unfold (fun i -> Some(i, i + 1L)) 1L
let lengths = Seq.map chainLen naturals
let results = Seq.zip naturals lengths
results |> Seq.takeWhile (fst >> ((>=) 1000000L)) |> Seq.maxBy snd |> fst