Files
adventofcode/2024/09/part1.py
Kees van Kempen 4a94b3f018 2024(9): solve part 1 and some
Committed on the 8th of January, 2025, so I do not know what I did.
2025-01-08 16:44:57 +01:00

62 lines
1.1 KiB
Python

verbose = False
def load_disk_map(filename: str = "input") -> str:
with open(filename, "r") as fp:
data = fp.read().rstrip("\n")
return data
def disk_map_to_blocks(disk_map: str) -> list:
blocks = []
for i, s in enumerate(disk_map):
# file
if i % 2 == 0:
ID = i // 2
blocks += int(s) * [str(ID)]
# free space
else:
blocks += int(s) * ["."]
return blocks
def move_blocks_ltr_to_empty_space(blocks: list) -> str:
left = 0
right = len(blocks) - 1
while left < right:
if blocks[left] != ".":
left += 1
elif blocks[right] == ".":
right -= 1
else:
tmp = blocks[left]
blocks[left] = blocks[right]
blocks[right] = tmp
if verbose:
print(blocks)
return blocks
def checksum(blocks: str) -> int:
return sum([position * int(ID) for position, ID in enumerate(blocks) if ID != "."])
if __name__ == "__main__":
disk_map = load_disk_map("input")
if verbose:
print("Disk map:")
print(disk_map)
print()
blocks = disk_map_to_blocks(disk_map)
if verbose:
print("Blocks:")
print(blocks)
result = move_blocks_ltr_to_empty_space(blocks)
if verbose:
print()
print("Checksum:")
print(checksum(result))