2023-01 (dirty)

This commit is contained in:
akp 2023-12-01 14:18:42 +00:00
parent 1677289aee
commit 557f84561f
No known key found for this signature in database
GPG key ID: CF8D58F3DEB20755
3 changed files with 102 additions and 0 deletions

View file

@ -0,0 +1 @@
# [Day 1: Trebuchet?!](https://adventofcode.com/2023/day/1)

View file

@ -0,0 +1,91 @@
import sys
from typing import Callable
def _debug(*args, **kwargs):
kwargs["file"] = sys.stderr
print(*args, **kwargs)
def parse(inp: str) -> list[str]:
return inp.splitlines()
def one(inp: str):
parsed = parse(inp)
acc = 0
for line in parsed:
digits = list(filter(lambda x: x.isdigit(), line))
assert len(digits) != 0, f"must have at least one digit per line: {line}"
val = digits[0] + digits[-1]
acc += int(val)
return acc
TRANSFORMATIONS = {
"one": "1",
"two": "2",
"three": "3",
"four": "4",
"five": "5",
"six": "6",
"seven": "7",
"eight": "8",
"nine": "9",
}
def collect_all_digits(line: str) -> list[str]:
res = []
for i, char in enumerate(line):
if char.isdigit():
res.append(char)
break
outer_break = False
for src in TRANSFORMATIONS:
if line[i : min(len(line), i + len(src))] == src:
res.append(TRANSFORMATIONS[src])
outer_break = True
break
if outer_break:
break
rev_line = "".join(reversed(line))
for i, char in enumerate(rev_line):
if char.isdigit():
res.append(char)
break
outer_break = False
for src in TRANSFORMATIONS:
if rev_line[i : min(len(line), i + len(src))] == "".join(reversed(src)):
res.append(TRANSFORMATIONS[src])
outer_break = True
break
if outer_break:
break
return res
def two(inp: str):
parsed = parse(inp)
acc = 0
for line in parsed:
digits = collect_all_digits(line)
print(digits)
assert len(digits) != 0, f"must have at least one digit per line: {line}"
val = digits[0] + digits[-1]
acc += int(val)
return acc
if __name__ == "__main__":
if len(sys.argv) < 2 or sys.argv[1] not in ["1", "2"]:
print("Missing day argument", file=sys.stderr)
sys.exit(1)
inp = sys.stdin.read().strip()
if sys.argv[1] == "1":
print(one(inp))
else:
print(two(inp))

View file

@ -0,0 +1,10 @@
{
"1": [
{"in": "1abc2\npqr3stu8vwx\na1b2c3d4e5f\ntreb7uchet", "res": "142"},
{"in": "eighthree", "res": "83"},
{"in": "sevenine", "res": "79"}
],
"2": [
{"in": "two1nine\neightwothree\nabcone2threexyz\nxtwone3four\n4nineeightseven2\nzoneight234\n7pqrstsixteen", "res": "281"}
]
}