Update readme and lib and start 2015.
This commit is contained in:
17
lib.py
17
lib.py
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user