57 lines
1.2 KiB
Python
57 lines
1.2 KiB
Python
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}")
|