# I did not do anything to prevent the main code from running in part1. #from part1 import bruteforce_joltage debug=False def joltage_limit_safety_override(battery, jol_len=12): """ """ jol_indices = [] idx_seek_start = 0 for i in range(jol_len): if debug: print(f"Look for number {i}") # Find, in order, the highest possible number allowed. for num in range(10): needle = str(9 - num) if debug: print(f"Try to find number {needle} in:") subbattery = battery[idx_seek_start:-(jol_len - i + 0)] if debug: print(subbattery) if not needle in subbattery: if debug: print("not found") continue idx_needle = subbattery.index(needle) jol_indices.append(idx_needle + idx_seek_start) idx_seek_start = idx_needle + idx_seek_start + 1 if debug: print("found") break if debug: print(jol_indices) print(int("".join([battery[i] for i in jol_indices]))) 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)