70 lines
1.9 KiB
Python
Executable file
70 lines
1.9 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
from logging import debug, DEBUG, basicConfig
|
|
from sys import argv
|
|
|
|
|
|
def parse_input(input_filepath: str) -> list[str]:
|
|
battery_banks: list[str] = []
|
|
|
|
with open(file=input_filepath, mode="r") as input_file:
|
|
input_data: list[str] = input_file.readlines()
|
|
|
|
debug(f"\n\nRAW INPUT: {input_data}\n\n")
|
|
|
|
for line in input_data:
|
|
battery_banks.append(line.strip())
|
|
|
|
return battery_banks
|
|
|
|
|
|
def get_highest_joltage(battery_bank: str, digits: int) -> int:
|
|
battery_list: list[tuple[str, int]] = [("0", -1)] * digits
|
|
previous = 0
|
|
|
|
for d in range(digits):
|
|
for i in range(
|
|
battery_list[previous][1] + 1, len(battery_bank) - (digits - d - 1)
|
|
):
|
|
if int(battery_bank[i]) > int(battery_list[d][0]):
|
|
battery_list[d] = (battery_bank[i], i)
|
|
previous = d
|
|
|
|
return int("".join([x[0] for x in battery_list]))
|
|
|
|
|
|
def get_highest_joltages(battery_banks: list[str], digits: int) -> list[int]:
|
|
joltages: list[int] = []
|
|
|
|
for battery_bank in battery_banks:
|
|
joltages.append(get_highest_joltage(battery_bank, digits))
|
|
|
|
return joltages
|
|
|
|
|
|
def main() -> None:
|
|
input_filepath = "input/battery_banks.txt"
|
|
input_battery_banks = parse_input(input_filepath)
|
|
|
|
debug(f"\n\nPARSED BATTERY BANKS: {input_battery_banks}\n\n")
|
|
|
|
digits = 2
|
|
joltages = get_highest_joltages(input_battery_banks, digits)
|
|
|
|
debug(f"\n\nJOLTAGES IDENTIFIED: {joltages}\n\n")
|
|
print(f"Sum of joltages from {digits} batteries: {sum(joltages)}")
|
|
|
|
digits = 12
|
|
joltages = get_highest_joltages(input_battery_banks, digits)
|
|
|
|
debug(f"\n\nJOLTAGES IDENTIFIED: {joltages}\n\n")
|
|
print(f"Sum of joltages from {digits} batteries: {sum(joltages)}")
|
|
|
|
return
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if "-d" in argv or "--debug" in argv:
|
|
basicConfig(filename="debug.log", level=DEBUG)
|
|
main()
|
|
exit(0)
|