This commit is contained in:
2020-12-08 08:40:55 -06:00
parent 7c6bd64903
commit ae9782303f
4 changed files with 793 additions and 0 deletions

635
08input.txt Normal file
View 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

View File

@ -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>

View File

@ -11,6 +11,7 @@
Q05.Go(); Q05.Go();
Q06.Go(); Q06.Go();
Q07.Go(); Q07.Go();
Q08.Go();
} }
} }
} }

150
Q08.cs Normal file
View 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}");
}
}
}