Do day 1.
This commit is contained in:
commit
042085cc4b
89
d1.py
Normal file
89
d1.py
Normal file
@ -0,0 +1,89 @@
|
||||
import re
|
||||
|
||||
EXAMPLE = """
|
||||
1abc2
|
||||
pqr3stu8vwx
|
||||
a1b2c3d4e5f
|
||||
treb7uchet
|
||||
"""
|
||||
|
||||
EXAMPLE2 = """
|
||||
two1nine
|
||||
eightwothree
|
||||
abcone2threexyz
|
||||
xtwone3four
|
||||
4nineeightseven2
|
||||
zoneight234
|
||||
7pqrstsixteen
|
||||
"""
|
||||
|
||||
WORD_TO_DIGIT = {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8",
|
||||
"9": "9",
|
||||
"one": "1",
|
||||
"two": "2",
|
||||
"three": "3",
|
||||
"four": "4",
|
||||
"five": "5",
|
||||
"six": "6",
|
||||
"seven": "7",
|
||||
"eight": "8",
|
||||
"nine": "9",
|
||||
}
|
||||
|
||||
def get_sum(text: str):
|
||||
s = 0
|
||||
r = re.compile(r"[^\d]")
|
||||
for line in text.splitlines():
|
||||
if line.strip() == "":
|
||||
continue
|
||||
line = r.sub("", line)
|
||||
s += int(line[0] + line[-1])
|
||||
return s
|
||||
|
||||
def get_sum2(text: str):
|
||||
s = 0
|
||||
for line in text.splitlines():
|
||||
if line.strip() == "":
|
||||
continue
|
||||
|
||||
first = ""
|
||||
for i in range(len(line)):
|
||||
for (word, digit) in WORD_TO_DIGIT.items():
|
||||
if word == line[i:i + len(word)]:
|
||||
first = digit
|
||||
break
|
||||
if first != "":
|
||||
break
|
||||
|
||||
last = ""
|
||||
for i in range(len(line), 0, -1):
|
||||
for (word, digit) in WORD_TO_DIGIT.items():
|
||||
if word == line[i - len(word):i]:
|
||||
last = digit
|
||||
break
|
||||
if last != "":
|
||||
break
|
||||
|
||||
v = first + last
|
||||
s += int(v)
|
||||
return s
|
||||
|
||||
if __name__ == "__main__":
|
||||
assert(get_sum(EXAMPLE) == 142)
|
||||
assert(get_sum2(EXAMPLE2) == 281)
|
||||
with open("i1.txt", 'r') as f:
|
||||
text = f.read()
|
||||
r = get_sum(text)
|
||||
print(r)
|
||||
assert(r == 55386)
|
||||
r = get_sum2(text)
|
||||
print(r)
|
||||
assert(r == 54824)
|
Reference in New Issue
Block a user