Skip to content

Commit 324e76e

Browse files
committed
Implement part 2 naively
1 parent fa15962 commit 324e76e

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

day17/resources/demo2.txt

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Register A: 2024
2+
Register B: 0
3+
Register C: 0
4+
5+
Program: 0,3,5,4,3,0

day17/src/day17.cs

+28-6
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,26 @@
1212
string[] rawChunks = File.ReadAllText(args[0]).Trim().Split("\n\n");
1313
List<int> registers = rawChunks[0].Split("\n").Select(l => int.Parse(l.Split(": ")[1])).ToList();
1414
List<int> program = rawChunks[1].Split(" ")[1].Split(",").Select(int.Parse).ToList();
15+
Machine machine = new Machine(registers, program);
1516

16-
var machine = new Machine { Registers = registers, Program = program };
17-
List<int> output = machine.Run();
17+
{
18+
List<int> output = machine.Copy().Run();
19+
Console.WriteLine($"Part 1: {string.Join(",", output)}");
20+
}
1821

19-
Console.WriteLine($"{machine}");
20-
Console.WriteLine($"Part 1: {string.Join(",", output)}");
22+
for (int i = 0; ; i++)
23+
{
24+
if (i % 10_000_000 == 0) {
25+
Console.WriteLine($" (searching {i}...)");
26+
}
27+
machine.Registers[0] = i;
28+
List<int> output = machine.Copy().Run();
29+
if (output.SequenceEqual(machine.Program))
30+
{
31+
Console.WriteLine($"Part 2: {i}");
32+
break;
33+
}
34+
}
2135

2236
return 0;
2337

@@ -26,6 +40,12 @@ public class Machine
2640
public List<int> Registers;
2741
public List<int> Program;
2842

43+
public Machine(List<int> registers, List<int> program)
44+
{
45+
Registers = registers;
46+
Program = program;
47+
}
48+
2949
public List<int> Run()
3050
{
3151
var outputs = new List<int>();
@@ -35,7 +55,7 @@ public List<int> Run()
3555
int operand = Program[i + 1];
3656
int combo = operand >= 4 && operand < 7 ? Registers[operand - 4] : operand;
3757
bool jumped = false;
38-
Console.WriteLine($"{(new string[] {"adv", "bxl", "bst", "jnz", "bxc", "out", "bdv", "cdv"})[opcode]} {operand}: {string.Join("", Program.Take(i))}\x1B[4m{Program[i]}\x1B[0m{string.Join("", Program.Skip(i + 1))} - {string.Join(",", Registers)}");
58+
// Console.WriteLine($"{(new string[] {"adv", "bxl", "bst", "jnz", "bxc", "out", "bdv", "cdv"})[opcode]} {operand}: {string.Join("", Program.Take(i))}\x1B[4m{Program[i]}\x1B[0m{string.Join("", Program.Skip(i + 1))} - {string.Join(",", Registers)}");
3959
switch (opcode)
4060
{
4161
case 0: // adv (A divide)
@@ -75,5 +95,7 @@ public List<int> Run()
7595
return outputs;
7696
}
7797

78-
public override string ToString() => $"Program: {string.Join(",", Program)}, Registers: {string.Join(",", Registers)}";
98+
public Machine Copy() => new Machine(Registers.ToList(), Program.ToList());
99+
100+
public override string ToString() => $"Registers: {string.Join(",", Registers)}, Program: {string.Join(",", Program)}";
79101
}

0 commit comments

Comments
 (0)