Project Euler 25

http://projecteuler.net/index.php?section=problems&id=25


yieldを使ってフィボナッチ数列を出してもいいですが、前にやったようにunfoldを使うと美しいですね。大きな数になるのでサフィックスIをつけるのを忘れてはいけません。

let count n = Seq.initInfinite (fun k -> k + n)

let F = Seq.unfold
         (fun s -> Some((fst s, (snd s, (fst s) + (snd s))))) (1I, 1I)

let N = 1000
printfn "%d" (fst (Seq.head
                    (Seq.filter
                        (fun x -> (String.length (string (snd x))) = N)
                            (Seq.zip (count 1) F))))