Skip to content

Commit ee248b1

Browse files
committed
2024.03
1 parent 7166572 commit ee248b1

File tree

5 files changed

+78
-0
lines changed

5 files changed

+78
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# [Day 3: Mull It Over](https://adventofcode.com/2024/day/3)

challenges/2024/03-mullItOver/main.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import sys
2+
import re
3+
4+
5+
Instruction = tuple[str, int, int]
6+
7+
8+
def parse(instr: str) -> list[Instruction]:
9+
r = re.compile(r"(mul)\((\d{1,3}),(\d{1,3})\)|(do)\(\)|(don't)\(\)")
10+
res = []
11+
for m in r.findall(instr):
12+
if m[0]:
13+
res.append(("mul", int(m[1]), int(m[2])))
14+
elif m[3]:
15+
res.append(("do", 0, 0))
16+
elif m[4]:
17+
res.append(("don't", 0, 0))
18+
return res
19+
20+
21+
def one(instr: str):
22+
instructions = parse(instr)
23+
24+
acc = 0
25+
for (op, a, b) in instructions:
26+
if op == "mul":
27+
acc += a * b
28+
29+
return acc
30+
31+
32+
def two(instr: str):
33+
instructions = parse(instr)
34+
35+
acc = 0
36+
on = True
37+
for (op, a, b) in instructions:
38+
if op == "mul" and on:
39+
acc += a * b
40+
elif op == "do":
41+
on = True
42+
elif op == "don't":
43+
on = False
44+
45+
return acc
46+
47+
48+
def _debug(*args, **kwargs):
49+
kwargs["file"] = sys.stderr
50+
print(*args, **kwargs)
51+
52+
53+
if __name__ == "__main__":
54+
if len(sys.argv) < 2 or sys.argv[1] not in ["1", "2"]:
55+
print("Missing day argument", file=sys.stderr)
56+
sys.exit(1)
57+
inp = sys.stdin.read().strip()
58+
if sys.argv[1] == "1":
59+
print(one(inp))
60+
else:
61+
print(two(inp))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"1": [
3+
{
4+
"is": "161",
5+
"input": "xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))\n"
6+
}
7+
],
8+
"2": [
9+
{
10+
"is": "48",
11+
"input": "xmul(2,4)&mul[3,7]rundon't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))\n"
12+
}
13+
]
14+
}

challenges/2024/benchmark-graph.png

1.06 KB
Loading

challenges/2024/benchmarks.jsonl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
{"day": 1, "part": 2, "runner": "py", "min": 0.0161440372467041, "max": 0.019031047821044922, "avg": 0.016828114986419677, "n": 100}
33
{"day": 2, "part": 1, "runner": "py", "min": 0.021907567977905273, "max": 0.02720332145690918, "avg": 0.023289167881011964, "n": 100}
44
{"day": 2, "part": 2, "runner": "py", "min": 0.02489948272705078, "max": 0.0319674015045166, "avg": 0.026371052265167238, "n": 100}
5+
{"day": 3, "part": 1, "runner": "py", "min": 0.02116227149963379, "max": 0.03153491020202637, "avg": 0.022634525299072266, "n": 100}
6+
{"day": 3, "part": 2, "runner": "py", "min": 0.02115607261657715, "max": 0.03121805191040039, "avg": 0.022722084522247315, "n": 100}

0 commit comments

Comments
 (0)