Skip to content

03

https://adventofcode.com/2024/day/3

Prob1

題目

給一堆字串,找出所有 mul(a,b),把所有a×b計算出來並且加總。

範例

Input

mul(1,2)mul(3,4]mul(5,6)

Output

1×2+5×6=32
32

解法

直接用 regex findall mul(\d+,\d+)

python
import sys
import re

ans = 0
ok = True
for line in sys.stdin:
    for match in re.findall('mul\\(\\d+,\\d+\\)', line):
        if not ok:
            continue

        a, b = match.split(',')
        ia = int(a[4:])
        ib = int(b[:-1])
        ans += ia*ib

print(ans)

Prob2

題目

給一堆字串,找出所有 mul(a,b)do()don't()

  • mul(a,b): 計算 a×b ``
  • don't(): 會把接下來的 mul 操作 disable。
  • do(): 會把接下來的 mul 操作 enable。

範例

Input

mul(1,2)don't()mul(3,4)do()mul(5,6)

Output

1×2+5×6=32
32

解法

一樣用 regex findall mul(\d+,\d+)|do\(\)|don't\(\) 😂

python
import sys
import re

ans = 0
ok = True
for line in sys.stdin:
    for match in re.findall('mul\\(\\d+,\\d+\\)|do\\(\\)|don\'t\\(\\)', line):
        if match == 'do()':
            ok = True
            continue

        if match == 'don\'t()':
            ok = False
            continue

        if not ok:
            continue

        a, b = match.split(',')
        ia = int(a[4:])
        ib = int(b[:-1])
        ans += ia*ib

print(ans)

Changelog

Just observe 👀