From 846f8e73c2ca86751cfe012db1b717ae7d8a62de Mon Sep 17 00:00:00 2001 From: AKP Date: Wed, 4 Dec 2024 16:47:03 +0000 Subject: [PATCH] 2024.04 --- challenges/2024/04-ceresSearch/README.md | 5 ++ challenges/2024/04-ceresSearch/main.py | 81 ++++++++++++++++++++++ challenges/2024/04-ceresSearch/tests.json | 14 ++++ challenges/2024/README.md | 5 +- challenges/2024/benchmark-graph.png | Bin 27963 -> 32673 bytes challenges/2024/benchmarks.jsonl | 2 + 6 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 challenges/2024/04-ceresSearch/README.md create mode 100644 challenges/2024/04-ceresSearch/main.py create mode 100644 challenges/2024/04-ceresSearch/tests.json diff --git a/challenges/2024/04-ceresSearch/README.md b/challenges/2024/04-ceresSearch/README.md new file mode 100644 index 0000000..adb5ed9 --- /dev/null +++ b/challenges/2024/04-ceresSearch/README.md @@ -0,0 +1,5 @@ +# [Day 4: Ceres Search](https://adventofcode.com/2024/day/4) + +Part two is: +* less than 1976 +* also, somewhat obviously, less than 1978 \ No newline at end of file diff --git a/challenges/2024/04-ceresSearch/main.py b/challenges/2024/04-ceresSearch/main.py new file mode 100644 index 0000000..aa456e2 --- /dev/null +++ b/challenges/2024/04-ceresSearch/main.py @@ -0,0 +1,81 @@ +import sys +import gridutil.grid as grid +import gridutil.coord as coord + + +def parse(instr: str) -> grid.Grid: + return grid.parse(instr.upper()) + + +def one(instr: str): + wordsearch = parse(instr) + + seq_starts = list( + map(lambda x: x[0], filter(lambda x: x[1] == "X", wordsearch.items())) + ) + detected_sequences = set() + + for start_pos in seq_starts: + for xdir in [-1, 0, 1]: + for ydir in [-1, 0, 1]: + + if xdir == 0 and ydir == 0: + continue + + delta = coord.Coordinate(xdir, ydir) + + ok = True + for i, v in enumerate("XMAS"): + if not ok: + break + + g = wordsearch.get(coord.add(start_pos, coord.mult(delta, i)), "-") + ok = g == v + + if ok: + detected_sequences.add((start_pos, delta)) + + return len(detected_sequences) + + +def check_cross_adjacents(s: str) -> bool: + return s == "SM" or s == "MS" + + +def two(instr: str): + wordsearch = parse(instr) + + seq_starts = list( + map(lambda x: x[0], filter(lambda x: x[1] == "A", wordsearch.items())) + ) + detected_sequences = set() + + for start_pos in seq_starts: + + a = wordsearch.get(coord.add(start_pos, (-1, -1)), "") + wordsearch.get( + coord.add(start_pos, (1, 1)), "" + ) + b = wordsearch.get(coord.add(start_pos, (-1, 1)), "") + wordsearch.get( + coord.add(start_pos, (1, -1)), "" + ) + + if check_cross_adjacents(a) and check_cross_adjacents(b): + detected_sequences.add(start_pos) + + return len(detected_sequences) + + +def _debug(*args, **kwargs): + kwargs["file"] = sys.stderr + print(*args, **kwargs) + + +if __name__ == "__main__": + if len(sys.argv) < 2 or sys.argv[1] not in ["1", "2"]: + print("Missing day argument", file=sys.stderr) + sys.exit(1) + inp = sys.stdin.read().strip() + if sys.argv[1] == "1": + print(one(inp)) + else: + print(two(inp)) diff --git a/challenges/2024/04-ceresSearch/tests.json b/challenges/2024/04-ceresSearch/tests.json new file mode 100644 index 0000000..9c92e6f --- /dev/null +++ b/challenges/2024/04-ceresSearch/tests.json @@ -0,0 +1,14 @@ +{ + "1": [ + { + "is": "18", + "input": "MMMSXXMASM\nMSAMXMSMSA\nAMXSXMAAMM\nMSAMASMSMX\nXMASAMXAMM\nXXAMMXXAMA\nSMSMSASXSS\nSAXAMASAAA\nMAMMMXMMMM\nMXMXAXMASX\n\n" + } + ], + "2": [ + { + "is": "9", + "input": "MMMSXXMASM\nMSAMXMSMSA\nAMXSXMAAMM\nMSAMASMSMX\nXMASAMXAMM\nXXAMMXXAMA\nSMSMSASXSS\nSAXAMASAAA\nMAMMMXMMMM\nMXMXAXMASX\n\n" + } + ] +} \ No newline at end of file diff --git a/challenges/2024/README.md b/challenges/2024/README.md index 3d13da2..735acb0 100644 --- a/challenges/2024/README.md +++ b/challenges/2024/README.md @@ -4,7 +4,7 @@ Solutions to the [2024 Advent of Code](https://adventofcode.com/2024)! --- -Total stars: **6 ★** +Total stars: **8 ★** ![Benchmark graph](./benchmark-graph.png) @@ -16,4 +16,5 @@ A day denoted with a star means it has a visualisation. |-------------------------------------|--------|----------------------|-------| | 01 - Historian Hysteria | ★ ★ | Python | The reading comprehension was the hardest part of this. | | 02 - Red-Nosed Reindeer | ★ ★ | Python || -| 03 - Mull It Over | ★ ★ | Python | The first instance of Advent of Parsing this year! | \ No newline at end of file +| 03 - Mull It Over | ★ ★ | Python | The first instance of Advent of Parsing this year! | +| 04 - Ceres Search | ★ ★ | Python | When it says a cross, it does not mean a plus. | \ No newline at end of file diff --git a/challenges/2024/benchmark-graph.png b/challenges/2024/benchmark-graph.png index 9b0aa1472e7b306f736d782bbb75f953a24cc5a8..a0f44ed4b8e45377e885f973b61efd55e57f5371 100644 GIT binary patch literal 32673 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 UT9x1Vl^o@`!WsEjau+=Q1Aj@fZ2$lO literal 27963 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%0Dc@u<-d% zu!IQF9dh?T+k;Q@;e+agHH$!LL<%FaE0DV!aE@DxiH(mPX7ujphk+#9OySNN3HTN4 z9I^H_kMfOy0pPLl2dW7C)4yHE4h~u`Z0bb!C;?pI5BBfH;lz39xf+%JFcBz;AxLpu yNKJaO0fSFHV*DDL=l@Htz_6uH@9*Z3XlG^tpVPb4eDPiS;#wYmO^tVG#=ii2b$!_Y diff --git a/challenges/2024/benchmarks.jsonl b/challenges/2024/benchmarks.jsonl index 66053fb..4b1a70b 100644 --- a/challenges/2024/benchmarks.jsonl +++ b/challenges/2024/benchmarks.jsonl @@ -4,3 +4,5 @@ {"day": 2, "part": 2, "runner": "py", "min": 0.02489948272705078, "max": 0.0319674015045166, "avg": 0.026371052265167238, "n": 100} {"day": 3, "part": 1, "runner": "py", "min": 0.02116227149963379, "max": 0.03153491020202637, "avg": 0.022634525299072266, "n": 100} {"day": 3, "part": 2, "runner": "py", "min": 0.02115607261657715, "max": 0.03121805191040039, "avg": 0.022722084522247315, "n": 100} +{"day": 4, "part": 1, "runner": "py", "min": 0.17342424392700195, "max": 0.3778045177459717, "avg": 0.18848238706588746, "n": 100} +{"day": 4, "part": 2, "runner": "py", "min": 0.05280470848083496, "max": 0.06299543380737305, "avg": 0.05627016305923462, "n": 100}