#!/usr/bin/env python3 # https://adventofcode.com/2024/day/9 from collections import deque def get_lines(filename: str) -> list: with open(filename, "r") as file: return [line.strip() for line in file.readlines()] def get_disk(disk_map: str) -> tuple: disk = [] full_blocks = deque() free_blocks = deque() file_id = 0 head_pos = 0 for pos, count_str in enumerate(disk_map): count = int(count_str) if pos % 2 == 0: for i in range(count): disk.append(file_id) full_blocks.append(head_pos) head_pos += 1 file_id += 1 else: for i in range(count): disk.append(None) free_blocks.append(head_pos) head_pos += 1 return disk, free_blocks, full_blocks def print_disk(disk: list) -> None: for pos in disk: if pos is None: print(".", end="") else: print(pos, end="") print() def main(): disk_map = get_lines("sample-input.txt")[0] # disk_map = get_lines("sample-input2.txt")[0] # disk_map = get_lines("input.txt")[0] disk, free_blocks, full_blocks = get_disk(disk_map) print_disk(disk) print(free_blocks) print(full_blocks) if __name__ == '__main__': main()