Browse Source

🧹

master
Roderic Day 6 years ago
parent
commit
96a67e46b9
13 changed files with 35 additions and 27 deletions
  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 View File

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 View File

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

+ 3
- 2
y2018/p17.py View File

_ = 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 View File





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 View File

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 View File

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 View File

import sys import sys
from intcode import compute, parse

from intcode import compute




tests = [ tests = [

+ 1
- 1
y2019/p06.py View File

import sys
import collections import collections
import sys




# build # build

+ 12
- 9
y2019/p07.py View File

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 View File

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 View File

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 View File

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 View File

import collections import collections
import sys import sys

from intcode import compute from intcode import compute





Loading…
Cancel
Save