From a814f5fc07c5d7fab59651c8ff32525caa329852 Mon Sep 17 00:00:00 2001 From: narimiran Date: Fri, 13 Dec 2024 13:39:11 +0100 Subject: [PATCH] day 13 --- clojure/day13.clj | 214 +++++ clojure/tests/solutions_tests.clj | 3 +- index.md | 1 + inputs/13.txt | 1279 +++++++++++++++++++++++++++++ inputs/13_test.txt | 15 + 5 files changed, 1511 insertions(+), 1 deletion(-) create mode 100644 clojure/day13.clj create mode 100644 inputs/13.txt create mode 100644 inputs/13_test.txt diff --git a/clojure/day13.clj b/clojure/day13.clj new file mode 100644 index 0000000..7fc1c2a --- /dev/null +++ b/clojure/day13.clj @@ -0,0 +1,214 @@ +^{:nextjournal.clerk/visibility {:code :hide :result :hide}} +(ns day13 + {:nextjournal.clerk/auto-expand-results? true + :nextjournal.clerk/toc :collapsed} + (:require + aoc + [nextjournal.clerk :as clerk])) + + +;; # Day 13: Claw Contraption +;; +;; Today we're on a tropical island, and in the lobby of a resort there are +;; lots of claw machines.\ +;; They have two buttons, `A` and `B`, which move the claw different amount +;; in the x- and y- directions. +;; We win a prize if, after N amount of presses, we are at the exact +;; x-y location of the prize. +;; +;; For example: +;; +(def example "Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279") + + +;; Here we have four different machines.\ +;; To press button `A` we need 3 tokens, to press button `B` we need 1 token. +;; Our task is to find the minimum amount of tokens needed to win all +;; possible prizes (on some machines it is impossible to win a prize). + + + + + +;; ## Input parsing +;; +;; Each machine is in its own paragraph, so the `aoc/parse-paragraphs` +;; function will come handy. +;; The description format is always the same, and we're only interested +;; in the numbers for each machine: +;; +(defn parse-data [input] + (aoc/parse-paragraphs input :ints)) + +(def example-data (parse-data example)) +(def data (parse-data (aoc/read-input 13))) + + + + +;; ## Math +;; +;; The task for Part 1 says: +;; > You estimate that each button would need to be pressed no more +;; > than **100 times** to win a prize. +;; +;; Which, if you're familiar with AoC, looks like a bait. +;; You should immediately get a hint that for Part 2 the numbers will be +;; much higher and we won't be able to check every single combination +;; until we find a solution. +;; +;; For each machine, we need to solve a system of two equations with +;; two unknowns: +;; ``` +;; ax*a + bx*b = px +;; ay*a + by*b = py +;; ``` +;; where `a` and `b` are unknown amounts of button presses for button `A` +;; and button `B`, respectively.\ +;; For each machine, `ax` and `ay` are the movements for each press of +;; button `A`, and `bx` and `by` are the movements for button `B`. +;; The prize is at `[px py]`. +;; +;; At first, I solved these equations on paper, manually doing the +;; subtitutions. +;; +;; There is another way (well, it is the same stuff, just written/calculated +;; a bit differently). +;; This system can also been written as: +;; +^{:nextjournal.clerk/visibility {:code :hide}} +(clerk/tex " +\\begin{bmatrix} +a_x & b_x \\\\ +a_y & b_y +\\end{bmatrix} +\\begin{bmatrix} +a \\\\ +b +\\end{bmatrix} += +\\begin{bmatrix} +p_x \\\\ +p_y +\\end{bmatrix} +") + + +;; We can solve this system using +;; [Cramer's rule](https://en.wikipedia.org/wiki/Cramer's_rule#Applications). +;; (Last time I've used it, I was in highschool, 20+ years ago!) +;; +;; We need to find three determinants: +;; - `det-M`, determinant of the original matrix +;; - `det-a`, we substitute `ax` and `ay` in the original matrix with +;; `px` and `py` and find a determinant +;; - `det-b`, we substitute `bx` and `by` in the original matrix with +;; `px` and `py` and find a determinant +;; +^{:nextjournal.clerk/visibility {:code :hide}} +(clerk/tex " +{\\det}_M += +\\begin{vmatrix} +a_x & b_x \\\\ +a_y & b_y +\\end{vmatrix} + +\\hspace{1 cm} + +{\\det}_a += +\\begin{vmatrix} +p_x & b_x \\\\ +p_y & b_y +\\end{vmatrix} + +\\hspace{1 cm} + +{\\det}_b += +\\begin{vmatrix} +a_x & p_x \\\\ +a_y & p_y +\\end{vmatrix} +") + +;; To get the solution for `a` and `b`, we need to divide the determinants: +;; `det-a / det-M` and `det-b / det-M`, respectively. + + + + + + +;; ## Solution +;; +;; We have all we need to solve the equations. +;; +;; For our task, valid solutions are only those for which `a` and `b` are integers. +;; (We cannot press a button 0.1 times :P).\ +;; If a solution is valid, we multiply the presses of button `A` by their +;; price of 3 tokens, and add presses of `B` (costing 1 token): +;; +(defn det [a1 a2 b1 b2] + (- (* a1 b2) (* b1 a2))) + +(defn solve-eq [pos-incr [[ax ay] [bx by] [px py]]] + (let [px (+ pos-incr px) + py (+ pos-incr py) + det-M (det ax ay bx by) + det-a (det px py bx by) + det-b (det ax ay px py) + a (/ det-a det-M) + b (/ det-b det-M)] + (if (or (ratio? a) (ratio? b)) + 0 + (+ (* 3 a) b)))) + + +;; The only difference between Part 1 and Part 2 is that for the second part +;; we need to increase the coordinates of a prize by `10000000000000` in +;; each direction: +;; +(defn solve [data] + (vec + (for [pos-incr [0 10000000000000]] + (aoc/sum-map (partial solve-eq pos-incr) data)))) + + +(solve example-data) +(solve data) + + + + + +;; ## Conclusion +;; +;; Today was mainly a math task. +;; +;; If you know how to solve a system of two linear equations with two unknowns, +;; the hardest thing to code (if you don't have some helpers ready ;)) +;; is to separate the input into different groups and parse integers in each. + + + + +^{:nextjournal.clerk/visibility {:code :hide :result :hide}} +(defn -main [input] + (let [data (parse-data input)] + (solve data))) diff --git a/clojure/tests/solutions_tests.clj b/clojure/tests/solutions_tests.clj index 5267968..ac1f7be 100644 --- a/clojure/tests/solutions_tests.clj +++ b/clojure/tests/solutions_tests.clj @@ -2,7 +2,7 @@ (:require day01 day02 day03 day04 day05 day06 day07 day08 day09 day10 - day11 day12 ;day13 day14 day15 + day11 day12 day13 ;day14 day15 ;; day16 day17 day18 day19 day20 ;; day21 day22 day23 day24 day25 [clojure.test :refer [deftest is run-tests successful?]])) @@ -35,6 +35,7 @@ (check-day 10 [36 81] [820 1786]) (check-day 11 [55312 65601038650482] [183435 218279375708592]) (check-day 12 [1930 1206] [1464678 877492]) +(check-day 13 [480 875318608908] [27105 101726882250942]) (let [summary (run-tests)] diff --git a/index.md b/index.md index 3ac9e45..86bae0f 100644 --- a/index.md +++ b/index.md @@ -65,4 +65,5 @@ Task | Notebook | Comment [Day 10: Hoof It](https://adventofcode.com/2024/day/10) | [day10.clj](clojure/day10) | Finally some pathfinding! [Day 11: Plutonian Pebbles](https://adventofcode.com/2024/day/11) | [day11.clj](clojure/day11) | Episode VI: Return of the Lanternfish [Day 12: Garden Groups](https://adventofcode.com/2024/day/12) | [day12.clj](clojure/day12) | Turns = sides. +[Day 13: Claw Contraption](https://adventofcode.com/2024/day/13) | [day13.clj](clojure/day13) | Kosmo Cramer! diff --git a/inputs/13.txt b/inputs/13.txt new file mode 100644 index 0000000..34be663 --- /dev/null +++ b/inputs/13.txt @@ -0,0 +1,1279 @@ +Button A: X+54, Y+22 +Button B: X+36, Y+62 +Prize: X=19754, Y=14184 + +Button A: X+20, Y+68 +Button B: X+34, Y+13 +Prize: X=15660, Y=15792 + +Button A: X+63, Y+17 +Button B: X+11, Y+28 +Prize: X=2658, Y=11605 + +Button A: X+15, Y+56 +Button B: X+74, Y+29 +Prize: X=9393, Y=11622 + +Button A: X+34, Y+97 +Button B: X+83, Y+35 +Prize: X=3876, Y=4197 + +Button A: X+14, Y+62 +Button B: X+75, Y+27 +Prize: X=12989, Y=4061 + +Button A: X+46, Y+17 +Button B: X+15, Y+54 +Prize: X=15841, Y=336 + +Button A: X+19, Y+61 +Button B: X+69, Y+12 +Prize: X=204, Y=7413 + +Button A: X+34, Y+14 +Button B: X+29, Y+40 +Prize: X=2353, Y=10368 + +Button A: X+64, Y+32 +Button B: X+25, Y+48 +Prize: X=3273, Y=304 + +Button A: X+18, Y+60 +Button B: X+66, Y+30 +Prize: X=11594, Y=2330 + +Button A: X+65, Y+47 +Button B: X+11, Y+29 +Prize: X=4677, Y=195 + +Button A: X+13, Y+23 +Button B: X+42, Y+14 +Prize: X=7115, Y=12417 + +Button A: X+81, Y+55 +Button B: X+26, Y+93 +Prize: X=2703, Y=5678 + +Button A: X+50, Y+96 +Button B: X+74, Y+20 +Prize: X=8694, Y=9856 + +Button A: X+19, Y+54 +Button B: X+74, Y+36 +Prize: X=6145, Y=9170 + +Button A: X+45, Y+76 +Button B: X+43, Y+15 +Prize: X=4194, Y=5627 + +Button A: X+28, Y+91 +Button B: X+94, Y+48 +Prize: X=2282, Y=2009 + +Button A: X+70, Y+35 +Button B: X+33, Y+83 +Prize: X=4786, Y=3856 + +Button A: X+14, Y+89 +Button B: X+38, Y+40 +Prize: X=2186, Y=3415 + +Button A: X+55, Y+19 +Button B: X+43, Y+79 +Prize: X=4737, Y=2757 + +Button A: X+32, Y+76 +Button B: X+60, Y+17 +Prize: X=11124, Y=5467 + +Button A: X+33, Y+62 +Button B: X+50, Y+21 +Prize: X=4940, Y=12625 + +Button A: X+56, Y+14 +Button B: X+48, Y+92 +Prize: X=2888, Y=962 + +Button A: X+14, Y+58 +Button B: X+83, Y+30 +Prize: X=6249, Y=5488 + +Button A: X+47, Y+83 +Button B: X+47, Y+11 +Prize: X=7153, Y=15685 + +Button A: X+35, Y+68 +Button B: X+52, Y+16 +Prize: X=12241, Y=14956 + +Button A: X+46, Y+72 +Button B: X+56, Y+25 +Prize: X=6054, Y=4401 + +Button A: X+35, Y+57 +Button B: X+43, Y+14 +Prize: X=10516, Y=12390 + +Button A: X+29, Y+56 +Button B: X+41, Y+25 +Prize: X=6288, Y=2319 + +Button A: X+73, Y+19 +Button B: X+59, Y+86 +Prize: X=9965, Y=8669 + +Button A: X+13, Y+43 +Button B: X+49, Y+13 +Prize: X=12137, Y=19559 + +Button A: X+17, Y+65 +Button B: X+67, Y+22 +Prize: X=1910, Y=15266 + +Button A: X+55, Y+27 +Button B: X+11, Y+43 +Prize: X=7767, Y=5007 + +Button A: X+26, Y+18 +Button B: X+35, Y+94 +Prize: X=4719, Y=9616 + +Button A: X+37, Y+81 +Button B: X+58, Y+13 +Prize: X=11010, Y=1876 + +Button A: X+66, Y+43 +Button B: X+17, Y+88 +Prize: X=6227, Y=5057 + +Button A: X+36, Y+66 +Button B: X+61, Y+31 +Prize: X=1642, Y=10702 + +Button A: X+54, Y+17 +Button B: X+15, Y+50 +Prize: X=17444, Y=2332 + +Button A: X+33, Y+74 +Button B: X+47, Y+16 +Prize: X=1127, Y=13206 + +Button A: X+45, Y+93 +Button B: X+84, Y+43 +Prize: X=9867, Y=10858 + +Button A: X+35, Y+99 +Button B: X+64, Y+33 +Prize: X=3780, Y=5511 + +Button A: X+29, Y+62 +Button B: X+46, Y+24 +Prize: X=14412, Y=6932 + +Button A: X+91, Y+18 +Button B: X+21, Y+20 +Prize: X=9303, Y=2474 + +Button A: X+61, Y+34 +Button B: X+30, Y+75 +Prize: X=6835, Y=7015 + +Button A: X+32, Y+82 +Button B: X+46, Y+12 +Prize: X=7126, Y=14580 + +Button A: X+30, Y+47 +Button B: X+36, Y+11 +Prize: X=13922, Y=14563 + +Button A: X+79, Y+39 +Button B: X+12, Y+43 +Prize: X=15040, Y=13839 + +Button A: X+15, Y+14 +Button B: X+20, Y+81 +Prize: X=1075, Y=1502 + +Button A: X+35, Y+80 +Button B: X+45, Y+11 +Prize: X=10380, Y=11870 + +Button A: X+50, Y+36 +Button B: X+21, Y+58 +Prize: X=4389, Y=3546 + +Button A: X+31, Y+95 +Button B: X+60, Y+14 +Prize: X=5432, Y=4076 + +Button A: X+96, Y+20 +Button B: X+64, Y+77 +Prize: X=3424, Y=2687 + +Button A: X+15, Y+51 +Button B: X+60, Y+26 +Prize: X=1505, Y=19741 + +Button A: X+37, Y+12 +Button B: X+33, Y+78 +Prize: X=10344, Y=13604 + +Button A: X+70, Y+93 +Button B: X+84, Y+21 +Prize: X=9184, Y=8034 + +Button A: X+33, Y+85 +Button B: X+99, Y+59 +Prize: X=4356, Y=2988 + +Button A: X+26, Y+27 +Button B: X+13, Y+60 +Prize: X=1105, Y=3240 + +Button A: X+55, Y+31 +Button B: X+21, Y+46 +Prize: X=7181, Y=11070 + +Button A: X+20, Y+54 +Button B: X+41, Y+32 +Prize: X=2979, Y=3400 + +Button A: X+35, Y+19 +Button B: X+33, Y+60 +Prize: X=10334, Y=11024 + +Button A: X+84, Y+21 +Button B: X+29, Y+79 +Prize: X=9575, Y=6340 + +Button A: X+58, Y+24 +Button B: X+15, Y+64 +Prize: X=10518, Y=6264 + +Button A: X+41, Y+12 +Button B: X+45, Y+69 +Prize: X=10120, Y=8966 + +Button A: X+87, Y+28 +Button B: X+14, Y+67 +Prize: X=6242, Y=6571 + +Button A: X+12, Y+28 +Button B: X+65, Y+24 +Prize: X=1515, Y=12044 + +Button A: X+85, Y+24 +Button B: X+29, Y+37 +Prize: X=7600, Y=2434 + +Button A: X+34, Y+92 +Button B: X+94, Y+69 +Prize: X=9882, Y=12282 + +Button A: X+11, Y+37 +Button B: X+23, Y+12 +Prize: X=848, Y=8448 + +Button A: X+52, Y+28 +Button B: X+33, Y+63 +Prize: X=3429, Y=6843 + +Button A: X+57, Y+13 +Button B: X+56, Y+55 +Prize: X=4314, Y=1744 + +Button A: X+81, Y+24 +Button B: X+12, Y+59 +Prize: X=13487, Y=6933 + +Button A: X+72, Y+50 +Button B: X+15, Y+40 +Prize: X=8927, Y=9290 + +Button A: X+68, Y+27 +Button B: X+16, Y+30 +Prize: X=2728, Y=2904 + +Button A: X+66, Y+13 +Button B: X+54, Y+65 +Prize: X=6060, Y=1846 + +Button A: X+56, Y+86 +Button B: X+88, Y+44 +Prize: X=5840, Y=4138 + +Button A: X+44, Y+80 +Button B: X+46, Y+15 +Prize: X=15084, Y=8430 + +Button A: X+50, Y+18 +Button B: X+13, Y+60 +Prize: X=6386, Y=6944 + +Button A: X+15, Y+63 +Button B: X+67, Y+14 +Prize: X=12210, Y=802 + +Button A: X+22, Y+65 +Button B: X+65, Y+33 +Prize: X=2817, Y=4983 + +Button A: X+23, Y+37 +Button B: X+51, Y+11 +Prize: X=4351, Y=1387 + +Button A: X+58, Y+39 +Button B: X+14, Y+50 +Prize: X=2678, Y=3343 + +Button A: X+13, Y+80 +Button B: X+65, Y+68 +Prize: X=4784, Y=5536 + +Button A: X+47, Y+93 +Button B: X+84, Y+33 +Prize: X=5496, Y=3948 + +Button A: X+51, Y+13 +Button B: X+21, Y+58 +Prize: X=13064, Y=14007 + +Button A: X+38, Y+22 +Button B: X+12, Y+26 +Prize: X=1962, Y=11422 + +Button A: X+51, Y+13 +Button B: X+34, Y+62 +Prize: X=13062, Y=2106 + +Button A: X+31, Y+11 +Button B: X+44, Y+78 +Prize: X=4550, Y=7654 + +Button A: X+97, Y+27 +Button B: X+48, Y+63 +Prize: X=10321, Y=3816 + +Button A: X+59, Y+17 +Button B: X+27, Y+78 +Prize: X=978, Y=18744 + +Button A: X+68, Y+27 +Button B: X+25, Y+64 +Prize: X=2115, Y=1002 + +Button A: X+19, Y+33 +Button B: X+91, Y+19 +Prize: X=7873, Y=2689 + +Button A: X+39, Y+96 +Button B: X+47, Y+16 +Prize: X=5548, Y=8672 + +Button A: X+58, Y+11 +Button B: X+20, Y+80 +Prize: X=4668, Y=4086 + +Button A: X+13, Y+33 +Button B: X+56, Y+14 +Prize: X=3696, Y=1396 + +Button A: X+21, Y+45 +Button B: X+34, Y+13 +Prize: X=15420, Y=12003 + +Button A: X+12, Y+22 +Button B: X+77, Y+27 +Prize: X=2487, Y=1477 + +Button A: X+58, Y+89 +Button B: X+70, Y+19 +Prize: X=5774, Y=1787 + +Button A: X+25, Y+63 +Button B: X+53, Y+13 +Prize: X=13823, Y=19135 + +Button A: X+45, Y+36 +Button B: X+34, Y+99 +Prize: X=6416, Y=9369 + +Button A: X+81, Y+35 +Button B: X+18, Y+50 +Prize: X=4203, Y=5025 + +Button A: X+81, Y+28 +Button B: X+12, Y+58 +Prize: X=2592, Y=5258 + +Button A: X+57, Y+21 +Button B: X+19, Y+67 +Prize: X=19310, Y=9410 + +Button A: X+62, Y+48 +Button B: X+25, Y+84 +Prize: X=1505, Y=2652 + +Button A: X+98, Y+18 +Button B: X+20, Y+26 +Prize: X=9334, Y=1960 + +Button A: X+23, Y+42 +Button B: X+33, Y+13 +Prize: X=11779, Y=4858 + +Button A: X+12, Y+36 +Button B: X+75, Y+39 +Prize: X=4355, Y=8495 + +Button A: X+20, Y+34 +Button B: X+37, Y+18 +Prize: X=10274, Y=2754 + +Button A: X+89, Y+26 +Button B: X+18, Y+44 +Prize: X=4524, Y=1864 + +Button A: X+11, Y+36 +Button B: X+53, Y+21 +Prize: X=18093, Y=17453 + +Button A: X+48, Y+22 +Button B: X+47, Y+74 +Prize: X=8784, Y=8868 + +Button A: X+29, Y+53 +Button B: X+45, Y+16 +Prize: X=12465, Y=10268 + +Button A: X+47, Y+82 +Button B: X+65, Y+19 +Prize: X=4989, Y=3984 + +Button A: X+98, Y+36 +Button B: X+52, Y+96 +Prize: X=1610, Y=1668 + +Button A: X+31, Y+75 +Button B: X+63, Y+26 +Prize: X=1468, Y=2161 + +Button A: X+14, Y+66 +Button B: X+47, Y+14 +Prize: X=5961, Y=12456 + +Button A: X+20, Y+87 +Button B: X+70, Y+44 +Prize: X=1740, Y=3922 + +Button A: X+52, Y+21 +Button B: X+16, Y+43 +Prize: X=3884, Y=7457 + +Button A: X+93, Y+97 +Button B: X+91, Y+20 +Prize: X=2827, Y=851 + +Button A: X+68, Y+15 +Button B: X+23, Y+63 +Prize: X=10422, Y=7157 + +Button A: X+84, Y+68 +Button B: X+22, Y+86 +Prize: X=2696, Y=2728 + +Button A: X+67, Y+34 +Button B: X+40, Y+83 +Prize: X=5256, Y=5865 + +Button A: X+34, Y+49 +Button B: X+97, Y+12 +Prize: X=3687, Y=1352 + +Button A: X+15, Y+90 +Button B: X+89, Y+21 +Prize: X=7432, Y=2013 + +Button A: X+41, Y+13 +Button B: X+12, Y+50 +Prize: X=7134, Y=14486 + +Button A: X+20, Y+28 +Button B: X+32, Y+13 +Prize: X=10032, Y=19165 + +Button A: X+27, Y+77 +Button B: X+69, Y+13 +Prize: X=9554, Y=15260 + +Button A: X+47, Y+23 +Button B: X+32, Y+54 +Prize: X=6409, Y=355 + +Button A: X+56, Y+81 +Button B: X+64, Y+16 +Prize: X=7600, Y=5786 + +Button A: X+46, Y+17 +Button B: X+37, Y+66 +Prize: X=7509, Y=14295 + +Button A: X+18, Y+33 +Button B: X+64, Y+36 +Prize: X=16814, Y=12887 + +Button A: X+22, Y+79 +Button B: X+92, Y+31 +Prize: X=3856, Y=5165 + +Button A: X+43, Y+12 +Button B: X+30, Y+74 +Prize: X=1825, Y=17414 + +Button A: X+74, Y+49 +Button B: X+28, Y+70 +Prize: X=6646, Y=9135 + +Button A: X+85, Y+14 +Button B: X+12, Y+79 +Prize: X=1124, Y=3340 + +Button A: X+60, Y+31 +Button B: X+11, Y+44 +Prize: X=14996, Y=12846 + +Button A: X+62, Y+17 +Button B: X+12, Y+54 +Prize: X=17176, Y=5908 + +Button A: X+73, Y+54 +Button B: X+21, Y+91 +Prize: X=4258, Y=4810 + +Button A: X+32, Y+57 +Button B: X+36, Y+11 +Prize: X=412, Y=2137 + +Button A: X+80, Y+65 +Button B: X+12, Y+63 +Prize: X=2060, Y=5135 + +Button A: X+38, Y+19 +Button B: X+11, Y+30 +Prize: X=2771, Y=8832 + +Button A: X+12, Y+63 +Button B: X+89, Y+94 +Prize: X=2441, Y=3484 + +Button A: X+64, Y+42 +Button B: X+19, Y+44 +Prize: X=10186, Y=11248 + +Button A: X+21, Y+47 +Button B: X+81, Y+42 +Prize: X=6363, Y=4491 + +Button A: X+55, Y+70 +Button B: X+90, Y+13 +Prize: X=7855, Y=6037 + +Button A: X+39, Y+78 +Button B: X+53, Y+19 +Prize: X=19180, Y=483 + +Button A: X+11, Y+77 +Button B: X+74, Y+17 +Prize: X=6027, Y=1608 + +Button A: X+71, Y+34 +Button B: X+20, Y+54 +Prize: X=1962, Y=12986 + +Button A: X+19, Y+50 +Button B: X+57, Y+25 +Prize: X=19082, Y=12150 + +Button A: X+54, Y+19 +Button B: X+13, Y+31 +Prize: X=1754, Y=19209 + +Button A: X+77, Y+15 +Button B: X+17, Y+98 +Prize: X=7856, Y=7117 + +Button A: X+86, Y+35 +Button B: X+18, Y+85 +Prize: X=6694, Y=6375 + +Button A: X+14, Y+62 +Button B: X+63, Y+41 +Prize: X=1330, Y=4938 + +Button A: X+92, Y+51 +Button B: X+38, Y+74 +Prize: X=6240, Y=8435 + +Button A: X+14, Y+20 +Button B: X+86, Y+27 +Prize: X=4106, Y=2319 + +Button A: X+54, Y+17 +Button B: X+36, Y+69 +Prize: X=6488, Y=2762 + +Button A: X+82, Y+96 +Button B: X+82, Y+15 +Prize: X=4592, Y=2460 + +Button A: X+14, Y+65 +Button B: X+71, Y+24 +Prize: X=9947, Y=3249 + +Button A: X+33, Y+54 +Button B: X+23, Y+11 +Prize: X=7043, Y=12653 + +Button A: X+35, Y+12 +Button B: X+16, Y+47 +Prize: X=7136, Y=7027 + +Button A: X+11, Y+26 +Button B: X+39, Y+20 +Prize: X=8298, Y=1518 + +Button A: X+50, Y+12 +Button B: X+13, Y+23 +Prize: X=1816, Y=2066 + +Button A: X+17, Y+38 +Button B: X+63, Y+40 +Prize: X=9007, Y=7834 + +Button A: X+55, Y+19 +Button B: X+11, Y+28 +Prize: X=14257, Y=9219 + +Button A: X+55, Y+18 +Button B: X+11, Y+69 +Prize: X=1343, Y=5285 + +Button A: X+19, Y+53 +Button B: X+74, Y+28 +Prize: X=2560, Y=1920 + +Button A: X+12, Y+59 +Button B: X+39, Y+14 +Prize: X=5354, Y=317 + +Button A: X+72, Y+14 +Button B: X+91, Y+86 +Prize: X=9387, Y=7358 + +Button A: X+18, Y+84 +Button B: X+54, Y+48 +Prize: X=3852, Y=6960 + +Button A: X+12, Y+69 +Button B: X+57, Y+12 +Prize: X=6488, Y=7169 + +Button A: X+15, Y+30 +Button B: X+42, Y+15 +Prize: X=12671, Y=10775 + +Button A: X+25, Y+12 +Button B: X+34, Y+96 +Prize: X=2435, Y=6348 + +Button A: X+29, Y+12 +Button B: X+40, Y+66 +Prize: X=1315, Y=17804 + +Button A: X+69, Y+26 +Button B: X+22, Y+56 +Prize: X=6670, Y=4708 + +Button A: X+19, Y+42 +Button B: X+62, Y+21 +Prize: X=2458, Y=16769 + +Button A: X+45, Y+17 +Button B: X+23, Y+38 +Prize: X=5151, Y=19084 + +Button A: X+17, Y+33 +Button B: X+35, Y+14 +Prize: X=14888, Y=18170 + +Button A: X+74, Y+36 +Button B: X+14, Y+57 +Prize: X=14816, Y=15158 + +Button A: X+36, Y+14 +Button B: X+32, Y+60 +Prize: X=3368, Y=15472 + +Button A: X+85, Y+19 +Button B: X+83, Y+89 +Prize: X=10387, Y=4717 + +Button A: X+55, Y+18 +Button B: X+37, Y+68 +Prize: X=16050, Y=14820 + +Button A: X+52, Y+21 +Button B: X+15, Y+49 +Prize: X=4037, Y=6619 + +Button A: X+75, Y+11 +Button B: X+11, Y+51 +Prize: X=19531, Y=6083 + +Button A: X+90, Y+21 +Button B: X+29, Y+38 +Prize: X=10125, Y=3768 + +Button A: X+33, Y+70 +Button B: X+45, Y+20 +Prize: X=4805, Y=17590 + +Button A: X+11, Y+28 +Button B: X+58, Y+33 +Prize: X=4190, Y=18722 + +Button A: X+95, Y+50 +Button B: X+16, Y+70 +Prize: X=3754, Y=2530 + +Button A: X+88, Y+19 +Button B: X+35, Y+84 +Prize: X=7511, Y=3227 + +Button A: X+48, Y+12 +Button B: X+11, Y+31 +Prize: X=9355, Y=19551 + +Button A: X+71, Y+40 +Button B: X+39, Y+96 +Prize: X=9850, Y=12656 + +Button A: X+18, Y+46 +Button B: X+69, Y+53 +Prize: X=1584, Y=3308 + +Button A: X+65, Y+26 +Button B: X+62, Y+89 +Prize: X=7671, Y=5829 + +Button A: X+92, Y+51 +Button B: X+19, Y+41 +Prize: X=4806, Y=5650 + +Button A: X+26, Y+98 +Button B: X+50, Y+39 +Prize: X=6268, Y=10174 + +Button A: X+16, Y+64 +Button B: X+34, Y+12 +Prize: X=16854, Y=11364 + +Button A: X+20, Y+69 +Button B: X+61, Y+23 +Prize: X=408, Y=12175 + +Button A: X+49, Y+16 +Button B: X+11, Y+45 +Prize: X=17005, Y=1724 + +Button A: X+82, Y+15 +Button B: X+92, Y+80 +Prize: X=15178, Y=8525 + +Button A: X+98, Y+17 +Button B: X+32, Y+95 +Prize: X=4930, Y=5596 + +Button A: X+74, Y+24 +Button B: X+63, Y+72 +Prize: X=4818, Y=1872 + +Button A: X+63, Y+23 +Button B: X+29, Y+74 +Prize: X=4610, Y=2155 + +Button A: X+14, Y+69 +Button B: X+46, Y+16 +Prize: X=5686, Y=14981 + +Button A: X+12, Y+44 +Button B: X+73, Y+32 +Prize: X=1404, Y=2320 + +Button A: X+16, Y+61 +Button B: X+36, Y+16 +Prize: X=19784, Y=1294 + +Button A: X+79, Y+17 +Button B: X+11, Y+57 +Prize: X=18419, Y=19769 + +Button A: X+27, Y+61 +Button B: X+32, Y+16 +Prize: X=11215, Y=8185 + +Button A: X+80, Y+14 +Button B: X+55, Y+94 +Prize: X=6715, Y=3622 + +Button A: X+13, Y+99 +Button B: X+67, Y+60 +Prize: X=1132, Y=5469 + +Button A: X+11, Y+64 +Button B: X+68, Y+52 +Prize: X=1359, Y=3096 + +Button A: X+16, Y+40 +Button B: X+60, Y+34 +Prize: X=4712, Y=2220 + +Button A: X+50, Y+11 +Button B: X+12, Y+60 +Prize: X=15794, Y=4259 + +Button A: X+38, Y+17 +Button B: X+29, Y+54 +Prize: X=1335, Y=6160 + +Button A: X+36, Y+59 +Button B: X+93, Y+32 +Prize: X=6990, Y=6880 + +Button A: X+29, Y+97 +Button B: X+62, Y+55 +Prize: X=3255, Y=5097 + +Button A: X+25, Y+21 +Button B: X+22, Y+73 +Prize: X=3307, Y=5831 + +Button A: X+15, Y+75 +Button B: X+87, Y+82 +Prize: X=2655, Y=6215 + +Button A: X+22, Y+82 +Button B: X+74, Y+39 +Prize: X=4198, Y=6648 + +Button A: X+41, Y+61 +Button B: X+36, Y+11 +Prize: X=7347, Y=17092 + +Button A: X+82, Y+51 +Button B: X+19, Y+60 +Prize: X=1729, Y=1509 + +Button A: X+43, Y+13 +Button B: X+49, Y+76 +Prize: X=8520, Y=7788 + +Button A: X+97, Y+24 +Button B: X+46, Y+51 +Prize: X=1349, Y=1245 + +Button A: X+84, Y+38 +Button B: X+13, Y+51 +Prize: X=10408, Y=4606 + +Button A: X+48, Y+97 +Button B: X+80, Y+28 +Prize: X=9584, Y=8808 + +Button A: X+13, Y+32 +Button B: X+76, Y+43 +Prize: X=16226, Y=18495 + +Button A: X+14, Y+33 +Button B: X+78, Y+54 +Prize: X=1852, Y=2028 + +Button A: X+11, Y+30 +Button B: X+73, Y+37 +Prize: X=7433, Y=18454 + +Button A: X+23, Y+56 +Button B: X+31, Y+16 +Prize: X=12525, Y=3816 + +Button A: X+55, Y+16 +Button B: X+21, Y+68 +Prize: X=16009, Y=16852 + +Button A: X+17, Y+47 +Button B: X+76, Y+37 +Prize: X=6637, Y=12724 + +Button A: X+74, Y+88 +Button B: X+59, Y+12 +Prize: X=9928, Y=6688 + +Button A: X+26, Y+87 +Button B: X+32, Y+21 +Prize: X=1790, Y=3063 + +Button A: X+25, Y+71 +Button B: X+56, Y+19 +Prize: X=1849, Y=5946 + +Button A: X+51, Y+76 +Button B: X+59, Y+28 +Prize: X=7997, Y=6644 + +Button A: X+53, Y+28 +Button B: X+32, Y+62 +Prize: X=5323, Y=6228 + +Button A: X+33, Y+69 +Button B: X+39, Y+18 +Prize: X=575, Y=13307 + +Button A: X+93, Y+15 +Button B: X+56, Y+55 +Prize: X=7024, Y=3845 + +Button A: X+21, Y+53 +Button B: X+68, Y+24 +Prize: X=5268, Y=7924 + +Button A: X+13, Y+51 +Button B: X+78, Y+27 +Prize: X=15733, Y=10982 + +Button A: X+12, Y+79 +Button B: X+50, Y+11 +Prize: X=7094, Y=2854 + +Button A: X+21, Y+83 +Button B: X+90, Y+69 +Prize: X=2607, Y=5143 + +Button A: X+94, Y+16 +Button B: X+25, Y+54 +Prize: X=10271, Y=6474 + +Button A: X+80, Y+14 +Button B: X+12, Y+69 +Prize: X=15888, Y=10392 + +Button A: X+58, Y+37 +Button B: X+15, Y+54 +Prize: X=1422, Y=3573 + +Button A: X+13, Y+28 +Button B: X+59, Y+29 +Prize: X=2235, Y=12810 + +Button A: X+11, Y+32 +Button B: X+58, Y+13 +Prize: X=438, Y=6564 + +Button A: X+14, Y+72 +Button B: X+93, Y+84 +Prize: X=4137, Y=7476 + +Button A: X+63, Y+29 +Button B: X+27, Y+54 +Prize: X=4319, Y=1669 + +Button A: X+86, Y+28 +Button B: X+30, Y+60 +Prize: X=5710, Y=2060 + +Button A: X+15, Y+54 +Button B: X+52, Y+19 +Prize: X=9815, Y=1199 + +Button A: X+24, Y+63 +Button B: X+57, Y+20 +Prize: X=16160, Y=12588 + +Button A: X+19, Y+37 +Button B: X+57, Y+33 +Prize: X=2324, Y=15332 + +Button A: X+25, Y+14 +Button B: X+31, Y+56 +Prize: X=7136, Y=17336 + +Button A: X+66, Y+29 +Button B: X+25, Y+57 +Prize: X=13681, Y=16936 + +Button A: X+36, Y+93 +Button B: X+84, Y+56 +Prize: X=6720, Y=11242 + +Button A: X+92, Y+41 +Button B: X+18, Y+96 +Prize: X=1396, Y=1150 + +Button A: X+12, Y+38 +Button B: X+63, Y+28 +Prize: X=19403, Y=12776 + +Button A: X+72, Y+28 +Button B: X+13, Y+37 +Prize: X=5137, Y=3113 + +Button A: X+90, Y+72 +Button B: X+91, Y+13 +Prize: X=5795, Y=2543 + +Button A: X+28, Y+13 +Button B: X+31, Y+49 +Prize: X=16418, Y=9287 + +Button A: X+17, Y+33 +Button B: X+64, Y+32 +Prize: X=11422, Y=2206 + +Button A: X+71, Y+22 +Button B: X+16, Y+45 +Prize: X=2918, Y=7791 + +Button A: X+15, Y+36 +Button B: X+55, Y+35 +Prize: X=7930, Y=7704 + +Button A: X+57, Y+65 +Button B: X+95, Y+17 +Prize: X=11818, Y=4800 + +Button A: X+22, Y+46 +Button B: X+33, Y+21 +Prize: X=1232, Y=1040 + +Button A: X+34, Y+98 +Button B: X+85, Y+39 +Prize: X=7582, Y=9494 + +Button A: X+63, Y+15 +Button B: X+15, Y+47 +Prize: X=13439, Y=17391 + +Button A: X+20, Y+41 +Button B: X+38, Y+23 +Prize: X=2052, Y=10086 + +Button A: X+14, Y+66 +Button B: X+84, Y+28 +Prize: X=16902, Y=10730 + +Button A: X+27, Y+12 +Button B: X+17, Y+43 +Prize: X=9367, Y=12201 + +Button A: X+30, Y+49 +Button B: X+40, Y+20 +Prize: X=8430, Y=10049 + +Button A: X+82, Y+22 +Button B: X+46, Y+97 +Prize: X=3798, Y=4236 + +Button A: X+56, Y+55 +Button B: X+94, Y+13 +Prize: X=6522, Y=5533 + +Button A: X+39, Y+41 +Button B: X+59, Y+16 +Prize: X=4261, Y=3559 + +Button A: X+59, Y+18 +Button B: X+11, Y+63 +Prize: X=15316, Y=10169 + +Button A: X+59, Y+55 +Button B: X+20, Y+98 +Prize: X=375, Y=667 + +Button A: X+11, Y+93 +Button B: X+64, Y+67 +Prize: X=6699, Y=14917 + +Button A: X+13, Y+46 +Button B: X+48, Y+15 +Prize: X=1661, Y=1232 + +Button A: X+36, Y+99 +Button B: X+85, Y+42 +Prize: X=2224, Y=3048 + +Button A: X+11, Y+75 +Button B: X+28, Y+22 +Prize: X=2614, Y=6168 + +Button A: X+21, Y+97 +Button B: X+94, Y+81 +Prize: X=7763, Y=8662 + +Button A: X+34, Y+13 +Button B: X+26, Y+42 +Prize: X=8612, Y=15869 + +Button A: X+39, Y+71 +Button B: X+31, Y+13 +Prize: X=19737, Y=5345 + +Button A: X+21, Y+60 +Button B: X+75, Y+30 +Prize: X=10448, Y=18140 + +Button A: X+24, Y+49 +Button B: X+47, Y+17 +Prize: X=7371, Y=12446 + +Button A: X+56, Y+86 +Button B: X+94, Y+41 +Prize: X=3570, Y=4759 + +Button A: X+14, Y+50 +Button B: X+54, Y+28 +Prize: X=19392, Y=1330 + +Button A: X+20, Y+67 +Button B: X+52, Y+13 +Prize: X=1000, Y=3692 + +Button A: X+14, Y+26 +Button B: X+50, Y+21 +Prize: X=7114, Y=9374 + +Button A: X+19, Y+55 +Button B: X+39, Y+16 +Prize: X=15710, Y=8361 + +Button A: X+56, Y+14 +Button B: X+63, Y+96 +Prize: X=4851, Y=3540 + +Button A: X+33, Y+67 +Button B: X+54, Y+24 +Prize: X=5447, Y=1189 + +Button A: X+39, Y+84 +Button B: X+89, Y+24 +Prize: X=10312, Y=8292 + +Button A: X+51, Y+19 +Button B: X+53, Y+74 +Prize: X=4001, Y=3498 + +Button A: X+67, Y+43 +Button B: X+11, Y+36 +Prize: X=4764, Y=9202 + +Button A: X+21, Y+62 +Button B: X+54, Y+22 +Prize: X=4434, Y=2234 + +Button A: X+89, Y+87 +Button B: X+24, Y+88 +Prize: X=6501, Y=7323 + +Button A: X+54, Y+29 +Button B: X+28, Y+51 +Prize: X=13224, Y=17258 + +Button A: X+62, Y+45 +Button B: X+39, Y+94 +Prize: X=4796, Y=9262 + +Button A: X+45, Y+23 +Button B: X+12, Y+52 +Prize: X=11084, Y=11636 + +Button A: X+22, Y+37 +Button B: X+48, Y+25 +Prize: X=5514, Y=11182 + +Button A: X+15, Y+38 +Button B: X+75, Y+39 +Prize: X=16520, Y=17711 + +Button A: X+78, Y+11 +Button B: X+49, Y+92 +Prize: X=9365, Y=6341 + +Button A: X+98, Y+14 +Button B: X+13, Y+64 +Prize: X=5741, Y=2498 + +Button A: X+13, Y+63 +Button B: X+61, Y+20 +Prize: X=13770, Y=14824 + +Button A: X+21, Y+38 +Button B: X+62, Y+37 +Prize: X=17864, Y=15513 + +Button A: X+24, Y+21 +Button B: X+15, Y+62 +Prize: X=1476, Y=4224 + +Button A: X+16, Y+75 +Button B: X+52, Y+12 +Prize: X=468, Y=8849 + +Button A: X+14, Y+41 +Button B: X+46, Y+22 +Prize: X=2040, Y=1353 + +Button A: X+49, Y+16 +Button B: X+29, Y+54 +Prize: X=10446, Y=18614 + +Button A: X+11, Y+69 +Button B: X+75, Y+18 +Prize: X=10963, Y=2327 + +Button A: X+37, Y+64 +Button B: X+47, Y+20 +Prize: X=18201, Y=3324 + +Button A: X+99, Y+14 +Button B: X+87, Y+75 +Prize: X=14862, Y=6177 + +Button A: X+12, Y+58 +Button B: X+82, Y+33 +Prize: X=7438, Y=6507 + +Button A: X+72, Y+13 +Button B: X+13, Y+79 +Prize: X=14160, Y=11952 + +Button A: X+24, Y+55 +Button B: X+73, Y+39 +Prize: X=12196, Y=4761 + +Button A: X+47, Y+28 +Button B: X+21, Y+52 +Prize: X=969, Y=9732 + +Button A: X+57, Y+29 +Button B: X+15, Y+30 +Prize: X=17750, Y=13700 + +Button A: X+40, Y+23 +Button B: X+13, Y+26 +Prize: X=13248, Y=14881 + +Button A: X+68, Y+13 +Button B: X+85, Y+90 +Prize: X=9707, Y=6207 + +Button A: X+47, Y+23 +Button B: X+19, Y+57 +Prize: X=2226, Y=13254 diff --git a/inputs/13_test.txt b/inputs/13_test.txt new file mode 100644 index 0000000..912f482 --- /dev/null +++ b/inputs/13_test.txt @@ -0,0 +1,15 @@ +Button A: X+94, Y+34 +Button B: X+22, Y+67 +Prize: X=8400, Y=5400 + +Button A: X+26, Y+66 +Button B: X+67, Y+21 +Prize: X=12748, Y=12176 + +Button A: X+17, Y+86 +Button B: X+84, Y+37 +Prize: X=7870, Y=6450 + +Button A: X+69, Y+23 +Button B: X+27, Y+71 +Prize: X=18641, Y=10279