Created
December 16, 2016 03:29
-
-
Save theburningmonk/381734416c19c73c6ceea60ed9660537 to your computer and use it in GitHub Desktop.
Advent of Code (Day 15)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| type Disc = | |
| { | |
| Number : int | |
| Positions : int | |
| Time0Pos : int | |
| } | |
| let solve (discs : Disc list) = | |
| // what's the first time we can press and get through the first slot? | |
| let fstDisc = discs.[0] | |
| let timeToZero = fstDisc.Positions - fstDisc.Time0Pos | |
| let fstT = timeToZero - fstDisc.Number | |
| Seq.initInfinite (fun i -> i * fstDisc.Positions + fstT) | |
| |> Seq.filter (fun t -> | |
| discs |> List.forall (fun disc -> | |
| (t + disc.Number - (disc.Positions - disc.Time0Pos)) % disc.Positions = 0)) | |
| |> Seq.head | |
| let input1 = | |
| [ | |
| { Number = 1; Positions = 13; Time0Pos = 11 } | |
| { Number = 2; Positions = 5; Time0Pos = 0 } | |
| { Number = 3; Positions = 17; Time0Pos = 11 } | |
| { Number = 4; Positions = 3; Time0Pos = 0 } | |
| { Number = 5; Positions = 7; Time0Pos = 2 } | |
| { Number = 6; Positions = 19; Time0Pos = 17 } | |
| ] | |
| let part1 = solve input1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment