# from itertools import combinations def get_highest(input: str) -> int: highest = 0 for index, num in enumerate(input): for subindex, subnum in enumerate(input): if subindex > index: highest = max(highest, int(num + subnum)) return highest def get_highest_dynamic(bank_size: int, input: str) -> int: # highest = 0 # Brute and "works", but is too expensive # combos = combinations(input, 12) # for c in combos: # highest = max(highest, int(''.join(c))) highest = '' curr_index = 0 for i in range(bank_size, 0, -1): curr_highest = 0 highest_index = 0 limit = len(input) - i + 1 for j in range(curr_index, limit): found = int(input[j]) if found > curr_highest: curr_highest = found highest_index = j highest += str(curr_highest) curr_index = highest_index + 1 return int(highest) def main(): '''Entrypoint''' with open('input.txt', encoding='utf-8') as fh: sum = 0 sum2 = 0 for line in fh: # sum += get_highest(line) # Old style sum += get_highest_dynamic(2, line.strip()) sum2 += get_highest_dynamic(12, line.strip()) print(f'Part 1: {sum}') print(f'Part 2: {sum2}') if __name__ == "__main__": main()