day8: solve part 1 & 2
This commit is contained in:
parent
f4afba8eab
commit
d0c3bb0464
4 changed files with 1389 additions and 0 deletions
625
day8/part1/input
Normal file
625
day8/part1/input
Normal file
|
@ -0,0 +1,625 @@
|
|||
jmp +301
|
||||
acc +27
|
||||
nop +299
|
||||
jmp +168
|
||||
acc +0
|
||||
acc +48
|
||||
acc -5
|
||||
jmp +420
|
||||
jmp +155
|
||||
acc -16
|
||||
acc -15
|
||||
nop +582
|
||||
acc -5
|
||||
jmp +490
|
||||
acc +10
|
||||
nop +300
|
||||
acc -2
|
||||
acc -1
|
||||
jmp +252
|
||||
jmp +2
|
||||
jmp +234
|
||||
acc +36
|
||||
acc +50
|
||||
jmp +564
|
||||
jmp +102
|
||||
jmp +473
|
||||
acc +37
|
||||
acc +1
|
||||
acc +20
|
||||
jmp +355
|
||||
acc +28
|
||||
acc -14
|
||||
acc +22
|
||||
jmp +329
|
||||
acc +44
|
||||
jmp +1
|
||||
jmp +23
|
||||
nop +312
|
||||
jmp +251
|
||||
acc +12
|
||||
acc +39
|
||||
acc +33
|
||||
jmp -21
|
||||
acc +28
|
||||
acc +14
|
||||
acc +42
|
||||
acc +33
|
||||
jmp +502
|
||||
jmp +123
|
||||
acc +24
|
||||
jmp +11
|
||||
acc -8
|
||||
nop +218
|
||||
nop +516
|
||||
jmp +244
|
||||
jmp -36
|
||||
nop +192
|
||||
acc -11
|
||||
jmp +100
|
||||
jmp +299
|
||||
jmp +400
|
||||
acc +29
|
||||
acc +13
|
||||
jmp +1
|
||||
acc +45
|
||||
jmp +458
|
||||
acc +6
|
||||
acc +15
|
||||
jmp +542
|
||||
acc +38
|
||||
acc -15
|
||||
acc -15
|
||||
acc -11
|
||||
jmp +474
|
||||
acc +0
|
||||
acc +1
|
||||
jmp +55
|
||||
acc +14
|
||||
acc +13
|
||||
acc +37
|
||||
acc -18
|
||||
jmp +95
|
||||
jmp -73
|
||||
acc +25
|
||||
jmp -54
|
||||
jmp +413
|
||||
acc -17
|
||||
acc +25
|
||||
acc +22
|
||||
jmp +405
|
||||
jmp +151
|
||||
jmp +1
|
||||
acc -14
|
||||
acc +33
|
||||
acc +30
|
||||
jmp -86
|
||||
acc +32
|
||||
acc -3
|
||||
acc +26
|
||||
acc +7
|
||||
jmp +493
|
||||
acc +44
|
||||
jmp +1
|
||||
nop +357
|
||||
acc +47
|
||||
jmp +412
|
||||
jmp +321
|
||||
acc -5
|
||||
jmp +12
|
||||
acc +18
|
||||
acc -1
|
||||
acc +29
|
||||
jmp +430
|
||||
acc +35
|
||||
acc +34
|
||||
jmp +1
|
||||
acc -6
|
||||
jmp +184
|
||||
acc -12
|
||||
jmp -36
|
||||
acc +22
|
||||
acc -5
|
||||
acc +14
|
||||
acc +0
|
||||
jmp +198
|
||||
jmp +293
|
||||
nop +76
|
||||
acc +8
|
||||
acc +13
|
||||
jmp +464
|
||||
jmp +309
|
||||
acc -19
|
||||
acc +27
|
||||
acc -10
|
||||
jmp +29
|
||||
acc -17
|
||||
jmp -77
|
||||
acc +49
|
||||
nop +224
|
||||
acc +0
|
||||
jmp +77
|
||||
acc +35
|
||||
acc +3
|
||||
jmp +317
|
||||
nop +27
|
||||
acc +6
|
||||
jmp +164
|
||||
acc +10
|
||||
acc +41
|
||||
acc -2
|
||||
acc -8
|
||||
jmp +347
|
||||
acc +14
|
||||
nop +148
|
||||
jmp +302
|
||||
acc +21
|
||||
acc +8
|
||||
jmp +282
|
||||
acc +3
|
||||
acc +12
|
||||
jmp +138
|
||||
acc -10
|
||||
jmp +311
|
||||
acc -6
|
||||
acc -10
|
||||
acc +13
|
||||
jmp +116
|
||||
acc +31
|
||||
acc +39
|
||||
acc +28
|
||||
jmp +244
|
||||
nop +59
|
||||
acc +16
|
||||
jmp +1
|
||||
jmp +436
|
||||
jmp -31
|
||||
acc -12
|
||||
acc +43
|
||||
jmp -135
|
||||
acc -1
|
||||
acc +35
|
||||
acc +50
|
||||
acc +0
|
||||
jmp +398
|
||||
jmp -83
|
||||
acc +40
|
||||
acc +26
|
||||
acc -8
|
||||
jmp +393
|
||||
acc +28
|
||||
acc -7
|
||||
acc +43
|
||||
jmp +231
|
||||
jmp -22
|
||||
acc -1
|
||||
acc -18
|
||||
acc +19
|
||||
jmp -111
|
||||
acc +38
|
||||
acc +21
|
||||
acc +7
|
||||
jmp +134
|
||||
acc +8
|
||||
acc +18
|
||||
acc -9
|
||||
acc -7
|
||||
jmp +24
|
||||
acc +5
|
||||
acc +0
|
||||
jmp -46
|
||||
acc +2
|
||||
acc -12
|
||||
acc -17
|
||||
acc +36
|
||||
jmp -88
|
||||
nop -71
|
||||
jmp +181
|
||||
jmp -15
|
||||
jmp +52
|
||||
acc +15
|
||||
acc +0
|
||||
jmp -32
|
||||
acc -6
|
||||
nop +166
|
||||
acc +10
|
||||
acc +38
|
||||
jmp +123
|
||||
acc +9
|
||||
jmp -151
|
||||
jmp +231
|
||||
jmp +1
|
||||
acc +34
|
||||
jmp +186
|
||||
jmp +96
|
||||
acc +48
|
||||
acc +9
|
||||
jmp +198
|
||||
acc +7
|
||||
acc +35
|
||||
acc +22
|
||||
jmp +82
|
||||
nop +1
|
||||
nop -156
|
||||
nop -49
|
||||
jmp +91
|
||||
acc +8
|
||||
acc -17
|
||||
jmp -53
|
||||
acc +29
|
||||
nop +283
|
||||
acc -2
|
||||
nop +50
|
||||
jmp +290
|
||||
jmp +296
|
||||
jmp +219
|
||||
jmp +268
|
||||
jmp -119
|
||||
nop +353
|
||||
jmp -157
|
||||
acc +21
|
||||
acc +30
|
||||
jmp +345
|
||||
acc -9
|
||||
jmp -119
|
||||
acc +0
|
||||
jmp -196
|
||||
acc +33
|
||||
acc +0
|
||||
acc +1
|
||||
jmp -248
|
||||
acc +15
|
||||
jmp -44
|
||||
acc +9
|
||||
acc +46
|
||||
acc +50
|
||||
jmp +257
|
||||
acc -6
|
||||
acc -16
|
||||
jmp +320
|
||||
acc +35
|
||||
nop -4
|
||||
jmp -5
|
||||
acc +30
|
||||
acc +27
|
||||
jmp +1
|
||||
jmp +296
|
||||
acc +8
|
||||
acc +40
|
||||
jmp +210
|
||||
acc -14
|
||||
acc +34
|
||||
acc +42
|
||||
jmp +173
|
||||
acc +16
|
||||
acc +47
|
||||
acc +11
|
||||
acc +32
|
||||
jmp -206
|
||||
jmp -39
|
||||
acc +45
|
||||
jmp +247
|
||||
acc -17
|
||||
nop +261
|
||||
nop -254
|
||||
acc +48
|
||||
jmp +62
|
||||
acc +50
|
||||
acc +26
|
||||
acc +1
|
||||
jmp +130
|
||||
acc -14
|
||||
nop +47
|
||||
acc -9
|
||||
jmp -276
|
||||
jmp -104
|
||||
jmp +135
|
||||
acc +40
|
||||
jmp -296
|
||||
jmp +11
|
||||
acc +2
|
||||
acc -17
|
||||
jmp -238
|
||||
acc +34
|
||||
acc +37
|
||||
jmp -166
|
||||
nop -205
|
||||
acc -4
|
||||
acc +22
|
||||
jmp +56
|
||||
acc +1
|
||||
nop -210
|
||||
nop -30
|
||||
acc -18
|
||||
jmp -250
|
||||
jmp -107
|
||||
acc +45
|
||||
acc +50
|
||||
acc +3
|
||||
acc +3
|
||||
jmp -63
|
||||
acc +35
|
||||
jmp +1
|
||||
acc -5
|
||||
nop +255
|
||||
jmp +254
|
||||
jmp +210
|
||||
acc +10
|
||||
acc +7
|
||||
jmp +207
|
||||
acc +17
|
||||
acc +25
|
||||
nop -22
|
||||
jmp +62
|
||||
acc +35
|
||||
acc +18
|
||||
acc +22
|
||||
acc +10
|
||||
jmp -186
|
||||
acc +24
|
||||
acc +32
|
||||
jmp -31
|
||||
jmp -131
|
||||
jmp -337
|
||||
acc +41
|
||||
acc -10
|
||||
acc +42
|
||||
jmp +207
|
||||
acc -16
|
||||
acc -14
|
||||
nop -225
|
||||
acc -15
|
||||
jmp +70
|
||||
nop -303
|
||||
acc -10
|
||||
acc +11
|
||||
acc +17
|
||||
jmp +234
|
||||
acc -8
|
||||
acc +33
|
||||
jmp -131
|
||||
acc -9
|
||||
acc -12
|
||||
acc +31
|
||||
jmp -25
|
||||
nop -277
|
||||
acc +22
|
||||
jmp -273
|
||||
acc +19
|
||||
jmp -244
|
||||
acc -8
|
||||
nop +220
|
||||
acc +48
|
||||
jmp -261
|
||||
acc +23
|
||||
acc +11
|
||||
acc -16
|
||||
jmp -47
|
||||
acc +50
|
||||
acc -9
|
||||
acc +23
|
||||
jmp -38
|
||||
jmp +146
|
||||
nop -168
|
||||
jmp -88
|
||||
acc +37
|
||||
acc +36
|
||||
acc +43
|
||||
acc -7
|
||||
jmp +147
|
||||
jmp +1
|
||||
acc +42
|
||||
jmp -352
|
||||
acc +39
|
||||
jmp +76
|
||||
acc +47
|
||||
jmp +88
|
||||
acc -2
|
||||
jmp -102
|
||||
acc +20
|
||||
jmp +144
|
||||
acc +47
|
||||
acc +25
|
||||
jmp -55
|
||||
nop -65
|
||||
jmp -375
|
||||
acc +8
|
||||
jmp +161
|
||||
acc +46
|
||||
acc +5
|
||||
acc +16
|
||||
jmp +53
|
||||
acc +27
|
||||
acc +1
|
||||
jmp -6
|
||||
jmp -207
|
||||
acc -6
|
||||
acc +27
|
||||
nop +126
|
||||
jmp -197
|
||||
jmp -110
|
||||
jmp +123
|
||||
acc +13
|
||||
acc +31
|
||||
nop +22
|
||||
acc +41
|
||||
jmp -127
|
||||
acc -7
|
||||
nop -386
|
||||
acc +0
|
||||
jmp -65
|
||||
jmp -306
|
||||
acc +44
|
||||
acc +19
|
||||
acc +42
|
||||
acc +29
|
||||
jmp +92
|
||||
acc +42
|
||||
nop -156
|
||||
jmp -56
|
||||
jmp -346
|
||||
nop +95
|
||||
acc -6
|
||||
acc -19
|
||||
jmp -292
|
||||
jmp -443
|
||||
acc -12
|
||||
acc -18
|
||||
jmp +102
|
||||
nop +35
|
||||
acc +44
|
||||
acc +27
|
||||
nop -122
|
||||
jmp +97
|
||||
jmp -382
|
||||
jmp -85
|
||||
acc -9
|
||||
nop -324
|
||||
jmp -422
|
||||
acc -9
|
||||
acc +25
|
||||
acc +38
|
||||
acc -3
|
||||
jmp -298
|
||||
acc -2
|
||||
acc +26
|
||||
acc +14
|
||||
jmp -252
|
||||
acc +4
|
||||
jmp +75
|
||||
acc +17
|
||||
nop -208
|
||||
jmp -235
|
||||
acc +19
|
||||
jmp -322
|
||||
acc +14
|
||||
acc -3
|
||||
jmp +124
|
||||
jmp -221
|
||||
jmp -9
|
||||
acc +0
|
||||
acc +45
|
||||
acc -3
|
||||
jmp -376
|
||||
acc +20
|
||||
acc -3
|
||||
acc +17
|
||||
acc +19
|
||||
jmp -400
|
||||
acc -16
|
||||
acc +25
|
||||
jmp -37
|
||||
jmp -317
|
||||
acc +31
|
||||
acc +19
|
||||
acc +24
|
||||
acc +9
|
||||
jmp -181
|
||||
acc +35
|
||||
jmp -488
|
||||
acc -13
|
||||
acc +26
|
||||
acc -2
|
||||
jmp -338
|
||||
acc -1
|
||||
acc +17
|
||||
acc +44
|
||||
nop -262
|
||||
jmp -86
|
||||
acc +17
|
||||
acc -1
|
||||
acc +23
|
||||
jmp +79
|
||||
acc -5
|
||||
acc +18
|
||||
jmp +1
|
||||
acc +12
|
||||
jmp -127
|
||||
acc +1
|
||||
acc +35
|
||||
acc -10
|
||||
acc +14
|
||||
jmp -352
|
||||
acc +39
|
||||
nop +67
|
||||
jmp -290
|
||||
acc -13
|
||||
jmp +41
|
||||
jmp -150
|
||||
jmp -121
|
||||
acc +7
|
||||
jmp -331
|
||||
acc +42
|
||||
nop -389
|
||||
acc +4
|
||||
jmp -7
|
||||
acc -17
|
||||
acc -8
|
||||
acc -4
|
||||
jmp -209
|
||||
acc +42
|
||||
acc +39
|
||||
acc +43
|
||||
jmp -306
|
||||
acc -18
|
||||
acc -16
|
||||
acc +13
|
||||
jmp -414
|
||||
acc +3
|
||||
jmp -442
|
||||
nop +41
|
||||
acc -12
|
||||
jmp -194
|
||||
jmp -503
|
||||
acc -18
|
||||
acc +35
|
||||
acc -4
|
||||
acc +18
|
||||
jmp -393
|
||||
nop -348
|
||||
acc -7
|
||||
jmp -521
|
||||
acc +48
|
||||
acc -19
|
||||
acc -3
|
||||
acc +44
|
||||
jmp +2
|
||||
jmp -126
|
||||
nop -474
|
||||
acc -9
|
||||
acc -2
|
||||
acc +35
|
||||
jmp -587
|
||||
jmp -328
|
||||
acc -14
|
||||
nop -468
|
||||
acc +39
|
||||
jmp -157
|
||||
jmp -538
|
||||
acc +0
|
||||
nop -264
|
||||
acc +19
|
||||
nop -266
|
||||
jmp -91
|
||||
acc +20
|
||||
acc +14
|
||||
jmp -329
|
||||
acc -11
|
||||
acc +8
|
||||
jmp -219
|
||||
jmp -320
|
||||
acc +10
|
||||
acc +49
|
||||
nop -603
|
||||
acc +49
|
||||
jmp -344
|
||||
nop -356
|
||||
nop -93
|
||||
acc +27
|
||||
acc +24
|
||||
jmp -482
|
||||
nop -126
|
||||
nop -345
|
||||
acc +6
|
||||
acc +3
|
||||
jmp +1
|
50
day8/part1/main.d
Normal file
50
day8/part1/main.d
Normal file
|
@ -0,0 +1,50 @@
|
|||
import std;
|
||||
|
||||
void main()
|
||||
{
|
||||
"input".slurp!(string, int)("%s %s").executeProgramAndReturnAcc.writeln;
|
||||
}
|
||||
|
||||
alias Instruction = Tuple!(string, int);
|
||||
alias Program = Instruction[];
|
||||
|
||||
auto executeProgramAndReturnAcc(Program program)
|
||||
{
|
||||
int accumulator;
|
||||
// dfmt off
|
||||
alias operation = void delegate(ref ulong ip, int arg);
|
||||
operation[string] operations = [
|
||||
"nop" : (scope ref size_t ip, int arg) {ip += 1;},
|
||||
"acc" : (scope ref size_t ip, int arg) { accumulator += arg; ip += 1; },
|
||||
"jmp" : (scope ref size_t ip, int arg) {ip += arg;}
|
||||
];
|
||||
// dfmt on
|
||||
void[0][size_t] seenIPs;
|
||||
size_t ip = 0;
|
||||
while (ip !in seenIPs)
|
||||
{
|
||||
seenIPs[ip] = [];
|
||||
operations[program[ip][0]](ip, program[ip][1]);
|
||||
}
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
auto program = `nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6`.splitter("\n").filter!(not!empty)
|
||||
.map!((line) {
|
||||
auto opAndArg = line.split(" ");
|
||||
return tuple(opAndArg[0], opAndArg[1].to!int);
|
||||
})
|
||||
.array;
|
||||
|
||||
assert(program.executeProgramAndReturnAcc == 5);
|
||||
}
|
625
day8/part2/input
Normal file
625
day8/part2/input
Normal file
|
@ -0,0 +1,625 @@
|
|||
jmp +301
|
||||
acc +27
|
||||
nop +299
|
||||
jmp +168
|
||||
acc +0
|
||||
acc +48
|
||||
acc -5
|
||||
jmp +420
|
||||
jmp +155
|
||||
acc -16
|
||||
acc -15
|
||||
nop +582
|
||||
acc -5
|
||||
jmp +490
|
||||
acc +10
|
||||
nop +300
|
||||
acc -2
|
||||
acc -1
|
||||
jmp +252
|
||||
jmp +2
|
||||
jmp +234
|
||||
acc +36
|
||||
acc +50
|
||||
jmp +564
|
||||
jmp +102
|
||||
jmp +473
|
||||
acc +37
|
||||
acc +1
|
||||
acc +20
|
||||
jmp +355
|
||||
acc +28
|
||||
acc -14
|
||||
acc +22
|
||||
jmp +329
|
||||
acc +44
|
||||
jmp +1
|
||||
jmp +23
|
||||
nop +312
|
||||
jmp +251
|
||||
acc +12
|
||||
acc +39
|
||||
acc +33
|
||||
jmp -21
|
||||
acc +28
|
||||
acc +14
|
||||
acc +42
|
||||
acc +33
|
||||
jmp +502
|
||||
jmp +123
|
||||
acc +24
|
||||
jmp +11
|
||||
acc -8
|
||||
nop +218
|
||||
nop +516
|
||||
jmp +244
|
||||
jmp -36
|
||||
nop +192
|
||||
acc -11
|
||||
jmp +100
|
||||
jmp +299
|
||||
jmp +400
|
||||
acc +29
|
||||
acc +13
|
||||
jmp +1
|
||||
acc +45
|
||||
jmp +458
|
||||
acc +6
|
||||
acc +15
|
||||
jmp +542
|
||||
acc +38
|
||||
acc -15
|
||||
acc -15
|
||||
acc -11
|
||||
jmp +474
|
||||
acc +0
|
||||
acc +1
|
||||
jmp +55
|
||||
acc +14
|
||||
acc +13
|
||||
acc +37
|
||||
acc -18
|
||||
jmp +95
|
||||
jmp -73
|
||||
acc +25
|
||||
jmp -54
|
||||
jmp +413
|
||||
acc -17
|
||||
acc +25
|
||||
acc +22
|
||||
jmp +405
|
||||
jmp +151
|
||||
jmp +1
|
||||
acc -14
|
||||
acc +33
|
||||
acc +30
|
||||
jmp -86
|
||||
acc +32
|
||||
acc -3
|
||||
acc +26
|
||||
acc +7
|
||||
jmp +493
|
||||
acc +44
|
||||
jmp +1
|
||||
nop +357
|
||||
acc +47
|
||||
jmp +412
|
||||
jmp +321
|
||||
acc -5
|
||||
jmp +12
|
||||
acc +18
|
||||
acc -1
|
||||
acc +29
|
||||
jmp +430
|
||||
acc +35
|
||||
acc +34
|
||||
jmp +1
|
||||
acc -6
|
||||
jmp +184
|
||||
acc -12
|
||||
jmp -36
|
||||
acc +22
|
||||
acc -5
|
||||
acc +14
|
||||
acc +0
|
||||
jmp +198
|
||||
jmp +293
|
||||
nop +76
|
||||
acc +8
|
||||
acc +13
|
||||
jmp +464
|
||||
jmp +309
|
||||
acc -19
|
||||
acc +27
|
||||
acc -10
|
||||
jmp +29
|
||||
acc -17
|
||||
jmp -77
|
||||
acc +49
|
||||
nop +224
|
||||
acc +0
|
||||
jmp +77
|
||||
acc +35
|
||||
acc +3
|
||||
jmp +317
|
||||
nop +27
|
||||
acc +6
|
||||
jmp +164
|
||||
acc +10
|
||||
acc +41
|
||||
acc -2
|
||||
acc -8
|
||||
jmp +347
|
||||
acc +14
|
||||
nop +148
|
||||
jmp +302
|
||||
acc +21
|
||||
acc +8
|
||||
jmp +282
|
||||
acc +3
|
||||
acc +12
|
||||
jmp +138
|
||||
acc -10
|
||||
jmp +311
|
||||
acc -6
|
||||
acc -10
|
||||
acc +13
|
||||
jmp +116
|
||||
acc +31
|
||||
acc +39
|
||||
acc +28
|
||||
jmp +244
|
||||
nop +59
|
||||
acc +16
|
||||
jmp +1
|
||||
jmp +436
|
||||
jmp -31
|
||||
acc -12
|
||||
acc +43
|
||||
jmp -135
|
||||
acc -1
|
||||
acc +35
|
||||
acc +50
|
||||
acc +0
|
||||
jmp +398
|
||||
jmp -83
|
||||
acc +40
|
||||
acc +26
|
||||
acc -8
|
||||
jmp +393
|
||||
acc +28
|
||||
acc -7
|
||||
acc +43
|
||||
jmp +231
|
||||
jmp -22
|
||||
acc -1
|
||||
acc -18
|
||||
acc +19
|
||||
jmp -111
|
||||
acc +38
|
||||
acc +21
|
||||
acc +7
|
||||
jmp +134
|
||||
acc +8
|
||||
acc +18
|
||||
acc -9
|
||||
acc -7
|
||||
jmp +24
|
||||
acc +5
|
||||
acc +0
|
||||
jmp -46
|
||||
acc +2
|
||||
acc -12
|
||||
acc -17
|
||||
acc +36
|
||||
jmp -88
|
||||
nop -71
|
||||
jmp +181
|
||||
jmp -15
|
||||
jmp +52
|
||||
acc +15
|
||||
acc +0
|
||||
jmp -32
|
||||
acc -6
|
||||
nop +166
|
||||
acc +10
|
||||
acc +38
|
||||
jmp +123
|
||||
acc +9
|
||||
jmp -151
|
||||
jmp +231
|
||||
jmp +1
|
||||
acc +34
|
||||
jmp +186
|
||||
jmp +96
|
||||
acc +48
|
||||
acc +9
|
||||
jmp +198
|
||||
acc +7
|
||||
acc +35
|
||||
acc +22
|
||||
jmp +82
|
||||
nop +1
|
||||
nop -156
|
||||
nop -49
|
||||
jmp +91
|
||||
acc +8
|
||||
acc -17
|
||||
jmp -53
|
||||
acc +29
|
||||
nop +283
|
||||
acc -2
|
||||
nop +50
|
||||
jmp +290
|
||||
jmp +296
|
||||
jmp +219
|
||||
jmp +268
|
||||
jmp -119
|
||||
nop +353
|
||||
jmp -157
|
||||
acc +21
|
||||
acc +30
|
||||
jmp +345
|
||||
acc -9
|
||||
jmp -119
|
||||
acc +0
|
||||
jmp -196
|
||||
acc +33
|
||||
acc +0
|
||||
acc +1
|
||||
jmp -248
|
||||
acc +15
|
||||
jmp -44
|
||||
acc +9
|
||||
acc +46
|
||||
acc +50
|
||||
jmp +257
|
||||
acc -6
|
||||
acc -16
|
||||
jmp +320
|
||||
acc +35
|
||||
nop -4
|
||||
jmp -5
|
||||
acc +30
|
||||
acc +27
|
||||
jmp +1
|
||||
jmp +296
|
||||
acc +8
|
||||
acc +40
|
||||
jmp +210
|
||||
acc -14
|
||||
acc +34
|
||||
acc +42
|
||||
jmp +173
|
||||
acc +16
|
||||
acc +47
|
||||
acc +11
|
||||
acc +32
|
||||
jmp -206
|
||||
jmp -39
|
||||
acc +45
|
||||
jmp +247
|
||||
acc -17
|
||||
nop +261
|
||||
nop -254
|
||||
acc +48
|
||||
jmp +62
|
||||
acc +50
|
||||
acc +26
|
||||
acc +1
|
||||
jmp +130
|
||||
acc -14
|
||||
nop +47
|
||||
acc -9
|
||||
jmp -276
|
||||
jmp -104
|
||||
jmp +135
|
||||
acc +40
|
||||
jmp -296
|
||||
jmp +11
|
||||
acc +2
|
||||
acc -17
|
||||
jmp -238
|
||||
acc +34
|
||||
acc +37
|
||||
jmp -166
|
||||
nop -205
|
||||
acc -4
|
||||
acc +22
|
||||
jmp +56
|
||||
acc +1
|
||||
nop -210
|
||||
nop -30
|
||||
acc -18
|
||||
jmp -250
|
||||
jmp -107
|
||||
acc +45
|
||||
acc +50
|
||||
acc +3
|
||||
acc +3
|
||||
jmp -63
|
||||
acc +35
|
||||
jmp +1
|
||||
acc -5
|
||||
nop +255
|
||||
jmp +254
|
||||
jmp +210
|
||||
acc +10
|
||||
acc +7
|
||||
jmp +207
|
||||
acc +17
|
||||
acc +25
|
||||
nop -22
|
||||
jmp +62
|
||||
acc +35
|
||||
acc +18
|
||||
acc +22
|
||||
acc +10
|
||||
jmp -186
|
||||
acc +24
|
||||
acc +32
|
||||
jmp -31
|
||||
jmp -131
|
||||
jmp -337
|
||||
acc +41
|
||||
acc -10
|
||||
acc +42
|
||||
jmp +207
|
||||
acc -16
|
||||
acc -14
|
||||
nop -225
|
||||
acc -15
|
||||
jmp +70
|
||||
nop -303
|
||||
acc -10
|
||||
acc +11
|
||||
acc +17
|
||||
jmp +234
|
||||
acc -8
|
||||
acc +33
|
||||
jmp -131
|
||||
acc -9
|
||||
acc -12
|
||||
acc +31
|
||||
jmp -25
|
||||
nop -277
|
||||
acc +22
|
||||
jmp -273
|
||||
acc +19
|
||||
jmp -244
|
||||
acc -8
|
||||
nop +220
|
||||
acc +48
|
||||
jmp -261
|
||||
acc +23
|
||||
acc +11
|
||||
acc -16
|
||||
jmp -47
|
||||
acc +50
|
||||
acc -9
|
||||
acc +23
|
||||
jmp -38
|
||||
jmp +146
|
||||
nop -168
|
||||
jmp -88
|
||||
acc +37
|
||||
acc +36
|
||||
acc +43
|
||||
acc -7
|
||||
jmp +147
|
||||
jmp +1
|
||||
acc +42
|
||||
jmp -352
|
||||
acc +39
|
||||
jmp +76
|
||||
acc +47
|
||||
jmp +88
|
||||
acc -2
|
||||
jmp -102
|
||||
acc +20
|
||||
jmp +144
|
||||
acc +47
|
||||
acc +25
|
||||
jmp -55
|
||||
nop -65
|
||||
jmp -375
|
||||
acc +8
|
||||
jmp +161
|
||||
acc +46
|
||||
acc +5
|
||||
acc +16
|
||||
jmp +53
|
||||
acc +27
|
||||
acc +1
|
||||
jmp -6
|
||||
jmp -207
|
||||
acc -6
|
||||
acc +27
|
||||
nop +126
|
||||
jmp -197
|
||||
jmp -110
|
||||
jmp +123
|
||||
acc +13
|
||||
acc +31
|
||||
nop +22
|
||||
acc +41
|
||||
jmp -127
|
||||
acc -7
|
||||
nop -386
|
||||
acc +0
|
||||
jmp -65
|
||||
jmp -306
|
||||
acc +44
|
||||
acc +19
|
||||
acc +42
|
||||
acc +29
|
||||
jmp +92
|
||||
acc +42
|
||||
nop -156
|
||||
jmp -56
|
||||
jmp -346
|
||||
nop +95
|
||||
acc -6
|
||||
acc -19
|
||||
jmp -292
|
||||
jmp -443
|
||||
acc -12
|
||||
acc -18
|
||||
jmp +102
|
||||
nop +35
|
||||
acc +44
|
||||
acc +27
|
||||
nop -122
|
||||
jmp +97
|
||||
jmp -382
|
||||
jmp -85
|
||||
acc -9
|
||||
nop -324
|
||||
jmp -422
|
||||
acc -9
|
||||
acc +25
|
||||
acc +38
|
||||
acc -3
|
||||
jmp -298
|
||||
acc -2
|
||||
acc +26
|
||||
acc +14
|
||||
jmp -252
|
||||
acc +4
|
||||
jmp +75
|
||||
acc +17
|
||||
nop -208
|
||||
jmp -235
|
||||
acc +19
|
||||
jmp -322
|
||||
acc +14
|
||||
acc -3
|
||||
jmp +124
|
||||
jmp -221
|
||||
jmp -9
|
||||
acc +0
|
||||
acc +45
|
||||
acc -3
|
||||
jmp -376
|
||||
acc +20
|
||||
acc -3
|
||||
acc +17
|
||||
acc +19
|
||||
jmp -400
|
||||
acc -16
|
||||
acc +25
|
||||
jmp -37
|
||||
jmp -317
|
||||
acc +31
|
||||
acc +19
|
||||
acc +24
|
||||
acc +9
|
||||
jmp -181
|
||||
acc +35
|
||||
jmp -488
|
||||
acc -13
|
||||
acc +26
|
||||
acc -2
|
||||
jmp -338
|
||||
acc -1
|
||||
acc +17
|
||||
acc +44
|
||||
nop -262
|
||||
jmp -86
|
||||
acc +17
|
||||
acc -1
|
||||
acc +23
|
||||
jmp +79
|
||||
acc -5
|
||||
acc +18
|
||||
jmp +1
|
||||
acc +12
|
||||
jmp -127
|
||||
acc +1
|
||||
acc +35
|
||||
acc -10
|
||||
acc +14
|
||||
jmp -352
|
||||
acc +39
|
||||
nop +67
|
||||
jmp -290
|
||||
acc -13
|
||||
jmp +41
|
||||
jmp -150
|
||||
jmp -121
|
||||
acc +7
|
||||
jmp -331
|
||||
acc +42
|
||||
nop -389
|
||||
acc +4
|
||||
jmp -7
|
||||
acc -17
|
||||
acc -8
|
||||
acc -4
|
||||
jmp -209
|
||||
acc +42
|
||||
acc +39
|
||||
acc +43
|
||||
jmp -306
|
||||
acc -18
|
||||
acc -16
|
||||
acc +13
|
||||
jmp -414
|
||||
acc +3
|
||||
jmp -442
|
||||
nop +41
|
||||
acc -12
|
||||
jmp -194
|
||||
jmp -503
|
||||
acc -18
|
||||
acc +35
|
||||
acc -4
|
||||
acc +18
|
||||
jmp -393
|
||||
nop -348
|
||||
acc -7
|
||||
jmp -521
|
||||
acc +48
|
||||
acc -19
|
||||
acc -3
|
||||
acc +44
|
||||
jmp +2
|
||||
jmp -126
|
||||
nop -474
|
||||
acc -9
|
||||
acc -2
|
||||
acc +35
|
||||
jmp -587
|
||||
jmp -328
|
||||
acc -14
|
||||
nop -468
|
||||
acc +39
|
||||
jmp -157
|
||||
jmp -538
|
||||
acc +0
|
||||
nop -264
|
||||
acc +19
|
||||
nop -266
|
||||
jmp -91
|
||||
acc +20
|
||||
acc +14
|
||||
jmp -329
|
||||
acc -11
|
||||
acc +8
|
||||
jmp -219
|
||||
jmp -320
|
||||
acc +10
|
||||
acc +49
|
||||
nop -603
|
||||
acc +49
|
||||
jmp -344
|
||||
nop -356
|
||||
nop -93
|
||||
acc +27
|
||||
acc +24
|
||||
jmp -482
|
||||
nop -126
|
||||
nop -345
|
||||
acc +6
|
||||
acc +3
|
||||
jmp +1
|
89
day8/part2/main.d
Normal file
89
day8/part2/main.d
Normal file
|
@ -0,0 +1,89 @@
|
|||
import std;
|
||||
|
||||
void main()
|
||||
{
|
||||
"input".slurp!(string, int)("%s %s").fixProgramAndReturnAcc[0].writeln;
|
||||
}
|
||||
|
||||
alias Instruction = Tuple!(string, int);
|
||||
alias Program = Instruction[];
|
||||
|
||||
auto executeProgramAndReturnAcc(Program program)
|
||||
{
|
||||
int accumulator;
|
||||
// dfmt off
|
||||
alias operation = void delegate(ref ulong ip, int arg);
|
||||
operation[string] operations = [
|
||||
"nop" : (scope ref size_t ip, int arg) {ip += 1;},
|
||||
"acc" : (scope ref size_t ip, int arg) { accumulator += arg; ip += 1; },
|
||||
"jmp" : (scope ref size_t ip, int arg) {ip += arg;}
|
||||
];
|
||||
// dfmt on
|
||||
void[0][size_t] seenIPs;
|
||||
size_t ip = 0;
|
||||
while (ip !in seenIPs && ip < program.length)
|
||||
{
|
||||
seenIPs[ip] = [];
|
||||
operations[program[ip][0]](ip, program[ip][1]);
|
||||
}
|
||||
return tuple(accumulator, ip == program.length);
|
||||
}
|
||||
|
||||
auto fixProgramAndReturnAcc(Program program)
|
||||
{
|
||||
return program.enumerate
|
||||
.map!((indexedInstruction) {
|
||||
if (indexedInstruction.value[0] == "acc")
|
||||
return tuple(0, false);
|
||||
else if (indexedInstruction.value[0] == "nop")
|
||||
indexedInstruction.value[0] = "jmp";
|
||||
else
|
||||
indexedInstruction.value[0] = "nop";
|
||||
|
||||
return (program[0 .. indexedInstruction.index]
|
||||
~ [indexedInstruction.value] ~ program[indexedInstruction.index + 1 .. $])
|
||||
.executeProgramAndReturnAcc;
|
||||
})
|
||||
.find!(result => result[1])
|
||||
.front;
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
auto program = `nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6`.splitter("\n").filter!(not!empty)
|
||||
.map!((line) {
|
||||
auto opAndArg = line.split(" ");
|
||||
return tuple(opAndArg[0], opAndArg[1].to!int);
|
||||
})
|
||||
.array;
|
||||
|
||||
assert(program.executeProgramAndReturnAcc == tuple(5, false));
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
auto program = `nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6`.splitter("\n").filter!(not!empty)
|
||||
.map!((line) {
|
||||
auto opAndArg = line.split(" ");
|
||||
return tuple(opAndArg[0], opAndArg[1].to!int);
|
||||
})
|
||||
.array;
|
||||
|
||||
assert(program.fixProgramAndReturnAcc == tuple(8, true));
|
||||
}
|
Loading…
Reference in a new issue