#!/usr/bin/env python3 # -*- coding: utf-8 -*- file = "./input.txt" #file = "./ex2.txt" #file = "./ex1.txt" from time import time start_time = time() def extend_input_to_list(input_str:str) -> list[int]: out = [] free = False idn = 0 for element in input_str: for e in range(int(element)): if free: out.append(-1) else: out.append(idn) if not free: idn += 1 free = not free return out def de_frag(input_list:list[int]) -> list[int]: out = [] i_less_than_j = True for i in range(len(input_list)): if input_list[i] != -1: out.append(input_list[i]) elif not i_less_than_j: break else: for j in range(len(input_list)-1, 0, -1): if j <= i: i_less_than_j = False break elif input_list[j] == -1: continue else: out.append(input_list[j]) input_list[j] = -1 break return out def checksum(input_list:list[int]) -> int: result = 0 for i in range(len(input_list)): result += i * input_list[i] return result if __name__ == "__main__": input_string = "" input_file = open(file, "r") for line in input_file: line = line.strip() if line == "": continue input_string += line input_file.close() #print(extend_input_to_list(input_string)) ex = extend_input_to_list(input_string) #print(de_frag(extend_input_to_list(input_string))) print(len(ex)) de = de_frag(ex) print(len(de)) sol = checksum(de) print(f'Solution: {sol}') print(f'Runtime: {time()-start_time:.2f} s')