浏览代码

🧹

master
Roderic Day 5 年前
父节点
当前提交
96a67e46b9
共有 13 个文件被更改,包括 35 次插入27 次删除
  1. +1
    -0
      makefile
  2. +2
    -4
      requirements.txt
  3. +3
    -2
      y2018/p17.py
  4. +3
    -1
      y2019/intcode.py
  5. +2
    -2
      y2019/p02.py
  6. +6
    -4
      y2019/p04.py
  7. +2
    -1
      y2019/p05.py
  8. +1
    -1
      y2019/p06.py
  9. +12
    -9
      y2019/p07.py
  10. +1
    -1
      y2019/p08.py
  11. +1
    -1
      y2019/p09.py
  12. +0
    -1
      y2019/p10.py
  13. +1
    -0
      y2019/p11.py

+ 1
- 0
makefile 查看文件

PYTHONPATH=. PYTHONPATH=.


main: venv/ main: venv/
# @venv/bin/flake8 --exclude=venv/
@touch $(DATA) @touch $(DATA)
@cat $(DATA) | venv/bin/python -u $(FILE) @cat $(DATA) | venv/bin/python -u $(FILE)



+ 2
- 4
requirements.txt 查看文件

pypng
numpy
scipy
scikit-image
flake8
flake8-import-order

+ 3
- 2
y2018/p17.py 查看文件

_ = re.sub(r'(\d+)\.\.(\d+)', r'range(\1, \2 + 1)', _) _ = re.sub(r'(\d+)\.\.(\d+)', r'range(\1, \2 + 1)', _)
_ = re.sub(r'=(\d+)', r'=[\1]', _) _ = re.sub(r'=(\d+)', r'=[\1]', _)
exec(_, globals()) exec(_, globals())
grid.update({(X, Y): '#' for X in x for Y in y})
grid.update({(X, Y): '#' for X in x for Y in y}) # noqa
return grid return grid




x, y = stack.pop() x, y = stack.pop()
grid[x, y] = '|' grid[x, y] = '|'


if grid[x - 1, y] == '|' and grid[x + 1, y] == ' ' and grid[x, y + 1] != '|':
left, right, below = grid[x - 1, y], grid[x + 1, y], grid[x, y + 1]
if all([right == ' ', left == '|', below != '|']):
flow((x + 1, y)) flow((x + 1, y))


for dx, dy in [(-1, 0), (1, 0), (0, -1)]: for dx, dy in [(-1, 0), (1, 0), (0, -1)]:

+ 3
- 1
y2019/intcode.py 查看文件





def compute(ns, in_iter): def compute(ns, in_iter):
def consume(N, writes=''):
return get_parameters(ns, pos, modes, N, writes, relbase)

if isinstance(ns, str): if isinstance(ns, str):
ns = parse(ns) ns = parse(ns)
if isinstance(in_iter, int): if isinstance(in_iter, int):


pos = 0 pos = 0
relbase = 0 relbase = 0
consume = lambda n, writes='': get_parameters(ns, pos, modes, n, writes, relbase)


while True: while True:
op = ns[pos] % 100 op = ns[pos] % 100

+ 2
- 2
y2019/p02.py 查看文件

import itertools import itertools
import re
import sys import sys

from intcode import compute, parse from intcode import compute, parse




print(check(12, 2)) print(check(12, 2))
for noun, verb in itertools.product(range(100), repeat=2): for noun, verb in itertools.product(range(100), repeat=2):
if check(noun, verb) == 19690720: if check(noun, verb) == 19690720:
print(100 * noun + verb)
print(100 * noun + verb)

+ 6
- 4
y2019/p04.py 查看文件

import sys import sys
import itertools
from itertools import groupby


strings = [str(n) for n in range(347312, 805915 + 1)]
print(sum(list(s) == sorted(s) and any(len(list(vs)) >= 2 for k, vs in itertools.groupby(s)) for s in strings))
print(sum(list(s) == sorted(s) and any(len(list(vs)) == 2 for k, vs in itertools.groupby(s)) for s in strings))

A, B = [int(n) for n in sys.stdin.read().split('-')]
strings = [str(n) for n in range(A, B + 1)]
print(sum(list(s) == sorted(s) and any(len(list(vs)) >= 2 for k, vs in groupby(s)) for s in strings)) # noqa
print(sum(list(s) == sorted(s) and any(len(list(vs)) == 2 for k, vs in groupby(s)) for s in strings)) # noqa

+ 2
- 1
y2019/p05.py 查看文件

import sys import sys
from intcode import compute, parse

from intcode import compute




tests = [ tests = [

+ 1
- 1
y2019/p06.py 查看文件

import sys
import collections import collections
import sys




# build # build

+ 12
- 9
y2019/p07.py 查看文件

import sys import sys
import itertools
from itertools import chain, cycle, permutations

from intcode import compute from intcode import compute




out = list(compute(ns, iter([n, out])))[-1] out = list(compute(ns, iter([n, out])))[-1]
return out return out


print(max(solve(ns, phases) for phases in itertools.permutations(range(5))))

print(max(solve(ns, phases) for phases in permutations(range(5))))




def solve2(ns, phases): def solve2(ns, phases):
feedback = [] feedback = []
iter_phases = iter(phases) iter_phases = iter(phases)
iter_feed = iter(feedback) iter_feed = iter(feedback)
loop = itertools.cycle([
compute(ns, itertools.chain([next(iter_phases), 0], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
compute(ns, itertools.chain([next(iter_phases)], iter_feed)),
loop = cycle([
compute(ns, chain([next(iter_phases), 0], iter_feed)),
compute(ns, chain([next(iter_phases)], iter_feed)),
compute(ns, chain([next(iter_phases)], iter_feed)),
compute(ns, chain([next(iter_phases)], iter_feed)),
compute(ns, chain([next(iter_phases)], iter_feed)),
]) ])
try: try:
for machine in loop: for machine in loop:
except StopIteration: except StopIteration:
return feedback[-1] return feedback[-1]


print(max(solve2(ns, phases) for phases in itertools.permutations(range(5, 10))))

print(max(solve2(ns, phases) for phases in permutations(range(5, 10))))

+ 1
- 1
y2019/p08.py 查看文件

w, h = 25, 6 w, h = 25, 6
text = sys.stdin.read() text = sys.stdin.read()


count = lambda m: lambda layer: sum(n == m for n in layer)
count = lambda m: lambda layer: sum(n == m for n in layer) # noqa


layers = list(zip(*[(int(n) for n in text.strip())] * w * h)) layers = list(zip(*[(int(n) for n in text.strip())] * w * h))
min_layer = min(layers, key=count(0)) min_layer = min(layers, key=count(0))

+ 1
- 1
y2019/p09.py 查看文件

import re
import sys import sys


from intcode import compute from intcode import compute



text = sys.stdin.read() text = sys.stdin.read()
print(next(compute(text, 1))) print(next(compute(text, 1)))
print(next(compute(text, 2))) print(next(compute(text, 2)))

+ 0
- 1
y2019/p10.py 查看文件

import itertools import itertools
import math import math
import sys import sys
from functools import partial




def measure(start, other): def measure(start, other):

+ 1
- 0
y2019/p11.py 查看文件

import collections import collections
import sys import sys

from intcode import compute from intcode import compute





正在加载...
取消
保存