| @@ -1,21 +1,13 @@ | |||
| include .env | |||
| FILE = $(shell find . -path "./y????/p??.py" -type f | xargs ls -rt | tail -n 1) | |||
| DATA = $(shell echo $(FILE) | sed s/.py/.dat/) | |||
| PYTHONPATH = . | |||
| export | |||
| main: venv/ | |||
| @venv/bin/python -u toolkit.py $(FILE) | |||
| @cat $(DATA) | venv/bin/python -u $(FILE) | |||
| PYTHONPATH := . | |||
| FILE := $(shell find . -path "./y????/p??.py" -type f | xargs ls -rt | tail -n 1) | |||
| YEAR := $(shell echo ${FILE} | sed 's/[^0-9]/ /g' | cut -d' ' -f4) | |||
| DAY := $(shell echo ${FILE} | sed 's/[^0-9]/ /g' | cut -d' ' -f6 | bc) | |||
| URL := https://adventofcode.com/${YEAR}/day/${DAY}/input | |||
| DATA := $(shell echo ${FILE} | sed s/.py/.dat/) | |||
| flake: venv/ | |||
| venv/bin/flake8 --exclude=venv/ | |||
| venv/: requirements.txt | |||
| rm -rf venv/ | |||
| ~/.pyenv/versions/3.8.0/bin/python -m venv venv | |||
| venv/bin/pip install -r requirements.txt | |||
| touch requirements.txt venv/ | |||
| # install flake8 git hook | |||
| # echo 'venv/bin/flake8 --exclude=venv/' > .git/hooks/pre-commit | |||
| # chmod +x .git/hooks/pre-commit | |||
| main: | |||
| @test -f ${DATA} || curl -s -b "session=${SESSION}" ${URL} > ${DATA} | |||
| @cat $(DATA) | python3 -u $(FILE) | |||
| @@ -12,8 +12,6 @@ import string | |||
| import sys | |||
| from pathlib import Path | |||
| import requests | |||
| product = functools.partial(functools.reduce, operator.mul) | |||
| @@ -68,16 +66,6 @@ def shortest_path(start, end, move): | |||
| return path[::-1] | |||
| def ensure_data(path): | |||
| if not path.exists(): | |||
| year, qn = map(int, re.findall(r'\d+', sys.argv[1])) | |||
| url = f'https://adventofcode.com/{year}/day/{qn}/input' | |||
| cookies = {'session': os.environ['SESSION']} | |||
| response = requests.get(url, cookies=cookies) | |||
| response.raise_for_status() | |||
| path.write_bytes(response.content) | |||
| def batch(iterable, size): | |||
| count = itertools.count() | |||
| for _, sub in itertools.groupby(iterable, lambda _: next(count) // size): | |||
| @@ -101,8 +89,3 @@ def loop_consume(lines, handler): | |||
| count += 1 | |||
| else: | |||
| raise RuntimeError('Reached steady state') | |||
| if __name__ == '__main__': | |||
| data_file = Path(sys.argv[1]).with_suffix('.dat') | |||
| ensure_data(data_file) | |||
| @@ -1,6 +1,8 @@ | |||
| ans1 = 0 | |||
| ans2 = None | |||
| for i, char in enumerate(data_file.read_text(), 1): | |||
| for i, char in enumerate(open(0).read(), 1): | |||
| ans1 += {'(': 1, ')': -1}[char] | |||
| if ans1 == -1 and ans2 is None: | |||
| ans2 = i | |||
| print(ans1) | |||
| print(ans2) | |||