forked from ggriffiniii/aoc
Compare commits
13 Commits
55cd0e28c6
...
04153d9c77
| Author | SHA1 | Date | |
|---|---|---|---|
| 04153d9c77 | |||
| 372373f41b | |||
| 35d79ceb46 | |||
| 89ffe25da6 | |||
| 499f6ad008 | |||
| 0788379cfd | |||
| c37bb9dd63 | |||
| 6a4ac7008b | |||
| d504254ecf | |||
| ff8c6f7156 | |||
| 0d372dfdb1 | |||
| 99ed36f50a | |||
| 24a9f1324a |
105
README.md
105
README.md
@ -1,6 +1,110 @@
|
|||||||
```
|
```
|
||||||
Advent of code 2020
|
Advent of code 2020
|
||||||
Day 1 - Part 1: 1016964
|
Day 1 - Part 1: 1016964
|
||||||
|
<<<<<<< HEAD
|
||||||
|
generator: 20.927µs,
|
||||||
|
runner: 634ns
|
||||||
|
|
||||||
|
Day 1 - Part 2: 182588480
|
||||||
|
generator: 13.047µs,
|
||||||
|
runner: 414ns
|
||||||
|
|
||||||
|
Day 2 - Part 1: 586
|
||||||
|
generator: 202ns,
|
||||||
|
runner: 136.208µs
|
||||||
|
|
||||||
|
Day 2 - Part 2: 352
|
||||||
|
generator: 116ns,
|
||||||
|
runner: 104.583µs
|
||||||
|
|
||||||
|
Day 3 - Part 1: 265
|
||||||
|
generator: 69.176µs,
|
||||||
|
runner: 73.78µs
|
||||||
|
|
||||||
|
Day 3 - Part 2: 3154761400
|
||||||
|
generator: 54.445µs,
|
||||||
|
runner: 386.892µs
|
||||||
|
|
||||||
|
Day 4 - Part 2: 186
|
||||||
|
generator: 164ns,
|
||||||
|
runner: 188.695µs
|
||||||
|
|
||||||
|
Day 5 - Part 1: SeatId(933)
|
||||||
|
generator: 139ns,
|
||||||
|
runner: 63.168µs
|
||||||
|
|
||||||
|
Day 5 - Part 2: SeatId(711)
|
||||||
|
generator: 137ns,
|
||||||
|
runner: 72.471µs
|
||||||
|
|
||||||
|
Day 6 - Part 1: 6633
|
||||||
|
generator: 137ns,
|
||||||
|
runner: 163.626µs
|
||||||
|
|
||||||
|
Day 6 - Part 2: 3202
|
||||||
|
generator: 137ns,
|
||||||
|
runner: 139.679µs
|
||||||
|
|
||||||
|
Day 7 - Part 1: 208
|
||||||
|
generator: 129ns,
|
||||||
|
runner: 748.739µs
|
||||||
|
|
||||||
|
Day 7 - Part 2: 1664
|
||||||
|
generator: 160ns,
|
||||||
|
runner: 542.019µs
|
||||||
|
|
||||||
|
Day 8 - Part 1: 1723
|
||||||
|
generator: 137ns,
|
||||||
|
runner: 42.084µs
|
||||||
|
|
||||||
|
Day 8 - Part 2: 846
|
||||||
|
generator: 108ns,
|
||||||
|
runner: 48.969µs
|
||||||
|
|
||||||
|
Day 9 - Part 1: 36845998
|
||||||
|
generator: 109ns,
|
||||||
|
runner: 86.41µs
|
||||||
|
|
||||||
|
Day 9 - Part 2: 4830226
|
||||||
|
generator: 141ns,
|
||||||
|
runner: 35.802µs
|
||||||
|
|
||||||
|
Day 10 - Part 1: 1890
|
||||||
|
generator: 124ns,
|
||||||
|
runner: 8.548µs
|
||||||
|
|
||||||
|
Day 10 - Part 2: 49607173328384
|
||||||
|
generator: 118ns,
|
||||||
|
runner: 7.583µs
|
||||||
|
|
||||||
|
Day 11 - Part 1: 2329
|
||||||
|
generator: 240ns,
|
||||||
|
runner: 14.587253ms
|
||||||
|
|
||||||
|
Day 11 - Part 2: 2138
|
||||||
|
generator: 118ns,
|
||||||
|
runner: 27.608888ms
|
||||||
|
|
||||||
|
Day 12 - Part 1: 1177
|
||||||
|
generator: 135ns,
|
||||||
|
runner: 38.045µs
|
||||||
|
|
||||||
|
Day 12 - Part 2: 46530
|
||||||
|
generator: 104ns,
|
||||||
|
runner: 24.045µs
|
||||||
|
|
||||||
|
Day 13 - Part 1: 1895
|
||||||
|
generator: 89ns,
|
||||||
|
runner: 2.076µs
|
||||||
|
|
||||||
|
Day 14 - Part 1: 13865835758282
|
||||||
|
generator: 93ns,
|
||||||
|
runner: 96.622µs
|
||||||
|
|
||||||
|
Day 14 - Part 2: 4195339838136
|
||||||
|
generator: 106ns,
|
||||||
|
runner: 10.247974ms
|
||||||
|
=======
|
||||||
generator: 16.868µs,
|
generator: 16.868µs,
|
||||||
runner: 471ns
|
runner: 471ns
|
||||||
|
|
||||||
@ -59,5 +163,6 @@ Day 8 - Part 1: 1723
|
|||||||
Day 8 - Part 2: 846
|
Day 8 - Part 2: 846
|
||||||
generator: 131ns,
|
generator: 131ns,
|
||||||
runner: 51.087µs
|
runner: 51.087µs
|
||||||
|
>>>>>>> 55cd0e28c662baab4706eb79c7a5be1f29d38d6e
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
96
input/2020/day10.txt
Normal file
96
input/2020/day10.txt
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
70
|
||||||
|
102
|
||||||
|
148
|
||||||
|
9
|
||||||
|
99
|
||||||
|
63
|
||||||
|
40
|
||||||
|
52
|
||||||
|
91
|
||||||
|
39
|
||||||
|
55
|
||||||
|
28
|
||||||
|
54
|
||||||
|
22
|
||||||
|
95
|
||||||
|
61
|
||||||
|
118
|
||||||
|
35
|
||||||
|
14
|
||||||
|
21
|
||||||
|
129
|
||||||
|
82
|
||||||
|
137
|
||||||
|
45
|
||||||
|
7
|
||||||
|
87
|
||||||
|
81
|
||||||
|
25
|
||||||
|
3
|
||||||
|
108
|
||||||
|
41
|
||||||
|
11
|
||||||
|
145
|
||||||
|
18
|
||||||
|
65
|
||||||
|
80
|
||||||
|
115
|
||||||
|
29
|
||||||
|
136
|
||||||
|
42
|
||||||
|
97
|
||||||
|
104
|
||||||
|
117
|
||||||
|
141
|
||||||
|
62
|
||||||
|
121
|
||||||
|
23
|
||||||
|
96
|
||||||
|
24
|
||||||
|
128
|
||||||
|
48
|
||||||
|
1
|
||||||
|
112
|
||||||
|
8
|
||||||
|
34
|
||||||
|
144
|
||||||
|
134
|
||||||
|
116
|
||||||
|
58
|
||||||
|
147
|
||||||
|
51
|
||||||
|
84
|
||||||
|
17
|
||||||
|
126
|
||||||
|
64
|
||||||
|
68
|
||||||
|
135
|
||||||
|
10
|
||||||
|
77
|
||||||
|
105
|
||||||
|
127
|
||||||
|
73
|
||||||
|
111
|
||||||
|
90
|
||||||
|
16
|
||||||
|
103
|
||||||
|
109
|
||||||
|
98
|
||||||
|
146
|
||||||
|
123
|
||||||
|
130
|
||||||
|
69
|
||||||
|
133
|
||||||
|
110
|
||||||
|
30
|
||||||
|
122
|
||||||
|
15
|
||||||
|
74
|
||||||
|
33
|
||||||
|
38
|
||||||
|
83
|
||||||
|
92
|
||||||
|
2
|
||||||
|
53
|
||||||
|
140
|
||||||
|
4
|
||||||
93
input/2020/day11.txt
Normal file
93
input/2020/day11.txt
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
LLLLLLLLL.L.LLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL..LLLLLL.LLLLLLLL.LLLLL.LL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL..LL.LLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLL.LLLLL.LLLLLLLLLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLL.LLLLLLLLLL..LLLL.L.LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LL.LLLLLL.LLLLLL.LLLLLLLLLLL.LLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LL.L.LLLL.L.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
......L.L.L....LL.L.L..L.L..LL...L......LL..L.....L.LL.LLLL.LL.L..LL........L..LL.LLL.L..L.LL.L..L
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLL.L.LL.LLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLL.LLLLL.LL.LLLLLLLLL.LLLLLL.LLL..LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.L.LLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLL.L...LLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLL..LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLL.L
|
||||||
|
LLLLLLLL..LL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LL..L.....L..L.L...LL...........LLL.L.L..L.L.....LL....LL....L...L...L..LL.L...LL.LL.LLL.L.L.LL.L.
|
||||||
|
LLLLLLL.L.LLLLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLL.LL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLL.LLLLLLL
|
||||||
|
.LLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLL.LL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLL.LLLLL.LLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.L.LL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL..LLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LL.LLL.LLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL..LLLLLLL.LLLL.LLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
.L..L..L..........L...L.LL..L...LL....LL..LL..L...L.LL.L.L..LLLL..L.L....L.......LL........L.L..L.
|
||||||
|
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLL.L.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL..LLL.LLLL.LLLLLLLLLLL.LLL.LLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLL.LL.LL.LLL.LLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLL
|
||||||
|
LLLLLLL.L.LLL..LL.LLLLLLLLLLLL.LLLLLLLLL.LLL.LLLL.LLLLL..LLLL..LLLL.L.LLLLLLL.LLLLLL.LL.LLLLLLLLLL
|
||||||
|
L.LL...L..L..L.....L...L..LL...L..LL.L.....LL.LL.L...LL.LL...L....LLL.L..LL.L.L.LL..L..LL.L.L.L..L
|
||||||
|
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLL..LLLLLL.LLLL.LLLLLLLL.LL.LLLLL.LLLL.LL.L.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.L.LLL.LLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL..LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL..LLL.LL..L.L.LLL.LLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
L...LLL.L......LL....L.......L..L.LLL..LL.LL.L.....LL.LL.L....L.L....LL....L....LL...L.L.....L....
|
||||||
|
LLLLLLLLL.LLLLLL.L.LL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LL.LLLLLLLL.LLL.LLLLLLLLL..LL.LLLL.LLLLLLLLLLL..L.L.LLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
....L.L..L.L...L....L..L...L.LLL...L..LL.L..L.LL.L....L.................L...LL.LL......L...L...LL.
|
||||||
|
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
.....L.LLLL.L.........LL.L..L...LL..LLL..L......LLL.....L.......L.LL.L.L........L...LLLLLL.L..LLL.
|
||||||
|
LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLL.LLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.L.LLLLLL.LLLLLLLLLLLLL.LL.L.LLLLLLL.LLL.L.LLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLL.LLLLL.L.LLLLLLL.LLLLLLLLL.LLLLL.LLLL
|
||||||
|
LLLL.....L.L...L.....L..L.L..L......LL..L...LL...L.LLL.L.L..L....L......LL.LL.L..L.L....L...LL..LL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.L
|
||||||
|
LLLLLLLLL.L.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LL.LLL..LLLLLLLLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLL.LL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LL.L..LLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.L.LL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
..LL.LL...L....LLLLL.....L.L..LL.L...LLLL.............L..L.LLL..........L.L...LL..LL.....LL.......
|
||||||
|
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LL.LLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLL..LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLL.LLLLL.LLL.LLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLL.LLLL.LLLLLLL.LLL.LL..LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LL.LLL.LLLL.LLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLL
|
||||||
|
..LLLL.LLL...LLLLL..........L...L......L..LL.....L..L..L..L.L..L..L.L..L.......L..L....LL.L.L.L.L.
|
||||||
|
LLLLLL.LL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLL.LL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL..LLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLL.LLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL..LLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLL..LLLL.LLL.LL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
|
||||||
|
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLL..LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL...LLLLLLLLL
|
||||||
|
L.LLLLLLL.LLLLLLL.LLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLL.L
|
||||||
|
LLLLLLL.L.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLL..LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
.LL...............L..L.L.LL...L.LL.....LL..L.LL.L.L...L.......L..L.LL..L.L...LL...L...............
|
||||||
|
LLLLLLLLL.LLLLLL..LLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
|
||||||
|
LLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.L.LLL.LLLLLL.LLL.LLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLL.LL.LLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||||
|
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
|
L.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLL..LLLLLLL.LLLLLLLLL.LLLLLLLLLL
|
||||||
786
input/2020/day12.txt
Normal file
786
input/2020/day12.txt
Normal file
@ -0,0 +1,786 @@
|
|||||||
|
S2
|
||||||
|
W5
|
||||||
|
F20
|
||||||
|
E3
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
F48
|
||||||
|
R180
|
||||||
|
E3
|
||||||
|
S3
|
||||||
|
E5
|
||||||
|
S3
|
||||||
|
F83
|
||||||
|
S1
|
||||||
|
W5
|
||||||
|
F81
|
||||||
|
W3
|
||||||
|
R90
|
||||||
|
F88
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
F77
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
E2
|
||||||
|
F89
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
L180
|
||||||
|
N1
|
||||||
|
F82
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
F64
|
||||||
|
W1
|
||||||
|
R180
|
||||||
|
S2
|
||||||
|
R180
|
||||||
|
F28
|
||||||
|
L180
|
||||||
|
S3
|
||||||
|
F100
|
||||||
|
E1
|
||||||
|
S4
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
F3
|
||||||
|
W5
|
||||||
|
N4
|
||||||
|
F9
|
||||||
|
N5
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
F83
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
S4
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
R90
|
||||||
|
F36
|
||||||
|
L180
|
||||||
|
W1
|
||||||
|
F88
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
F13
|
||||||
|
W1
|
||||||
|
F13
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
F98
|
||||||
|
S4
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
F77
|
||||||
|
E5
|
||||||
|
L180
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
F70
|
||||||
|
L180
|
||||||
|
F54
|
||||||
|
E5
|
||||||
|
F9
|
||||||
|
L180
|
||||||
|
N3
|
||||||
|
F77
|
||||||
|
E2
|
||||||
|
F81
|
||||||
|
E2
|
||||||
|
S1
|
||||||
|
F41
|
||||||
|
L90
|
||||||
|
F32
|
||||||
|
S3
|
||||||
|
F66
|
||||||
|
N2
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
F80
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
F65
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
E1
|
||||||
|
F44
|
||||||
|
R90
|
||||||
|
F53
|
||||||
|
E3
|
||||||
|
F67
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
S2
|
||||||
|
E3
|
||||||
|
N5
|
||||||
|
F97
|
||||||
|
N3
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
N5
|
||||||
|
S4
|
||||||
|
F38
|
||||||
|
N5
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
S3
|
||||||
|
E1
|
||||||
|
S3
|
||||||
|
F87
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
L180
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
F29
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
F95
|
||||||
|
N2
|
||||||
|
E5
|
||||||
|
F24
|
||||||
|
W1
|
||||||
|
F71
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
F16
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
F95
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
F97
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
F77
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
F71
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
F75
|
||||||
|
E1
|
||||||
|
S1
|
||||||
|
F28
|
||||||
|
F86
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
F9
|
||||||
|
N2
|
||||||
|
W4
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
F10
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
S3
|
||||||
|
F41
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
F73
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
F80
|
||||||
|
W4
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
E3
|
||||||
|
F89
|
||||||
|
E5
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
F66
|
||||||
|
N4
|
||||||
|
W1
|
||||||
|
F93
|
||||||
|
W1
|
||||||
|
F27
|
||||||
|
F68
|
||||||
|
N4
|
||||||
|
F23
|
||||||
|
L90
|
||||||
|
F14
|
||||||
|
S3
|
||||||
|
F74
|
||||||
|
N2
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
F85
|
||||||
|
N2
|
||||||
|
L180
|
||||||
|
L180
|
||||||
|
F55
|
||||||
|
S5
|
||||||
|
E5
|
||||||
|
F42
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F53
|
||||||
|
S4
|
||||||
|
F70
|
||||||
|
E2
|
||||||
|
F73
|
||||||
|
S4
|
||||||
|
F71
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
S3
|
||||||
|
E5
|
||||||
|
N3
|
||||||
|
E2
|
||||||
|
N5
|
||||||
|
L270
|
||||||
|
F69
|
||||||
|
E5
|
||||||
|
F30
|
||||||
|
N1
|
||||||
|
R90
|
||||||
|
N4
|
||||||
|
F15
|
||||||
|
E4
|
||||||
|
R180
|
||||||
|
F12
|
||||||
|
E2
|
||||||
|
F95
|
||||||
|
E2
|
||||||
|
S4
|
||||||
|
F13
|
||||||
|
S1
|
||||||
|
E1
|
||||||
|
N4
|
||||||
|
E3
|
||||||
|
L270
|
||||||
|
E4
|
||||||
|
S5
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
R180
|
||||||
|
S2
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
S3
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
L180
|
||||||
|
W5
|
||||||
|
F23
|
||||||
|
E5
|
||||||
|
F67
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
F17
|
||||||
|
W2
|
||||||
|
F80
|
||||||
|
E1
|
||||||
|
F13
|
||||||
|
S2
|
||||||
|
E3
|
||||||
|
S4
|
||||||
|
F46
|
||||||
|
F70
|
||||||
|
R180
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
S3
|
||||||
|
F31
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
F21
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
F12
|
||||||
|
L90
|
||||||
|
F70
|
||||||
|
S1
|
||||||
|
R180
|
||||||
|
W5
|
||||||
|
F14
|
||||||
|
S5
|
||||||
|
W5
|
||||||
|
S1
|
||||||
|
F56
|
||||||
|
L90
|
||||||
|
F43
|
||||||
|
S4
|
||||||
|
N4
|
||||||
|
E1
|
||||||
|
R180
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
E5
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
F88
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
F79
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
F74
|
||||||
|
L90
|
||||||
|
F72
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
F38
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
E1
|
||||||
|
F96
|
||||||
|
E3
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
F28
|
||||||
|
S2
|
||||||
|
F93
|
||||||
|
L270
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
E4
|
||||||
|
S1
|
||||||
|
F47
|
||||||
|
L270
|
||||||
|
F9
|
||||||
|
N2
|
||||||
|
F80
|
||||||
|
S4
|
||||||
|
L180
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
F82
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
F4
|
||||||
|
R90
|
||||||
|
F96
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
F28
|
||||||
|
W2
|
||||||
|
S2
|
||||||
|
F16
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
F9
|
||||||
|
N5
|
||||||
|
W4
|
||||||
|
F78
|
||||||
|
E3
|
||||||
|
F84
|
||||||
|
L90
|
||||||
|
F42
|
||||||
|
W2
|
||||||
|
F43
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
F95
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
F59
|
||||||
|
L90
|
||||||
|
F82
|
||||||
|
W1
|
||||||
|
F17
|
||||||
|
S4
|
||||||
|
R180
|
||||||
|
F91
|
||||||
|
L180
|
||||||
|
N1
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
F57
|
||||||
|
L90
|
||||||
|
F90
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
F98
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
F4
|
||||||
|
S2
|
||||||
|
F80
|
||||||
|
S2
|
||||||
|
N2
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
F67
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
L180
|
||||||
|
F22
|
||||||
|
L90
|
||||||
|
S3
|
||||||
|
F9
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
L180
|
||||||
|
S3
|
||||||
|
F23
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
F90
|
||||||
|
S2
|
||||||
|
F32
|
||||||
|
S3
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
F64
|
||||||
|
R180
|
||||||
|
F17
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
E1
|
||||||
|
F90
|
||||||
|
W3
|
||||||
|
N5
|
||||||
|
F19
|
||||||
|
S5
|
||||||
|
E4
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
F18
|
||||||
|
R180
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F76
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
F96
|
||||||
|
F38
|
||||||
|
R180
|
||||||
|
F94
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
S4
|
||||||
|
F63
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
F69
|
||||||
|
S2
|
||||||
|
W3
|
||||||
|
N1
|
||||||
|
L270
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
F67
|
||||||
|
F85
|
||||||
|
S1
|
||||||
|
F2
|
||||||
|
F68
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
N5
|
||||||
|
F13
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
F31
|
||||||
|
S1
|
||||||
|
F23
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
F86
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
W3
|
||||||
|
F47
|
||||||
|
R90
|
||||||
|
R270
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
F40
|
||||||
|
N4
|
||||||
|
R180
|
||||||
|
N1
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
S1
|
||||||
|
W5
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
F41
|
||||||
|
S4
|
||||||
|
E2
|
||||||
|
N5
|
||||||
|
E4
|
||||||
|
N1
|
||||||
|
F97
|
||||||
|
L90
|
||||||
|
F62
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
F98
|
||||||
|
R180
|
||||||
|
S5
|
||||||
|
L270
|
||||||
|
N5
|
||||||
|
W5
|
||||||
|
N4
|
||||||
|
E3
|
||||||
|
F38
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
F79
|
||||||
|
R270
|
||||||
|
E1
|
||||||
|
F14
|
||||||
|
W1
|
||||||
|
F38
|
||||||
|
E3
|
||||||
|
L180
|
||||||
|
N4
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
F90
|
||||||
|
S1
|
||||||
|
F7
|
||||||
|
N1
|
||||||
|
F11
|
||||||
|
W4
|
||||||
|
R180
|
||||||
|
F73
|
||||||
|
L90
|
||||||
|
F54
|
||||||
|
F25
|
||||||
|
W5
|
||||||
|
S3
|
||||||
|
F39
|
||||||
|
E2
|
||||||
|
F37
|
||||||
|
E2
|
||||||
|
S4
|
||||||
|
F94
|
||||||
|
W5
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
F70
|
||||||
|
S3
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
F12
|
||||||
|
S3
|
||||||
|
F45
|
||||||
|
E1
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
E4
|
||||||
|
S3
|
||||||
|
W5
|
||||||
|
F9
|
||||||
|
S4
|
||||||
|
R90
|
||||||
|
F19
|
||||||
|
W3
|
||||||
|
N4
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
F16
|
||||||
|
W3
|
||||||
|
S4
|
||||||
|
W1
|
||||||
|
S3
|
||||||
|
R180
|
||||||
|
S4
|
||||||
|
E4
|
||||||
|
N1
|
||||||
|
W3
|
||||||
|
F10
|
||||||
|
N5
|
||||||
|
E2
|
||||||
|
F61
|
||||||
|
E4
|
||||||
|
S1
|
||||||
|
W3
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
N2
|
||||||
|
W1
|
||||||
|
F8
|
||||||
|
W4
|
||||||
|
S5
|
||||||
|
L180
|
||||||
|
F76
|
||||||
|
N1
|
||||||
|
R180
|
||||||
|
S3
|
||||||
|
R180
|
||||||
|
S3
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
F38
|
||||||
|
R90
|
||||||
|
F74
|
||||||
|
N2
|
||||||
|
F60
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
S3
|
||||||
|
F78
|
||||||
|
W1
|
||||||
|
F57
|
||||||
|
R90
|
||||||
|
F39
|
||||||
|
N5
|
||||||
|
F2
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
F81
|
||||||
|
E2
|
||||||
|
F2
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
F95
|
||||||
|
S4
|
||||||
|
F1
|
||||||
|
E2
|
||||||
|
N5
|
||||||
|
L270
|
||||||
|
F59
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
F42
|
||||||
|
E2
|
||||||
|
N5
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
F17
|
||||||
|
E2
|
||||||
|
F91
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
F30
|
||||||
|
S1
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
F74
|
||||||
|
W5
|
||||||
|
N1
|
||||||
|
N4
|
||||||
|
R180
|
||||||
|
S5
|
||||||
|
R180
|
||||||
|
F92
|
||||||
|
N4
|
||||||
|
N3
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
F60
|
||||||
|
S4
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
R270
|
||||||
|
F3
|
||||||
|
E1
|
||||||
|
L180
|
||||||
|
E1
|
||||||
|
S5
|
||||||
|
F84
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
F27
|
||||||
|
W1
|
||||||
|
F58
|
||||||
|
N1
|
||||||
|
F93
|
||||||
|
N2
|
||||||
|
F30
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
F99
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
F13
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
W4
|
||||||
|
F100
|
||||||
2
input/2020/day13.txt
Normal file
2
input/2020/day13.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
1004345
|
||||||
|
41,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,379,x,x,x,x,x,x,x,23,x,x,x,x,13,x,x,x,17,x,x,x,x,x,x,x,x,x,x,x,29,x,557,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,19
|
||||||
580
input/2020/day14.txt
Normal file
580
input/2020/day14.txt
Normal file
@ -0,0 +1,580 @@
|
|||||||
|
mask = 1X000X0101XX101101X01X101X1000111X00
|
||||||
|
mem[10004] = 3787163
|
||||||
|
mem[18866] = 665403
|
||||||
|
mem[13466] = 175657346
|
||||||
|
mem[21836] = 99681152
|
||||||
|
mask = 110X1001110110X10100010X0000X010X11X
|
||||||
|
mem[14957] = 51287
|
||||||
|
mem[47879] = 1706397
|
||||||
|
mem[60036] = 139731
|
||||||
|
mask = 0100X011110X11111100000010X1XXX1X100
|
||||||
|
mem[13312] = 473519
|
||||||
|
mem[45712] = 11576
|
||||||
|
mem[65077] = 499111
|
||||||
|
mem[20582] = 970
|
||||||
|
mem[57647] = 30626762
|
||||||
|
mem[5265] = 14655010
|
||||||
|
mask = 11X010010X010011X110X00X1XX0001101X1
|
||||||
|
mem[45904] = 324397
|
||||||
|
mem[33792] = 56494291
|
||||||
|
mem[35775] = 597
|
||||||
|
mem[58036] = 267391350
|
||||||
|
mem[10448] = 77300
|
||||||
|
mem[49376] = 12095094
|
||||||
|
mask = XX000001100001100X0X10000X010X111110
|
||||||
|
mem[17484] = 382723
|
||||||
|
mem[58181] = 58
|
||||||
|
mem[51203] = 253
|
||||||
|
mem[36984] = 552006
|
||||||
|
mask = 110XXX010X011X100X00110X101010110000
|
||||||
|
mem[46734] = 272208
|
||||||
|
mem[50532] = 1071505732
|
||||||
|
mem[42057] = 18023379
|
||||||
|
mem[40723] = 203396667
|
||||||
|
mem[60376] = 24255
|
||||||
|
mask = 1110X001010010110X00XX0110X1X00000X0
|
||||||
|
mem[6373] = 509708
|
||||||
|
mem[12417] = 1586323
|
||||||
|
mem[35427] = 457
|
||||||
|
mem[14175] = 2420631
|
||||||
|
mem[28822] = 749
|
||||||
|
mem[52248] = 12324270
|
||||||
|
mask = X1X000111X0100100X00XX10X00011X1X000
|
||||||
|
mem[26803] = 500540
|
||||||
|
mem[7065] = 8843071
|
||||||
|
mem[55118] = 40141309
|
||||||
|
mem[2804] = 3136584
|
||||||
|
mask = 110X1X0001XX100101001110XX0010X100X0
|
||||||
|
mem[19256] = 7428
|
||||||
|
mem[13879] = 1353915
|
||||||
|
mem[43372] = 5882
|
||||||
|
mem[6447] = 4535
|
||||||
|
mask = 100X11X01001XX01110X001001000X010X10
|
||||||
|
mem[55173] = 21377
|
||||||
|
mem[12745] = 125083
|
||||||
|
mem[311] = 602879
|
||||||
|
mem[39306] = 2711255
|
||||||
|
mask = 1X10X001100010110100101100110X0X0111
|
||||||
|
mem[65528] = 672476373
|
||||||
|
mem[40933] = 15862
|
||||||
|
mem[20739] = 128727771
|
||||||
|
mem[30419] = 29600646
|
||||||
|
mem[26253] = 3206153
|
||||||
|
mask = 1XX00X011101X01101X0X001110X1XX10100
|
||||||
|
mem[59482] = 66620
|
||||||
|
mem[41885] = 399931609
|
||||||
|
mem[22336] = 62900
|
||||||
|
mem[8106] = 1106171
|
||||||
|
mem[5796] = 37170431
|
||||||
|
mem[17413] = 15524
|
||||||
|
mem[15447] = 28761
|
||||||
|
mask = 11000001X10X00110XX1100000011011X100
|
||||||
|
mem[43397] = 16642
|
||||||
|
mem[24122] = 173985292
|
||||||
|
mem[10901] = 6397292
|
||||||
|
mem[7385] = 7495847
|
||||||
|
mask = X1000001X00010110100X0010000111X0100
|
||||||
|
mem[38664] = 43195
|
||||||
|
mem[17708] = 56326435
|
||||||
|
mem[47879] = 3654030
|
||||||
|
mem[26738] = 6346961
|
||||||
|
mem[22210] = 118801717
|
||||||
|
mem[56703] = 13588355
|
||||||
|
mem[65252] = 262312
|
||||||
|
mask = 1X0XXX000100X0X101001100001X101X1X00
|
||||||
|
mem[62976] = 82374293
|
||||||
|
mem[64638] = 14434
|
||||||
|
mem[43964] = 13761
|
||||||
|
mask = 01000001X00110110X00XX00X10010X10X11
|
||||||
|
mem[4724] = 2903
|
||||||
|
mem[5158] = 164937
|
||||||
|
mem[35328] = 30334
|
||||||
|
mem[46966] = 2759991
|
||||||
|
mem[52761] = 25675
|
||||||
|
mask = X1101000XX1X00X10100001011X01101XXX1
|
||||||
|
mem[4392] = 118555033
|
||||||
|
mem[23892] = 4622396
|
||||||
|
mem[65088] = 1887562
|
||||||
|
mem[13476] = 226944
|
||||||
|
mask = 11X0X001X1X1001101101X0X110X000X01X0
|
||||||
|
mem[311] = 290524064
|
||||||
|
mem[54164] = 1109593
|
||||||
|
mask = 100X100001000X0101000X010XX11011110X
|
||||||
|
mem[62632] = 2370
|
||||||
|
mem[52805] = 3829934
|
||||||
|
mem[40012] = 9175340
|
||||||
|
mem[37847] = 117719078
|
||||||
|
mask = X110000X010000X10100001X1011010X0X00
|
||||||
|
mem[37404] = 3551660
|
||||||
|
mem[15104] = 527114796
|
||||||
|
mem[49376] = 968
|
||||||
|
mem[56095] = 316752
|
||||||
|
mem[6747] = 1807
|
||||||
|
mask = 11000X010101101X01000X001X011XXX10X0
|
||||||
|
mem[41840] = 2775
|
||||||
|
mem[60125] = 182425209
|
||||||
|
mask = 10011000010XX011X100101010XX1X1X0100
|
||||||
|
mem[6747] = 4044
|
||||||
|
mem[16920] = 114852
|
||||||
|
mem[4128] = 41260
|
||||||
|
mask = X10000X11001X01X010000X000XX10X0X111
|
||||||
|
mem[14175] = 16258730
|
||||||
|
mem[41484] = 2757
|
||||||
|
mem[37593] = 33406295
|
||||||
|
mem[8317] = 415217155
|
||||||
|
mem[51008] = 2636
|
||||||
|
mem[21446] = 259080582
|
||||||
|
mem[15515] = 2734
|
||||||
|
mask = 11X0X001X10X100X01000110101X101X00X0
|
||||||
|
mem[61143] = 129
|
||||||
|
mem[23860] = 247
|
||||||
|
mem[47879] = 22784315
|
||||||
|
mask = 01000011110X111XX1000XX0110100X10X0X
|
||||||
|
mem[2435] = 1973
|
||||||
|
mem[23908] = 133875113
|
||||||
|
mem[12460] = 103067
|
||||||
|
mem[6211] = 1359103
|
||||||
|
mem[7534] = 23782
|
||||||
|
mask = 111000010100X0X10100001010X1XX000XXX
|
||||||
|
mem[53221] = 4273517
|
||||||
|
mem[13255] = 3334
|
||||||
|
mem[31239] = 113778111
|
||||||
|
mem[32900] = 6938492
|
||||||
|
mask = 1110XX010110X1XX011011000111100X1101
|
||||||
|
mem[9359] = 8377654
|
||||||
|
mem[52805] = 3549344
|
||||||
|
mask = 0X1000X01100X1XXX00X0011001010000101
|
||||||
|
mem[28303] = 227915
|
||||||
|
mem[257] = 1876777
|
||||||
|
mem[63555] = 192083072
|
||||||
|
mem[56391] = 147544840
|
||||||
|
mem[63072] = 6915
|
||||||
|
mask = XX0000111X011111010X0001100000010110
|
||||||
|
mem[10311] = 16038309
|
||||||
|
mem[41484] = 30818
|
||||||
|
mem[54410] = 3229
|
||||||
|
mem[2435] = 10793289
|
||||||
|
mem[26631] = 87736025
|
||||||
|
mem[13639] = 7253
|
||||||
|
mask = 0100101XX1X01111X1XXX0001100010101X0
|
||||||
|
mem[2028] = 6656580
|
||||||
|
mem[29799] = 2772
|
||||||
|
mem[64020] = 958010
|
||||||
|
mem[5974] = 569
|
||||||
|
mem[8667] = 2023725
|
||||||
|
mem[16595] = 25313923
|
||||||
|
mem[35402] = 558
|
||||||
|
mask = 1X0X00001X01100X1X0000010100001111X1
|
||||||
|
mem[41459] = 12342565
|
||||||
|
mem[23672] = 36167
|
||||||
|
mem[10300] = 65046557
|
||||||
|
mem[56503] = 62989647
|
||||||
|
mem[37993] = 217162
|
||||||
|
mask = 1111101100000X01X1011X111111X1100X10
|
||||||
|
mem[21085] = 15851
|
||||||
|
mem[25194] = 6075854
|
||||||
|
mem[42984] = 435548
|
||||||
|
mem[8346] = 978945
|
||||||
|
mem[5661] = 4981
|
||||||
|
mask = 0X0000011X0X0010010X1XXXX01010001X01
|
||||||
|
mem[27985] = 234997
|
||||||
|
mem[14463] = 45760
|
||||||
|
mem[15023] = 17580
|
||||||
|
mask = 110000110X01X00101X01X1X10001101X000
|
||||||
|
mem[63245] = 6018482
|
||||||
|
mem[30940] = 257367431
|
||||||
|
mem[10617] = 1134348
|
||||||
|
mem[57343] = 284899785
|
||||||
|
mem[21373] = 1004097
|
||||||
|
mask = 1100100XX10X00111X101001X10100101101
|
||||||
|
mem[54836] = 45353796
|
||||||
|
mem[43493] = 1827049
|
||||||
|
mem[790] = 48270178
|
||||||
|
mem[42104] = 67747
|
||||||
|
mem[33977] = 222196
|
||||||
|
mem[56552] = 21306885
|
||||||
|
mem[63222] = 64849326
|
||||||
|
mask = XXX00101011110110100010010111000X01X
|
||||||
|
mem[33756] = 4616
|
||||||
|
mem[44216] = 6220360
|
||||||
|
mem[25526] = 811292762
|
||||||
|
mem[59209] = 6509
|
||||||
|
mem[13255] = 2140854
|
||||||
|
mask = 1110000110X0X11X0100000110100X010110
|
||||||
|
mem[7764] = 3574
|
||||||
|
mem[872] = 16596
|
||||||
|
mem[5555] = 763
|
||||||
|
mem[59969] = 25416012
|
||||||
|
mask = 0X000001100X0010010X1X1110X0X0101010
|
||||||
|
mem[64638] = 2350
|
||||||
|
mem[36949] = 3170
|
||||||
|
mem[41641] = 2041278
|
||||||
|
mask = 11101001X1X01X0X01X01000101110000101
|
||||||
|
mem[63222] = 998162428
|
||||||
|
mem[36105] = 58286575
|
||||||
|
mem[36644] = 6605534
|
||||||
|
mem[64290] = 352783
|
||||||
|
mem[52428] = 72931
|
||||||
|
mem[1450] = 460492
|
||||||
|
mask = 00X0000111X10XX00101111XX00001XX001X
|
||||||
|
mem[47375] = 1428142
|
||||||
|
mem[12574] = 262115
|
||||||
|
mem[1393] = 215199811
|
||||||
|
mem[2729] = 53399
|
||||||
|
mem[1417] = 163417802
|
||||||
|
mem[13888] = 30705
|
||||||
|
mem[52121] = 629932866
|
||||||
|
mask = 1X00010X01X01X01010X10111X1100101000
|
||||||
|
mem[63515] = 22411
|
||||||
|
mem[23091] = 909249
|
||||||
|
mem[21738] = 438843570
|
||||||
|
mem[44851] = 181
|
||||||
|
mem[10095] = 4014
|
||||||
|
mask = 010X0X11100X1X100100000101000111011X
|
||||||
|
mem[19759] = 29570
|
||||||
|
mem[2970] = 191037
|
||||||
|
mem[9604] = 4079
|
||||||
|
mem[657] = 465
|
||||||
|
mask = 1X000X01X1X10011010X1XX11100X0111100
|
||||||
|
mem[43949] = 478212819
|
||||||
|
mem[5597] = 63092
|
||||||
|
mem[58361] = 5457568
|
||||||
|
mem[41459] = 187363
|
||||||
|
mask = XX1X0011X100011X00101X11000XX101100X
|
||||||
|
mem[13888] = 638337993
|
||||||
|
mem[37934] = 4985
|
||||||
|
mem[55575] = 76330
|
||||||
|
mem[10257] = 3056
|
||||||
|
mem[9744] = 4917501
|
||||||
|
mem[32361] = 63127
|
||||||
|
mask = 11X00011X001001X010001000010011X0X0X
|
||||||
|
mem[43761] = 6764398
|
||||||
|
mem[24646] = 30592
|
||||||
|
mem[36456] = 799
|
||||||
|
mem[42057] = 1771
|
||||||
|
mem[35165] = 2871
|
||||||
|
mask = 110000010X01X00101X01XX01X1001X00100
|
||||||
|
mem[30294] = 30942244
|
||||||
|
mem[34398] = 1382102
|
||||||
|
mem[63222] = 260411654
|
||||||
|
mem[39566] = 133753617
|
||||||
|
mem[4818] = 4462832
|
||||||
|
mem[36866] = 52
|
||||||
|
mem[14603] = 244236
|
||||||
|
mask = 1100010XX101101X01XX111X0001X1111110
|
||||||
|
mem[33984] = 490757
|
||||||
|
mem[29144] = 42516
|
||||||
|
mem[12171] = 11800
|
||||||
|
mem[35282] = 19533
|
||||||
|
mem[30399] = 14796
|
||||||
|
mem[19650] = 158686001
|
||||||
|
mem[6447] = 177
|
||||||
|
mask = X100001X1001X011X10001000110111001X0
|
||||||
|
mem[62632] = 98281297
|
||||||
|
mem[57359] = 3527162
|
||||||
|
mem[12082] = 171252979
|
||||||
|
mask = 11000011110100XX0X000001X11000100000
|
||||||
|
mem[35211] = 130598799
|
||||||
|
mem[28482] = 85586
|
||||||
|
mem[55217] = 240324
|
||||||
|
mem[6740] = 92413135
|
||||||
|
mem[1291] = 79746542
|
||||||
|
mask = 1000010XX101101101X000101X0010010110
|
||||||
|
mem[45328] = 3595262
|
||||||
|
mem[3490] = 877
|
||||||
|
mem[36826] = 11235
|
||||||
|
mem[110] = 1713
|
||||||
|
mem[7313] = 13261628
|
||||||
|
mem[17524] = 263660940
|
||||||
|
mem[40227] = 14071730
|
||||||
|
mask = 1101110X00011X10000001011110X10X0100
|
||||||
|
mem[26215] = 3075603
|
||||||
|
mem[2028] = 2167
|
||||||
|
mem[36320] = 586
|
||||||
|
mem[8270] = 71526
|
||||||
|
mem[44216] = 5252007
|
||||||
|
mask = 1110100100010011111X00X0X000X0000111
|
||||||
|
mem[50149] = 58998983
|
||||||
|
mem[47879] = 1944464
|
||||||
|
mem[19922] = 3875
|
||||||
|
mem[42517] = 43875909
|
||||||
|
mem[18735] = 7318682
|
||||||
|
mem[26678] = 17877212
|
||||||
|
mask = 0100001101X1X10101001011011X0X000100
|
||||||
|
mem[56402] = 14747004
|
||||||
|
mem[29737] = 15131100
|
||||||
|
mem[15515] = 2942003
|
||||||
|
mask = 110000X10XX110X10110111110XX01000110
|
||||||
|
mem[54032] = 100009547
|
||||||
|
mem[15057] = 5910646
|
||||||
|
mem[62982] = 135495807
|
||||||
|
mem[41840] = 44565248
|
||||||
|
mem[43139] = 14110
|
||||||
|
mem[37411] = 434104731
|
||||||
|
mask = 1100000XX10110X101000XX11010XX100100
|
||||||
|
mem[29795] = 954605601
|
||||||
|
mem[13364] = 402011
|
||||||
|
mem[22468] = 778482653
|
||||||
|
mem[46818] = 25125
|
||||||
|
mem[5527] = 101
|
||||||
|
mem[9814] = 306208600
|
||||||
|
mem[43397] = 239110
|
||||||
|
mask = X1X00011X10100X10100111010X110X00X00
|
||||||
|
mem[43405] = 4234874
|
||||||
|
mem[49758] = 5465414
|
||||||
|
mem[20027] = 12031953
|
||||||
|
mem[52428] = 2873
|
||||||
|
mem[23261] = 117091570
|
||||||
|
mem[54960] = 1624
|
||||||
|
mem[1039] = 22719
|
||||||
|
mask = X1101001011X110001X011110101011X0011
|
||||||
|
mem[14463] = 92010258
|
||||||
|
mem[61143] = 11340
|
||||||
|
mem[1450] = 15947
|
||||||
|
mask = X10000X1X1010011X10000X01011X0X1010X
|
||||||
|
mem[45367] = 1060810121
|
||||||
|
mem[26527] = 23928
|
||||||
|
mem[15407] = 30081582
|
||||||
|
mem[8768] = 7626
|
||||||
|
mask = 100X1X001001000111000011X001XX0X1X1X
|
||||||
|
mem[57779] = 1222
|
||||||
|
mem[60458] = 507523
|
||||||
|
mem[9438] = 2655
|
||||||
|
mem[11306] = 32130962
|
||||||
|
mem[13120] = 212870
|
||||||
|
mem[18699] = 32470
|
||||||
|
mask = 11X0XXX0110100X101000100100000100111
|
||||||
|
mem[50532] = 6760
|
||||||
|
mem[65458] = 1921851
|
||||||
|
mem[50231] = 1055316713
|
||||||
|
mem[11611] = 82996
|
||||||
|
mem[32408] = 1879545
|
||||||
|
mem[56334] = 6421
|
||||||
|
mem[19546] = 1572
|
||||||
|
mask = 0101101101011001X0001X111X1100010X00
|
||||||
|
mem[11808] = 39158
|
||||||
|
mem[13364] = 3686
|
||||||
|
mem[58181] = 3954
|
||||||
|
mask = 11X000110X0100110100X1XXX010011001X0
|
||||||
|
mem[18996] = 10869875
|
||||||
|
mem[9359] = 11905624
|
||||||
|
mem[10037] = 675
|
||||||
|
mem[63666] = 1335625
|
||||||
|
mask = 10011000100X000111000XX000010000X110
|
||||||
|
mem[30987] = 168211
|
||||||
|
mem[2059] = 19013
|
||||||
|
mem[36287] = 21065
|
||||||
|
mem[55613] = 24671374
|
||||||
|
mask = 01110X11000X0XX101100111111101X11010
|
||||||
|
mem[27985] = 1661941
|
||||||
|
mem[33107] = 921718
|
||||||
|
mem[23617] = 16368
|
||||||
|
mem[41120] = 74
|
||||||
|
mask = 11000001100X1X11010000X001X0X1X101X0
|
||||||
|
mem[39739] = 63291061
|
||||||
|
mem[52804] = 15173
|
||||||
|
mem[14981] = 648
|
||||||
|
mem[65088] = 1644
|
||||||
|
mem[47873] = 43267217
|
||||||
|
mask = 11X000XX100X11110XX01X001X0001010000
|
||||||
|
mem[39631] = 19215077
|
||||||
|
mem[17524] = 513536515
|
||||||
|
mem[49990] = 109517
|
||||||
|
mask = X000X000100X0001110000X1010011010001
|
||||||
|
mem[13466] = 124984033
|
||||||
|
mem[12574] = 260829
|
||||||
|
mem[1403] = 115889305
|
||||||
|
mask = 0110XX1X11010X10000X00XX01X01011001X
|
||||||
|
mem[37593] = 173042
|
||||||
|
mem[49988] = 200423
|
||||||
|
mem[52823] = 7747994
|
||||||
|
mem[2391] = 611579
|
||||||
|
mask = X01XX00X11X100100X011111010011000010
|
||||||
|
mem[50986] = 277302
|
||||||
|
mem[48505] = 2276386
|
||||||
|
mem[28286] = 12419937
|
||||||
|
mem[35832] = 7585
|
||||||
|
mem[44379] = 340032079
|
||||||
|
mask = X1X0X011000111110X000001111000100100
|
||||||
|
mem[26228] = 1347384
|
||||||
|
mem[46316] = 35047
|
||||||
|
mem[50294] = 7049
|
||||||
|
mem[31571] = 5511
|
||||||
|
mem[6747] = 2881667
|
||||||
|
mem[55522] = 239714
|
||||||
|
mask = X11XX0100101X110001001100010X1X01X00
|
||||||
|
mem[63523] = 3173
|
||||||
|
mem[15717] = 1059
|
||||||
|
mem[1039] = 1756
|
||||||
|
mem[652] = 74372
|
||||||
|
mem[52561] = 1253065
|
||||||
|
mem[34744] = 12
|
||||||
|
mem[36103] = 67545913
|
||||||
|
mask = X11X001X0X0X00110100010X0101X101X100
|
||||||
|
mem[43915] = 2312924
|
||||||
|
mem[625] = 52614
|
||||||
|
mem[16137] = 3337
|
||||||
|
mem[33395] = 56449350
|
||||||
|
mem[57004] = 9401213
|
||||||
|
mem[22475] = 273016261
|
||||||
|
mask = 11X000X1100X1X110100X10000XX0X000111
|
||||||
|
mem[17020] = 461488870
|
||||||
|
mem[64339] = 76903
|
||||||
|
mem[12489] = 1867
|
||||||
|
mem[40021] = 416088
|
||||||
|
mem[45893] = 941080
|
||||||
|
mask = 010XX0110X0X1XX10X000111101000X101X0
|
||||||
|
mem[1347] = 27142438
|
||||||
|
mem[56404] = 28056
|
||||||
|
mem[15515] = 13463506
|
||||||
|
mem[34610] = 408788
|
||||||
|
mem[23768] = 4390
|
||||||
|
mask = 0X0X000X10000X100X000001X0X00X11111X
|
||||||
|
mem[34140] = 2486
|
||||||
|
mem[45229] = 219957
|
||||||
|
mask = 1X010X0X11X1100X01000001010100110000
|
||||||
|
mem[63207] = 214605819
|
||||||
|
mem[3120] = 975024
|
||||||
|
mask = X100000100011XXX00000000110010X0X010
|
||||||
|
mem[36039] = 1351
|
||||||
|
mem[24280] = 1529
|
||||||
|
mem[54240] = 438022
|
||||||
|
mem[49990] = 7079087
|
||||||
|
mem[21713] = 14792683
|
||||||
|
mem[52177] = 1961
|
||||||
|
mem[7345] = 406699254
|
||||||
|
mask = 1X00010X01X010110X001110100X00101100
|
||||||
|
mem[27536] = 12551
|
||||||
|
mem[7678] = 10576
|
||||||
|
mem[17936] = 1475
|
||||||
|
mem[9814] = 99131792
|
||||||
|
mem[41885] = 96156
|
||||||
|
mem[13120] = 35225
|
||||||
|
mask = X111X011000X00X101XX01X10111X1X11010
|
||||||
|
mem[60152] = 82433112
|
||||||
|
mem[22477] = 4090530
|
||||||
|
mem[16768] = 58352433
|
||||||
|
mem[7764] = 192408366
|
||||||
|
mem[51535] = 69751
|
||||||
|
mem[850] = 131
|
||||||
|
mem[48467] = 377832323
|
||||||
|
mask = 0100001110010010X10X1X111101001100X1
|
||||||
|
mem[23672] = 1931
|
||||||
|
mem[6708] = 469
|
||||||
|
mem[16775] = 2368
|
||||||
|
mem[12502] = 115896934
|
||||||
|
mask = 100X0000X00XX0011100X01X010111X11011
|
||||||
|
mem[24733] = 936
|
||||||
|
mem[269] = 362232
|
||||||
|
mem[60475] = 322199998
|
||||||
|
mem[14404] = 1261
|
||||||
|
mem[42303] = 27351706
|
||||||
|
mem[13699] = 34315
|
||||||
|
mask = 0111101100X10X11010X010X0101X00X10X0
|
||||||
|
mem[11893] = 62548
|
||||||
|
mem[57647] = 237349
|
||||||
|
mem[21200] = 14649
|
||||||
|
mem[27128] = 80169
|
||||||
|
mem[32969] = 725133
|
||||||
|
mem[31032] = 131322
|
||||||
|
mask = 0100XX01100X1010010000000X01X0110110
|
||||||
|
mem[18930] = 68333625
|
||||||
|
mem[6819] = 341
|
||||||
|
mem[26253] = 220435
|
||||||
|
mem[15909] = 79688
|
||||||
|
mem[21059] = 2671693
|
||||||
|
mask = X11XX00X11XX001101X00XX0110000100111
|
||||||
|
mem[34832] = 248
|
||||||
|
mem[11532] = 708205
|
||||||
|
mem[654] = 7796300
|
||||||
|
mem[46941] = 94124
|
||||||
|
mem[49206] = 109
|
||||||
|
mem[31987] = 1877
|
||||||
|
mask = 11000X01X1001X0X01X011X00000X0000101
|
||||||
|
mem[60475] = 67279
|
||||||
|
mem[14929] = 3073
|
||||||
|
mem[38463] = 6762244
|
||||||
|
mem[47778] = 173399092
|
||||||
|
mem[62317] = 57461236
|
||||||
|
mask = 110XX000110X1001X100000001000X110000
|
||||||
|
mem[15407] = 249
|
||||||
|
mem[7202] = 55714
|
||||||
|
mem[48800] = 25528109
|
||||||
|
mem[20959] = 4106091
|
||||||
|
mem[6496] = 1976005
|
||||||
|
mem[6708] = 3013607
|
||||||
|
mask = 110000011XX1X011X1001101010XXX010X10
|
||||||
|
mem[64787] = 469608465
|
||||||
|
mem[41416] = 59853
|
||||||
|
mem[10680] = 16299
|
||||||
|
mem[19394] = 56413
|
||||||
|
mem[39572] = 25343
|
||||||
|
mem[19686] = 277550
|
||||||
|
mask = 01X0001X1100001X00101110111X1001X000
|
||||||
|
mem[4228] = 590408603
|
||||||
|
mem[62269] = 394
|
||||||
|
mem[60694] = 483056
|
||||||
|
mem[25301] = 664548494
|
||||||
|
mask = 110X00001101100101000101X1X1X00100X1
|
||||||
|
mem[29136] = 3854559
|
||||||
|
mem[24118] = 486135
|
||||||
|
mem[34398] = 430609446
|
||||||
|
mem[12782] = 3721785
|
||||||
|
mask = 110001001101X0X10100110000X0010100X0
|
||||||
|
mem[5661] = 13272
|
||||||
|
mem[2012] = 38954
|
||||||
|
mem[60732] = 7014
|
||||||
|
mask = 0100X0X1X00100100100100111111001100X
|
||||||
|
mem[49716] = 284158681
|
||||||
|
mem[12224] = 10628127
|
||||||
|
mem[32900] = 7796903
|
||||||
|
mask = 0110001XX10X0X1000X0011X00X0110X00X0
|
||||||
|
mem[8844] = 26023958
|
||||||
|
mem[65175] = 81386046
|
||||||
|
mem[54410] = 4119058
|
||||||
|
mask = X10000X1XX01X01X0100000X1X0001010100
|
||||||
|
mem[62976] = 29914819
|
||||||
|
mem[7792] = 49702987
|
||||||
|
mem[61389] = 124692445
|
||||||
|
mem[10004] = 29696422
|
||||||
|
mem[61943] = 43748477
|
||||||
|
mem[61040] = 199512596
|
||||||
|
mask = 0X00XX11110X10X1010101010X0011X00X1X
|
||||||
|
mem[10880] = 91763
|
||||||
|
mem[93] = 46698
|
||||||
|
mask = X100XX111X01001101000X00101000000000
|
||||||
|
mem[30458] = 4474263
|
||||||
|
mem[2932] = 25975
|
||||||
|
mem[25986] = 106060
|
||||||
|
mem[20974] = 20857
|
||||||
|
mem[23672] = 853256
|
||||||
|
mask = 11000011010XX01101X000XX10111001X11X
|
||||||
|
mem[39572] = 24316000
|
||||||
|
mem[14981] = 41633461
|
||||||
|
mem[41885] = 3807449
|
||||||
|
mem[49990] = 31780591
|
||||||
|
mem[2414] = 5032671
|
||||||
|
mask = 111010XXX110X1010110100001111010X101
|
||||||
|
mem[26803] = 474
|
||||||
|
mem[15407] = 33070532
|
||||||
|
mem[35211] = 24880155
|
||||||
|
mem[52428] = 396521
|
||||||
|
mem[9814] = 252376513
|
||||||
|
mask = 01000011XX011011X10XX000X11010000010
|
||||||
|
mem[20974] = 101
|
||||||
|
mem[13535] = 632
|
||||||
|
mem[12489] = 58930152
|
||||||
|
mem[61506] = 681
|
||||||
|
mem[18309] = 8028011
|
||||||
|
mem[33984] = 7404765
|
||||||
|
mask = 1100X01X01X1101101100011100X01000111
|
||||||
|
mem[15864] = 413
|
||||||
|
mem[15023] = 7825
|
||||||
|
mem[60154] = 451000
|
||||||
|
mem[53862] = 240968
|
||||||
|
mem[63761] = 5500
|
||||||
|
mem[8136] = 5727
|
||||||
|
mask = 01000X1XX101001111X00000101X110X0X00
|
||||||
|
mem[884] = 1258
|
||||||
|
mem[12502] = 150248279
|
||||||
|
mem[63] = 1403008
|
||||||
1000
input/2020/day9.txt
Normal file
1000
input/2020/day9.txt
Normal file
File diff suppressed because it is too large
Load Diff
78
src/day10.rs
Normal file
78
src/day10.rs
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)]
|
||||||
|
struct Jolts(usize);
|
||||||
|
impl std::ops::Add for Jolts {
|
||||||
|
type Output = Jolts;
|
||||||
|
fn add(self, b: Jolts) -> Jolts {
|
||||||
|
Jolts(self.0 + b.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl std::ops::Sub for Jolts {
|
||||||
|
type Output = Jolts;
|
||||||
|
fn sub(self, b: Jolts) -> Jolts {
|
||||||
|
Jolts(self.0 - b.0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day10, part1)]
|
||||||
|
pub fn solve_d10_p1(input: &str) -> usize {
|
||||||
|
let jolts = {
|
||||||
|
let mut jolts: Vec<Jolts> = std::iter::once(Jolts(0))
|
||||||
|
.chain(input.split('\n').map(|x| Jolts(x.parse().unwrap())))
|
||||||
|
.collect();
|
||||||
|
jolts.sort();
|
||||||
|
jolts.push(*jolts.last().unwrap() + Jolts(3)); // The devices built-in adapter is always 3 more than the highest.
|
||||||
|
jolts
|
||||||
|
};
|
||||||
|
|
||||||
|
// Count the number of 1-jolt differences and 3-jolt differences in the
|
||||||
|
// chain.
|
||||||
|
let (j1_diff, j3_diff) =
|
||||||
|
jolts
|
||||||
|
.windows(2)
|
||||||
|
.fold((0, 0), |(j1_diff, j3_diff), entry| match entry {
|
||||||
|
&[a, b] if b - a == Jolts(1) => (j1_diff + 1, j3_diff),
|
||||||
|
&[a, b] if b - a == Jolts(3) => (j1_diff, j3_diff + 1),
|
||||||
|
_ => panic!("fail"),
|
||||||
|
});
|
||||||
|
j1_diff * j3_diff
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day10, part2)]
|
||||||
|
pub fn solve_d10_p2(input: &str) -> usize {
|
||||||
|
let jolts = {
|
||||||
|
let mut jolts: Vec<Jolts> = std::iter::once(Jolts(0))
|
||||||
|
.chain(input.split('\n').map(|x| Jolts(x.parse().unwrap())))
|
||||||
|
.collect();
|
||||||
|
jolts.sort();
|
||||||
|
jolts.push(*jolts.last().unwrap() + Jolts(3)); // The devices built-in adapter is always 3 more than the highest.
|
||||||
|
jolts
|
||||||
|
};
|
||||||
|
|
||||||
|
// Iterate over the list of jolt value for the adapters. For each entry
|
||||||
|
// store the number of combinations this adapter has that lead back to zero
|
||||||
|
// in `combinations_count`
|
||||||
|
// To calculate the number of combinations the current adapter has you first
|
||||||
|
// determine which are the potential upstream adapters and then sum their
|
||||||
|
// combinations.
|
||||||
|
|
||||||
|
let mut combinations_count = Vec::with_capacity(jolts.len());
|
||||||
|
// The first entry in jolts is the `0` jolts. Initialize it with 1 to
|
||||||
|
// indicate that it is the only way to reach the end of the chain.
|
||||||
|
combinations_count.push(1);
|
||||||
|
|
||||||
|
// Skip the first entry in jolts since it's already initialized in
|
||||||
|
// combinations_count.
|
||||||
|
for (idx, current_jolts) in jolts.iter().copied().enumerate().skip(1) {
|
||||||
|
let mut current_combinations = 0;
|
||||||
|
|
||||||
|
for upstream_idx in idx.saturating_sub(3)..idx {
|
||||||
|
if current_jolts - jolts[upstream_idx] <= Jolts(3) {
|
||||||
|
current_combinations += combinations_count[upstream_idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
combinations_count.push(current_combinations);
|
||||||
|
}
|
||||||
|
*combinations_count.last().unwrap()
|
||||||
|
}
|
||||||
275
src/day11.rs
Normal file
275
src/day11.rs
Normal file
@ -0,0 +1,275 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
#[repr(u8)]
|
||||||
|
enum GridSquare {
|
||||||
|
Empty = b'L',
|
||||||
|
Occupied = b'#',
|
||||||
|
Floor = b'.',
|
||||||
|
}
|
||||||
|
|
||||||
|
impl GridSquare {
|
||||||
|
fn from_u8(b: u8) -> Option<Self> {
|
||||||
|
Some(match b {
|
||||||
|
b'L' => GridSquare::Empty,
|
||||||
|
b'#' => GridSquare::Occupied,
|
||||||
|
b'.' => GridSquare::Floor,
|
||||||
|
_ => return None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
fn into_u8(self) -> u8 {
|
||||||
|
match self {
|
||||||
|
GridSquare::Empty => b'L',
|
||||||
|
GridSquare::Occupied => b'#',
|
||||||
|
GridSquare::Floor => b'.',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for GridSquare {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
write!(f, "{}", self.into_u8() as char)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
struct GridIdx(usize);
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
|
struct Grid {
|
||||||
|
row_len: usize,
|
||||||
|
grid: Vec<GridSquare>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Grid {
|
||||||
|
fn parse(input: &str) -> Option<Self> {
|
||||||
|
let row_len = input.find('\n')?;
|
||||||
|
let grid = input
|
||||||
|
.bytes()
|
||||||
|
.filter(|&b| b != b'\n')
|
||||||
|
.map(|b| GridSquare::from_u8(b))
|
||||||
|
.collect::<Option<Vec<_>>>()?;
|
||||||
|
Some(Grid { row_len, grid })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new(grid: Vec<GridSquare>, row_len: usize) -> Grid {
|
||||||
|
if grid.len() % row_len != 0 {
|
||||||
|
panic!("invalid grid");
|
||||||
|
}
|
||||||
|
Grid { grid, row_len }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn enumerate(&self) -> impl Iterator<Item = (GridIdx, GridSquare)> + '_ {
|
||||||
|
self.grid
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(idx, square)| (GridIdx(idx), square))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_occupied(&self, idx: usize) -> bool {
|
||||||
|
self.grid[idx] == GridSquare::Occupied
|
||||||
|
}
|
||||||
|
|
||||||
|
fn num_adjacent_occupied(&self, idx: GridIdx) -> usize {
|
||||||
|
let mut total = 0;
|
||||||
|
let col = idx.0 % self.row_len;
|
||||||
|
|
||||||
|
// Add row above idx if it exists.
|
||||||
|
if self.row_len < idx.0 {
|
||||||
|
let above_idx = idx.0 - self.row_len;
|
||||||
|
if col > 0 && self.is_occupied(above_idx - 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
if self.is_occupied(above_idx) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
if col < self.row_len - 1 && self.is_occupied(above_idx + 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add left and right if they exist.
|
||||||
|
if col > 0 && self.is_occupied(idx.0 - 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
if col < self.row_len - 1 && self.is_occupied(idx.0 + 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add row below if it exists.
|
||||||
|
let below_idx = idx.0 + self.row_len;
|
||||||
|
if below_idx < self.grid.len() {
|
||||||
|
if col > 0 && self.is_occupied(below_idx - 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
if self.is_occupied(below_idx) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
if col < self.row_len - 1 && self.is_occupied(below_idx + 1) {
|
||||||
|
total += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
total
|
||||||
|
}
|
||||||
|
|
||||||
|
fn num_visible_occupied(&self, idx: GridIdx) -> usize {
|
||||||
|
let mut total = 0;
|
||||||
|
for &(x_step, y_step) in &[
|
||||||
|
(-1, -1),
|
||||||
|
(-1, 0),
|
||||||
|
(-1, 1),
|
||||||
|
(0, -1),
|
||||||
|
(0, 1),
|
||||||
|
(1, -1),
|
||||||
|
(1, 0),
|
||||||
|
(1, 1),
|
||||||
|
] {
|
||||||
|
total += GridIter::new(self, idx, x_step, y_step)
|
||||||
|
.find_map(|idx| match &self.grid[idx.0] {
|
||||||
|
GridSquare::Empty => Some(0),
|
||||||
|
GridSquare::Occupied => Some(1),
|
||||||
|
GridSquare::Floor => None,
|
||||||
|
})
|
||||||
|
.unwrap_or(0);
|
||||||
|
}
|
||||||
|
total
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Grid {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
for line in self.grid.chunks_exact(self.row_len) {
|
||||||
|
for square in line {
|
||||||
|
write!(f, "{}", square)?;
|
||||||
|
}
|
||||||
|
write!(f, "\n")?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day11, part1)]
|
||||||
|
fn solve_d11_p1(input: &str) -> usize {
|
||||||
|
fn next_grid(orig: &Grid) -> Grid {
|
||||||
|
let new_grid: Vec<GridSquare> = orig
|
||||||
|
.enumerate()
|
||||||
|
.map(|(grid_idx, grid_square)| match grid_square {
|
||||||
|
GridSquare::Empty => {
|
||||||
|
let occupied = orig.num_adjacent_occupied(grid_idx);
|
||||||
|
if occupied == 0 {
|
||||||
|
GridSquare::Occupied
|
||||||
|
} else {
|
||||||
|
GridSquare::Empty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GridSquare::Occupied => {
|
||||||
|
let occupied = orig.num_adjacent_occupied(grid_idx);
|
||||||
|
if occupied >= 4 {
|
||||||
|
GridSquare::Empty
|
||||||
|
} else {
|
||||||
|
GridSquare::Occupied
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GridSquare::Floor => GridSquare::Floor,
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
Grid::new(new_grid, orig.row_len)
|
||||||
|
}
|
||||||
|
let mut grid = Grid::parse(input).unwrap();
|
||||||
|
let stable_grid = loop {
|
||||||
|
let next = next_grid(&grid);
|
||||||
|
if next == grid {
|
||||||
|
break next;
|
||||||
|
}
|
||||||
|
grid = next;
|
||||||
|
};
|
||||||
|
stable_grid
|
||||||
|
.enumerate()
|
||||||
|
.filter(|&(_idx, square)| square == GridSquare::Occupied)
|
||||||
|
.count()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct GridIter {
|
||||||
|
x: isize,
|
||||||
|
y: isize,
|
||||||
|
x_step: isize,
|
||||||
|
y_step: isize,
|
||||||
|
num_cols: usize,
|
||||||
|
num_rows: usize,
|
||||||
|
}
|
||||||
|
impl GridIter {
|
||||||
|
fn new(grid: &Grid, idx: GridIdx, x_step: isize, y_step: isize) -> Self {
|
||||||
|
let num_cols = grid.row_len;
|
||||||
|
let num_rows = grid.grid.len() / num_cols;
|
||||||
|
let x = (idx.0 % num_cols) as isize;
|
||||||
|
let y = (idx.0 / num_cols) as isize;
|
||||||
|
GridIter {
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
x_step,
|
||||||
|
y_step,
|
||||||
|
num_cols,
|
||||||
|
num_rows,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Iterator for GridIter {
|
||||||
|
type Item = GridIdx;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<GridIdx> {
|
||||||
|
self.x += self.x_step;
|
||||||
|
self.y += self.y_step;
|
||||||
|
if self.x < 0 || self.x >= self.num_cols as isize {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
if self.y < 0 || self.y >= self.num_rows as isize {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
Some(GridIdx(self.y as usize * self.num_cols + self.x as usize))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day11, part2)]
|
||||||
|
fn solve_d11_p2(input: &str) -> usize {
|
||||||
|
fn next_grid(orig: &Grid) -> Grid {
|
||||||
|
let new_grid: Vec<GridSquare> = orig
|
||||||
|
.enumerate()
|
||||||
|
.map(|(grid_idx, grid_square)| match grid_square {
|
||||||
|
GridSquare::Empty => {
|
||||||
|
let occupied = orig.num_visible_occupied(grid_idx);
|
||||||
|
if occupied == 0 {
|
||||||
|
GridSquare::Occupied
|
||||||
|
} else {
|
||||||
|
GridSquare::Empty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GridSquare::Occupied => {
|
||||||
|
let occupied = orig.num_visible_occupied(grid_idx);
|
||||||
|
if occupied >= 5 {
|
||||||
|
GridSquare::Empty
|
||||||
|
} else {
|
||||||
|
GridSquare::Occupied
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GridSquare::Floor => GridSquare::Floor,
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
Grid::new(new_grid, orig.row_len)
|
||||||
|
}
|
||||||
|
let mut grid = Grid::parse(input).unwrap();
|
||||||
|
let stable_grid = loop {
|
||||||
|
let next = next_grid(&grid);
|
||||||
|
if next == grid {
|
||||||
|
break next;
|
||||||
|
}
|
||||||
|
grid = next;
|
||||||
|
};
|
||||||
|
stable_grid
|
||||||
|
.enumerate()
|
||||||
|
.filter(|&(_idx, square)| square == GridSquare::Occupied)
|
||||||
|
.count()
|
||||||
|
}
|
||||||
148
src/day12.rs
Normal file
148
src/day12.rs
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||||
|
enum LeftRight {
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
#[repr(u8)]
|
||||||
|
enum Direction {
|
||||||
|
North = 0,
|
||||||
|
East = 1,
|
||||||
|
South = 2,
|
||||||
|
West = 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Direction {
|
||||||
|
fn xy(self) -> (isize, isize) {
|
||||||
|
match self {
|
||||||
|
Direction::North => (0, 1),
|
||||||
|
Direction::East => (1, 0),
|
||||||
|
Direction::South => (0, -1),
|
||||||
|
Direction::West => (-1, 0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_usize(x: usize) -> Self {
|
||||||
|
match x {
|
||||||
|
0 => Direction::North,
|
||||||
|
1 => Direction::East,
|
||||||
|
2 => Direction::South,
|
||||||
|
3 => Direction::West,
|
||||||
|
_ => panic!("invalid direction"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rotate_ship(self, degrees: usize, lr: LeftRight) -> Self {
|
||||||
|
debug_assert!(degrees % 90 == 0);
|
||||||
|
let num_turns = degrees / 90;
|
||||||
|
Direction::from_usize(match lr {
|
||||||
|
LeftRight::Left => (self as usize).wrapping_sub(num_turns) & 0b11,
|
||||||
|
LeftRight::Right => (self as usize).wrapping_add(num_turns) & 0b11,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Action {
|
||||||
|
North(usize),
|
||||||
|
East(usize),
|
||||||
|
South(usize),
|
||||||
|
West(usize),
|
||||||
|
Left(usize),
|
||||||
|
Right(usize),
|
||||||
|
Forward(usize),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Action {
|
||||||
|
fn parse(input: &str) -> Option<Action> {
|
||||||
|
let value = (&input[1..]).parse().ok()?;
|
||||||
|
Some(match input.as_bytes()[0] {
|
||||||
|
b'N' => Action::North(value),
|
||||||
|
b'E' => Action::East(value),
|
||||||
|
b'S' => Action::South(value),
|
||||||
|
b'W' => Action::West(value),
|
||||||
|
b'L' => Action::Left(value),
|
||||||
|
b'R' => Action::Right(value),
|
||||||
|
b'F' => Action::Forward(value),
|
||||||
|
_ => return None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day12, part1)]
|
||||||
|
fn solve_d12_p1(input: &str) -> usize {
|
||||||
|
let mut x = 0isize;
|
||||||
|
let mut y = 0isize;
|
||||||
|
let mut ship_dir = Direction::East;
|
||||||
|
for action in input.split('\n').map(|x| Action::parse(x).unwrap()) {
|
||||||
|
match action {
|
||||||
|
Action::North(distance) => y += distance as isize,
|
||||||
|
Action::East(distance) => x += distance as isize,
|
||||||
|
Action::South(distance) => y -= distance as isize,
|
||||||
|
Action::West(distance) => x -= distance as isize,
|
||||||
|
Action::Left(degrees) => ship_dir = ship_dir.rotate_ship(degrees, LeftRight::Left),
|
||||||
|
Action::Right(degrees) => ship_dir = ship_dir.rotate_ship(degrees, LeftRight::Right),
|
||||||
|
Action::Forward(distance) => {
|
||||||
|
let (x_step, y_step) = ship_dir.xy();
|
||||||
|
x += x_step * distance as isize;
|
||||||
|
y += y_step * distance as isize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x.abs() as usize + y.abs() as usize
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
struct Waypoint {
|
||||||
|
x: isize,
|
||||||
|
y: isize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Waypoint {
|
||||||
|
fn rotate(self, mut degrees: usize, lr: LeftRight) -> Self {
|
||||||
|
assert!(degrees == 90 || degrees == 180 || degrees == 270);
|
||||||
|
if lr == LeftRight::Left {
|
||||||
|
degrees = 360 - degrees;
|
||||||
|
}
|
||||||
|
match degrees {
|
||||||
|
0 => self,
|
||||||
|
90 => Waypoint {
|
||||||
|
x: self.y,
|
||||||
|
y: -self.x,
|
||||||
|
},
|
||||||
|
180 => Waypoint {
|
||||||
|
x: -self.x,
|
||||||
|
y: -self.y,
|
||||||
|
},
|
||||||
|
270 => Waypoint {
|
||||||
|
x: -self.y,
|
||||||
|
y: self.x,
|
||||||
|
},
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day12, part2)]
|
||||||
|
fn solve_d12_p2(input: &str) -> usize {
|
||||||
|
let mut waypoint = Waypoint { x: 10, y: 1 };
|
||||||
|
let mut x = 0isize;
|
||||||
|
let mut y = 0isize;
|
||||||
|
for action in input.split('\n').map(|x| Action::parse(x).unwrap()) {
|
||||||
|
match action {
|
||||||
|
Action::North(distance) => waypoint.y += distance as isize,
|
||||||
|
Action::East(distance) => waypoint.x += distance as isize,
|
||||||
|
Action::South(distance) => waypoint.y -= distance as isize,
|
||||||
|
Action::West(distance) => waypoint.x -= distance as isize,
|
||||||
|
Action::Left(degrees) => waypoint = waypoint.rotate(degrees, LeftRight::Left),
|
||||||
|
Action::Right(degrees) => waypoint = waypoint.rotate(degrees, LeftRight::Right),
|
||||||
|
Action::Forward(distance) => {
|
||||||
|
x += waypoint.x * distance as isize;
|
||||||
|
y += waypoint.y * distance as isize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
x.abs() as usize + y.abs() as usize
|
||||||
|
}
|
||||||
42
src/day13.rs
Normal file
42
src/day13.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
|
||||||
|
#[aoc(day13, part1)]
|
||||||
|
fn solve_d13_p1(input: &str) -> usize {
|
||||||
|
let first_newline = input.find('\n').unwrap();
|
||||||
|
let (t, bus_ids) = input.split_at(first_newline);
|
||||||
|
let bus_ids = bus_ids.trim();
|
||||||
|
|
||||||
|
let t: usize = t.parse().unwrap();
|
||||||
|
|
||||||
|
struct WaitTime {
|
||||||
|
bus_id: usize,
|
||||||
|
wait_time: usize,
|
||||||
|
}
|
||||||
|
let min_wait_time = bus_ids
|
||||||
|
.split(',')
|
||||||
|
.filter(|&x| x != "x")
|
||||||
|
.map(|x| x.parse::<usize>().unwrap())
|
||||||
|
.fold(
|
||||||
|
WaitTime {
|
||||||
|
bus_id: usize::MAX,
|
||||||
|
wait_time: usize::MAX,
|
||||||
|
},
|
||||||
|
|min, bus_id| {
|
||||||
|
let offset = t % bus_id;
|
||||||
|
let wait_time = if offset == 0 {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
bus_id - offset
|
||||||
|
};
|
||||||
|
if min.wait_time < wait_time {
|
||||||
|
min
|
||||||
|
} else {
|
||||||
|
WaitTime{
|
||||||
|
bus_id,
|
||||||
|
wait_time,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
min_wait_time.bus_id * min_wait_time.wait_time
|
||||||
|
}
|
||||||
171
src/day14.rs
Normal file
171
src/day14.rs
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Instr<'a> {
|
||||||
|
Mask(&'a str),
|
||||||
|
UpdateMem { offset: u64, value: u64 },
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Instr<'a> {
|
||||||
|
fn parse(instr: &'a str) -> Option<Self> {
|
||||||
|
let eq_idx = instr.find('=')?;
|
||||||
|
let lhs = &instr[..eq_idx - 1];
|
||||||
|
let rhs = &instr[eq_idx + 2..];
|
||||||
|
if lhs == "mask" {
|
||||||
|
Some(Instr::Mask(rhs))
|
||||||
|
} else {
|
||||||
|
Self::parse_mem(lhs, rhs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_mem(lhs: &str, rhs: &str) -> Option<Self> {
|
||||||
|
let offset: u64 = lhs[4..lhs.len() - 1].parse().ok()?;
|
||||||
|
let value: u64 = rhs.parse().ok()?;
|
||||||
|
Some(Instr::UpdateMem { offset, value })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Mask {
|
||||||
|
or_mask: u64,
|
||||||
|
and_mask: u64,
|
||||||
|
}
|
||||||
|
impl Mask {
|
||||||
|
fn parse(mask: &[u8]) -> Option<Mask> {
|
||||||
|
if mask.len() != 36 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let mut and_mask = !0;
|
||||||
|
let mut or_mask = 0;
|
||||||
|
for (idx, b) in mask.iter().enumerate() {
|
||||||
|
match b {
|
||||||
|
b'0' => {
|
||||||
|
and_mask &= !(1 << 35 - idx);
|
||||||
|
}
|
||||||
|
b'1' => {
|
||||||
|
or_mask |= 1 << 35 - idx;
|
||||||
|
}
|
||||||
|
b'X' => {}
|
||||||
|
_ => return None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(Mask { and_mask, or_mask })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn mask(&self, value: u64) -> u64 {
|
||||||
|
value & self.and_mask | self.or_mask
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day14, part1)]
|
||||||
|
fn solve_d14_p1(input: &str) -> u64 {
|
||||||
|
// Assume initialization doesn't write to any memory offset multiple times.
|
||||||
|
let mut iter = input.split('\n').map(|x| Instr::parse(x).unwrap());
|
||||||
|
let mut mask = match iter.next() {
|
||||||
|
Some(Instr::Mask(mask)) => Mask::parse(mask.as_bytes()).unwrap(),
|
||||||
|
_ => panic!("first line is not valid bitmask"),
|
||||||
|
};
|
||||||
|
let mut memory = std::collections::HashMap::new();
|
||||||
|
for instr in iter {
|
||||||
|
match instr {
|
||||||
|
Instr::Mask(new_mask) => mask = Mask::parse(new_mask.as_bytes()).unwrap(),
|
||||||
|
Instr::UpdateMem { offset, value } => {
|
||||||
|
memory.insert(offset, mask.mask(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memory.values().sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Mask2 {
|
||||||
|
floating: u64,
|
||||||
|
or_mask: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Mask2 {
|
||||||
|
fn parse(mask: &[u8]) -> Option<Mask2> {
|
||||||
|
if mask.len() != 36 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let mut floating = 0;
|
||||||
|
let mut or_mask = 0;
|
||||||
|
for (idx, b) in mask.iter().enumerate() {
|
||||||
|
match b {
|
||||||
|
b'0' => {},
|
||||||
|
b'1' => {
|
||||||
|
or_mask |= 1 << 35 - idx;
|
||||||
|
}
|
||||||
|
b'X' => {
|
||||||
|
floating |= 1 << 35 - idx;
|
||||||
|
}
|
||||||
|
_ => return None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(Mask2 { floating, or_mask })
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_memory(&self, mem: &mut HashMap<u64, u64>, address: u64, value: u64) {
|
||||||
|
let offset = address | self.or_mask;
|
||||||
|
for mut floating_value in 0 .. 2 << self.floating.count_ones() {
|
||||||
|
let mut addr = offset;
|
||||||
|
for bit in BitIndexes::new(self.floating) {
|
||||||
|
addr = set_bit(addr, bit, (floating_value & 1) == 1);
|
||||||
|
floating_value >>= 1;
|
||||||
|
}
|
||||||
|
mem.insert(addr, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_bit(value: u64, bit_idx: u64, enabled: bool) -> u64 {
|
||||||
|
if enabled {
|
||||||
|
value | (1 << bit_idx)
|
||||||
|
} else {
|
||||||
|
value & !(1 << bit_idx)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct BitIndexes{
|
||||||
|
value: u64,
|
||||||
|
current_idx: u64,
|
||||||
|
}
|
||||||
|
impl BitIndexes {
|
||||||
|
fn new(value: u64) -> Self {
|
||||||
|
BitIndexes{value, current_idx: 0}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Iterator for BitIndexes {
|
||||||
|
type Item = u64;
|
||||||
|
fn next(&mut self) -> Option<u64> {
|
||||||
|
while self.value > 0 {
|
||||||
|
let set = self.value & 1 == 1;
|
||||||
|
self.value >>= 1;
|
||||||
|
self.current_idx += 1;
|
||||||
|
if set {
|
||||||
|
return Some(self.current_idx - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day14, part2)]
|
||||||
|
fn solve_d14_p2(input: &str) -> u64 {
|
||||||
|
let mut iter = input.split('\n').map(|x| Instr::parse(x).unwrap());
|
||||||
|
let mut mask = match iter.next() {
|
||||||
|
Some(Instr::Mask(mask)) => Mask2::parse(mask.as_bytes()).unwrap(),
|
||||||
|
_ => panic!("first line is not valid bitmask"),
|
||||||
|
};
|
||||||
|
let mut memory = std::collections::HashMap::new();
|
||||||
|
for instr in iter {
|
||||||
|
match instr {
|
||||||
|
Instr::Mask(new_mask) => mask = Mask2::parse(new_mask.as_bytes()).unwrap(),
|
||||||
|
Instr::UpdateMem { offset, value } => {
|
||||||
|
mask.set_memory(&mut memory, offset, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memory.values().sum()
|
||||||
|
}
|
||||||
@ -59,12 +59,7 @@ fn run_program(
|
|||||||
(pc, accum)
|
(pc, accum)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn step(
|
fn step(instr: Instr, prev_instrs: &mut BitSet, mut pc: usize, mut accum: isize) -> (usize, isize) {
|
||||||
instr: Instr,
|
|
||||||
prev_instrs: &mut BitSet,
|
|
||||||
mut pc: usize,
|
|
||||||
mut accum: isize,
|
|
||||||
) -> (usize, isize) {
|
|
||||||
prev_instrs.insert(pc);
|
prev_instrs.insert(pc);
|
||||||
pc = match instr {
|
pc = match instr {
|
||||||
Instr::Nop(_) => pc + 1,
|
Instr::Nop(_) => pc + 1,
|
||||||
|
|||||||
99
src/day9.rs
Normal file
99
src/day9.rs
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
struct Preamble {
|
||||||
|
entries: [usize; 25],
|
||||||
|
entries_start_idx: usize,
|
||||||
|
set: HashSet<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Preamble {
|
||||||
|
// Take the first 25 items from the iterator.
|
||||||
|
fn new<I>(iter: &mut I) -> Option<Self>
|
||||||
|
where
|
||||||
|
I: Iterator<Item = usize>,
|
||||||
|
{
|
||||||
|
let mut entries = [0; 25];
|
||||||
|
let mut set = HashSet::new();
|
||||||
|
let mut count = 0;
|
||||||
|
for (idx, entry) in iter.enumerate().take(25) {
|
||||||
|
count += 1;
|
||||||
|
entries[idx] = entry;
|
||||||
|
set.insert(entry);
|
||||||
|
}
|
||||||
|
if count != 25 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(Preamble {
|
||||||
|
entries,
|
||||||
|
entries_start_idx: 0,
|
||||||
|
set,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert a new entry into the preamble letting the oldest one roll off.
|
||||||
|
fn insert(&mut self, entry: usize) {
|
||||||
|
self.set.remove(&self.entries[self.entries_start_idx]);
|
||||||
|
self.set.insert(entry);
|
||||||
|
self.entries[self.entries_start_idx] = entry;
|
||||||
|
self.entries_start_idx = (self.entries_start_idx + 1) % 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_sum_pair(&self, total: usize) -> Option<(usize, usize)> {
|
||||||
|
for idx in 0..25 {
|
||||||
|
let entry = self.entries[(self.entries_start_idx + idx) % 25];
|
||||||
|
if entry <= total {
|
||||||
|
let needed = total - entry;
|
||||||
|
if self.set.contains(&needed) {
|
||||||
|
return Some((entry, needed));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day9, part1)]
|
||||||
|
pub fn solve_d9_p1(input: &str) -> usize {
|
||||||
|
let mut iter = input.split('\n').map(|x| -> usize { x.parse().unwrap() });
|
||||||
|
let mut preamble = Preamble::new(&mut iter).unwrap();
|
||||||
|
for entry in iter {
|
||||||
|
if preamble.find_sum_pair(entry).is_none() {
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
preamble.insert(entry);
|
||||||
|
}
|
||||||
|
panic!("not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day9, part2)]
|
||||||
|
pub fn solve_d9_p2(input: &str) -> usize {
|
||||||
|
const EXPECTED_SUM: usize = 36845998;
|
||||||
|
let entries: Vec<usize> = input
|
||||||
|
.split('\n')
|
||||||
|
.map(|x| -> usize { x.parse().unwrap() })
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let mut sum = 0;
|
||||||
|
let mut start_idx = 0;
|
||||||
|
let mut end_idx = 0;
|
||||||
|
loop {
|
||||||
|
if sum < EXPECTED_SUM {
|
||||||
|
sum += entries[end_idx];
|
||||||
|
end_idx += 1;
|
||||||
|
} else if sum > EXPECTED_SUM {
|
||||||
|
sum -= entries[start_idx];
|
||||||
|
start_idx += 1;
|
||||||
|
} else {
|
||||||
|
let (min, max) = &entries[start_idx..end_idx]
|
||||||
|
.iter()
|
||||||
|
.copied()
|
||||||
|
.fold((usize::MAX, 0), |(min, max), entry| {
|
||||||
|
(std::cmp::min(min, entry), std::cmp::max(max, entry))
|
||||||
|
});
|
||||||
|
return min + max;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,4 +1,9 @@
|
|||||||
pub mod day1;
|
pub mod day1;
|
||||||
|
pub mod day10;
|
||||||
|
pub mod day11;
|
||||||
|
pub mod day12;
|
||||||
|
pub mod day13;
|
||||||
|
pub mod day14;
|
||||||
pub mod day2;
|
pub mod day2;
|
||||||
pub mod day3;
|
pub mod day3;
|
||||||
pub mod day4;
|
pub mod day4;
|
||||||
@ -6,5 +11,6 @@ pub mod day5;
|
|||||||
pub mod day6;
|
pub mod day6;
|
||||||
pub mod day7;
|
pub mod day7;
|
||||||
pub mod day8;
|
pub mod day8;
|
||||||
|
pub mod day9;
|
||||||
|
|
||||||
aoc_runner_derive::aoc_lib! { year = 2020 }
|
aoc_runner_derive::aoc_lib! { year = 2020 }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user