parent
dbdaf7ba13
commit
21635ec6b8
2 changed files with 321 additions and 0 deletions
@ -0,0 +1,69 @@ |
|||||||
|
# Code translated from https://github.com/Mahrgell/AoC2021/blob/main/aoc21-24/src/main.rs |
||||||
|
|
||||||
|
|
||||||
|
def readMonad(fileName): |
||||||
|
with open(fileName) as file: |
||||||
|
lines = file.read().splitlines() |
||||||
|
instructions: list[tuple[str, tuple[str, ...]]] = [] |
||||||
|
for line in lines: |
||||||
|
instrValues = tuple(line.split(" ")) |
||||||
|
append = (instrValues[0], instrValues[1:]) |
||||||
|
instructions.append(append) |
||||||
|
return instructions |
||||||
|
|
||||||
|
|
||||||
|
fieldToPos = { |
||||||
|
'x': 0, |
||||||
|
'y': 1, |
||||||
|
'z': 2, |
||||||
|
'w': 3 |
||||||
|
} |
||||||
|
|
||||||
|
calc = { |
||||||
|
'add': lambda a, b: a + b, |
||||||
|
'mul': lambda a, b: a * b, |
||||||
|
'div': lambda a, b: a // b, |
||||||
|
'mod': lambda a, b: a % b, |
||||||
|
'eql': lambda a, b: 1 if a == b else 0 |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
def find(): |
||||||
|
instructions = readMonad("input") |
||||||
|
states: list[tuple[list[int], tuple[int, int]]] = [([0, 0, 0, 0], (0, 0))] |
||||||
|
i = 1 |
||||||
|
for cmd, values in instructions: |
||||||
|
if cmd == "inp": |
||||||
|
newStates = [] |
||||||
|
knownAluIndices = {} |
||||||
|
field = values[0] |
||||||
|
for alu, (minV, maxV) in states: |
||||||
|
for v in range(1, 10): |
||||||
|
newAlu = alu.copy() |
||||||
|
newAlu[fieldToPos[field]] = v |
||||||
|
minV, maxV = minV * 10 + v, maxV * 10 + v |
||||||
|
if index := knownAluIndices.get(tuple(newAlu)): |
||||||
|
alu, (newMin, newMax) = newStates[index] |
||||||
|
newMin = min(newMin, minV) |
||||||
|
newMax = max(newMax, maxV) |
||||||
|
newStates[index] = alu, (newMin, newMax) |
||||||
|
else: |
||||||
|
knownAluIndices[tuple(newAlu)] = len(newStates) |
||||||
|
newStates.append((newAlu, (minV, maxV))) |
||||||
|
states = newStates |
||||||
|
print(f"{i} Processing {len(states)} states") |
||||||
|
i += 1 |
||||||
|
else: |
||||||
|
for alu, _ in states: |
||||||
|
field1, field2 = values |
||||||
|
v2 = int(field2) if field2.lstrip("-").isnumeric() else alu[fieldToPos[field2]] |
||||||
|
pos1 = fieldToPos[field1] |
||||||
|
alu[pos1] = calc[cmd](alu[pos1], v2) |
||||||
|
|
||||||
|
valid = {minmax for alu, minmax in states if alu[3] == 0} |
||||||
|
lowest = min(m for m, _ in valid) |
||||||
|
highest = max(m for _, m in valid) |
||||||
|
print(lowest, highest) |
||||||
|
|
||||||
|
|
||||||
|
find() |
@ -0,0 +1,252 @@ |
|||||||
|
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 16 |
||||||
|
mul y x |
||||||
|
add z y |
||||||
|
inp w |
||||||
|
mul x 0 |
||||||
|
add x z |
||||||
|
mod x 26 |
||||||
|
div z 1 |
||||||
|
add x 12 |
||||||
|
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 11 |
||||||
|
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 12 |
||||||
|
mul y x |
||||||
|
add z y |
||||||
|
inp w |
||||||
|
mul x 0 |
||||||
|
add x z |
||||||
|
mod x 26 |
||||||
|
div z 26 |
||||||
|
add x -5 |
||||||
|
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 -3 |
||||||
|
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 2 |
||||||
|
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 11 |
||||||
|
mul y x |
||||||
|
add z y |
||||||
|
inp w |
||||||
|
mul x 0 |
||||||
|
add x z |
||||||
|
mod x 26 |
||||||
|
div z 26 |
||||||
|
add x -16 |
||||||
|
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 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 12 |
||||||
|
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 9 |
||||||
|
mul y x |
||||||
|
add z y |
||||||
|
inp w |
||||||
|
mul x 0 |
||||||
|
add x z |
||||||
|
mod x 26 |
||||||
|
div z 26 |
||||||
|
add x -7 |
||||||
|
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 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 11 |
||||||
|
mul y x |
||||||
|
add z y |
||||||
|
inp w |
||||||
|
mul x 0 |
||||||
|
add x z |
||||||
|
mod x 26 |
||||||
|
div z 26 |
||||||
|
add x -6 |
||||||
|
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 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 15 |
||||||
|
mul y x |
||||||
|
add z y |
Loading…
Reference in new issue