import re class ExitFors(Exception): pass def get_battery(bank, max_jolt=9): for max in range(max_jolt,0,-1): for candidate in range(0, len(bank)): if int(bank[candidate]) == max: return candidate def get_joltage(bank): joltage = [" "] * len(bank) # Get first battery jolt_1 = get_battery(bank) # Second battery is after the first, unless it was the last battery if jolt_1 == len(bank) -1: # Get battery from bank ...upto/before jolt_1 jolt_2 = get_battery(bank[:jolt_1]) else: # Get battery from bank ...after jolt_1 jolt_2 = get_battery(bank[jolt_1+1:]) + jolt_1 + 1 joltage[jolt_1] = bank[jolt_1] joltage[jolt_2] = bank[jolt_2] joltage_str = "".join(joltage) joltage_str = re.sub(" ", "", joltage_str) return int(joltage_str) def read_input(filename): banks = [] for bank in open(filename).read().splitlines(): banks.append(bank) return banks # filename = "day03/example_input" # 357 filename = "day03/input" # 17092 banks = read_input(filename) total_joltage = 0 for bank in banks: total_joltage += get_joltage(bank) print(f"Total joltage: {total_joltage}")