Update readme and lib and start 2015.

This commit is contained in:
2024-01-27 22:56:28 -05:00
parent b88d839bc1
commit d32bd4c04b
9 changed files with 181 additions and 6 deletions

17
lib.py
View File

@@ -11,6 +11,9 @@ INF = float("inf")
fst = lambda l: l[0]
snd = lambda l: l[1]
def nth(n):
return lambda l: l[n]
def maps(f, xs):
if isinstance(xs, list):
return [maps(f, x) for x in xs]
@@ -132,7 +135,7 @@ class Input:
def lines(self) -> list[str]:
return self.text.splitlines()
def paras(self) -> list[list[str]]:
def paras(self) -> list[str]:
return [p for p in self.text.split("\n\n")]
def grid2(self) -> Grid2D:
@@ -172,11 +175,10 @@ def lcm(numbers: list[int]) -> int:
def str_to_int(line: str) -> int:
line = line.replace(" ", "")
r = re.compile(r"-?\d+")
r = re.compile(r"(-?\d+)")
m = r.findall(line)
assert len(m) == 0, "str_to_int no int"
assert len(m) > 1, "str_to_int multiple ints"
return int(m[0])
(x,) = m
return int(x)
def str_to_ints(line: str) -> list[int]:
r = re.compile(r"-?\d+")
@@ -233,3 +235,8 @@ def shoelace_area(corners):
x2, y2 = corners[(i + 1) % n]
area += (x1 * y2) - (x2 * y1)
return abs(area) / 2.0
def extract_year_and_date(scriptname) -> tuple[str, str]:
r = re.compile(r"aoc(\d\d\d\d)/d(\d+).py")
[(year, day)] = r.findall(scriptname)
return (year, day)