Day 8
This commit is contained in:
635
08input.txt
Normal file
635
08input.txt
Normal file
@ -0,0 +1,635 @@
|
|||||||
|
acc +13
|
||||||
|
jmp +412
|
||||||
|
nop +137
|
||||||
|
nop +144
|
||||||
|
acc +33
|
||||||
|
acc -11
|
||||||
|
jmp +445
|
||||||
|
nop +327
|
||||||
|
acc -10
|
||||||
|
jmp +1
|
||||||
|
jmp +578
|
||||||
|
jmp +1
|
||||||
|
jmp +415
|
||||||
|
acc +25
|
||||||
|
acc +21
|
||||||
|
jmp +58
|
||||||
|
jmp +180
|
||||||
|
jmp +96
|
||||||
|
nop +190
|
||||||
|
acc +20
|
||||||
|
jmp +167
|
||||||
|
jmp +194
|
||||||
|
acc +24
|
||||||
|
acc +9
|
||||||
|
acc +14
|
||||||
|
jmp +1
|
||||||
|
jmp +443
|
||||||
|
jmp +1
|
||||||
|
acc +18
|
||||||
|
jmp +465
|
||||||
|
jmp +245
|
||||||
|
jmp +219
|
||||||
|
nop +280
|
||||||
|
acc +13
|
||||||
|
acc +23
|
||||||
|
jmp +133
|
||||||
|
jmp +300
|
||||||
|
acc +35
|
||||||
|
acc +50
|
||||||
|
acc +24
|
||||||
|
acc +32
|
||||||
|
jmp +458
|
||||||
|
acc +36
|
||||||
|
acc +14
|
||||||
|
jmp +103
|
||||||
|
nop +262
|
||||||
|
jmp +233
|
||||||
|
acc +14
|
||||||
|
nop +313
|
||||||
|
jmp +30
|
||||||
|
acc +7
|
||||||
|
jmp +324
|
||||||
|
acc +12
|
||||||
|
jmp +1
|
||||||
|
acc +12
|
||||||
|
jmp +326
|
||||||
|
acc +14
|
||||||
|
nop +151
|
||||||
|
acc +2
|
||||||
|
jmp -14
|
||||||
|
jmp +1
|
||||||
|
nop +18
|
||||||
|
jmp +288
|
||||||
|
acc +24
|
||||||
|
acc +7
|
||||||
|
acc +0
|
||||||
|
jmp +268
|
||||||
|
jmp +267
|
||||||
|
acc +3
|
||||||
|
acc +4
|
||||||
|
acc +35
|
||||||
|
jmp +25
|
||||||
|
jmp -16
|
||||||
|
acc +14
|
||||||
|
acc +38
|
||||||
|
acc +41
|
||||||
|
jmp +3
|
||||||
|
acc -16
|
||||||
|
jmp +546
|
||||||
|
acc +42
|
||||||
|
acc -6
|
||||||
|
acc +38
|
||||||
|
acc +18
|
||||||
|
jmp +391
|
||||||
|
acc +45
|
||||||
|
jmp +464
|
||||||
|
jmp +144
|
||||||
|
acc +33
|
||||||
|
acc -18
|
||||||
|
acc +36
|
||||||
|
jmp +313
|
||||||
|
jmp +286
|
||||||
|
acc +34
|
||||||
|
nop -72
|
||||||
|
acc -17
|
||||||
|
jmp +430
|
||||||
|
acc +35
|
||||||
|
acc -18
|
||||||
|
acc -1
|
||||||
|
jmp +75
|
||||||
|
acc +48
|
||||||
|
acc -2
|
||||||
|
jmp -76
|
||||||
|
acc -13
|
||||||
|
nop +453
|
||||||
|
acc +0
|
||||||
|
nop +48
|
||||||
|
jmp +40
|
||||||
|
acc +40
|
||||||
|
acc -5
|
||||||
|
acc +14
|
||||||
|
acc +1
|
||||||
|
jmp +323
|
||||||
|
acc +16
|
||||||
|
acc +17
|
||||||
|
nop +408
|
||||||
|
acc +22
|
||||||
|
jmp +126
|
||||||
|
acc +2
|
||||||
|
jmp +404
|
||||||
|
acc +22
|
||||||
|
nop +373
|
||||||
|
acc -15
|
||||||
|
jmp +134
|
||||||
|
nop +242
|
||||||
|
jmp +1
|
||||||
|
acc +19
|
||||||
|
jmp +372
|
||||||
|
acc +18
|
||||||
|
acc +33
|
||||||
|
acc +31
|
||||||
|
acc -12
|
||||||
|
jmp +417
|
||||||
|
acc +27
|
||||||
|
acc -4
|
||||||
|
jmp +84
|
||||||
|
nop -86
|
||||||
|
jmp -87
|
||||||
|
jmp +174
|
||||||
|
acc -19
|
||||||
|
acc +17
|
||||||
|
nop +353
|
||||||
|
jmp +301
|
||||||
|
acc +14
|
||||||
|
acc -16
|
||||||
|
acc +2
|
||||||
|
jmp -109
|
||||||
|
acc +24
|
||||||
|
jmp +366
|
||||||
|
acc -8
|
||||||
|
acc -14
|
||||||
|
acc +20
|
||||||
|
acc +38
|
||||||
|
jmp -62
|
||||||
|
acc +4
|
||||||
|
jmp +1
|
||||||
|
nop +423
|
||||||
|
jmp +33
|
||||||
|
acc -19
|
||||||
|
acc +50
|
||||||
|
jmp -128
|
||||||
|
acc +10
|
||||||
|
acc +2
|
||||||
|
jmp +371
|
||||||
|
acc +31
|
||||||
|
acc +12
|
||||||
|
acc +12
|
||||||
|
jmp +337
|
||||||
|
acc +42
|
||||||
|
acc -19
|
||||||
|
jmp +64
|
||||||
|
jmp +1
|
||||||
|
nop -52
|
||||||
|
jmp -19
|
||||||
|
acc +34
|
||||||
|
jmp +287
|
||||||
|
acc -6
|
||||||
|
jmp +130
|
||||||
|
acc +22
|
||||||
|
acc +22
|
||||||
|
acc +46
|
||||||
|
acc -18
|
||||||
|
jmp +190
|
||||||
|
acc +13
|
||||||
|
acc -18
|
||||||
|
acc +26
|
||||||
|
jmp +283
|
||||||
|
acc +15
|
||||||
|
jmp +193
|
||||||
|
jmp -168
|
||||||
|
nop +165
|
||||||
|
acc -3
|
||||||
|
acc +26
|
||||||
|
jmp -54
|
||||||
|
acc -4
|
||||||
|
jmp -174
|
||||||
|
jmp +96
|
||||||
|
acc +44
|
||||||
|
acc -18
|
||||||
|
acc +8
|
||||||
|
acc +23
|
||||||
|
jmp -164
|
||||||
|
acc -11
|
||||||
|
acc -13
|
||||||
|
acc +30
|
||||||
|
jmp +114
|
||||||
|
acc -9
|
||||||
|
jmp +386
|
||||||
|
acc -15
|
||||||
|
jmp +98
|
||||||
|
nop -74
|
||||||
|
acc +31
|
||||||
|
acc -4
|
||||||
|
acc +15
|
||||||
|
jmp +113
|
||||||
|
acc -3
|
||||||
|
acc +36
|
||||||
|
jmp +362
|
||||||
|
jmp +225
|
||||||
|
jmp +131
|
||||||
|
acc +14
|
||||||
|
acc +48
|
||||||
|
acc -16
|
||||||
|
nop +302
|
||||||
|
jmp +383
|
||||||
|
acc -14
|
||||||
|
jmp +97
|
||||||
|
acc +5
|
||||||
|
acc -6
|
||||||
|
jmp -4
|
||||||
|
acc +27
|
||||||
|
jmp +165
|
||||||
|
acc +49
|
||||||
|
jmp +36
|
||||||
|
nop -213
|
||||||
|
acc +30
|
||||||
|
acc +18
|
||||||
|
jmp +1
|
||||||
|
jmp +54
|
||||||
|
nop +73
|
||||||
|
nop +185
|
||||||
|
acc -4
|
||||||
|
jmp -156
|
||||||
|
acc +17
|
||||||
|
jmp +1
|
||||||
|
acc +30
|
||||||
|
jmp +357
|
||||||
|
nop +60
|
||||||
|
jmp +1
|
||||||
|
jmp -186
|
||||||
|
acc -17
|
||||||
|
acc +26
|
||||||
|
acc +45
|
||||||
|
jmp +74
|
||||||
|
acc +27
|
||||||
|
acc +1
|
||||||
|
jmp -109
|
||||||
|
acc +49
|
||||||
|
acc +4
|
||||||
|
jmp +298
|
||||||
|
acc +12
|
||||||
|
jmp -42
|
||||||
|
acc -16
|
||||||
|
jmp -195
|
||||||
|
acc +19
|
||||||
|
acc -13
|
||||||
|
acc +31
|
||||||
|
acc +31
|
||||||
|
jmp +201
|
||||||
|
jmp +274
|
||||||
|
jmp +1
|
||||||
|
acc +27
|
||||||
|
acc +41
|
||||||
|
acc +35
|
||||||
|
jmp +9
|
||||||
|
nop +32
|
||||||
|
jmp -190
|
||||||
|
acc +2
|
||||||
|
jmp +1
|
||||||
|
jmp +172
|
||||||
|
acc +10
|
||||||
|
acc -13
|
||||||
|
jmp -95
|
||||||
|
acc -10
|
||||||
|
acc -12
|
||||||
|
acc -4
|
||||||
|
jmp +290
|
||||||
|
nop -91
|
||||||
|
nop +288
|
||||||
|
acc +45
|
||||||
|
acc +40
|
||||||
|
jmp +322
|
||||||
|
acc +9
|
||||||
|
jmp +314
|
||||||
|
acc -10
|
||||||
|
acc +3
|
||||||
|
nop -62
|
||||||
|
acc +46
|
||||||
|
jmp +186
|
||||||
|
acc +14
|
||||||
|
acc +40
|
||||||
|
acc +49
|
||||||
|
acc +29
|
||||||
|
jmp -175
|
||||||
|
acc +37
|
||||||
|
acc -8
|
||||||
|
jmp +254
|
||||||
|
jmp +48
|
||||||
|
acc +30
|
||||||
|
acc +40
|
||||||
|
jmp +1
|
||||||
|
jmp -172
|
||||||
|
acc -9
|
||||||
|
acc +42
|
||||||
|
nop -269
|
||||||
|
jmp -154
|
||||||
|
nop +109
|
||||||
|
acc +0
|
||||||
|
jmp -68
|
||||||
|
acc +40
|
||||||
|
jmp +310
|
||||||
|
acc +4
|
||||||
|
jmp +266
|
||||||
|
jmp +80
|
||||||
|
acc +15
|
||||||
|
acc -14
|
||||||
|
jmp -206
|
||||||
|
acc +17
|
||||||
|
jmp +156
|
||||||
|
acc -19
|
||||||
|
acc +25
|
||||||
|
nop +82
|
||||||
|
acc +13
|
||||||
|
jmp +243
|
||||||
|
jmp +259
|
||||||
|
jmp +258
|
||||||
|
acc +29
|
||||||
|
acc +9
|
||||||
|
jmp -76
|
||||||
|
acc +5
|
||||||
|
acc +41
|
||||||
|
acc +49
|
||||||
|
acc +17
|
||||||
|
jmp +161
|
||||||
|
acc +29
|
||||||
|
nop +215
|
||||||
|
jmp +179
|
||||||
|
acc +45
|
||||||
|
acc +23
|
||||||
|
jmp +208
|
||||||
|
acc +3
|
||||||
|
acc +30
|
||||||
|
jmp +38
|
||||||
|
nop +204
|
||||||
|
jmp -62
|
||||||
|
jmp +1
|
||||||
|
acc +10
|
||||||
|
jmp +78
|
||||||
|
acc +32
|
||||||
|
acc +29
|
||||||
|
jmp -269
|
||||||
|
acc +20
|
||||||
|
acc +24
|
||||||
|
jmp +1
|
||||||
|
jmp -114
|
||||||
|
jmp +160
|
||||||
|
acc -19
|
||||||
|
jmp +137
|
||||||
|
nop -312
|
||||||
|
acc +8
|
||||||
|
acc +3
|
||||||
|
jmp -181
|
||||||
|
jmp +122
|
||||||
|
acc +9
|
||||||
|
jmp -166
|
||||||
|
jmp -106
|
||||||
|
jmp +98
|
||||||
|
jmp -152
|
||||||
|
acc -7
|
||||||
|
acc +19
|
||||||
|
jmp +180
|
||||||
|
jmp +195
|
||||||
|
acc -17
|
||||||
|
acc +19
|
||||||
|
acc +8
|
||||||
|
acc +21
|
||||||
|
jmp +193
|
||||||
|
jmp +226
|
||||||
|
acc +5
|
||||||
|
jmp +14
|
||||||
|
jmp +228
|
||||||
|
acc +44
|
||||||
|
nop +112
|
||||||
|
acc +0
|
||||||
|
acc +12
|
||||||
|
jmp +223
|
||||||
|
acc +21
|
||||||
|
nop +87
|
||||||
|
acc +32
|
||||||
|
acc +42
|
||||||
|
jmp -264
|
||||||
|
acc +31
|
||||||
|
jmp +49
|
||||||
|
acc -3
|
||||||
|
acc +16
|
||||||
|
nop -277
|
||||||
|
acc +45
|
||||||
|
jmp +50
|
||||||
|
acc +0
|
||||||
|
acc +7
|
||||||
|
nop -223
|
||||||
|
acc +11
|
||||||
|
jmp +113
|
||||||
|
acc +32
|
||||||
|
acc +20
|
||||||
|
jmp +108
|
||||||
|
acc -7
|
||||||
|
acc +30
|
||||||
|
jmp +66
|
||||||
|
acc -12
|
||||||
|
acc +34
|
||||||
|
acc -9
|
||||||
|
acc +39
|
||||||
|
jmp +126
|
||||||
|
jmp -351
|
||||||
|
jmp -89
|
||||||
|
jmp -45
|
||||||
|
acc +4
|
||||||
|
acc +7
|
||||||
|
acc -1
|
||||||
|
acc +41
|
||||||
|
jmp -229
|
||||||
|
acc -9
|
||||||
|
acc +29
|
||||||
|
jmp -115
|
||||||
|
acc +27
|
||||||
|
acc -11
|
||||||
|
jmp +187
|
||||||
|
acc -10
|
||||||
|
acc +11
|
||||||
|
acc +29
|
||||||
|
acc +46
|
||||||
|
jmp -115
|
||||||
|
nop -116
|
||||||
|
acc +31
|
||||||
|
jmp -202
|
||||||
|
acc +12
|
||||||
|
jmp +1
|
||||||
|
acc +16
|
||||||
|
acc +15
|
||||||
|
jmp -25
|
||||||
|
acc -7
|
||||||
|
jmp -439
|
||||||
|
acc +10
|
||||||
|
acc +26
|
||||||
|
acc +13
|
||||||
|
jmp -75
|
||||||
|
nop -214
|
||||||
|
acc +2
|
||||||
|
nop -202
|
||||||
|
jmp +105
|
||||||
|
jmp -65
|
||||||
|
acc -15
|
||||||
|
acc +6
|
||||||
|
jmp +1
|
||||||
|
jmp -182
|
||||||
|
acc +13
|
||||||
|
acc -19
|
||||||
|
jmp +26
|
||||||
|
acc +20
|
||||||
|
acc -16
|
||||||
|
acc +14
|
||||||
|
jmp -59
|
||||||
|
jmp -204
|
||||||
|
acc +27
|
||||||
|
acc +44
|
||||||
|
nop -33
|
||||||
|
acc +36
|
||||||
|
jmp -300
|
||||||
|
acc +48
|
||||||
|
acc +28
|
||||||
|
acc +29
|
||||||
|
acc +39
|
||||||
|
jmp -249
|
||||||
|
acc +33
|
||||||
|
acc +31
|
||||||
|
jmp +1
|
||||||
|
acc +33
|
||||||
|
jmp -269
|
||||||
|
acc +8
|
||||||
|
acc +31
|
||||||
|
acc +10
|
||||||
|
acc +5
|
||||||
|
jmp -194
|
||||||
|
jmp -477
|
||||||
|
nop -196
|
||||||
|
acc +50
|
||||||
|
acc -13
|
||||||
|
jmp -47
|
||||||
|
nop +77
|
||||||
|
acc +45
|
||||||
|
jmp -293
|
||||||
|
acc +39
|
||||||
|
jmp -19
|
||||||
|
nop -391
|
||||||
|
acc +28
|
||||||
|
acc +50
|
||||||
|
acc +16
|
||||||
|
jmp -209
|
||||||
|
acc -1
|
||||||
|
acc +39
|
||||||
|
acc -17
|
||||||
|
nop -233
|
||||||
|
jmp -283
|
||||||
|
acc +19
|
||||||
|
acc +0
|
||||||
|
acc +22
|
||||||
|
acc +22
|
||||||
|
jmp -488
|
||||||
|
acc +39
|
||||||
|
nop -286
|
||||||
|
acc +33
|
||||||
|
jmp -23
|
||||||
|
jmp -173
|
||||||
|
jmp -274
|
||||||
|
acc +5
|
||||||
|
acc +45
|
||||||
|
acc +0
|
||||||
|
acc -14
|
||||||
|
jmp -342
|
||||||
|
acc +16
|
||||||
|
acc +28
|
||||||
|
nop -155
|
||||||
|
jmp -488
|
||||||
|
acc +12
|
||||||
|
acc +28
|
||||||
|
nop -181
|
||||||
|
acc +17
|
||||||
|
jmp -447
|
||||||
|
acc +40
|
||||||
|
acc +40
|
||||||
|
acc +13
|
||||||
|
jmp -38
|
||||||
|
acc -12
|
||||||
|
nop -494
|
||||||
|
acc +43
|
||||||
|
jmp -533
|
||||||
|
acc +30
|
||||||
|
jmp -518
|
||||||
|
acc +39
|
||||||
|
acc +4
|
||||||
|
nop -179
|
||||||
|
jmp -127
|
||||||
|
acc +31
|
||||||
|
acc +42
|
||||||
|
acc +17
|
||||||
|
jmp -82
|
||||||
|
nop -520
|
||||||
|
jmp -521
|
||||||
|
jmp -193
|
||||||
|
acc -8
|
||||||
|
jmp -142
|
||||||
|
jmp +1
|
||||||
|
acc +39
|
||||||
|
jmp -532
|
||||||
|
acc +30
|
||||||
|
acc +3
|
||||||
|
acc +22
|
||||||
|
nop -84
|
||||||
|
jmp +2
|
||||||
|
jmp -402
|
||||||
|
jmp -468
|
||||||
|
acc +0
|
||||||
|
acc -4
|
||||||
|
acc -19
|
||||||
|
jmp -379
|
||||||
|
jmp -357
|
||||||
|
acc +0
|
||||||
|
jmp -159
|
||||||
|
acc +13
|
||||||
|
acc +24
|
||||||
|
acc -3
|
||||||
|
acc +0
|
||||||
|
jmp -387
|
||||||
|
acc +31
|
||||||
|
acc +20
|
||||||
|
acc +27
|
||||||
|
jmp -308
|
||||||
|
jmp -161
|
||||||
|
acc -6
|
||||||
|
nop -163
|
||||||
|
acc -3
|
||||||
|
jmp -585
|
||||||
|
nop -586
|
||||||
|
nop -6
|
||||||
|
acc +10
|
||||||
|
acc +42
|
||||||
|
jmp -590
|
||||||
|
acc +0
|
||||||
|
acc +34
|
||||||
|
acc +16
|
||||||
|
acc +9
|
||||||
|
jmp -175
|
||||||
|
acc +29
|
||||||
|
jmp -217
|
||||||
|
acc +0
|
||||||
|
jmp -234
|
||||||
|
jmp -47
|
||||||
|
acc +28
|
||||||
|
acc +0
|
||||||
|
acc +25
|
||||||
|
acc -5
|
||||||
|
jmp -556
|
||||||
|
nop -144
|
||||||
|
jmp +1
|
||||||
|
acc +27
|
||||||
|
jmp -117
|
||||||
|
jmp -10
|
||||||
|
acc +24
|
||||||
|
acc -17
|
||||||
|
acc +9
|
||||||
|
acc +18
|
||||||
|
jmp -310
|
||||||
|
jmp -455
|
||||||
|
nop -437
|
||||||
|
jmp -593
|
||||||
|
acc +15
|
||||||
|
acc +50
|
||||||
|
acc -3
|
||||||
|
jmp -50
|
||||||
|
acc -13
|
||||||
|
acc +14
|
||||||
|
acc +34
|
||||||
|
acc -16
|
||||||
|
jmp +1
|
@ -6,6 +6,10 @@
|
|||||||
<RootNamespace>_2020</RootNamespace>
|
<RootNamespace>_2020</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.Collections" Version="4.3.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="01input.txt">
|
<None Update="01input.txt">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
@ -28,6 +32,9 @@
|
|||||||
<None Update="07input.txt">
|
<None Update="07input.txt">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Update="08input.txt">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
Q05.Go();
|
Q05.Go();
|
||||||
Q06.Go();
|
Q06.Go();
|
||||||
Q07.Go();
|
Q07.Go();
|
||||||
|
Q08.Go();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
150
Q08.cs
Normal file
150
Q08.cs
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace _2020
|
||||||
|
{
|
||||||
|
class Q08
|
||||||
|
{
|
||||||
|
static List<Tuple<string, int>> instructions = new List<Tuple<string, int>>();
|
||||||
|
|
||||||
|
public static void Go()
|
||||||
|
{
|
||||||
|
MakeList();
|
||||||
|
Part1();
|
||||||
|
Part2();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MakeList()
|
||||||
|
{
|
||||||
|
foreach (var line in File.ReadAllLines("08input.txt"))
|
||||||
|
{
|
||||||
|
var parts = line.Split(' ');
|
||||||
|
if (parts.Count() != 2)
|
||||||
|
{
|
||||||
|
throw new Exception("malformed input");
|
||||||
|
}
|
||||||
|
|
||||||
|
instructions.Add(new Tuple<string, int>(parts[0], Convert.ToInt32(parts[1])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ProcessInstruction(List<Tuple<string, int>> inst, ref int i, ref int accum)
|
||||||
|
{
|
||||||
|
switch (inst[i].Item1)
|
||||||
|
{
|
||||||
|
case "acc":
|
||||||
|
accum += inst[i].Item2;
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "jmp":
|
||||||
|
i += inst[i].Item2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "nop":
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Tuple<int, bool> RunProgram(List<Tuple<string, int>> program)
|
||||||
|
{
|
||||||
|
var accum = 0;
|
||||||
|
var executed = new Dictionary<int, int>();
|
||||||
|
for (var i = 0; ;)
|
||||||
|
{
|
||||||
|
if (program.Count <= i)
|
||||||
|
{
|
||||||
|
return new Tuple<int, bool>(accum, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (executed.ContainsKey(i))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
executed.Add(i, 1);
|
||||||
|
|
||||||
|
ProcessInstruction(program, ref i, ref accum);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Tuple<int, bool>(accum, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Part1()
|
||||||
|
{
|
||||||
|
var result = RunProgram(instructions);
|
||||||
|
if (result.Item2)
|
||||||
|
{
|
||||||
|
throw new Exception("Exited normally - shouldn't have");
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.WriteLine($"Q08Part1: accum value={result.Item1}");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Part2()
|
||||||
|
{
|
||||||
|
// should probably have used RunProgram here, but ended up replacing the first-encountered instruction instead of
|
||||||
|
// moving through the program and changing the first unchanged instruction i came across. this seemed possibly
|
||||||
|
// more efficient? i don't know.
|
||||||
|
|
||||||
|
bool bExited = false;
|
||||||
|
var instructionToChange = "jmp";
|
||||||
|
var instructionToReplace = "nop";
|
||||||
|
var replacedInstructions = new List<int>();
|
||||||
|
var accum = 0;
|
||||||
|
while (!bExited)
|
||||||
|
{
|
||||||
|
accum = 0;
|
||||||
|
var copy = new List<Tuple<string, int>>(instructions);
|
||||||
|
var executed = new Dictionary<int, int>();
|
||||||
|
bool bChanged = false;
|
||||||
|
for (var i = 0; ;)
|
||||||
|
{
|
||||||
|
if (copy.Count <= i)
|
||||||
|
{
|
||||||
|
bExited = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (executed.ContainsKey(i))
|
||||||
|
{
|
||||||
|
if (!bChanged)
|
||||||
|
{
|
||||||
|
// this whole section is hacky
|
||||||
|
if (instructionToChange != "jmp")
|
||||||
|
{
|
||||||
|
throw new Exception("nothing worked");
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.WriteLine($"changing {instructionToChange} to {instructionToReplace} didn't work - flipping");
|
||||||
|
var tmp = instructionToChange;
|
||||||
|
instructionToChange = instructionToReplace;
|
||||||
|
instructionToReplace = tmp;
|
||||||
|
|
||||||
|
replacedInstructions = new List<int>();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
executed.Add(i, 1);
|
||||||
|
|
||||||
|
if (copy[i].Item1 == instructionToChange && !bChanged && !replacedInstructions.Contains(i))
|
||||||
|
{
|
||||||
|
replacedInstructions.Add(i);
|
||||||
|
bChanged = true;
|
||||||
|
copy[i] = new Tuple<string, int>(instructionToReplace, copy[i].Item2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessInstruction(copy, ref i, ref accum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.WriteLine($"Q08Part2: accum value={accum}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user