Day 24
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:
@ -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
255
inputs/24.txt
Normal 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
176
src/24.cs
Normal 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>");
|
||||
}
|
||||
}
|
@ -20,7 +20,7 @@ else
|
||||
Day? day = null;
|
||||
if (string.IsNullOrEmpty(arg))
|
||||
{
|
||||
day = new Day23();
|
||||
day = new Day24();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user