diff options
author | Thomas Voss <thomasvoss@live.com> | 2021-12-06 23:27:58 +0100 |
---|---|---|
committer | Thomas Voss <thomasvoss@live.com> | 2021-12-06 23:27:58 +0100 |
commit | e984cdcd76fd861b8ec633f15f0f4255394c22d1 (patch) | |
tree | f10ea845253d7dd4aa7af48c2643f891e474085e /2017/06/puzzles.py | |
parent | ac0ae55b0c2cec33a18b9a4e1ebe3558f3467b57 (diff) |
Add day 6 solutions
Diffstat (limited to '2017/06/puzzles.py')
-rw-r--r-- | 2017/06/puzzles.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/2017/06/puzzles.py b/2017/06/puzzles.py new file mode 100644 index 0000000..0130cf8 --- /dev/null +++ b/2017/06/puzzles.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 + +from collections import defaultdict +# START PART 2 +from itertools import count +# END PART 2 +from typing import DefaultDict, Literal + + +def main() -> None: + with open("input", "r", encoding="utf-8") as f: + banks = tuple(map(int, f.read().split())) + + # START PART 1 + memory: DefaultDict[tuple[int, ...], Literal[0]] = defaultdict(int) + # END PART 1 START PART 2 + inc = count(start=0, step=1) + memory: DefaultDict[tuple[int, ...], int] = defaultdict(lambda: next(inc)) + # END PART 2 + + while banks not in memory: + memory[banks] + i, v = max(enumerate(banks), key=lambda k: (k[1], -k[0])) + + banks = banks[:i] + (0,) + banks[i + 1 :] + for _ in range(v): + i = (i + 1) % 16 + banks = banks[:i] + ((banks[i] + 1),) + banks[i + 1 :] + + # START PART 1 + print(len(memory)) + # END PART 1 START PART 2 + print(len(memory) - memory[banks]) + # END PART 2 + + +if __name__ == "__main__": + main() |