Use new AoC infrastructure and clean up.

This commit is contained in:
2023-12-27 22:02:59 -05:00
parent 4e8bd8a60c
commit a449964cbe
9 changed files with 26 additions and 134 deletions

72
d1.py
View File

@@ -1,64 +1,20 @@
import re from lib import *
EXAMPLE = """ def solve(input: Input, second=False):
1000 ps = input.text.split("\n\n")
2000 xss = map(lambda p: map(int, p.splitlines()), ps)
3000 xs = list(map(sum, xss))
if not second:
4000 return max(xs)
xs.sort()
5000 return sum(xs[-3:])
6000
7000
8000
9000
10000
"""
def solve(lines: list[str]):
counter = 0
count_max = 0
for line in lines.splitlines():
if line.strip() == "":
if counter >= count_max:
count_max = counter
counter = 0
else:
counter += int(line)
return count_max
def solve2(lines: list[str]):
counter = 0
count_max = 0
counts = []
for line in lines.splitlines():
if line.strip() == "":
if counter >= count_max:
count_max = counter
counts.append(counter)
counter = 0
else:
counter += int(line)
counts.append(counter)
counts.sort(reverse=True)
return sum(counts[:3])
def main(): def main():
example = str(EXAMPLE) DAY_INPUT = "i1.txt"
print("Example 1:", solve(example)) print("Solution 1:", solve(Input(DAY_INPUT)))
assert solve(Input(DAY_INPUT)) == 69883
data = open("i1.txt").read() print("Solution 2:", solve(Input(DAY_INPUT), True))
print("Solution 1:", solve(data)) assert solve(Input(DAY_INPUT), True) == 207576
example = str(EXAMPLE)
print("Example 2:", solve2(example))
data = open("i1.txt").read()
print("Solution 2:", solve2(data))
return
if __name__ == "__main__": if __name__ == "__main__":
main() main()

4
d15.py
View File

@@ -73,7 +73,7 @@ def solve(lines: list[str], yt):
sensors = [] sensors = []
bacons = set() bacons = set()
for (i, line) in enumerate(lines): for (i, line) in enumerate(lines):
digits = lib.str_to_int_list(line) digits = lib.str_to_ints(line)
sx, sy, bx, by = digits sx, sy, bx, by = digits
sm = mdist(bx - sx, by - sy) sm = mdist(bx - sx, by - sy)
sensors.append([sx, sy, sm]) sensors.append([sx, sy, sm])
@@ -102,7 +102,7 @@ def solve2(lines: list[str], xymax):
sensors = [] sensors = []
bacons = set() bacons = set()
for (i, line) in enumerate(lines): for (i, line) in enumerate(lines):
digits = lib.str_to_int_list(line) digits = lib.str_to_ints(line)
sx, sy, bx, by = digits sx, sy, bx, by = digits
sm = mdist(bx - sx, by - sy) sm = mdist(bx - sx, by - sy)
sensors.append([sx, sy, sm]) sensors.append([sx, sy, sm])

6
d16.py
View File

@@ -18,9 +18,10 @@ def solve(lines: list[str]):
for (i, line) in enumerate(lines): for (i, line) in enumerate(lines):
source = line.split(" ")[1] source = line.split(" ")[1]
to_valves = list(map(lambda v: v.replace(",", ""), line.split(" ")[9:])) to_valves = list(map(lambda v: v.replace(",", ""), line.split(" ")[9:]))
flow_rate = lib.str_to_single_int(line) flow_rate = lib.str_to_int(line)
nodes[source] = (flow_rate, to_valves) nodes[source] = (flow_rate, to_valves)
options = [(0, 0, "AA", ())] options = [(0, 0, "AA", ())]
visited = set() visited = set()
for _ in range(30): for _ in range(30):
@@ -43,7 +44,7 @@ def solve2(lines: list[str]):
for (i, line) in enumerate(lines): for (i, line) in enumerate(lines):
source = line.split(" ")[1] source = line.split(" ")[1]
to_valves = list(map(lambda v: v.replace(",", ""), line.split(" ")[9:])) to_valves = list(map(lambda v: v.replace(",", ""), line.split(" ")[9:]))
flow_rate = lib.str_to_single_int(line) flow_rate = lib.str_to_int(line)
nodes[source] = (flow_rate, to_valves) nodes[source] = (flow_rate, to_valves)
options = [(0, 0, ("AA", "AA"), ())] options = [(0, 0, ("AA", "AA"), ())]
@@ -93,6 +94,7 @@ def main():
lines = lib.str_to_lines_no_empty(open("i16.txt").read()) lines = lib.str_to_lines_no_empty(open("i16.txt").read())
print("Solution 2:", solve2(lines)) print("Solution 2:", solve2(lines))
assert solve2(lines) == 2591
if __name__ == "__main__": if __name__ == "__main__":
main() main()

2
d2.py
View File

@@ -85,12 +85,14 @@ def main():
data = clean(open("i2.txt").read()) data = clean(open("i2.txt").read())
print("Solution 1:", solve(data)) print("Solution 1:", solve(data))
assert solve(data) == 14069
example = clean(EXAMPLE) example = clean(EXAMPLE)
print("Example 2:", solve2(example)) print("Example 2:", solve2(example))
data = clean(open("i2.txt").read()) data = clean(open("i2.txt").read())
print("Solution 2:", solve2(data)) print("Solution 2:", solve2(data))
assert solve2(data) == 12411
if __name__ == "__main__": if __name__ == "__main__":
main() main()

37
dx.py
View File

@@ -1,37 +0,0 @@
import lib
EXAMPLE = """
"""
def solve(lines: list[str]):
res = 0
for (i, line) in enumerate(lines):
print(i, line)
# digits = lib.str_to_int_list(line)
# digit = lib.str_to_single_int(line)
return res
def solve2(lines: list[str]):
res = 0
for (i, line) in enumerate(lines):
print(i, line)
return res
def main():
lines = lib.str_to_lines_no_empty(EXAMPLE)
print("Example 1:", solve(lines))
return
lines = lib.str_to_lines_no_empty(open("ix.txt").read())
print("Solution 1:", solve(lines))
return
lines = lib.str_to_lines_no_empty(EXAMPLE)
print("Example 2:", solve2(lines))
return
lines = lib.str_to_lines_no_empty(open("ix.txt").read())
print("Solution 2:", solve2(lines))
if __name__ == "__main__":
main()

1
dx.py Symbolic link
View File

@@ -0,0 +1 @@
../aoc2023/dx.py

1
get.py Symbolic link
View File

@@ -0,0 +1 @@
../aocpy/get.py

17
get.sh
View File

@@ -1,17 +0,0 @@
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <day>"
exit 1
fi
DAY=$1
SESSION_COOKIE=$(keyring get aoc-session-cookie felixm)
echo $SESSION_COOKIE
curl "https://adventofcode.com/2022/day/$DAY/input" --cookie "session=$SESSION_COOKIE" > "i$DAY.txt"
# Get instructions as markdown file.
# curl "https://adventofcode.com/2022/day/$DAY" --cookie "session=$SESSION_COOKIE" > "day$DAY.html"
# pandoc -f html -t markdown "day$DAY.html" -o "d$DAY.md"
# rm "day$DAY.html"

18
lib.py
View File

@@ -1,18 +0,0 @@
import re
def str_to_single_int(line: str) -> int:
line = line.replace(" ", "")
r = re.compile(r"-?\d+")
for m in r.findall(line):
return int(m)
raise Exception("No single digit sequence in '{line}'")
def str_to_int_list(line: str) -> list[int]:
r = re.compile(r"-?\d+")
return list(map(int, r.findall(line)))
def str_to_lines_no_empty(text: str) -> list[str]:
return list(filter(lambda l: l.strip() != "", text.splitlines()))
def str_to_lines(text: str) -> list[str]:
return list(text.splitlines())

1
lib.py Symbolic link
View File

@@ -0,0 +1 @@
../aoc2023/lib.py

1
monitor.py Symbolic link
View File

@@ -0,0 +1 @@
../aoc2023/monitor.py