Select Git revision
P1ParameterType.html
day_9_olle.py NaN GiB
from typing import List
def read_file(filename: str) -> str:
with open(filename) as f:
return f.readline().strip()
def get_id_representation(file: str) -> List[str]:
i = 0
id_rep = []
while i < len(file):
if i % 2 == 0:
id_rep += [str(i//2)]*int(file[i])
else:
id_rep += ['.']*int(file[i])
i += 1
return id_rep
def rearrange(id_rep: str) -> List[str]:
i = 0
j = len(id_rep) - 1
rearranged_rep = []
while i < j:
while id_rep[i].isnumeric() and i < j:
rearranged_rep += [id_rep[i]]
i += 1
while (id_rep[j] == '.') and i < j:
j -= 1
if i == j:
break
else:
rearranged_rep += [id_rep[j]]
i += 1
j -= 1
rearranged_rep += [id_rep[j]]
print(len(id_rep))
print(len(rearranged_rep))
return rearranged_rep + ['.'] * (len(id_rep) - len(rearranged_rep))
def rearrange_whole(file: str) -> List[str]:
file = list(file)
ids = []
i = 0
for i in range(len(file)):
if i % 2 == 0:
ids += [str(i // 2)]
else:
ids += [str('.')]
j = 1
while j <= (len(file) - 1):
if ids[-j] == '.':
j += 1
continue
i = 0
while (i < (len(file) - j) and
(ids[i].isnumeric() or int(file[i]) < int(file[-j]))):
i += 1
if i == (len(file) - j):
j += 1
continue
elif int(file[i]) == int(file[-j]):
ids[i], ids[-j] = ids[-j], ids[i]
file[i], file[-j] = file[-j], file[i]
j += 1
else:
numel_to_keep = int(file[i]) - int(file[-j])
file[i] = file[-j]
file = file[:i+1] + [str(numel_to_keep)] + file[i+1:]
ids[i], ids[-j] = ids[-j], ids[i]
ids = ids[:i+1] + ['.'] + ids[i+1:]
j += 2
rearranged_file = []
for i in range(len(file)):
rearranged_file += [ids[i]]*int(file[i])
return rearranged_file
def compute_checksum(arranged_file: List[str]) -> int:
checksum = 0
i = 0
while arranged_file[i].isnumeric():
checksum += int(arranged_file[i]) * i
i += 1
return checksum
def compute_checksum_whole(arranged_file: List[str]) -> int:
checksum = 0
i = 0
for i in range(len(arranged_file)):
if arranged_file[i].isnumeric():
checksum += int(arranged_file[i]) * i
return checksum
if __name__ == "__main__":
file = read_file('input')
id_rep = get_id_representation(file)
print(compute_checksum(rearrange(id_rep)))
print(compute_checksum_whole(rearrange_whole(file)))