Compare commits

...

13 Commits

Author SHA1 Message Date
04153d9c77 Merge branch 'master' of http://git.z.xinu.tv/wathiede/aoc into master 2020-12-15 08:02:54 -08:00
372373f41b Updating README.md 2020-12-15 08:01:32 -08:00
35d79ceb46 Updating README.md 2020-12-15 08:01:22 -08:00
89ffe25da6 Merge branch 'master' of http://git.z.xinu.tv/ggriffiniii/aoc into master 2020-12-15 07:58:51 -08:00
499f6ad008 fix day9 overflow 2020-12-15 07:58:09 -08:00
0788379cfd Updating README.md 2020-12-15 07:57:34 -08:00
c37bb9dd63 day14 2020-12-14 21:41:06 -08:00
6a4ac7008b day13 only part 1 2020-12-13 15:18:50 -08:00
d504254ecf day12 2020-12-12 15:05:48 -08:00
ff8c6f7156 day11 2020-12-11 13:33:44 -08:00
0d372dfdb1 some cleanup 2020-12-10 11:03:09 -08:00
99ed36f50a day10 2020-12-10 10:49:48 -08:00
24a9f1324a day9 2020-12-09 06:33:34 -08:00
15 changed files with 3482 additions and 6 deletions

105
README.md
View File

@ -1,6 +1,110 @@
```
Advent of code 2020
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,
runner: 471ns
@ -59,5 +163,6 @@ Day 8 - Part 1: 1723
Day 8 - Part 2: 846
generator: 131ns,
runner: 51.087µs
>>>>>>> 55cd0e28c662baab4706eb79c7a5be1f29d38d6e
```

96
input/2020/day10.txt Normal file
View 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
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

78
src/day10.rs Normal file
View 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
View 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
View 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
View 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
View 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()
}

View File

@ -59,12 +59,7 @@ fn run_program(
(pc, accum)
}
fn step(
instr: Instr,
prev_instrs: &mut BitSet,
mut pc: usize,
mut accum: isize,
) -> (usize, isize) {
fn step(instr: Instr, prev_instrs: &mut BitSet, mut pc: usize, mut accum: isize) -> (usize, isize) {
prev_instrs.insert(pc);
pc = match instr {
Instr::Nop(_) => pc + 1,

99
src/day9.rs Normal file
View 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;
}
}
}

View File

@ -1,4 +1,9 @@
pub mod day1;
pub mod day10;
pub mod day11;
pub mod day12;
pub mod day13;
pub mod day14;
pub mod day2;
pub mod day3;
pub mod day4;
@ -6,5 +11,6 @@ pub mod day5;
pub mod day6;
pub mod day7;
pub mod day8;
pub mod day9;
aoc_runner_derive::aoc_lib! { year = 2020 }