58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
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}")
|