From dfb8e09ec976ed33e1e651db236f24768501112f Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sun, 20 Nov 2022 11:50:32 +0100 Subject: [PATCH] d10 --- day10.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ inputs/input10 | 1 + 2 files changed, 61 insertions(+) create mode 100644 day10.py create mode 100644 inputs/input10 diff --git a/day10.py b/day10.py new file mode 100644 index 0000000..a444b48 --- /dev/null +++ b/day10.py @@ -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) diff --git a/inputs/input10 b/inputs/input10 new file mode 100644 index 0000000..177e685 --- /dev/null +++ b/inputs/input10 @@ -0,0 +1 @@ +157,222,1,2,177,254,0,228,159,140,249,187,255,51,76,30