From 4ef476c0e730d625a3ac8063ed08ebe69d48cb34 Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Fri, 1 Dec 2023 10:30:46 +0000 Subject: day 1 --- 1.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 1.py diff --git a/1.py b/1.py new file mode 100644 index 0000000..fa5fdd5 --- /dev/null +++ b/1.py @@ -0,0 +1,45 @@ +from sys import stdin +from itertools import chain +import re + +nums = { + "zero": 0, + "one": 1, + "two": 2, + "three": 3, + "four": 4, + "five": 5, + "six": 6, + "seven": 7, + "eight": 8, + "nine": 9, +} + +forward = re.compile("|".join(chain(nums.keys(), (str(n) for n in nums.values())))) +reverse = re.compile( + "|".join(chain((k[::-1] for k in nums.keys()), (str(n) for n in nums.values()))) +) + + +def p1_impl(s: str) -> int: + nums = [int(n) for n in s if n.isdigit()] + return nums[0] * 10 + nums[-1] + + +def p2_impl(s: str) -> int: + match = forward.search(s) + if not match: + raise ValueError + num = match.group() + first = int(nums.get(num, num)) + match = reverse.search(s[::-1]) + if not match: + raise ValueError + num = match.group()[::-1] + last = int(nums.get(num, num)) + return first * 10 + last + + +inp = [line.rstrip() for line in stdin] +print(sum(p1_impl(i) for i in inp)) +print(sum(p2_impl(i) for i in inp)) -- cgit v1.2.3-54-g00ecf