Skip to content

Instantly share code, notes, and snippets.

@mnzk
Created November 26, 2011 14:49
Show Gist options
  • Save mnzk/1395798 to your computer and use it in GitHub Desktop.
Save mnzk/1395798 to your computer and use it in GitHub Desktop.
Project Euler 18
let parseNumbersTriangle : string -> int list list =
fun s ->
s.Split([|'\n'|])
|> Array.toList
|> List.map (fun s ->
s.Trim().Split([|' '|])
|> Array.toList
|> List.map int)
let cutLast xs = xs |> Seq.take ((Seq.length xs) - 1) |> Seq.toList
let cutHead = List.tail
let greaters xs = List.map2 max (cutLast xs) (cutHead xs)
let solve : int list list -> int =
fun nss ->
nss
|> List.rev
|> List.reduce (fun xs ys ->
xs |> greaters |> List.map2 (+) ys)
|> List.head
let euler18 s = s |> parseNumbersTriangle |> solve
let data18Test =
@"3
7 4
2 4 6
8 5 9 3"
let data18 =
@"75
95 64
17 47 82
(中略)
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23"
data18 |> euler18 |> printfn "%d"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment