forked from ggriffiniii/aoc
day 8
This commit is contained in:
parent
3d84c3e8dc
commit
c1aadc4143
59
README.md
59
README.md
@ -1,55 +1,62 @@
|
|||||||
```
|
```
|
||||||
Advent of code 2020
|
Advent of code 2020
|
||||||
Day 1 - Part 1: 1016964
|
Day 1 - Part 1: 1016964
|
||||||
generator: 22.481µs,
|
generator: 122.086µs,
|
||||||
runner: 619ns
|
runner: 4.434µs
|
||||||
|
|
||||||
Day 1 - Part 2: 182588480
|
Day 1 - Part 2: 182588480
|
||||||
generator: 16.507µs,
|
generator: 99.356µs,
|
||||||
runner: 462ns
|
runner: 7.318µs
|
||||||
|
|
||||||
Day 2 - Part 1: 586
|
Day 2 - Part 1: 586
|
||||||
generator: 150ns,
|
generator: 233ns,
|
||||||
runner: 162.605µs
|
runner: 1.453395ms
|
||||||
|
|
||||||
Day 2 - Part 2: 352
|
Day 2 - Part 2: 352
|
||||||
generator: 147ns,
|
generator: 423ns,
|
||||||
runner: 97.648µs
|
runner: 922.764µs
|
||||||
|
|
||||||
Day 3 - Part 1: 265
|
Day 3 - Part 1: 265
|
||||||
generator: 63.238µs,
|
generator: 964.093µs,
|
||||||
runner: 65.7µs
|
runner: 9.734488ms
|
||||||
|
|
||||||
Day 3 - Part 2: 3154761400
|
Day 3 - Part 2: 3154761400
|
||||||
generator: 47.707µs,
|
generator: 938.153µs,
|
||||||
runner: 544.894µs
|
runner: 52.66926ms
|
||||||
|
|
||||||
Day 4 - Part 2: 186
|
Day 4 - Part 2: 186
|
||||||
generator: 147ns,
|
generator: 697ns,
|
||||||
runner: 133.651µs
|
runner: 2.760526ms
|
||||||
|
|
||||||
Day 5 - Part 1: SeatId(933)
|
Day 5 - Part 1: SeatId(933)
|
||||||
generator: 114ns,
|
generator: 489ns,
|
||||||
runner: 57.142µs
|
runner: 776.127µs
|
||||||
|
|
||||||
Day 5 - Part 2: SeatId(711)
|
Day 5 - Part 2: SeatId(711)
|
||||||
generator: 185ns,
|
generator: 443ns,
|
||||||
runner: 56.998µs
|
runner: 800.487µs
|
||||||
|
|
||||||
Day 6 - Part 1: 6633
|
Day 6 - Part 1: 6633
|
||||||
generator: 111ns,
|
generator: 336ns,
|
||||||
runner: 137.177µs
|
runner: 1.669623ms
|
||||||
|
|
||||||
Day 6 - Part 2: 3202
|
Day 6 - Part 2: 3202
|
||||||
generator: 130ns,
|
generator: 448ns,
|
||||||
runner: 116.545µs
|
runner: 1.538626ms
|
||||||
|
|
||||||
Day 7 - Part 1: 208
|
Day 7 - Part 1: 208
|
||||||
generator: 134ns,
|
generator: 379ns,
|
||||||
runner: 716.627µs
|
runner: 6.340596ms
|
||||||
|
|
||||||
Day 7 - Part 2: 1664
|
Day 7 - Part 2: 1664
|
||||||
generator: 135ns,
|
generator: 660ns,
|
||||||
runner: 593.194µs
|
runner: 5.171311ms
|
||||||
|
|
||||||
|
Day 8 - Part 1: 1723
|
||||||
|
generator: 541ns,
|
||||||
|
runner: 564.443µs
|
||||||
|
|
||||||
|
Day 8 - Part 2: 846
|
||||||
|
generator: 412ns,
|
||||||
|
runner: 714.064µs
|
||||||
```
|
```
|
||||||
|
|||||||
653
input/2020/day8.txt
Normal file
653
input/2020/day8.txt
Normal file
@ -0,0 +1,653 @@
|
|||||||
|
acc +9
|
||||||
|
acc -2
|
||||||
|
acc -12
|
||||||
|
acc +33
|
||||||
|
jmp +301
|
||||||
|
nop +508
|
||||||
|
jmp +216
|
||||||
|
acc +27
|
||||||
|
acc +35
|
||||||
|
acc +43
|
||||||
|
acc +31
|
||||||
|
jmp +309
|
||||||
|
acc +18
|
||||||
|
acc -19
|
||||||
|
acc +7
|
||||||
|
jmp +44
|
||||||
|
acc -13
|
||||||
|
acc -17
|
||||||
|
acc +31
|
||||||
|
jmp +311
|
||||||
|
nop +612
|
||||||
|
jmp +143
|
||||||
|
acc +22
|
||||||
|
nop +85
|
||||||
|
jmp +458
|
||||||
|
acc -3
|
||||||
|
jmp +13
|
||||||
|
acc -19
|
||||||
|
acc +27
|
||||||
|
acc +12
|
||||||
|
jmp +483
|
||||||
|
acc +40
|
||||||
|
acc +6
|
||||||
|
jmp +128
|
||||||
|
jmp +10
|
||||||
|
acc +0
|
||||||
|
acc -3
|
||||||
|
acc -2
|
||||||
|
jmp -11
|
||||||
|
acc +43
|
||||||
|
acc -12
|
||||||
|
jmp +158
|
||||||
|
acc +0
|
||||||
|
jmp +240
|
||||||
|
jmp +1
|
||||||
|
acc +5
|
||||||
|
acc +15
|
||||||
|
jmp +187
|
||||||
|
nop +563
|
||||||
|
jmp +51
|
||||||
|
acc -16
|
||||||
|
jmp +158
|
||||||
|
jmp +322
|
||||||
|
acc +47
|
||||||
|
nop -1
|
||||||
|
jmp +299
|
||||||
|
acc +26
|
||||||
|
acc +25
|
||||||
|
jmp +232
|
||||||
|
jmp -9
|
||||||
|
acc +15
|
||||||
|
jmp +54
|
||||||
|
jmp +558
|
||||||
|
acc +7
|
||||||
|
acc -7
|
||||||
|
jmp +399
|
||||||
|
nop +447
|
||||||
|
jmp +71
|
||||||
|
acc +26
|
||||||
|
acc +46
|
||||||
|
jmp +145
|
||||||
|
acc +38
|
||||||
|
acc +30
|
||||||
|
acc +21
|
||||||
|
jmp +263
|
||||||
|
acc +10
|
||||||
|
jmp +168
|
||||||
|
acc +22
|
||||||
|
nop +561
|
||||||
|
jmp -26
|
||||||
|
jmp +1
|
||||||
|
acc -7
|
||||||
|
jmp -5
|
||||||
|
acc +28
|
||||||
|
acc -6
|
||||||
|
jmp +370
|
||||||
|
jmp +94
|
||||||
|
acc +50
|
||||||
|
acc +42
|
||||||
|
acc -9
|
||||||
|
acc +30
|
||||||
|
jmp +70
|
||||||
|
acc +29
|
||||||
|
jmp +166
|
||||||
|
acc -5
|
||||||
|
acc -18
|
||||||
|
nop +84
|
||||||
|
acc +2
|
||||||
|
jmp +366
|
||||||
|
jmp -40
|
||||||
|
acc -4
|
||||||
|
acc -15
|
||||||
|
acc -1
|
||||||
|
jmp +169
|
||||||
|
jmp +1
|
||||||
|
acc -4
|
||||||
|
acc +0
|
||||||
|
jmp -45
|
||||||
|
nop -21
|
||||||
|
nop +241
|
||||||
|
acc -18
|
||||||
|
acc +19
|
||||||
|
jmp +26
|
||||||
|
nop -51
|
||||||
|
jmp +260
|
||||||
|
acc +17
|
||||||
|
jmp +428
|
||||||
|
acc +6
|
||||||
|
jmp +405
|
||||||
|
acc +22
|
||||||
|
acc +10
|
||||||
|
nop +471
|
||||||
|
jmp +352
|
||||||
|
acc -6
|
||||||
|
acc +48
|
||||||
|
acc +7
|
||||||
|
acc +3
|
||||||
|
jmp +57
|
||||||
|
acc -10
|
||||||
|
acc +16
|
||||||
|
acc +16
|
||||||
|
acc +43
|
||||||
|
jmp +432
|
||||||
|
acc -5
|
||||||
|
acc +0
|
||||||
|
nop +339
|
||||||
|
acc +49
|
||||||
|
jmp +17
|
||||||
|
acc +33
|
||||||
|
nop +166
|
||||||
|
acc -5
|
||||||
|
jmp +392
|
||||||
|
nop +246
|
||||||
|
acc -7
|
||||||
|
acc +21
|
||||||
|
acc +30
|
||||||
|
jmp +398
|
||||||
|
acc +36
|
||||||
|
acc +24
|
||||||
|
acc -15
|
||||||
|
acc -9
|
||||||
|
jmp +114
|
||||||
|
acc +19
|
||||||
|
jmp +11
|
||||||
|
acc +43
|
||||||
|
nop +182
|
||||||
|
jmp -129
|
||||||
|
nop -29
|
||||||
|
acc -6
|
||||||
|
acc +2
|
||||||
|
jmp +398
|
||||||
|
jmp +78
|
||||||
|
acc +36
|
||||||
|
jmp +393
|
||||||
|
acc +15
|
||||||
|
nop -11
|
||||||
|
acc -7
|
||||||
|
acc -9
|
||||||
|
jmp +76
|
||||||
|
acc +0
|
||||||
|
acc +27
|
||||||
|
jmp +25
|
||||||
|
acc +27
|
||||||
|
nop -54
|
||||||
|
jmp +458
|
||||||
|
acc +3
|
||||||
|
acc +29
|
||||||
|
acc -4
|
||||||
|
acc +43
|
||||||
|
jmp +413
|
||||||
|
acc +33
|
||||||
|
acc +13
|
||||||
|
jmp +382
|
||||||
|
jmp -83
|
||||||
|
acc +42
|
||||||
|
acc +24
|
||||||
|
jmp +64
|
||||||
|
acc +23
|
||||||
|
acc -13
|
||||||
|
nop +110
|
||||||
|
acc -5
|
||||||
|
jmp +114
|
||||||
|
jmp +113
|
||||||
|
nop +112
|
||||||
|
acc +26
|
||||||
|
jmp -133
|
||||||
|
jmp -12
|
||||||
|
jmp +1
|
||||||
|
jmp +330
|
||||||
|
acc +25
|
||||||
|
acc -1
|
||||||
|
acc +30
|
||||||
|
acc +42
|
||||||
|
jmp -187
|
||||||
|
jmp +1
|
||||||
|
acc +20
|
||||||
|
acc +35
|
||||||
|
acc +36
|
||||||
|
jmp -125
|
||||||
|
jmp +165
|
||||||
|
acc +28
|
||||||
|
acc -17
|
||||||
|
acc -12
|
||||||
|
jmp +1
|
||||||
|
jmp -120
|
||||||
|
nop +1
|
||||||
|
acc +2
|
||||||
|
acc +26
|
||||||
|
jmp +398
|
||||||
|
acc +20
|
||||||
|
acc -1
|
||||||
|
jmp -127
|
||||||
|
acc +36
|
||||||
|
acc +14
|
||||||
|
jmp +1
|
||||||
|
jmp +331
|
||||||
|
acc +50
|
||||||
|
acc +1
|
||||||
|
acc -10
|
||||||
|
nop +159
|
||||||
|
jmp -83
|
||||||
|
jmp +374
|
||||||
|
acc +17
|
||||||
|
jmp +372
|
||||||
|
acc +44
|
||||||
|
nop -39
|
||||||
|
jmp +228
|
||||||
|
acc +17
|
||||||
|
jmp +74
|
||||||
|
acc +16
|
||||||
|
acc +33
|
||||||
|
acc -2
|
||||||
|
jmp +152
|
||||||
|
jmp +29
|
||||||
|
acc +8
|
||||||
|
acc +27
|
||||||
|
nop +59
|
||||||
|
jmp -32
|
||||||
|
acc +28
|
||||||
|
jmp -227
|
||||||
|
nop -35
|
||||||
|
jmp -168
|
||||||
|
acc +13
|
||||||
|
nop +390
|
||||||
|
jmp -204
|
||||||
|
acc +16
|
||||||
|
acc +44
|
||||||
|
jmp -230
|
||||||
|
jmp +25
|
||||||
|
acc +30
|
||||||
|
jmp +383
|
||||||
|
acc -11
|
||||||
|
acc +38
|
||||||
|
acc +11
|
||||||
|
jmp +341
|
||||||
|
acc +35
|
||||||
|
acc +46
|
||||||
|
acc -1
|
||||||
|
jmp +94
|
||||||
|
acc -4
|
||||||
|
acc +12
|
||||||
|
jmp +111
|
||||||
|
jmp +133
|
||||||
|
nop +283
|
||||||
|
acc +13
|
||||||
|
acc +37
|
||||||
|
jmp +74
|
||||||
|
nop -218
|
||||||
|
jmp -178
|
||||||
|
acc +46
|
||||||
|
acc +25
|
||||||
|
acc -5
|
||||||
|
jmp -174
|
||||||
|
acc +28
|
||||||
|
acc +39
|
||||||
|
acc +36
|
||||||
|
acc +22
|
||||||
|
jmp -172
|
||||||
|
acc +19
|
||||||
|
jmp -250
|
||||||
|
nop +62
|
||||||
|
acc +44
|
||||||
|
nop +347
|
||||||
|
acc +40
|
||||||
|
jmp +345
|
||||||
|
acc -3
|
||||||
|
acc -13
|
||||||
|
acc -11
|
||||||
|
jmp +56
|
||||||
|
jmp -180
|
||||||
|
acc +17
|
||||||
|
acc -4
|
||||||
|
acc +46
|
||||||
|
nop -165
|
||||||
|
jmp +321
|
||||||
|
acc -4
|
||||||
|
jmp +1
|
||||||
|
acc +9
|
||||||
|
acc -12
|
||||||
|
jmp -155
|
||||||
|
acc +5
|
||||||
|
jmp -96
|
||||||
|
acc +0
|
||||||
|
acc -2
|
||||||
|
acc +38
|
||||||
|
jmp +67
|
||||||
|
acc -4
|
||||||
|
nop -283
|
||||||
|
acc +28
|
||||||
|
jmp +324
|
||||||
|
acc -9
|
||||||
|
acc +43
|
||||||
|
acc -1
|
||||||
|
acc +9
|
||||||
|
jmp -290
|
||||||
|
acc +3
|
||||||
|
acc +22
|
||||||
|
nop +84
|
||||||
|
acc -17
|
||||||
|
jmp -210
|
||||||
|
acc +7
|
||||||
|
jmp -260
|
||||||
|
nop -232
|
||||||
|
nop +87
|
||||||
|
acc +43
|
||||||
|
acc +36
|
||||||
|
jmp +96
|
||||||
|
jmp +238
|
||||||
|
acc +13
|
||||||
|
acc -14
|
||||||
|
acc +32
|
||||||
|
acc +11
|
||||||
|
jmp -146
|
||||||
|
acc +13
|
||||||
|
acc +37
|
||||||
|
acc -10
|
||||||
|
jmp +187
|
||||||
|
acc +49
|
||||||
|
acc +15
|
||||||
|
jmp -234
|
||||||
|
jmp -328
|
||||||
|
jmp -136
|
||||||
|
jmp +143
|
||||||
|
jmp +1
|
||||||
|
acc +27
|
||||||
|
acc +22
|
||||||
|
jmp +1
|
||||||
|
jmp -5
|
||||||
|
acc +30
|
||||||
|
nop -7
|
||||||
|
acc -6
|
||||||
|
jmp -71
|
||||||
|
acc -17
|
||||||
|
acc +15
|
||||||
|
jmp -52
|
||||||
|
jmp -126
|
||||||
|
acc -4
|
||||||
|
jmp +151
|
||||||
|
jmp +52
|
||||||
|
nop -86
|
||||||
|
acc +25
|
||||||
|
jmp +187
|
||||||
|
nop -22
|
||||||
|
jmp -219
|
||||||
|
acc +33
|
||||||
|
nop -120
|
||||||
|
acc +0
|
||||||
|
jmp +215
|
||||||
|
acc +46
|
||||||
|
acc +38
|
||||||
|
jmp +1
|
||||||
|
jmp -262
|
||||||
|
jmp +157
|
||||||
|
acc -15
|
||||||
|
acc +48
|
||||||
|
acc +39
|
||||||
|
acc +10
|
||||||
|
jmp -137
|
||||||
|
acc +47
|
||||||
|
acc +50
|
||||||
|
jmp -324
|
||||||
|
nop +214
|
||||||
|
acc +39
|
||||||
|
jmp -178
|
||||||
|
acc +49
|
||||||
|
acc -10
|
||||||
|
jmp -268
|
||||||
|
jmp +50
|
||||||
|
acc -14
|
||||||
|
nop -100
|
||||||
|
jmp +20
|
||||||
|
acc +45
|
||||||
|
acc -12
|
||||||
|
acc -4
|
||||||
|
jmp -208
|
||||||
|
acc -19
|
||||||
|
jmp -340
|
||||||
|
acc +36
|
||||||
|
nop -358
|
||||||
|
acc +5
|
||||||
|
jmp -348
|
||||||
|
acc +47
|
||||||
|
nop -18
|
||||||
|
acc -12
|
||||||
|
jmp -131
|
||||||
|
acc +19
|
||||||
|
acc +10
|
||||||
|
acc +19
|
||||||
|
acc +31
|
||||||
|
jmp -164
|
||||||
|
nop +162
|
||||||
|
nop -260
|
||||||
|
jmp +146
|
||||||
|
acc +32
|
||||||
|
acc -1
|
||||||
|
nop -14
|
||||||
|
jmp -192
|
||||||
|
acc +3
|
||||||
|
acc +31
|
||||||
|
nop -185
|
||||||
|
jmp -208
|
||||||
|
jmp -69
|
||||||
|
acc +43
|
||||||
|
acc +43
|
||||||
|
jmp -68
|
||||||
|
acc -16
|
||||||
|
acc +5
|
||||||
|
acc -9
|
||||||
|
jmp +126
|
||||||
|
acc +33
|
||||||
|
acc +2
|
||||||
|
acc +34
|
||||||
|
acc -9
|
||||||
|
jmp -16
|
||||||
|
acc +34
|
||||||
|
acc -19
|
||||||
|
jmp -266
|
||||||
|
nop +135
|
||||||
|
nop -389
|
||||||
|
acc +33
|
||||||
|
jmp -195
|
||||||
|
acc +48
|
||||||
|
jmp +1
|
||||||
|
acc -12
|
||||||
|
jmp +143
|
||||||
|
nop -317
|
||||||
|
acc -14
|
||||||
|
nop -127
|
||||||
|
acc +32
|
||||||
|
jmp -372
|
||||||
|
acc +24
|
||||||
|
nop -41
|
||||||
|
nop -42
|
||||||
|
jmp -344
|
||||||
|
acc +23
|
||||||
|
nop +117
|
||||||
|
nop +92
|
||||||
|
acc +42
|
||||||
|
jmp +143
|
||||||
|
acc +48
|
||||||
|
acc -6
|
||||||
|
nop -272
|
||||||
|
acc -13
|
||||||
|
jmp -379
|
||||||
|
acc -2
|
||||||
|
acc +44
|
||||||
|
acc +9
|
||||||
|
jmp -369
|
||||||
|
acc +6
|
||||||
|
acc +25
|
||||||
|
acc +34
|
||||||
|
jmp -301
|
||||||
|
nop -227
|
||||||
|
acc +43
|
||||||
|
jmp -141
|
||||||
|
acc +12
|
||||||
|
acc +41
|
||||||
|
acc +17
|
||||||
|
acc -11
|
||||||
|
jmp +29
|
||||||
|
jmp -121
|
||||||
|
acc +6
|
||||||
|
acc +7
|
||||||
|
acc +7
|
||||||
|
jmp +131
|
||||||
|
nop +144
|
||||||
|
nop -142
|
||||||
|
acc -13
|
||||||
|
acc -18
|
||||||
|
jmp +149
|
||||||
|
acc +14
|
||||||
|
acc +49
|
||||||
|
acc +25
|
||||||
|
acc -17
|
||||||
|
jmp -9
|
||||||
|
acc +26
|
||||||
|
acc -4
|
||||||
|
jmp -230
|
||||||
|
acc -18
|
||||||
|
acc +36
|
||||||
|
acc +27
|
||||||
|
nop -142
|
||||||
|
jmp +21
|
||||||
|
acc +34
|
||||||
|
nop +54
|
||||||
|
jmp -476
|
||||||
|
acc +10
|
||||||
|
jmp -174
|
||||||
|
nop -354
|
||||||
|
acc +1
|
||||||
|
jmp -324
|
||||||
|
acc +40
|
||||||
|
jmp +94
|
||||||
|
acc -12
|
||||||
|
jmp -136
|
||||||
|
nop -454
|
||||||
|
acc -14
|
||||||
|
jmp +116
|
||||||
|
acc +12
|
||||||
|
acc -1
|
||||||
|
nop -453
|
||||||
|
jmp -241
|
||||||
|
jmp -479
|
||||||
|
acc -19
|
||||||
|
jmp -87
|
||||||
|
acc +27
|
||||||
|
acc +48
|
||||||
|
acc +0
|
||||||
|
jmp -476
|
||||||
|
acc +16
|
||||||
|
acc +46
|
||||||
|
jmp -534
|
||||||
|
acc +0
|
||||||
|
jmp -344
|
||||||
|
acc +0
|
||||||
|
acc +28
|
||||||
|
jmp +10
|
||||||
|
jmp -248
|
||||||
|
nop -186
|
||||||
|
jmp +1
|
||||||
|
acc +26
|
||||||
|
jmp -153
|
||||||
|
acc +14
|
||||||
|
acc -8
|
||||||
|
nop -416
|
||||||
|
jmp -91
|
||||||
|
jmp -409
|
||||||
|
jmp -326
|
||||||
|
acc +2
|
||||||
|
acc +8
|
||||||
|
acc -18
|
||||||
|
acc +33
|
||||||
|
jmp -468
|
||||||
|
jmp -175
|
||||||
|
acc -7
|
||||||
|
acc +45
|
||||||
|
jmp -18
|
||||||
|
jmp -375
|
||||||
|
acc -8
|
||||||
|
jmp +28
|
||||||
|
acc -16
|
||||||
|
nop -38
|
||||||
|
acc +37
|
||||||
|
acc +48
|
||||||
|
jmp -343
|
||||||
|
acc +10
|
||||||
|
acc +26
|
||||||
|
acc -9
|
||||||
|
acc -16
|
||||||
|
jmp -348
|
||||||
|
acc +37
|
||||||
|
jmp -453
|
||||||
|
acc -2
|
||||||
|
acc +27
|
||||||
|
acc +17
|
||||||
|
acc +28
|
||||||
|
jmp -406
|
||||||
|
acc +25
|
||||||
|
acc +24
|
||||||
|
acc +44
|
||||||
|
acc +44
|
||||||
|
jmp -532
|
||||||
|
acc +10
|
||||||
|
jmp -531
|
||||||
|
acc +39
|
||||||
|
acc +40
|
||||||
|
jmp -284
|
||||||
|
acc +19
|
||||||
|
acc +3
|
||||||
|
nop -533
|
||||||
|
acc -3
|
||||||
|
jmp -162
|
||||||
|
nop -438
|
||||||
|
acc -5
|
||||||
|
jmp -114
|
||||||
|
acc +45
|
||||||
|
acc +1
|
||||||
|
acc +28
|
||||||
|
acc +9
|
||||||
|
jmp -550
|
||||||
|
jmp -222
|
||||||
|
jmp -106
|
||||||
|
acc -7
|
||||||
|
nop -263
|
||||||
|
nop -375
|
||||||
|
jmp -381
|
||||||
|
acc -4
|
||||||
|
nop -223
|
||||||
|
jmp -171
|
||||||
|
jmp -465
|
||||||
|
acc -2
|
||||||
|
nop -562
|
||||||
|
jmp -190
|
||||||
|
acc +40
|
||||||
|
jmp -4
|
||||||
|
acc +30
|
||||||
|
acc +21
|
||||||
|
jmp -435
|
||||||
|
acc +1
|
||||||
|
acc +10
|
||||||
|
jmp +1
|
||||||
|
jmp -157
|
||||||
|
acc -7
|
||||||
|
acc +18
|
||||||
|
acc -3
|
||||||
|
acc +24
|
||||||
|
jmp -113
|
||||||
|
acc +21
|
||||||
|
jmp -339
|
||||||
|
acc +34
|
||||||
|
jmp -563
|
||||||
|
acc +27
|
||||||
|
jmp -589
|
||||||
|
jmp -61
|
||||||
|
acc +35
|
||||||
|
acc +50
|
||||||
|
acc +8
|
||||||
|
jmp -553
|
||||||
|
acc +48
|
||||||
|
acc -15
|
||||||
|
acc +29
|
||||||
|
acc +24
|
||||||
|
jmp +1
|
||||||
147
src/day8.rs
Normal file
147
src/day8.rs
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
use aoc_runner_derive::aoc;
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone)]
|
||||||
|
enum Instr {
|
||||||
|
Nop(isize),
|
||||||
|
Acc(isize),
|
||||||
|
Jmp(isize),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Instr {
|
||||||
|
fn parse(input: &str) -> Option<Instr> {
|
||||||
|
let space_idx = input.find(' ')?;
|
||||||
|
let (op, arg) = (&input[..space_idx], &input[space_idx + 1..]);
|
||||||
|
let arg = arg.parse().ok()?;
|
||||||
|
Some(match op {
|
||||||
|
"nop" => Instr::Nop(arg),
|
||||||
|
"acc" => Instr::Acc(arg),
|
||||||
|
"jmp" => Instr::Jmp(arg),
|
||||||
|
_ => return None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
struct BitSet(Vec<u64>);
|
||||||
|
|
||||||
|
impl BitSet {
|
||||||
|
fn new(max_bits: usize) -> Self {
|
||||||
|
BitSet(vec![0; (max_bits - 1) / 64 + 1])
|
||||||
|
}
|
||||||
|
|
||||||
|
fn contains(&self, bit_idx: usize) -> bool {
|
||||||
|
let byte_idx = bit_idx / 64;
|
||||||
|
let bit_offset = bit_idx & 63;
|
||||||
|
self.0[byte_idx] & (1 << bit_offset) != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn insert(&mut self, bit_idx: usize) {
|
||||||
|
let byte_idx = bit_idx / 64;
|
||||||
|
let bit_offset = bit_idx & 63;
|
||||||
|
self.0[byte_idx] |= 1 << bit_offset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_program(
|
||||||
|
program: &[Instr],
|
||||||
|
mut prev_instrs: BitSet,
|
||||||
|
mut pc: usize,
|
||||||
|
mut accum: isize,
|
||||||
|
) -> (usize, isize) {
|
||||||
|
while pc < program.len() {
|
||||||
|
if prev_instrs.contains(pc) {
|
||||||
|
return (pc, accum);
|
||||||
|
}
|
||||||
|
let (new_pc, new_accum) = step(program[pc], &mut prev_instrs, pc, accum);
|
||||||
|
pc = new_pc;
|
||||||
|
accum = new_accum;
|
||||||
|
}
|
||||||
|
(pc, accum)
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
Instr::Acc(arg) => {
|
||||||
|
accum += arg;
|
||||||
|
pc + 1
|
||||||
|
}
|
||||||
|
Instr::Jmp(arg) => (pc as isize + arg) as usize,
|
||||||
|
};
|
||||||
|
(pc, accum)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day8, part1)]
|
||||||
|
pub fn solve_d8_p1(input: &str) -> isize {
|
||||||
|
let program = input
|
||||||
|
.split('\n')
|
||||||
|
.map(|line| Instr::parse(line))
|
||||||
|
.collect::<Option<Vec<_>>>()
|
||||||
|
.unwrap();
|
||||||
|
run_program(&program, BitSet::new(program.len()), 0, 0).1
|
||||||
|
}
|
||||||
|
|
||||||
|
#[aoc(day8, part2)]
|
||||||
|
pub fn solve_d8_p2(input: &str) -> isize {
|
||||||
|
let mut program = input
|
||||||
|
.split('\n')
|
||||||
|
.map(|line| Instr::parse(line))
|
||||||
|
.collect::<Option<Vec<_>>>()
|
||||||
|
.unwrap();
|
||||||
|
let mut pc = 0;
|
||||||
|
let mut accum = 0;
|
||||||
|
let mut prev_instrs = BitSet::new(program.len());
|
||||||
|
loop {
|
||||||
|
match program[pc] {
|
||||||
|
Instr::Nop(arg) => {
|
||||||
|
program[pc] = Instr::Jmp(arg);
|
||||||
|
let (new_pc, new_accum) = run_program(&program, prev_instrs.clone(), pc, accum);
|
||||||
|
if new_pc == program.len() {
|
||||||
|
return new_accum;
|
||||||
|
}
|
||||||
|
program[pc] = Instr::Nop(arg);
|
||||||
|
}
|
||||||
|
Instr::Jmp(arg) => {
|
||||||
|
program[pc] = Instr::Nop(arg);
|
||||||
|
let (new_pc, new_accum) = run_program(&program, prev_instrs.clone(), pc, accum);
|
||||||
|
if new_pc == program.len() {
|
||||||
|
return new_accum;
|
||||||
|
}
|
||||||
|
program[pc] = Instr::Jmp(arg);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
let (new_pc, new_accum) = step(program[pc], &mut prev_instrs, pc, accum);
|
||||||
|
pc = new_pc;
|
||||||
|
accum = new_accum;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_bitset() {
|
||||||
|
let mut bs = BitSet::new(192);
|
||||||
|
for bit in 0..191 {
|
||||||
|
assert!(!bs.contains(bit));
|
||||||
|
}
|
||||||
|
bs.insert(5);
|
||||||
|
assert!(bs.contains(5));
|
||||||
|
bs.insert(191);
|
||||||
|
assert!(bs.contains(191));
|
||||||
|
bs.insert(63);
|
||||||
|
assert!(bs.contains(63));
|
||||||
|
bs.insert(64);
|
||||||
|
assert!(bs.contains(64));
|
||||||
|
bs.insert(65);
|
||||||
|
assert!(bs.contains(65));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,5 +5,6 @@ pub mod day4;
|
|||||||
pub mod day5;
|
pub mod day5;
|
||||||
pub mod day6;
|
pub mod day6;
|
||||||
pub mod day7;
|
pub mod day7;
|
||||||
|
pub mod day8;
|
||||||
|
|
||||||
aoc_runner_derive::aoc_lib! { year = 2020 }
|
aoc_runner_derive::aoc_lib! { year = 2020 }
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user