File tree 3 files changed +341
-0
lines changed
3 files changed +341
-0
lines changed Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments