11from advent_of_code .utils .input_handling import read_input
22
3+
34def parse_battery_bank_to_ints_list (battery_bank_str ):
45 return [int (x ) for x in battery_bank_str ]
56
@@ -8,18 +9,34 @@ def combine_joltages(list_of_joltages):
89 return int ("" .join ([str (x ) for x in list_of_joltages ]))
910
1011
12+ def find_max_and_leftmost_index (input_list ):
13+ max_value = max (input_list )
14+ leftmost_index = input_list .index (max_value )
15+ return max_value , leftmost_index
16+
17+
1118def calculate_largest_joltage (battery_bank_as_ints , n_batteries ):
12- largest_joltage_1 = 0
13-
14- for battery_index , battery_value in enumerate (battery_bank_as_ints ):
15- if (battery_value > largest_joltage_1 ) and (battery_index < len (battery_bank_as_ints ) - 1 ):
16- largest_joltage_1 = battery_value
17- largest_joltage_2 = 0
18- for second_battery_value in battery_bank_as_ints [battery_index + 1 :]:
19- if second_battery_value > largest_joltage_2 :
20- largest_joltage_2 = second_battery_value
21-
22- return combine_joltages ([largest_joltage_1 , largest_joltage_2 ])
19+
20+ batteries_remaining = n_batteries
21+ bank_len = len (battery_bank_as_ints )
22+ list_of_joltages = []
23+ start_ix = 0
24+
25+ while batteries_remaining > 0 :
26+ end_ix = bank_len - batteries_remaining + 1
27+ window_to_check = battery_bank_as_ints [start_ix :end_ix ]
28+
29+ # find largest value in window and the left-most index for dupes
30+ max_value , leftmost_index_window = find_max_and_leftmost_index (window_to_check )
31+ leftmost_index = leftmost_index_window + start_ix
32+ list_of_joltages .append (max_value )
33+
34+ # reassign start_ix and update remaining batteries
35+ start_ix = leftmost_index + 1
36+ batteries_remaining -= 1
37+
38+ print (f"list_of_joltages={ list_of_joltages } " )
39+ return combine_joltages (list_of_joltages )
2340
2441
2542def solve_part (input , n_batteries ):
@@ -32,6 +49,7 @@ def solve_part(input, n_batteries):
3249
3350 return sum (joltage_list )
3451
52+
3553def solve (input ):
3654 part_1_solution = solve_part (input , n_batteries = 2 )
3755 part_2_solution = solve_part (input , n_batteries = 12 )
0 commit comments