-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathday09.fsx
More file actions
40 lines (35 loc) · 1.11 KB
/
day09.fsx
File metadata and controls
40 lines (35 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
open System
let valid target window =
let pairs = seq { for x in window do for y in window do if x <> y && x + y = target then yield (x, y) } in
(Seq.length pairs) <> 0
let part1 input =
let rec loop all =
let window = all |> Seq.truncate 25 |> Seq.cache in
let next = all |> Seq.item 25 in
if not (valid next window) then next else loop (Seq.tail all)
in
loop input
let part2 input part1answer =
let a = input in
let N = Seq.length a in
seq {
for n = 2 to N do
for i = 0 to (N - 1 - n) do
let s = a |> Seq.skip i |> Seq.take n
if (Seq.sum s) = part1answer then
yield (Seq.min s) + (Seq.max s)
} |> Seq.head
let private main (args:string[]) : int =
let filename = args.[0] in
let input = seq { for line in IO.File.ReadAllLines filename do yield int64 line } |> Seq.cache in
let part1answer = part1 input in
printfn "%d" part1answer
let part2answer = part2 input part1answer in
printfn "%d" part2answer
0
#if INTERACTIVE
fsi.CommandLineArgs |> Array.toList |> List.tail |> List.toArray |> main
#else
[<EntryPoint>]
let entryPoint args = main args
#endif