import matrix import shared import itertools import functools NUMS = { "one": 1, "two": 2, "six": 6, "four": 4, "five": 5, "nine": 9, "seven": 7, "eight": 8, "three": 3, } # @shared.profile def part1(rows): total = 0 for row in rows: numbers = ''.join(filter(str.isdigit, row)) total += get_total(numbers) print(total) def get_total(numbers): tens, ones= int(numbers[0]),int(numbers[-1]) return (tens * 10) + ones def loop_row(row): digits = [] for idx, _ in enumerate(row): if str.isdigit(row[idx]): digits.append(row[idx]) continue for x in [3,4,5]: next = row[idx:idx+x] if next in NUMS.keys(): digits.append(str(NUMS[next])) break return "".join(digits) # @shared.profile def part2(rows): total = 0 for row in rows: nums = loop_row(row) total += get_total(nums) print(total) def main(): rows = [row for row in shared.load_rows(1)] with shared.elapsed_timer() as elapsed: part1(rows) print("🕒", elapsed()) rows = [row for row in shared.load_rows(1, True)] with shared.elapsed_timer() as elapsed: part2(rows) print("🕒", elapsed()) if __name__ == "__main__": main()