2024-12-09 16:50:28 -06:00

57 lines
1.3 KiB
Python

import time
start_time = time.time()
with open('puzzle.txt', 'r') as f:
line = f.read()
disk_string = []
block_length = {}
block_initial_index = {}
file = True
file_id = -1
for char in list(line):
if file:
file_id += 1
disk_string += [str(file_id)] * int(char)
block_length[str(file_id)] = int(char)
block_initial_index[str(file_id)] = len(disk_string) - block_length[str(file_id)]
else:
disk_string += ['.'] * int(char)
file = not file
while file_id != 0:
file_id = str(file_id)
range_a_found = False
for index_a, char_a in enumerate(disk_string):
if char_a == '.':
empty_count = 1
while index_a + empty_count < block_initial_index[file_id] and disk_string[index_a + empty_count] == '.':
empty_count += 1
if empty_count >= block_length[file_id] and index_a < block_initial_index[file_id]:
for i in range(block_length[file_id]):
disk_string[index_a + i] = file_id
disk_string[block_initial_index[file_id] + i] = '.'
break
file_id = int(file_id)
file_id -= 1
checksum = 0
for index, char in enumerate(disk_string):
if char != '.':
checksum += int(char) * index
print(checksum)
print(f'Total time: {time.time() - start_time}')