This commit is contained in:
Stefan Harmuth 2022-11-20 11:50:32 +01:00
parent cf13c83a63
commit dfb8e09ec9
2 changed files with 61 additions and 0 deletions

60
day10.py Normal file
View File

@ -0,0 +1,60 @@
from tools.aoc import AOCDay
from typing import Any
def cycle(sequence: list, sizes: list, index: int = 0, skip_length: int = 0) -> (list, int, int):
for size in sizes:
for inc in range(size // 2):
l, r = (index + inc) % 256, (index + size - inc - 1) % 256
sequence[l], sequence[r] = sequence[r], sequence[l]
index = (index + size + skip_length) % 256
skip_length += 1
return sequence, index, skip_length
class Day(AOCDay):
inputs = [
[
(62238, "input10")
],
[
("2b0c9cc0449507a0db3babd57ad9e8d8", "input10")
]
]
def part1(self) -> Any:
sizes = self.getInputAsArraySplit(",", int)
sequence, _, _ = cycle(list(range(256)), sizes)
return sequence[0] * sequence[1]
def part2(self) -> Any:
sizes = []
for x in self.getInput().strip():
sizes.append(ord(x))
sizes += [17, 31, 73, 47, 23]
index = 0
skip_length = 0
sequence = list(range(256))
for i in range(64):
sequence, index, skip_length = cycle(sequence, sizes, index, skip_length)
dense = []
for m in range(16):
xor = 0
for i in range(16):
xor ^= sequence[m * 16 + i]
dense.append(xor)
hex_string = ""
for v in dense:
hex_string += ("%x" % v).rjust(2, '0')
return hex_string
if __name__ == '__main__':
day = Day(2017, 10)
day.run(verbose=True)

1
inputs/input10 Normal file
View File

@ -0,0 +1 @@
157,222,1,2,177,254,0,228,159,140,249,187,255,51,76,30