advent-of-code/2023/day1.py

46 lines
1003 B
Python
Raw Permalink Normal View History

2023-12-01 09:41:13 +00:00
import sys
2023-12-04 18:30:44 +00:00
lines = sys.stdin.read().splitlines()
2023-12-01 09:41:13 +00:00
2023-12-04 18:30:44 +00:00
lookups_1 = {str(d): d for d in range(1, 10)}
2023-12-01 09:41:13 +00:00
lookups_2 = lookups_1 | {
d: i + 1
for i, d in enumerate(
(
"one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight",
"nine",
)
)
}
def find_values(lookups: dict[str, int]) -> list[int]:
values: list[int] = []
for line in filter(bool, lines):
first_digit = min(
lookups,
key=lambda lookup: index
if (index := line.find(lookup)) >= 0
else len(line),
)
last_digit = max(
lookups,
2023-12-01 19:27:42 +00:00
key=lambda lookup: index if (index := line.rfind(lookup)) >= 0 else -1,
2023-12-01 09:41:13 +00:00
)
2023-12-01 19:27:42 +00:00
2023-12-01 09:41:13 +00:00
values.append(10 * lookups[first_digit] + lookups[last_digit])
return values
print(f"answer 1 is {sum(find_values(lookups_1))}")
print(f"answer 2 is {sum(find_values(lookups_2))}")