#!/usr/bin/env python https://adventofcode.com/2025/day/3 f = open("day03input.txt", "r") #f = open("testinput.txt", "r") d = [l.strip() for l in f.readlines()] def part1(data: list[str]) -> int: if isinstance(data, str): data = [data] total = 0 for l in data: # print(f"l ist {l}") # get index of highest digit (tens) tens_index = 0 # print("tens_index\tl[i]") # print(f"{tens_index}\t{l[0]}") for i in range(1, len(l) - 1): if int(l[i]) > int(l[tens_index]): tens_index = i # print(f"{tens_index}\t{l[i]}") # get index of highest digits after the tens (ones) ones_index = tens_index + 1 # print("ones_index\tl[i]") # print(f"{ones_index}\t{l[0]}") for i in range(tens_index + 1, len(l)): if int(l[i]) > int(l[ones_index]): ones_index = i # print(f"{ones_index}\t{l[i]}") # print(f"{l}\t{int(l[tens_index]) * 10 + int(l[ones_index])}") total += int(l[tens_index]) * 10 + int(l[ones_index]) return total def part2(data: list[str], banks: int = 2) -> int: if isinstance(data, str): data = [data] total = 0 # loop over data lines for l in data: # print(f"l ist {l}") # loop over number of banks for bank in range(banks): # calculate new index if bank == 0: indices = [0] else: indices.append(indices[bank - 1] + 1) # print(f"bank is {bank} and indices are {indices}") # exit loop if only one digit is viable anymore # (technically I'm not exiting but skipping ahead) if indices[bank] == bank + len(l) - banks: continue # loop over data line # print("i\tl[i]") # print(f"{indices[bank]}\t{l[indices[bank]]}") # print(f"using range({indices[bank]+1}, {len(l)-banks+bank+1})") for i in range(indices[bank] + 1, len(l) - banks + bank + 1): # print(f"{i}\t{l[i]}") if int(l[i]) > int(l[indices[bank]]): indices[bank] = i # for i in range(banks): # print("i\tbanks-i-1\t10^(b-i-1)\tindices[i]\tl[indices[i]]") # print(f"{i}\t{banks-i-1}\t{10**(banks-i-1)}\t{indices[i]}\t{l[indices[i]]}") psum = sum([int(l[indices[i]]) * 10 ** (banks - i - 1) for i in range(banks)]) # print(psum) total += psum return total print(part1(d)) # equal to print(part2(d, 2)) print(part2(d, 12))