Skip to content

Commit 69614e3

Browse files
committed
day 10
1 parent 5a9549e commit 69614e3

File tree

3 files changed

+341
-0
lines changed

3 files changed

+341
-0
lines changed

Diff for: day10.fsx

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
let lines = System.IO.File.ReadAllLines("day10.input")
2+
3+
let instructions =
4+
lines
5+
|> Seq.map (fun s -> s.Split " " |> fun xs -> xs[0], xs |> Array.tryItem 1 |> Option.map int)
6+
|> Seq.toList
7+
8+
type CPU = { Cycle: int; X: int }
9+
10+
let normalizeInstr =
11+
function
12+
| "noop", _ as x -> [ x ]
13+
| "addx", _ as x -> [ "noop", None; x ]
14+
15+
let doInstr cpu =
16+
let noop = { cpu with Cycle = cpu.Cycle + 1 }
17+
18+
function
19+
| "noop", None -> noop
20+
| "addx", Some x -> { noop with X = cpu.X + x }
21+
22+
let normalizedInstrs = instructions |> List.collect normalizeInstr
23+
24+
let init = { Cycle = 1; X = 1 }
25+
let cpuStates = (init, normalizedInstrs) ||> List.scan doInstr
26+
27+
let computeSignalStrength afterCycle =
28+
cpuStates
29+
|> List.filter (fun x -> afterCycle x.Cycle)
30+
|> List.map (fun x -> x.Cycle * x.X)
31+
|> List.sum
32+
33+
let display =
34+
cpuStates
35+
|> List.map (fun x -> if abs (x.X - ((x.Cycle - 1) % 40)) <= 1 then "#" else ".")
36+
37+
let draw display =
38+
display
39+
|> List.chunkBySize 40
40+
|> List.map (String.concat "")
41+
|> List.iter (printfn "%s")
42+
43+
let part1 = computeSignalStrength (fun c -> (c - 20) % 40 = 0)
44+
printfn $"PART1: {part1}"
45+
46+
printfn $"PART2:"
47+
draw display

Diff for: day10.input

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
addx 1
2+
noop
3+
addx 2
4+
addx 11
5+
addx -4
6+
noop
7+
noop
8+
noop
9+
noop
10+
addx 3
11+
addx -3
12+
addx 10
13+
addx 1
14+
noop
15+
addx 12
16+
addx -8
17+
addx 5
18+
noop
19+
noop
20+
addx 1
21+
addx 4
22+
addx -12
23+
noop
24+
addx -25
25+
addx 14
26+
addx -7
27+
noop
28+
addx 11
29+
noop
30+
addx -6
31+
addx 3
32+
noop
33+
addx 2
34+
addx 22
35+
addx -12
36+
addx -17
37+
addx 15
38+
addx 2
39+
addx 10
40+
addx -9
41+
noop
42+
noop
43+
noop
44+
addx 5
45+
addx 2
46+
addx -33
47+
noop
48+
noop
49+
noop
50+
noop
51+
addx 12
52+
addx -9
53+
addx 7
54+
noop
55+
noop
56+
addx 3
57+
addx -2
58+
addx 2
59+
addx 26
60+
addx -31
61+
addx 14
62+
addx 3
63+
noop
64+
addx 13
65+
addx -1
66+
noop
67+
addx -5
68+
addx -13
69+
addx 14
70+
noop
71+
addx -20
72+
addx -15
73+
noop
74+
addx 7
75+
noop
76+
addx 31
77+
noop
78+
addx -26
79+
noop
80+
noop
81+
noop
82+
addx 5
83+
addx 20
84+
addx -11
85+
addx -3
86+
addx 9
87+
addx -5
88+
addx 2
89+
noop
90+
addx 4
91+
noop
92+
addx 4
93+
noop
94+
noop
95+
addx -7
96+
addx -30
97+
noop
98+
addx 7
99+
noop
100+
noop
101+
addx -2
102+
addx -4
103+
addx 11
104+
addx 14
105+
addx -9
106+
addx -2
107+
noop
108+
addx 7
109+
noop
110+
addx -11
111+
addx -5
112+
addx 19
113+
addx 5
114+
addx 2
115+
addx 5
116+
noop
117+
noop
118+
addx -2
119+
addx -27
120+
addx -6
121+
addx 1
122+
noop
123+
noop
124+
addx 4
125+
addx 1
126+
addx 4
127+
addx 5
128+
noop
129+
noop
130+
noop
131+
addx 1
132+
noop
133+
addx 4
134+
addx 1
135+
noop
136+
noop
137+
addx 5
138+
noop
139+
noop
140+
addx 4
141+
addx 1
142+
noop
143+
addx 4
144+
addx 1
145+
noop
146+
noop
147+
noop
148+
noop

Diff for: day10.test

+146
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
addx 15
2+
addx -11
3+
addx 6
4+
addx -3
5+
addx 5
6+
addx -1
7+
addx -8
8+
addx 13
9+
addx 4
10+
noop
11+
addx -1
12+
addx 5
13+
addx -1
14+
addx 5
15+
addx -1
16+
addx 5
17+
addx -1
18+
addx 5
19+
addx -1
20+
addx -35
21+
addx 1
22+
addx 24
23+
addx -19
24+
addx 1
25+
addx 16
26+
addx -11
27+
noop
28+
noop
29+
addx 21
30+
addx -15
31+
noop
32+
noop
33+
addx -3
34+
addx 9
35+
addx 1
36+
addx -3
37+
addx 8
38+
addx 1
39+
addx 5
40+
noop
41+
noop
42+
noop
43+
noop
44+
noop
45+
addx -36
46+
noop
47+
addx 1
48+
addx 7
49+
noop
50+
noop
51+
noop
52+
addx 2
53+
addx 6
54+
noop
55+
noop
56+
noop
57+
noop
58+
noop
59+
addx 1
60+
noop
61+
noop
62+
addx 7
63+
addx 1
64+
noop
65+
addx -13
66+
addx 13
67+
addx 7
68+
noop
69+
addx 1
70+
addx -33
71+
noop
72+
noop
73+
noop
74+
addx 2
75+
noop
76+
noop
77+
noop
78+
addx 8
79+
noop
80+
addx -1
81+
addx 2
82+
addx 1
83+
noop
84+
addx 17
85+
addx -9
86+
addx 1
87+
addx 1
88+
addx -3
89+
addx 11
90+
noop
91+
noop
92+
addx 1
93+
noop
94+
addx 1
95+
noop
96+
noop
97+
addx -13
98+
addx -19
99+
addx 1
100+
addx 3
101+
addx 26
102+
addx -30
103+
addx 12
104+
addx -1
105+
addx 3
106+
addx 1
107+
noop
108+
noop
109+
noop
110+
addx -9
111+
addx 18
112+
addx 1
113+
addx 2
114+
noop
115+
noop
116+
addx 9
117+
noop
118+
noop
119+
noop
120+
addx -1
121+
addx 2
122+
addx -37
123+
addx 1
124+
addx 3
125+
noop
126+
addx 15
127+
addx -21
128+
addx 22
129+
addx -6
130+
addx 1
131+
noop
132+
addx 2
133+
addx 1
134+
noop
135+
addx -10
136+
noop
137+
noop
138+
addx 20
139+
addx 1
140+
addx 2
141+
addx 2
142+
addx -6
143+
addx -11
144+
noop
145+
noop
146+
noop

0 commit comments

Comments
 (0)