2024.03
This commit is contained in:
parent
7166572ccc
commit
ee248b10fa
5 changed files with 78 additions and 0 deletions
1
challenges/2024/03-mullItOver/README.md
Normal file
1
challenges/2024/03-mullItOver/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
# [Day 3: Mull It Over](https://adventofcode.com/2024/day/3)
|
61
challenges/2024/03-mullItOver/main.py
Normal file
61
challenges/2024/03-mullItOver/main.py
Normal file
|
@ -0,0 +1,61 @@
|
|||
import sys
|
||||
import re
|
||||
|
||||
|
||||
Instruction = tuple[str, int, int]
|
||||
|
||||
|
||||
def parse(instr: str) -> list[Instruction]:
|
||||
r = re.compile(r"(mul)\((\d{1,3}),(\d{1,3})\)|(do)\(\)|(don't)\(\)")
|
||||
res = []
|
||||
for m in r.findall(instr):
|
||||
if m[0]:
|
||||
res.append(("mul", int(m[1]), int(m[2])))
|
||||
elif m[3]:
|
||||
res.append(("do", 0, 0))
|
||||
elif m[4]:
|
||||
res.append(("don't", 0, 0))
|
||||
return res
|
||||
|
||||
|
||||
def one(instr: str):
|
||||
instructions = parse(instr)
|
||||
|
||||
acc = 0
|
||||
for (op, a, b) in instructions:
|
||||
if op == "mul":
|
||||
acc += a * b
|
||||
|
||||
return acc
|
||||
|
||||
|
||||
def two(instr: str):
|
||||
instructions = parse(instr)
|
||||
|
||||
acc = 0
|
||||
on = True
|
||||
for (op, a, b) in instructions:
|
||||
if op == "mul" and on:
|
||||
acc += a * b
|
||||
elif op == "do":
|
||||
on = True
|
||||
elif op == "don't":
|
||||
on = False
|
||||
|
||||
return acc
|
||||
|
||||
|
||||
def _debug(*args, **kwargs):
|
||||
kwargs["file"] = sys.stderr
|
||||
print(*args, **kwargs)
|
||||
|
||||
|
||||
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))
|
14
challenges/2024/03-mullItOver/tests.json
Normal file
14
challenges/2024/03-mullItOver/tests.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"1": [
|
||||
{
|
||||
"is": "161",
|
||||
"input": "xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))\n"
|
||||
}
|
||||
],
|
||||
"2": [
|
||||
{
|
||||
"is": "48",
|
||||
"input": "xmul(2,4)&mul[3,7]rundon't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))\n"
|
||||
}
|
||||
]
|
||||
}
|
Binary file not shown.
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 27 KiB |
|
@ -2,3 +2,5 @@
|
|||
{"day": 1, "part": 2, "runner": "py", "min": 0.0161440372467041, "max": 0.019031047821044922, "avg": 0.016828114986419677, "n": 100}
|
||||
{"day": 2, "part": 1, "runner": "py", "min": 0.021907567977905273, "max": 0.02720332145690918, "avg": 0.023289167881011964, "n": 100}
|
||||
{"day": 2, "part": 2, "runner": "py", "min": 0.02489948272705078, "max": 0.0319674015045166, "avg": 0.026371052265167238, "n": 100}
|
||||
{"day": 3, "part": 1, "runner": "py", "min": 0.02116227149963379, "max": 0.03153491020202637, "avg": 0.022634525299072266, "n": 100}
|
||||
{"day": 3, "part": 2, "runner": "py", "min": 0.02115607261657715, "max": 0.03121805191040039, "avg": 0.022722084522247315, "n": 100}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue