Update helpers, add automatic input downloading
This commit is contained in:
parent
2bdc480651
commit
c676a77fb5
|
@ -1,27 +1,42 @@
|
||||||
import numpy as np
|
|
||||||
from numpy.typing import ArrayLike
|
from numpy.typing import ArrayLike
|
||||||
|
import browser_cookie3
|
||||||
|
import datetime
|
||||||
|
import numpy as np
|
||||||
import re
|
import re
|
||||||
|
import requests
|
||||||
|
|
||||||
|
today = datetime.date.today()
|
||||||
|
day = today.day
|
||||||
|
year = today.year
|
||||||
|
def download_input(day: int = day):
|
||||||
|
filename = f'input/{day:02}'
|
||||||
|
r = requests.get(f"https://adventofcode.com/{year}/day/{day}/input", cookies=browser_cookie3.firefox())
|
||||||
|
if r.status_code != 200:
|
||||||
|
print(r)
|
||||||
|
else:
|
||||||
|
with open(filename,'w') as f:
|
||||||
|
f.write(r.text)
|
||||||
|
|
||||||
numbers_pattern = re.compile(r'((?:(?<!\d)-)?\d+)')
|
numbers_pattern = re.compile(r'((?:(?<!\d)-)?\d+)')
|
||||||
|
|
||||||
def line_to_numbers(line):
|
def line_to_numbers(line: str) -> list[int]:
|
||||||
return [int(x) for x in numbers_pattern.findall(line)]
|
return [int(x) for x in numbers_pattern.findall(line)]
|
||||||
|
|
||||||
def lines_to_numbers(lines):
|
def lines_to_numbers(lines: list[str]) -> list[list[int]]:
|
||||||
return [line_to_numbers(line) for line in lines]
|
return [line_to_numbers(line) for line in lines]
|
||||||
|
|
||||||
def transpose_array_of_strings(aos, reverse_x = False, reverse_y = False, strip = ''):
|
def transpose_array_of_strings(aos: list[str], reverse_x = False, reverse_y = False, strip = '') -> list[str]:
|
||||||
return [''.join(l[i] for l in aos[::-1 if reverse_y else 1]).strip(strip) for i in range(len(aos[0]))[::-1 if reverse_x else 1]]
|
return [''.join(l[i] for l in aos[::-1 if reverse_y else 1]).strip(strip) for i in range(len(aos[0]))[::-1 if reverse_x else 1]]
|
||||||
|
|
||||||
def read_day(day):
|
def read_day(day: int) -> str:
|
||||||
with open(f'input/{day:02}', 'r') as file:
|
with open(f'input/{day:02}', 'r') as file:
|
||||||
return file.read().strip()
|
return file.read().strip()
|
||||||
|
|
||||||
dtype = np.int32
|
dtype = np.int32
|
||||||
|
|
||||||
directions_array = np.array([[1,0], [-1,0], [0,1], [0,-1]], dtype=dtype)
|
directions_array = np.array([[1,0], [-1,0], [0,1], [0,-1]], dtype=dtype)
|
||||||
directions_dict = {'R': directions_array[0], 'L': directions_array[1], 'D': directions_array[2], 'U': directions_array[3]} # Positive down for visualization
|
directions_dict = {'R': directions_array[0], 'L': directions_array[1], 'D': directions_array[2], 'U': directions_array[3]} # Positive down for visualization
|
||||||
|
|
||||||
def visualise_sparse_cells_set(cells: set, size=20, sym_hit='#', sym_miss='.'):
|
def visualise_sparse_cells_set(cells: set[tuple[int, int]], size=20, sym_hit='#', sym_miss='.'):
|
||||||
vis_lol = [[sym_hit if (x,y) in cells else sym_miss for x in range(-size, size)] for y in range(-size, size)]
|
vis_lol = [[sym_hit if (x,y) in cells else sym_miss for x in range(-size, size)] for y in range(-size, size)]
|
||||||
vis_str = '\n'.join(''.join(line) for line in vis_lol)
|
vis_str = '\n'.join(''.join(line) for line in vis_lol)
|
||||||
print(vis_str)
|
print(vis_str)
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"from helpers import *\n",
|
||||||
|
"\n",
|
||||||
|
"print(f'Initializing day {day:02}')\n",
|
||||||
|
"download_input(day)\n",
|
||||||
|
"input_stripped = read_day(day)\n",
|
||||||
|
"lines = input_stripped.split('\\n')\n",
|
||||||
|
"# input_a, _, input_b = file.read().strip().partition('\\n\\n')\n",
|
||||||
|
"# transpose_array_of_strings(input_a)\n",
|
||||||
|
"# s = set(input)\n",
|
||||||
|
"# print(s, len(s))\n",
|
||||||
|
"# numbers = np.array([[int(x) for x in line] for line in lines])"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "Python 3.11.0 64-bit",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.11.0"
|
||||||
|
},
|
||||||
|
"orig_nbformat": 4,
|
||||||
|
"vscode": {
|
||||||
|
"interpreter": {
|
||||||
|
"hash": "5c7b89af1651d0b8571dde13640ecdccf7d5a6204171d6ab33e7c296e100e08a"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
Loading…
Reference in New Issue