Remove parse_input helper
This commit is contained in:
parent
96c4c1383a
commit
08288964bd
11 changed files with 83 additions and 66 deletions
|
|
@ -101,9 +101,8 @@ for i in [str(n).zfill(2) for n in range(1, 26)]:
|
||||||
["n", "title", "part_1", "part_2"],
|
["n", "title", "part_1", "part_2"],
|
||||||
0,
|
0,
|
||||||
)
|
)
|
||||||
filepath = f"./input/{str(n).zfill(2)}.txt"
|
with open(f"./input/{i}.txt", "r") as f:
|
||||||
with open(filepath, "r") as f:
|
data = f.read().strip()
|
||||||
data = f.read()
|
|
||||||
headline(day.n, day.title)
|
headline(day.n, day.title)
|
||||||
try:
|
try:
|
||||||
data = day.presolve(data)
|
data = day.presolve(data)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import re
|
import re
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 1
|
n = 1
|
||||||
title = "Trebuchet?!"
|
title = "Trebuchet?!"
|
||||||
|
|
@ -11,7 +11,7 @@ def part_1(data):
|
||||||
s = [int(c) for c in s if c.isdigit()]
|
s = [int(c) for c in s if c.isdigit()]
|
||||||
return s[0] * 10 + s[-1]
|
return s[0] * 10 + s[-1]
|
||||||
|
|
||||||
return sum(value(line) for line in data)
|
return sum(value(line) for line in data.split())
|
||||||
|
|
||||||
|
|
||||||
@answer(2, "Calibration values sum: {}, including spelled out digits")
|
@answer(2, "Calibration values sum: {}, including spelled out digits")
|
||||||
|
|
@ -37,19 +37,15 @@ def part_2(data):
|
||||||
]
|
]
|
||||||
return s[0] * 10 + s[-1]
|
return s[0] * 10 + s[-1]
|
||||||
|
|
||||||
return sum(value(line) for line in data)
|
return sum(value(line) for line in data.split())
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data.split()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parsed = parse_input()
|
with open(f"./input/01.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
a = part_1(parsed)
|
a = part_1(inp)
|
||||||
b = part_2(parsed)
|
b = part_2(inp)
|
||||||
|
|
||||||
assert a == 54634
|
assert a == 54634
|
||||||
assert b == 53855
|
assert b == 53855
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import re
|
import re
|
||||||
from math import prod
|
from math import prod
|
||||||
from output import answer, puzzleinput
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from output import answer
|
||||||
|
|
||||||
n = 2
|
n = 2
|
||||||
title = "Cube Conundrum"
|
title = "Cube Conundrum"
|
||||||
|
|
@ -38,16 +38,12 @@ def part_2(data):
|
||||||
return sum(power(game) for game in data.splitlines())
|
return sum(power(game) for game in data.splitlines())
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parsed = parse_input()
|
with open(f"./input/02.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
a = part_1(parsed)
|
a = part_1(inp)
|
||||||
b = part_2(parsed)
|
b = part_2(inp)
|
||||||
|
|
||||||
assert a == 2439
|
assert a == 2439
|
||||||
assert b == 63711
|
assert b == 63711
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from collections import deque
|
from collections import deque
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 3
|
n = 3
|
||||||
title = "Gear Ratios"
|
title = "Gear Ratios"
|
||||||
|
|
@ -18,6 +18,7 @@ def part_2(presolved):
|
||||||
|
|
||||||
|
|
||||||
def presolve(data):
|
def presolve(data):
|
||||||
|
data = data.split()
|
||||||
adj = (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)
|
adj = (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)
|
||||||
w = len(data[0])
|
w = len(data[0])
|
||||||
h = len(data)
|
h = len(data)
|
||||||
|
|
@ -54,13 +55,12 @@ def presolve(data):
|
||||||
return sum(s), sum(gr)
|
return sum(s), sum(gr)
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data.split()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parsed = presolve(parse_input())
|
with open(f"./input/03.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
|
parsed = presolve(inp)
|
||||||
|
|
||||||
a = part_1(parsed)
|
a = part_1(parsed)
|
||||||
b = part_2(parsed)
|
b = part_2(parsed)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import re
|
import re
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 4
|
n = 4
|
||||||
title = "Scratchcards"
|
title = "Scratchcards"
|
||||||
|
|
@ -18,11 +18,6 @@ def part_2(presolved):
|
||||||
return count
|
return count
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def presolve(data):
|
def presolve(data):
|
||||||
scores = []
|
scores = []
|
||||||
count = defaultdict(int)
|
count = defaultdict(int)
|
||||||
|
|
@ -40,7 +35,9 @@ def presolve(data):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
inp = parse_input()
|
with open(f"./input/04.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
inp = presolve(inp)
|
inp = presolve(inp)
|
||||||
|
|
||||||
a = part_1(inp)
|
a = part_1(inp)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import re
|
||||||
from itertools import repeat
|
from itertools import repeat
|
||||||
from math import inf
|
from math import inf
|
||||||
from multiprocessing import Pool, freeze_support
|
from multiprocessing import Pool, freeze_support
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 5
|
n = 5
|
||||||
title = "If You Give A Seed A Fertilizer"
|
title = "If You Give A Seed A Fertilizer"
|
||||||
|
|
@ -22,11 +22,6 @@ def part_2(data):
|
||||||
return _bruteforce(seeds, process, 8)
|
return _bruteforce(seeds, process, 8)
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def _bruteforce(seeds, process, p=1):
|
def _bruteforce(seeds, process, p=1):
|
||||||
processes = [[tuple(map(int, line.split())) for line in step.splitlines()[1:]] for step in process]
|
processes = [[tuple(map(int, line.split())) for line in step.splitlines()[1:]] for step in process]
|
||||||
|
|
||||||
|
|
@ -39,6 +34,7 @@ def _bruteforce(seeds, process, p=1):
|
||||||
sm += pool.starmap(_nearest, zip(parts, repeat(processes)))
|
sm += pool.starmap(_nearest, zip(parts, repeat(processes)))
|
||||||
return min(sm)
|
return min(sm)
|
||||||
|
|
||||||
|
|
||||||
def _nearest(start_r, processes):
|
def _nearest(start_r, processes):
|
||||||
a, b = start_r
|
a, b = start_r
|
||||||
nearest = inf
|
nearest = inf
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from math import prod, sqrt, ceil, floor
|
from math import prod, sqrt, ceil, floor
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 6
|
n = 6
|
||||||
title = "Wait For It"
|
title = "Wait For It"
|
||||||
|
|
@ -15,11 +15,6 @@ def part_2(presolved):
|
||||||
return presolved[1]
|
return presolved[1]
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def presolve(data):
|
def presolve(data):
|
||||||
values = data.split()
|
values = data.split()
|
||||||
l = len(values) // 2
|
l = len(values) // 2
|
||||||
|
|
@ -40,7 +35,8 @@ def presolve(data):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
inp = parse_input()
|
with open(f"./input/06.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
inp = presolve(inp)
|
inp = presolve(inp)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 7
|
n = 7
|
||||||
title = "Camel Cards"
|
title = "Camel Cards"
|
||||||
|
|
@ -15,11 +15,6 @@ def part_2(data):
|
||||||
return _solve(data.replace("J", "0"))
|
return _solve(data.replace("J", "0"))
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def _solve(data):
|
def _solve(data):
|
||||||
return sum(
|
return sum(
|
||||||
c[-1] * i for i, c in enumerate(sorted(_hand(h) for h in data.splitlines()), 1)
|
c[-1] * i for i, c in enumerate(sorted(_hand(h) for h in data.splitlines()), 1)
|
||||||
|
|
@ -89,7 +84,8 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
doctest.testmod()
|
doctest.testmod()
|
||||||
|
|
||||||
inp = parse_input()
|
with open(f"./input/07.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
a = part_1(inp)
|
a = part_1(inp)
|
||||||
b = part_2(inp)
|
b = part_2(inp)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import re
|
import re
|
||||||
from math import lcm
|
from math import lcm
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 8
|
n = 8
|
||||||
title = "Haunted Wasteland"
|
title = "Haunted Wasteland"
|
||||||
|
|
@ -18,11 +18,6 @@ def part_2(presolved):
|
||||||
return ghost_meet_point
|
return ghost_meet_point
|
||||||
|
|
||||||
|
|
||||||
@puzzleinput(n)
|
|
||||||
def parse_input(data):
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def presolve(data):
|
def presolve(data):
|
||||||
d, els = data.split("\n\n")
|
d, els = data.split("\n\n")
|
||||||
r = len(d)
|
r = len(d)
|
||||||
|
|
@ -54,7 +49,8 @@ def presolve(data):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
inp = parse_input()
|
with open(f"./input/08.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
inp = presolve(inp)
|
inp = presolve(inp)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from output import answer, puzzleinput
|
from output import answer
|
||||||
|
|
||||||
n = 9
|
n = 9
|
||||||
title = "Mirage Maintenance"
|
title = "Mirage Maintenance"
|
||||||
|
|
@ -30,7 +30,8 @@ def _solve(lines):
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
inp = parse_input()
|
with open(f"./input/09.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
a = part_1(inp)
|
a = part_1(inp)
|
||||||
b = part_2(inp)
|
b = part_2(inp)
|
||||||
|
|
|
||||||
44
2023-python/output/day_10.py
Normal file
44
2023-python/output/day_10.py
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
from output import answer
|
||||||
|
|
||||||
|
n = 10
|
||||||
|
title = "dddd"
|
||||||
|
|
||||||
|
|
||||||
|
@answer(1, "Answer is {}")
|
||||||
|
def part_1(data):
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
@answer(2, "Actually, answer is {}")
|
||||||
|
def part_2(data):
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
# uncomment to solve parts in one go
|
||||||
|
# def presolve(data):
|
||||||
|
# return data
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# use dummy data
|
||||||
|
inp = """
|
||||||
|
replace me
|
||||||
|
""".strip()
|
||||||
|
|
||||||
|
# uncomment to instead use stdin
|
||||||
|
# import sys; inp = sys.stdin.read().strip()
|
||||||
|
|
||||||
|
# uncomment to use AoC provided puzzle input
|
||||||
|
# with open(f"./input/10.txt", "r") as f:
|
||||||
|
# inp = f.read()
|
||||||
|
|
||||||
|
# uncomment to do initial data processing shared by part 1-2
|
||||||
|
# inp = presolve(inp)
|
||||||
|
|
||||||
|
a = part_1(inp)
|
||||||
|
# b = part_2(inp)
|
||||||
|
|
||||||
|
# uncomment and replace 0 with actual output to refactor code
|
||||||
|
# and ensure nonbreaking changes
|
||||||
|
# assert a == 0
|
||||||
|
# assert b == 0
|
||||||
Loading…
Add table
Reference in a new issue