From 3b1b3fe99e6953b53a44c070d227ad36341e71c4 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Wed, 11 Dec 2024 10:20:30 +0100 Subject: 2024 day9-10 --- 2024/day09/solve.py | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 2024/day09/solve.py (limited to '2024/day09/solve.py') diff --git a/2024/day09/solve.py b/2024/day09/solve.py new file mode 100644 index 0000000..1b0f759 --- /dev/null +++ b/2024/day09/solve.py @@ -0,0 +1,35 @@ +with open("input") as f: + data = f.read() + +blocks = [] +for idx, count in enumerate(data): + block_char = "." if idx % 2 == 1 else str(idx // 2) + for ii in range(int(count)): + blocks.append(block_char) + +empty_seek_idx = 0 +last_non_empty_idx = len(blocks) - 1 +while empty_seek_idx < last_non_empty_idx: + if not blocks[empty_seek_idx] == ".": + empty_seek_idx += 1 + continue + + if blocks[last_non_empty_idx] == ".": + last_non_empty_idx -= 1 + continue + + blocks[empty_seek_idx], blocks[last_non_empty_idx] = blocks[last_non_empty_idx], blocks[empty_seek_idx] + + +def calculate_checksum(blocks: list[str]): + checksum = 0 + for index, elem in enumerate(blocks): + if elem == ".": + break + + checksum += index * int(elem) + + return checksum + + +print(calculate_checksum(blocks)) -- cgit v1.2.3-70-g09d2