| @@ -3,6 +3,7 @@ DATA = $(shell echo $(FILE) | sed -e s/\.py/\.dat/) | |||
| PYTHONPATH=. | |||
| main: venv/ | |||
| # @venv/bin/flake8 --exclude=venv/ | |||
| @touch $(DATA) | |||
| @cat $(DATA) | venv/bin/python -u $(FILE) | |||
| @@ -1,4 +1,2 @@ | |||
| pypng | |||
| numpy | |||
| scipy | |||
| scikit-image | |||
| flake8 | |||
| flake8-import-order | |||
| @@ -10,7 +10,7 @@ def read_in(): | |||
| _ = re.sub(r'(\d+)\.\.(\d+)', r'range(\1, \2 + 1)', _) | |||
| _ = re.sub(r'=(\d+)', r'=[\1]', _) | |||
| 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 | |||
| @@ -49,7 +49,8 @@ def drain(end): | |||
| x, y = stack.pop() | |||
| 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)) | |||
| for dx, dy in [(-1, 0), (1, 0), (0, -1)]: | |||
| @@ -28,6 +28,9 @@ def get_parameters(ns, pos, modes, N, writes, relbase): | |||
| def compute(ns, in_iter): | |||
| def consume(N, writes=''): | |||
| return get_parameters(ns, pos, modes, N, writes, relbase) | |||
| if isinstance(ns, str): | |||
| ns = parse(ns) | |||
| if isinstance(in_iter, int): | |||
| @@ -35,7 +38,6 @@ def compute(ns, in_iter): | |||
| pos = 0 | |||
| relbase = 0 | |||
| consume = lambda n, writes='': get_parameters(ns, pos, modes, n, writes, relbase) | |||
| while True: | |||
| op = ns[pos] % 100 | |||
| @@ -1,6 +1,6 @@ | |||
| import itertools | |||
| import re | |||
| import sys | |||
| from intcode import compute, parse | |||
| @@ -16,4 +16,4 @@ text = sys.stdin.read() | |||
| print(check(12, 2)) | |||
| for noun, verb in itertools.product(range(100), repeat=2): | |||
| if check(noun, verb) == 19690720: | |||
| print(100 * noun + verb) | |||
| print(100 * noun + verb) | |||
| @@ -1,6 +1,8 @@ | |||
| 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 | |||
| @@ -1,5 +1,6 @@ | |||
| import sys | |||
| from intcode import compute, parse | |||
| from intcode import compute | |||
| tests = [ | |||
| @@ -1,5 +1,5 @@ | |||
| import sys | |||
| import collections | |||
| import sys | |||
| # build | |||
| @@ -1,5 +1,6 @@ | |||
| import sys | |||
| import itertools | |||
| from itertools import chain, cycle, permutations | |||
| from intcode import compute | |||
| @@ -12,19 +13,20 @@ def solve(ns, phases): | |||
| out = list(compute(ns, iter([n, out])))[-1] | |||
| 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): | |||
| feedback = [] | |||
| iter_phases = iter(phases) | |||
| 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: | |||
| for machine in loop: | |||
| @@ -32,4 +34,5 @@ def solve2(ns, phases): | |||
| except StopIteration: | |||
| 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)))) | |||
| @@ -4,7 +4,7 @@ import sys | |||
| w, h = 25, 6 | |||
| 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)) | |||
| min_layer = min(layers, key=count(0)) | |||
| @@ -1,8 +1,8 @@ | |||
| import re | |||
| import sys | |||
| from intcode import compute | |||
| text = sys.stdin.read() | |||
| print(next(compute(text, 1))) | |||
| print(next(compute(text, 2))) | |||
| @@ -1,7 +1,6 @@ | |||
| import itertools | |||
| import math | |||
| import sys | |||
| from functools import partial | |||
| def measure(start, other): | |||
| @@ -1,5 +1,6 @@ | |||
| import collections | |||
| import sys | |||
| from intcode import compute | |||