15 lines
528 B
Forth
15 lines
528 B
Forth
let rec hailstone n = seq {
|
|
match n with
|
|
| 1 -> yield 1
|
|
| n when n % 2 = 0 -> yield n; yield! hailstone (n / 2)
|
|
| n -> yield n; yield! hailstone (n * 3 + 1)
|
|
}
|
|
|
|
let hailstone27 = hailstone 27 |> Array.ofSeq
|
|
assert (Array.length hailstone27 = 112)
|
|
assert (hailstone27.[..3] = [|27;82;41;124|])
|
|
assert (hailstone27.[108..] = [|8;4;2;1|])
|
|
|
|
let maxLen, maxI = Seq.max <| seq { for i in 1..99999 -> Seq.length (hailstone i), i}
|
|
printfn "Maximum length %d was found for hailstone(%d)" maxLen maxI
|