Files
adventofcode/2025/03/part2.py
Kees van Kempen 06d839fe7e 2025(03): make code a bit better
And clean up part 2 of day 2, add testinput for day 1.
2025-12-03 09:03:02 +01:00

50 lines
1.4 KiB
Python

# I did not do anything to prevent the main code from running in part1.
#from part1 import bruteforce_joltage
def joltage_limit_safety_override(battery, jol_len=12):
"""
"""
jol_indices = []
idx_seek_start = 0
for i in range(jol_len):
# Define where to search:
# * after the found numbers
# * but leaving enough numbers for the other seeks
subbattery = battery[idx_seek_start:-(jol_len - i + 0)]
# Find, in order, the highest possible number allowed.
needle = max(subbattery)
idx_needle = subbattery.index(needle)
# Add needle index to list and update starting point
jol_indices.append(idx_needle + idx_seek_start)
idx_seek_start = idx_needle + idx_seek_start + 1
return int("".join([battery[i] for i in jol_indices]))
# Test testinput
with open("testinput", "r") as fp:
batteries = fp.readlines()
for idx_battery, joltage in enumerate([987654321111, 811111111119, 434234234278, 888911112111]):
assert joltage_limit_safety_override(batteries[idx_battery]) == joltage
output_joltage = 0
for battery in batteries:
joltage_battery_max = joltage_limit_safety_override(battery)
output_joltage += joltage_battery_max
assert output_joltage == 3121910778619
# Perform final stuff
with open("input", "r") as fp:
batteries = fp.readlines()
output_joltage = 0
for battery in batteries:
joltage_battery_max = joltage_limit_safety_override(battery)
output_joltage += joltage_battery_max
print(output_joltage)