From 08288964bdcbd47d11343eb0bac69d3f640f8c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Engl=C3=B6f=20Ytterstr=C3=B6m?= Date: Sat, 9 Dec 2023 17:40:50 +0100 Subject: [PATCH] Remove parse_input helper --- 2023-python/aoc.py | 5 ++-- 2023-python/output/day_01.py | 18 ++++++--------- 2023-python/output/day_02.py | 14 ++++-------- 2023-python/output/day_03.py | 14 ++++++------ 2023-python/output/day_04.py | 11 ++++----- 2023-python/output/day_05.py | 8 ++----- 2023-python/output/day_06.py | 10 +++----- 2023-python/output/day_07.py | 10 +++----- 2023-python/output/day_08.py | 10 +++----- 2023-python/output/day_09.py | 5 ++-- 2023-python/output/day_10.py | 44 ++++++++++++++++++++++++++++++++++++ 11 files changed, 83 insertions(+), 66 deletions(-) create mode 100644 2023-python/output/day_10.py diff --git a/2023-python/aoc.py b/2023-python/aoc.py index ae49a50..2f10cf8 100644 --- a/2023-python/aoc.py +++ b/2023-python/aoc.py @@ -101,9 +101,8 @@ for i in [str(n).zfill(2) for n in range(1, 26)]: ["n", "title", "part_1", "part_2"], 0, ) - filepath = f"./input/{str(n).zfill(2)}.txt" - with open(filepath, "r") as f: - data = f.read() + with open(f"./input/{i}.txt", "r") as f: + data = f.read().strip() headline(day.n, day.title) try: data = day.presolve(data) diff --git a/2023-python/output/day_01.py b/2023-python/output/day_01.py index 2f27529..f1f6483 100644 --- a/2023-python/output/day_01.py +++ b/2023-python/output/day_01.py @@ -1,5 +1,5 @@ import re -from output import answer, puzzleinput +from output import answer n = 1 title = "Trebuchet?!" @@ -11,7 +11,7 @@ def part_1(data): s = [int(c) for c in s if c.isdigit()] 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") @@ -37,19 +37,15 @@ def part_2(data): ] return s[0] * 10 + s[-1] - return sum(value(line) for line in data) - - -@puzzleinput(n) -def parse_input(data): - return data.split() + return sum(value(line) for line in data.split()) if __name__ == "__main__": - parsed = parse_input() + with open(f"./input/01.txt", "r") as f: + inp = f.read().strip() - a = part_1(parsed) - b = part_2(parsed) + a = part_1(inp) + b = part_2(inp) assert a == 54634 assert b == 53855 diff --git a/2023-python/output/day_02.py b/2023-python/output/day_02.py index 3f4b4ec..d198b2e 100644 --- a/2023-python/output/day_02.py +++ b/2023-python/output/day_02.py @@ -1,7 +1,7 @@ import re from math import prod -from output import answer, puzzleinput from collections import defaultdict +from output import answer n = 2 title = "Cube Conundrum" @@ -38,16 +38,12 @@ def part_2(data): return sum(power(game) for game in data.splitlines()) -@puzzleinput(n) -def parse_input(data): - return data - - if __name__ == "__main__": - parsed = parse_input() + with open(f"./input/02.txt", "r") as f: + inp = f.read().strip() - a = part_1(parsed) - b = part_2(parsed) + a = part_1(inp) + b = part_2(inp) assert a == 2439 assert b == 63711 diff --git a/2023-python/output/day_03.py b/2023-python/output/day_03.py index ee8c7f2..b04c037 100644 --- a/2023-python/output/day_03.py +++ b/2023-python/output/day_03.py @@ -1,5 +1,5 @@ from collections import deque -from output import answer, puzzleinput +from output import answer n = 3 title = "Gear Ratios" @@ -18,6 +18,7 @@ def part_2(presolved): def presolve(data): + data = data.split() adj = (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1) w = len(data[0]) h = len(data) @@ -54,13 +55,12 @@ def presolve(data): return sum(s), sum(gr) -@puzzleinput(n) -def parse_input(data): - return data.split() - - 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) b = part_2(parsed) diff --git a/2023-python/output/day_04.py b/2023-python/output/day_04.py index 40afde8..2fe7400 100644 --- a/2023-python/output/day_04.py +++ b/2023-python/output/day_04.py @@ -1,6 +1,6 @@ import re from collections import defaultdict -from output import answer, puzzleinput +from output import answer n = 4 title = "Scratchcards" @@ -18,11 +18,6 @@ def part_2(presolved): return count -@puzzleinput(n) -def parse_input(data): - return data - - def presolve(data): scores = [] count = defaultdict(int) @@ -40,7 +35,9 @@ def presolve(data): if __name__ == "__main__": - inp = parse_input() + with open(f"./input/04.txt", "r") as f: + inp = f.read().strip() + inp = presolve(inp) a = part_1(inp) diff --git a/2023-python/output/day_05.py b/2023-python/output/day_05.py index 1a8c1e7..87a54ce 100644 --- a/2023-python/output/day_05.py +++ b/2023-python/output/day_05.py @@ -2,7 +2,7 @@ import re from itertools import repeat from math import inf from multiprocessing import Pool, freeze_support -from output import answer, puzzleinput +from output import answer n = 5 title = "If You Give A Seed A Fertilizer" @@ -22,11 +22,6 @@ def part_2(data): return _bruteforce(seeds, process, 8) -@puzzleinput(n) -def parse_input(data): - return data - - def _bruteforce(seeds, process, p=1): 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))) return min(sm) + def _nearest(start_r, processes): a, b = start_r nearest = inf diff --git a/2023-python/output/day_06.py b/2023-python/output/day_06.py index 2f604cf..0212a16 100644 --- a/2023-python/output/day_06.py +++ b/2023-python/output/day_06.py @@ -1,5 +1,5 @@ from math import prod, sqrt, ceil, floor -from output import answer, puzzleinput +from output import answer n = 6 title = "Wait For It" @@ -15,11 +15,6 @@ def part_2(presolved): return presolved[1] -@puzzleinput(n) -def parse_input(data): - return data - - def presolve(data): values = data.split() l = len(values) // 2 @@ -40,7 +35,8 @@ def presolve(data): if __name__ == "__main__": - inp = parse_input() + with open(f"./input/06.txt", "r") as f: + inp = f.read().strip() inp = presolve(inp) diff --git a/2023-python/output/day_07.py b/2023-python/output/day_07.py index 2cf31a4..be8f659 100644 --- a/2023-python/output/day_07.py +++ b/2023-python/output/day_07.py @@ -1,5 +1,5 @@ from collections import Counter -from output import answer, puzzleinput +from output import answer n = 7 title = "Camel Cards" @@ -15,11 +15,6 @@ def part_2(data): return _solve(data.replace("J", "0")) -@puzzleinput(n) -def parse_input(data): - return data - - def _solve(data): return sum( 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() - inp = parse_input() + with open(f"./input/07.txt", "r") as f: + inp = f.read().strip() a = part_1(inp) b = part_2(inp) diff --git a/2023-python/output/day_08.py b/2023-python/output/day_08.py index f82cbef..2bc692c 100644 --- a/2023-python/output/day_08.py +++ b/2023-python/output/day_08.py @@ -1,6 +1,6 @@ import re from math import lcm -from output import answer, puzzleinput +from output import answer n = 8 title = "Haunted Wasteland" @@ -18,11 +18,6 @@ def part_2(presolved): return ghost_meet_point -@puzzleinput(n) -def parse_input(data): - return data - - def presolve(data): d, els = data.split("\n\n") r = len(d) @@ -54,7 +49,8 @@ def presolve(data): if __name__ == "__main__": - inp = parse_input() + with open(f"./input/08.txt", "r") as f: + inp = f.read().strip() inp = presolve(inp) diff --git a/2023-python/output/day_09.py b/2023-python/output/day_09.py index 0cd5ad5..0f8d9ab 100644 --- a/2023-python/output/day_09.py +++ b/2023-python/output/day_09.py @@ -1,4 +1,4 @@ -from output import answer, puzzleinput +from output import answer n = 9 title = "Mirage Maintenance" @@ -30,7 +30,8 @@ def _solve(lines): if __name__ == "__main__": - inp = parse_input() + with open(f"./input/09.txt", "r") as f: + inp = f.read().strip() a = part_1(inp) b = part_2(inp) diff --git a/2023-python/output/day_10.py b/2023-python/output/day_10.py new file mode 100644 index 0000000..bb0c237 --- /dev/null +++ b/2023-python/output/day_10.py @@ -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