91 lines
2.3 KiB
Python
91 lines
2.3 KiB
Python
#!/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))
|