import re def set_battery(bank, joltage, start_pos, end_pos, batteries=2): if batteries == 0: return 0 # Get high-low battery, starting from start_pos till end for level in range(9,0,-1): for pos in range(start_pos, end_pos+1): if joltage[pos] != " ": # Skip to next if this battery has been set continue if bank[pos] == str(level): joltage[pos] = bank[pos] batteries -= 1 batteries = set_battery(bank, joltage, pos+1, end_pos, batteries) if batteries == 0: return 0 # Nothing changed return batteries def get_joltage(bank): joltage = [" "] * len(bank) set_battery(bank, joltage, 0, len(bank)-1, 12) 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/my_example_input" # filename = "day03/example_input" # 3121910778619 filename = "day03/input" # 170147128753455 banks = read_input(filename) total_joltage = 0 for bank in banks: total_joltage += get_joltage(bank) print(f"Total joltage: {total_joltage}")