| import collections | import collections | ||||
| import hashlib | |||||
| import itertools | import itertools | ||||
| import os | import os | ||||
| import re | import re | ||||
| import subprocess | |||||
| import sys | import sys | ||||
| from pathlib import Path | from pathlib import Path | ||||
| Path(path).write_bytes(response.content) | Path(path).write_bytes(response.content) | ||||
| def md5gen(template, pattern=r'.+', batch=6000): | |||||
| for i in itertools.count(): | |||||
| strings = (template.format(i=i * batch + k) for k in range(batch)) | |||||
| args = [c for s in strings for c in ['-s', s]] | |||||
| out = subprocess.check_output(['md5'] + args).decode() | |||||
| yield from re.findall(rf'"(.+)"\) = ({pattern})', out) | |||||
| def batch(iterable, size): | |||||
| count = itertools.count() | |||||
| for _, sub in itertools.groupby(iterable, lambda _: next(count) // size): | |||||
| yield sub | |||||
| def interpret(string, globals): | |||||
| fn, *args = ( | |||||
| x if x[0].isalpha() else eval(x) | |||||
| for x in string.split() | |||||
| ) | |||||
| globals[fn](**dict(zip(*[iter(args)] * 2))) | |||||
| def md5(string): | |||||
| return hashlib.md5(string.encode()).hexdigest() | |||||
| def loop_consume(lines, handler): | def loop_consume(lines, handler): |
| import sys | |||||
| def get(x): | |||||
| return regs[x] if x in regs else int(x) | |||||
| def cpy(x, y): | |||||
| regs[y] = get(x) | |||||
| def inc(x): | |||||
| regs[x] += 1 | |||||
| def dec(x): | |||||
| regs[x] -= 1 | |||||
| def jnz(x, y): | |||||
| if get(x) != 0: | |||||
| return int(y) | |||||
| def run(regs, lim=1000): | |||||
| pos = 0 | |||||
| seen = {} | |||||
| for _ in range(lim): | |||||
| fn, *args = instructions[pos].split() | |||||
| pos += eval(fn)(*args) or 1 | |||||
| if regs['d'] not in seen: | |||||
| seen[regs['d']] = regs['a'] | |||||
| print(sorted(seen)) | |||||
| text = sys.stdin.read() | |||||
| instructions = text.splitlines() | |||||
| regs = {k: 0 for k in 'abcd'} | |||||
| run(regs) | |||||
| regs['c'] = 1 | |||||
| run(regs) | |||||
| def fib(n): | |||||
| a, b = 0, 1 | |||||
| for _ in range(n): | |||||
| a, b = b, a + b | |||||
| return b | |||||
| print(fib(27) + 19 * 11) | |||||
| print(fib(34) + 19 * 11) |
| import sys | |||||
| def is_open(x, y): | |||||
| n = x*x + 3*x + 2*x*y + y + y*y + inp | |||||
| return f'{n:b}'.count('1') % 2 == 0 | |||||
| inp = int(sys.stdin.read()) | |||||
| valid = { | |||||
| complex(x, y) | |||||
| for y in range(50) | |||||
| for x in range(50) | |||||
| if is_open(x, y) | |||||
| } | |||||
| steps = (1, -1, 1j, -1j) | |||||
| edge = {1 + 1j} | |||||
| seen = set() | |||||
| hop = 0 | |||||
| while 31 + 39j not in seen: | |||||
| edge = {old + step for old in edge for step in steps} & valid - seen | |||||
| seen |= edge | |||||
| hop += 1 | |||||
| if hop == 50: | |||||
| ans2 = len(seen) | |||||
| print(hop) | |||||
| print(ans2) |
| import re | |||||
| import sys | |||||
| import toolkit | |||||
| text = sys.stdin.read().strip() | |||||
| found = {i: toolkit.md5(f'{text}{i}') for i in range(30_000)} | |||||
| print([ | |||||
| i | |||||
| for i, dig in found.items() | |||||
| for c in re.findall(r'(.)\1\1', dig)[:1] | |||||
| if any(c * 5 in found.get(i + j + 1, '') for j in range(1000)) | |||||
| ][63]) | |||||
| for _ in range(2016): | |||||
| found = {k: toolkit.md5(v) for k, v in found.items()} | |||||
| print([ | |||||
| i | |||||
| for i, dig in found.items() | |||||
| for c in re.findall(r'(.)\1\1', dig)[:1] | |||||
| if any(c * 5 in found.get(i + j + 1, '') for j in range(1000)) | |||||
| ][63]) |