aoc2019/day16.py

61 lines
1.8 KiB
Python

from tools.aoc import AOCDay
from typing import Any
class Day(AOCDay):
inputs = [
[
(24176176, "test_input16"),
(73745418, "test_input16_2"),
(52432133, "test_input16_3"),
(59522422, "input16"),
],
[
(84462026, "test_input16_4"),
(None, "input16"),
]
]
def part1(self) -> Any:
base_pattern = [0, 1, 0, -1]
the_number = self.getInput()
for r in range(100):
new_number = 0
for l in range(len(the_number)):
mul_sum = 0
for i, c in enumerate(the_number):
pattern_index = ((i + 1) // (l + 1)) % 4
mul_sum += ((ord(c) - 48) * (2 - pattern_index if pattern_index else 0))
new_number = new_number * 10 + abs(mul_sum) % 10
the_number = "0" * (len(the_number) - len(str(new_number))) + str(new_number)
return int(the_number[:8])
def part2(self) -> Any:
base_pattern = [0, 1, 0, -1]
the_number = 10000 * self.getInput()
for r in range(100):
print("Round", r)
new_number = 0
for l in range(len(the_number)):
mul_sum = 0
for i, c in enumerate(the_number):
pattern_index = ((i + 1) // (l + 1)) % 4
mul_sum += ((ord(c) - 48) * (2 - pattern_index if pattern_index else 0))
new_number = new_number * 10 + abs(mul_sum) % 10
the_number = "0" * (len(the_number) - len(str(new_number))) + str(new_number)
offset = int(the_number[:8])
return int(the_number[offset + 1:offset + 8])
if __name__ == '__main__':
day = Day(2019, 16)
day.run(verbose=True)