summaryrefslogtreecommitdiff
path: root/2024/day09/solve.py
diff options
context:
space:
mode:
Diffstat (limited to '2024/day09/solve.py')
-rw-r--r--2024/day09/solve.py35
1 files changed, 35 insertions, 0 deletions
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))