mirror of
https://github.com/bertptrs/adventofcode.git
synced 2025-12-25 21:00:31 +01:00
Implement 2024 day 17 part 2
This commit is contained in:
@@ -3,14 +3,9 @@ import re
|
|||||||
from . import SeparateRunner
|
from . import SeparateRunner
|
||||||
|
|
||||||
|
|
||||||
class DayRunner(SeparateRunner):
|
def run_program(
|
||||||
@classmethod
|
register_a: int, register_b: int, register_c: int, program: list[int]
|
||||||
def part1(cls, input: str) -> str:
|
) -> list[int]:
|
||||||
numbers = re.findall(r"\d+", input)
|
|
||||||
|
|
||||||
register_a, register_b, register_c = map(int, numbers[:3])
|
|
||||||
program = list(map(int, numbers[3:]))
|
|
||||||
|
|
||||||
ip = 0
|
ip = 0
|
||||||
out = []
|
out = []
|
||||||
|
|
||||||
@@ -53,8 +48,42 @@ class DayRunner(SeparateRunner):
|
|||||||
register_c = register_a // 2 ** combo(ip + 1)
|
register_c = register_a // 2 ** combo(ip + 1)
|
||||||
ip += 2
|
ip += 2
|
||||||
|
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
class DayRunner(SeparateRunner):
|
||||||
|
@classmethod
|
||||||
|
def part1(cls, input: str) -> str:
|
||||||
|
numbers = re.findall(r"\d+", input)
|
||||||
|
|
||||||
|
register_a, register_b, register_c = map(int, numbers[:3])
|
||||||
|
program = list(map(int, numbers[3:]))
|
||||||
|
|
||||||
|
out = run_program(register_a, register_b, register_c, program)
|
||||||
|
|
||||||
return ",".join(map(str, out))
|
return ",".join(map(str, out))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def part2(cls, input: str) -> str:
|
def part2(cls, input: str) -> int:
|
||||||
pass
|
numbers = re.findall(r"\d+", input)
|
||||||
|
|
||||||
|
_, register_b, register_c = map(int, numbers[:3])
|
||||||
|
program = list(map(int, numbers[3:]))
|
||||||
|
|
||||||
|
cur = [0]
|
||||||
|
|
||||||
|
# It came to me in a dream
|
||||||
|
for entry in reversed(program):
|
||||||
|
next_gen = []
|
||||||
|
|
||||||
|
for num in cur:
|
||||||
|
num *= 8
|
||||||
|
for n in range(8):
|
||||||
|
output = run_program(num + n, register_b, register_c, program)
|
||||||
|
result = output[0]
|
||||||
|
if result == entry:
|
||||||
|
next_gen.append(num + n)
|
||||||
|
|
||||||
|
cur = next_gen
|
||||||
|
|
||||||
|
return cur[0]
|
||||||
|
|||||||
5
2024/tests/samples/17.2.txt
Normal file
5
2024/tests/samples/17.2.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Register A: 2024
|
||||||
|
Register B: 0
|
||||||
|
Register C: 0
|
||||||
|
|
||||||
|
Program: 0,3,5,4,3,0
|
||||||
@@ -4,4 +4,8 @@ from . import get_data
|
|||||||
|
|
||||||
|
|
||||||
def test_sample_part1() -> None:
|
def test_sample_part1() -> None:
|
||||||
assert DayRunner.part1(get_data(17)) == "4,6,3,5,6,3,5,2,1,0"
|
assert DayRunner.part1(get_data(17, 1)) == "4,6,3,5,6,3,5,2,1,0"
|
||||||
|
|
||||||
|
|
||||||
|
def test_sample_part2() -> None:
|
||||||
|
assert DayRunner.part2(get_data(17, 2)) == 117440
|
||||||
|
|||||||
Reference in New Issue
Block a user