| 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) | ||||
| pypng | |||||
| numpy | |||||
| scipy | |||||
| scikit-image | |||||
| flake8 | |||||
| flake8-import-order |
| _ = 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)]: |
| 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 |
| 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) |
| 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 |
| import sys | import sys | ||||
| from intcode import compute, parse | |||||
| from intcode import compute | |||||
| tests = [ | tests = [ |
| import sys | |||||
| import collections | import collections | ||||
| import sys | |||||
| # build | # build |
| 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)))) |
| 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)) |
| 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))) |
| import itertools | import itertools | ||||
| import math | import math | ||||
| import sys | import sys | ||||
| from functools import partial | |||||
| def measure(start, other): | def measure(start, other): |
| import collections | import collections | ||||
| import sys | import sys | ||||
| from intcode import compute | from intcode import compute | ||||