I solved this by hand, so there's no code solving it programmatically. Maybe I'll come back later and solve it with code...
This commit is contained in:
2021-12-24 15:19:49 -06:00
parent 39ec926909
commit f29dd5efa0
4 changed files with 435 additions and 1 deletions

View File

@ -87,6 +87,9 @@
<None Update="inputs\23.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="inputs\24.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

255
inputs/24.txt Normal file
View File

@ -0,0 +1,255 @@
inp w
mul x 0
add x z
mod x 26
div z 1
add x 11
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 6
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 13
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 14
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 14
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -8
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 10
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 13
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 9
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 12
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -11
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 8
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -4
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 13
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -15
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 12
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 14
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 6
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 14
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 9
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -1
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 15
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -8
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 4
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -14
eql x w
eql x 0
mul y 0
add y 25
mul y x
add y 1
mul z y
mul y 0
add y w
add y 10
mul y x
add z y
101011000001011100001001101
10001011110100101011011101110101

176
src/24.cs Normal file
View File

@ -0,0 +1,176 @@
using System.Diagnostics;
namespace aoc2021;
internal class Day24 : Day
{
public record struct Instruction(string Opcode, char Op1, string? Op2);
[DebuggerDisplay("Input: {InputStr}, w: {w}, x: {x}, y: {y}, z: {z}")]
public class Machine
{
public string InputStr;
private int InputStrIdx = 0;
public long w = 0;
public long x = 0;
public long y = 0;
public long z = 0;
public Machine(string input)
{
InputStr = input;
}
public void ProcessInstruction(Instruction inst)
{
switch (inst.Opcode)
{
case "inp":
StoreValue(inst.Op1, (long)char.GetNumericValue(InputStr[InputStrIdx]));
InputStrIdx++;
break;
default:
var val = RetrieveValue(inst.Op1);
switch (inst.Opcode)
{
case "add":
val += GetValue(inst.Op2!);
break;
case "mul":
val *= GetValue(inst.Op2!);
break;
case "div":
val /= GetValue(inst.Op2!);
break;
case "mod":
val %= GetValue(inst.Op2!);
break;
case "eql":
var b = GetValue(inst.Op2!);
val = val == b ? 1 : 0;
break;
default:
throw new Exception();
}
StoreValue(inst.Op1, val);
break;
}
}
public long GetValue(string op2)
{
if (long.TryParse(op2, out long iop2))
{
return iop2;
}
return RetrieveValue(op2[0]);
}
public long RetrieveValue(char var) => var switch
{
'w' => w,
'x' => x,
'y' => y,
'z' => z,
_ => throw new Exception(),
};
public void StoreValue(char var, long value)
{
switch (var)
{
case 'w':
w = value;
break;
case 'x':
x = value;
break;
case 'y':
y = value;
break;
case 'z':
z = value;
break;
default:
throw new Exception();
}
}
}
internal override void Go()
{
var lines = Util.ReadAllLines("inputs/24.txt");
List<Instruction> instructions = new();
foreach (var line in lines)
{
if (string.IsNullOrEmpty(line))
{
break;
}
var inst = line.Split(' ', 2);
switch (inst[0])
{
case "inp":
instructions.Add(new Instruction(inst[0], inst[1][0], null));
break;
default:
{
var operands = inst[1].Split(' ');
instructions.Add(new Instruction(inst[0], operands[0][0], operands[1]));
}
break;
}
}
Part1(instructions);
Part2(instructions);
}
private static void Part1(IList<Instruction> instructions)
{
using var t = new Timer();
Machine m = new("99394899891971");
foreach (var inst in instructions)
{
m.ProcessInstruction(inst);
}
if (m.z != 0)
{
throw new Exception();
}
t.Stop();
Logger.Log($"<+black>> part1: <+white>99394899891971<r>");
}
private static void Part2(IList<Instruction> instructions)
{
using var t = new Timer();
Machine m = new("92171126131911");
foreach (var inst in instructions)
{
m.ProcessInstruction(inst);
}
if (m.z != 0)
{
throw new Exception();
}
t.Stop();
Logger.Log($"<+black>> part2: <+white>92171126131911<r>");
}
}

View File

@ -20,7 +20,7 @@ else
Day? day = null;
if (string.IsNullOrEmpty(arg))
{
day = new Day23();
day = new Day24();
}
else
{