瀏覽代碼

2020/18

master
Roderic Day 4 年之前
父節點
當前提交
c2ff6a0a5f
共有 2 個檔案被更改,包括 10 行新增23 行删除
  1. +3
    -4
      y2020/p13.py
  2. +7
    -19
      y2020/p18.py

+ 3
- 4
y2020/p13.py 查看文件

@@ -19,8 +19,7 @@ print((a - tid) * b)

args = [(i, int(val)) for i, val in enumerate(string.split(',')) if val != 'x']
(last, step), *tail = args
for offset, value in tail:
i = next(i for i in count() if (last + i * step + offset) % value == 0)
last += i * step
step = toolkit.lcm(step, value)
for offset, val in tail:
last += next(i for i in count(step=step) if (last + i + offset) % val == 0)
step = toolkit.lcm(step, val)
print(last)

+ 7
- 19
y2020/p18.py 查看文件

@@ -2,30 +2,18 @@ import re
import sys


def reval1(ln):
a, *rest = ln.split()
for b, c in zip(*[iter(rest)] * 2):
a = eval(f'{a} {b} {c}')
return a


def reval2(ln):
while '+' in ln:
ln = re.sub(r'\d+ \+ \d+', lambda m: str(eval(m.group(0))), ln)
return eval(ln)


def process(ln, reval):
while '(' in ln:
ln = re.sub(r'\(([^\(\)]+)\)', lambda m: str(reval(m.group(1))), ln)
return reval(ln)
class X(int):
def __sub__(a, y): return X(int(a) * y)
def __add__(a, y): return X(int(a) + y)
def __mul__(a, y): return X(int(a) + y)


text = sys.stdin.read()
ans1 = 0
ans2 = 0
trans = str.maketrans('*+', '-*')
for ln in text.splitlines():
ans1 += int(process(ln, reval=reval1))
ans2 += int(process(ln, reval=reval2))
ans1 += eval(re.sub(r'(\d+)', r'X(\1)', ln.replace('*', '-')))
ans2 += eval(re.sub(r'(\d+)', r'X(\1)', ln.translate(trans)))
print(ans1)
print(ans2)

Loading…
取消
儲存