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>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Collections" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="01input.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
@ -28,6 +32,9 @@
|
||||
<None Update="07input.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Update="08input.txt">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -11,6 +11,7 @@
|
||||
Q05.Go();
|
||||
Q06.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