From 8725ea84c24a897a2c053ca97a2c127ff01253b0 Mon Sep 17 00:00:00 2001 From: Mika Date: Fri, 13 Dec 2024 22:06:46 +0100 Subject: [PATCH] [ADD] main: Added day 13 solution --- 13/input.txt | 1279 +++++++++++++++++++++++++++++++++++++++++++++++++ 13/main.go | 154 ++++++ 13/sample.txt | 15 + 3 files changed, 1448 insertions(+) create mode 100644 13/input.txt create mode 100644 13/main.go create mode 100644 13/sample.txt diff --git a/13/input.txt b/13/input.txt new file mode 100644 index 0000000..82ebabf --- /dev/null +++ b/13/input.txt @@ -0,0 +1,1279 @@ +Button A: X+85, Y+71 +Button B: X+21, Y+84 +Prize: X=9947, Y=13426 + +Button A: X+20, Y+62 +Button B: X+62, Y+27 +Prize: X=6092, Y=7618 + +Button A: X+64, Y+14 +Button B: X+20, Y+48 +Prize: X=9128, Y=5754 + +Button A: X+56, Y+12 +Button B: X+13, Y+49 +Prize: X=1136, Y=2092 + +Button A: X+76, Y+51 +Button B: X+37, Y+97 +Prize: X=5111, Y=10286 + +Button A: X+86, Y+24 +Button B: X+20, Y+22 +Prize: X=2154, Y=1734 + +Button A: X+87, Y+96 +Button B: X+89, Y+13 +Prize: X=10425, Y=8436 + +Button A: X+36, Y+35 +Button B: X+15, Y+88 +Prize: X=3270, Y=8612 + +Button A: X+46, Y+82 +Button B: X+93, Y+24 +Prize: X=8545, Y=3748 + +Button A: X+72, Y+21 +Button B: X+18, Y+60 +Prize: X=9494, Y=9626 + +Button A: X+81, Y+25 +Button B: X+80, Y+91 +Prize: X=10929, Y=9142 + +Button A: X+81, Y+18 +Button B: X+46, Y+67 +Prize: X=5003, Y=2588 + +Button A: X+71, Y+34 +Button B: X+22, Y+35 +Prize: X=7247, Y=5134 + +Button A: X+71, Y+12 +Button B: X+88, Y+86 +Prize: X=3459, Y=798 + +Button A: X+96, Y+50 +Button B: X+54, Y+86 +Prize: X=9456, Y=6314 + +Button A: X+49, Y+27 +Button B: X+13, Y+27 +Prize: X=4994, Y=2970 + +Button A: X+44, Y+15 +Button B: X+27, Y+40 +Prize: X=5928, Y=4115 + +Button A: X+25, Y+59 +Button B: X+60, Y+25 +Prize: X=16730, Y=332 + +Button A: X+65, Y+15 +Button B: X+12, Y+33 +Prize: X=12944, Y=2786 + +Button A: X+59, Y+57 +Button B: X+80, Y+15 +Prize: X=9585, Y=3405 + +Button A: X+66, Y+22 +Button B: X+13, Y+66 +Prize: X=1717, Y=4334 + +Button A: X+80, Y+81 +Button B: X+23, Y+96 +Prize: X=3227, Y=5376 + +Button A: X+15, Y+39 +Button B: X+73, Y+39 +Prize: X=15440, Y=7868 + +Button A: X+59, Y+22 +Button B: X+17, Y+44 +Prize: X=5609, Y=3146 + +Button A: X+46, Y+21 +Button B: X+11, Y+32 +Prize: X=4973, Y=14627 + +Button A: X+32, Y+64 +Button B: X+45, Y+14 +Prize: X=6683, Y=6178 + +Button A: X+28, Y+42 +Button B: X+88, Y+29 +Prize: X=9068, Y=5774 + +Button A: X+84, Y+63 +Button B: X+13, Y+31 +Prize: X=15406, Y=13732 + +Button A: X+32, Y+60 +Button B: X+47, Y+17 +Prize: X=12321, Y=19487 + +Button A: X+36, Y+19 +Button B: X+17, Y+34 +Prize: X=4005, Y=7269 + +Button A: X+46, Y+17 +Button B: X+54, Y+77 +Prize: X=2284, Y=2042 + +Button A: X+63, Y+26 +Button B: X+13, Y+38 +Prize: X=5021, Y=14566 + +Button A: X+27, Y+77 +Button B: X+68, Y+18 +Prize: X=6392, Y=6442 + +Button A: X+13, Y+52 +Button B: X+67, Y+31 +Prize: X=5103, Y=2637 + +Button A: X+55, Y+73 +Button B: X+80, Y+13 +Prize: X=8415, Y=1944 + +Button A: X+31, Y+62 +Button B: X+54, Y+29 +Prize: X=17003, Y=19155 + +Button A: X+53, Y+22 +Button B: X+46, Y+66 +Prize: X=3732, Y=4598 + +Button A: X+26, Y+57 +Button B: X+65, Y+31 +Prize: X=16058, Y=4996 + +Button A: X+19, Y+50 +Button B: X+96, Y+18 +Prize: X=1105, Y=2204 + +Button A: X+36, Y+83 +Button B: X+39, Y+16 +Prize: X=3477, Y=3951 + +Button A: X+48, Y+31 +Button B: X+14, Y+43 +Prize: X=18770, Y=10200 + +Button A: X+44, Y+12 +Button B: X+35, Y+81 +Prize: X=15232, Y=2192 + +Button A: X+24, Y+51 +Button B: X+57, Y+25 +Prize: X=18914, Y=8198 + +Button A: X+99, Y+18 +Button B: X+78, Y+85 +Prize: X=5712, Y=2809 + +Button A: X+48, Y+30 +Button B: X+24, Y+49 +Prize: X=5048, Y=9409 + +Button A: X+34, Y+85 +Button B: X+90, Y+14 +Prize: X=10194, Y=9238 + +Button A: X+25, Y+72 +Button B: X+26, Y+18 +Prize: X=2107, Y=5670 + +Button A: X+36, Y+53 +Button B: X+35, Y+14 +Prize: X=19164, Y=15240 + +Button A: X+62, Y+42 +Button B: X+16, Y+77 +Prize: X=2350, Y=6951 + +Button A: X+52, Y+26 +Button B: X+11, Y+20 +Prize: X=16911, Y=16316 + +Button A: X+23, Y+57 +Button B: X+65, Y+24 +Prize: X=7618, Y=14318 + +Button A: X+81, Y+19 +Button B: X+35, Y+56 +Prize: X=8572, Y=3540 + +Button A: X+27, Y+61 +Button B: X+63, Y+22 +Prize: X=4238, Y=4516 + +Button A: X+35, Y+15 +Button B: X+64, Y+99 +Prize: X=4489, Y=5574 + +Button A: X+37, Y+56 +Button B: X+95, Y+30 +Prize: X=5412, Y=3526 + +Button A: X+43, Y+77 +Button B: X+70, Y+33 +Prize: X=5902, Y=6413 + +Button A: X+63, Y+24 +Button B: X+14, Y+63 +Prize: X=14599, Y=13073 + +Button A: X+17, Y+44 +Button B: X+55, Y+26 +Prize: X=3109, Y=1126 + +Button A: X+56, Y+99 +Button B: X+75, Y+16 +Prize: X=6353, Y=2487 + +Button A: X+56, Y+81 +Button B: X+88, Y+28 +Prize: X=8328, Y=4103 + +Button A: X+99, Y+59 +Button B: X+43, Y+95 +Prize: X=7598, Y=10078 + +Button A: X+22, Y+62 +Button B: X+62, Y+13 +Prize: X=7828, Y=14184 + +Button A: X+95, Y+14 +Button B: X+42, Y+94 +Prize: X=6248, Y=9614 + +Button A: X+68, Y+50 +Button B: X+14, Y+69 +Prize: X=3108, Y=3342 + +Button A: X+23, Y+13 +Button B: X+12, Y+30 +Prize: X=16675, Y=1299 + +Button A: X+97, Y+39 +Button B: X+13, Y+95 +Prize: X=5860, Y=3972 + +Button A: X+99, Y+21 +Button B: X+57, Y+87 +Prize: X=6249, Y=8367 + +Button A: X+32, Y+68 +Button B: X+55, Y+19 +Prize: X=5915, Y=15959 + +Button A: X+71, Y+41 +Button B: X+25, Y+56 +Prize: X=11725, Y=9873 + +Button A: X+31, Y+48 +Button B: X+36, Y+17 +Prize: X=337, Y=5629 + +Button A: X+84, Y+23 +Button B: X+11, Y+99 +Prize: X=5261, Y=5568 + +Button A: X+90, Y+11 +Button B: X+65, Y+89 +Prize: X=8745, Y=1312 + +Button A: X+25, Y+56 +Button B: X+53, Y+17 +Prize: X=7354, Y=10734 + +Button A: X+73, Y+19 +Button B: X+47, Y+89 +Prize: X=668, Y=788 + +Button A: X+22, Y+78 +Button B: X+62, Y+16 +Prize: X=2988, Y=5906 + +Button A: X+16, Y+72 +Button B: X+39, Y+11 +Prize: X=17067, Y=7351 + +Button A: X+15, Y+48 +Button B: X+48, Y+19 +Prize: X=11726, Y=1506 + +Button A: X+68, Y+44 +Button B: X+34, Y+73 +Prize: X=7854, Y=6867 + +Button A: X+64, Y+75 +Button B: X+77, Y+17 +Prize: X=11321, Y=6456 + +Button A: X+65, Y+27 +Button B: X+13, Y+76 +Prize: X=1612, Y=4482 + +Button A: X+12, Y+66 +Button B: X+16, Y+18 +Prize: X=2572, Y=7356 + +Button A: X+58, Y+47 +Button B: X+16, Y+93 +Prize: X=1410, Y=4424 + +Button A: X+39, Y+67 +Button B: X+37, Y+15 +Prize: X=11379, Y=11117 + +Button A: X+11, Y+62 +Button B: X+58, Y+20 +Prize: X=14896, Y=12112 + +Button A: X+59, Y+19 +Button B: X+22, Y+65 +Prize: X=2559, Y=8749 + +Button A: X+25, Y+29 +Button B: X+93, Y+15 +Prize: X=10571, Y=3253 + +Button A: X+38, Y+14 +Button B: X+11, Y+69 +Prize: X=2599, Y=2841 + +Button A: X+61, Y+35 +Button B: X+29, Y+59 +Prize: X=16543, Y=13201 + +Button A: X+92, Y+44 +Button B: X+32, Y+91 +Prize: X=9344, Y=10903 + +Button A: X+21, Y+56 +Button B: X+40, Y+11 +Prize: X=9942, Y=5041 + +Button A: X+15, Y+42 +Button B: X+44, Y+25 +Prize: X=9768, Y=12133 + +Button A: X+67, Y+12 +Button B: X+37, Y+35 +Prize: X=4653, Y=2706 + +Button A: X+21, Y+85 +Button B: X+85, Y+48 +Prize: X=8306, Y=5495 + +Button A: X+20, Y+45 +Button B: X+64, Y+26 +Prize: X=12772, Y=15383 + +Button A: X+65, Y+12 +Button B: X+22, Y+85 +Prize: X=6724, Y=3458 + +Button A: X+19, Y+41 +Button B: X+30, Y+14 +Prize: X=16402, Y=10018 + +Button A: X+17, Y+48 +Button B: X+48, Y+20 +Prize: X=13777, Y=12736 + +Button A: X+71, Y+18 +Button B: X+52, Y+83 +Prize: X=10961, Y=9202 + +Button A: X+36, Y+14 +Button B: X+19, Y+61 +Prize: X=10809, Y=12851 + +Button A: X+19, Y+15 +Button B: X+15, Y+68 +Prize: X=2004, Y=6524 + +Button A: X+69, Y+36 +Button B: X+30, Y+95 +Prize: X=5961, Y=9934 + +Button A: X+30, Y+53 +Button B: X+54, Y+29 +Prize: X=14246, Y=18565 + +Button A: X+25, Y+74 +Button B: X+63, Y+27 +Prize: X=5952, Y=5019 + +Button A: X+18, Y+52 +Button B: X+63, Y+36 +Prize: X=15371, Y=14440 + +Button A: X+17, Y+56 +Button B: X+68, Y+34 +Prize: X=17346, Y=5408 + +Button A: X+11, Y+35 +Button B: X+62, Y+33 +Prize: X=890, Y=4689 + +Button A: X+46, Y+24 +Button B: X+20, Y+37 +Prize: X=9402, Y=10611 + +Button A: X+92, Y+12 +Button B: X+36, Y+64 +Prize: X=9708, Y=4528 + +Button A: X+97, Y+75 +Button B: X+22, Y+63 +Prize: X=4335, Y=6939 + +Button A: X+28, Y+48 +Button B: X+36, Y+17 +Prize: X=2640, Y=2916 + +Button A: X+24, Y+65 +Button B: X+50, Y+16 +Prize: X=10692, Y=15010 + +Button A: X+28, Y+58 +Button B: X+25, Y+13 +Prize: X=18299, Y=9035 + +Button A: X+45, Y+15 +Button B: X+43, Y+79 +Prize: X=4024, Y=2182 + +Button A: X+48, Y+92 +Button B: X+90, Y+13 +Prize: X=9336, Y=9600 + +Button A: X+11, Y+85 +Button B: X+62, Y+14 +Prize: X=4059, Y=5785 + +Button A: X+12, Y+41 +Button B: X+23, Y+13 +Prize: X=11105, Y=1262 + +Button A: X+73, Y+29 +Button B: X+16, Y+65 +Prize: X=9268, Y=15090 + +Button A: X+55, Y+12 +Button B: X+43, Y+86 +Prize: X=9944, Y=14158 + +Button A: X+47, Y+67 +Button B: X+79, Y+36 +Prize: X=7070, Y=4179 + +Button A: X+57, Y+14 +Button B: X+25, Y+80 +Prize: X=5581, Y=6622 + +Button A: X+57, Y+37 +Button B: X+24, Y+94 +Prize: X=3456, Y=6086 + +Button A: X+87, Y+20 +Button B: X+39, Y+60 +Prize: X=4485, Y=5420 + +Button A: X+75, Y+16 +Button B: X+23, Y+83 +Prize: X=10499, Y=13180 + +Button A: X+37, Y+50 +Button B: X+48, Y+17 +Prize: X=6090, Y=4592 + +Button A: X+66, Y+36 +Button B: X+24, Y+49 +Prize: X=18632, Y=15872 + +Button A: X+45, Y+26 +Button B: X+20, Y+35 +Prize: X=12485, Y=17298 + +Button A: X+70, Y+13 +Button B: X+92, Y+99 +Prize: X=3000, Y=2605 + +Button A: X+56, Y+16 +Button B: X+12, Y+64 +Prize: X=2036, Y=15792 + +Button A: X+20, Y+12 +Button B: X+16, Y+35 +Prize: X=1412, Y=19297 + +Button A: X+58, Y+20 +Button B: X+22, Y+56 +Prize: X=7762, Y=11796 + +Button A: X+60, Y+41 +Button B: X+39, Y+86 +Prize: X=2973, Y=4821 + +Button A: X+16, Y+69 +Button B: X+44, Y+11 +Prize: X=16120, Y=18160 + +Button A: X+28, Y+65 +Button B: X+54, Y+21 +Prize: X=5684, Y=13076 + +Button A: X+77, Y+21 +Button B: X+12, Y+55 +Prize: X=13594, Y=9291 + +Button A: X+79, Y+76 +Button B: X+14, Y+72 +Prize: X=2314, Y=6616 + +Button A: X+17, Y+38 +Button B: X+56, Y+19 +Prize: X=5724, Y=2571 + +Button A: X+93, Y+15 +Button B: X+28, Y+40 +Prize: X=10183, Y=4765 + +Button A: X+46, Y+22 +Button B: X+14, Y+37 +Prize: X=11324, Y=4821 + +Button A: X+59, Y+60 +Button B: X+16, Y+88 +Prize: X=4381, Y=9548 + +Button A: X+28, Y+49 +Button B: X+53, Y+19 +Prize: X=9050, Y=12610 + +Button A: X+57, Y+19 +Button B: X+31, Y+61 +Prize: X=8787, Y=3921 + +Button A: X+98, Y+35 +Button B: X+29, Y+43 +Prize: X=11035, Y=6324 + +Button A: X+68, Y+14 +Button B: X+21, Y+66 +Prize: X=2087, Y=1178 + +Button A: X+34, Y+94 +Button B: X+29, Y+17 +Prize: X=5335, Y=9127 + +Button A: X+25, Y+90 +Button B: X+84, Y+54 +Prize: X=7831, Y=7326 + +Button A: X+38, Y+85 +Button B: X+57, Y+12 +Prize: X=6352, Y=16470 + +Button A: X+12, Y+37 +Button B: X+81, Y+57 +Prize: X=18107, Y=14954 + +Button A: X+13, Y+78 +Button B: X+89, Y+24 +Prize: X=1935, Y=4470 + +Button A: X+65, Y+37 +Button B: X+23, Y+46 +Prize: X=3654, Y=3495 + +Button A: X+17, Y+20 +Button B: X+93, Y+20 +Prize: X=8090, Y=3080 + +Button A: X+93, Y+30 +Button B: X+20, Y+28 +Prize: X=2432, Y=1000 + +Button A: X+71, Y+84 +Button B: X+52, Y+15 +Prize: X=7516, Y=5217 + +Button A: X+21, Y+54 +Button B: X+52, Y+16 +Prize: X=2147, Y=18242 + +Button A: X+39, Y+16 +Button B: X+18, Y+46 +Prize: X=1902, Y=3020 + +Button A: X+86, Y+33 +Button B: X+22, Y+35 +Prize: X=1794, Y=2335 + +Button A: X+11, Y+30 +Button B: X+37, Y+20 +Prize: X=7470, Y=260 + +Button A: X+16, Y+62 +Button B: X+58, Y+16 +Prize: X=18140, Y=7710 + +Button A: X+82, Y+33 +Button B: X+15, Y+80 +Prize: X=8467, Y=8363 + +Button A: X+69, Y+34 +Button B: X+20, Y+43 +Prize: X=3144, Y=18421 + +Button A: X+62, Y+49 +Button B: X+28, Y+71 +Prize: X=4712, Y=5239 + +Button A: X+62, Y+19 +Button B: X+15, Y+77 +Prize: X=6321, Y=9105 + +Button A: X+26, Y+60 +Button B: X+38, Y+18 +Prize: X=12474, Y=14912 + +Button A: X+70, Y+28 +Button B: X+33, Y+95 +Prize: X=4823, Y=9373 + +Button A: X+64, Y+30 +Button B: X+12, Y+49 +Prize: X=5508, Y=2749 + +Button A: X+18, Y+71 +Button B: X+37, Y+21 +Prize: X=1617, Y=4504 + +Button A: X+79, Y+21 +Button B: X+17, Y+69 +Prize: X=19369, Y=5513 + +Button A: X+30, Y+15 +Button B: X+20, Y+39 +Prize: X=16260, Y=9683 + +Button A: X+97, Y+55 +Button B: X+27, Y+65 +Prize: X=5856, Y=6600 + +Button A: X+11, Y+18 +Button B: X+93, Y+26 +Prize: X=9880, Y=4180 + +Button A: X+18, Y+47 +Button B: X+63, Y+22 +Prize: X=5318, Y=10167 + +Button A: X+12, Y+37 +Button B: X+71, Y+39 +Prize: X=15472, Y=8080 + +Button A: X+52, Y+11 +Button B: X+12, Y+43 +Prize: X=9524, Y=7797 + +Button A: X+14, Y+59 +Button B: X+68, Y+15 +Prize: X=9658, Y=2446 + +Button A: X+34, Y+63 +Button B: X+49, Y+27 +Prize: X=15893, Y=881 + +Button A: X+97, Y+52 +Button B: X+54, Y+89 +Prize: X=13925, Y=13350 + +Button A: X+13, Y+58 +Button B: X+85, Y+15 +Prize: X=6564, Y=6339 + +Button A: X+17, Y+35 +Button B: X+66, Y+31 +Prize: X=8789, Y=10213 + +Button A: X+78, Y+32 +Button B: X+25, Y+80 +Prize: X=7141, Y=7184 + +Button A: X+34, Y+13 +Button B: X+14, Y+61 +Prize: X=10584, Y=1026 + +Button A: X+38, Y+65 +Button B: X+39, Y+13 +Prize: X=5996, Y=16032 + +Button A: X+21, Y+11 +Button B: X+19, Y+52 +Prize: X=16972, Y=16513 + +Button A: X+29, Y+63 +Button B: X+30, Y+15 +Prize: X=4874, Y=8783 + +Button A: X+56, Y+21 +Button B: X+12, Y+63 +Prize: X=14744, Y=872 + +Button A: X+25, Y+93 +Button B: X+21, Y+19 +Prize: X=1514, Y=5100 + +Button A: X+66, Y+11 +Button B: X+16, Y+74 +Prize: X=8246, Y=18099 + +Button A: X+45, Y+96 +Button B: X+88, Y+29 +Prize: X=8599, Y=4376 + +Button A: X+40, Y+19 +Button B: X+26, Y+60 +Prize: X=4006, Y=15275 + +Button A: X+50, Y+15 +Button B: X+39, Y+78 +Prize: X=12516, Y=8927 + +Button A: X+29, Y+12 +Button B: X+12, Y+28 +Prize: X=8787, Y=4740 + +Button A: X+54, Y+11 +Button B: X+15, Y+50 +Prize: X=15656, Y=6554 + +Button A: X+78, Y+99 +Button B: X+97, Y+27 +Prize: X=10526, Y=5094 + +Button A: X+32, Y+76 +Button B: X+91, Y+24 +Prize: X=3316, Y=2496 + +Button A: X+31, Y+95 +Button B: X+94, Y+34 +Prize: X=2968, Y=3252 + +Button A: X+50, Y+80 +Button B: X+54, Y+21 +Prize: X=5372, Y=2513 + +Button A: X+85, Y+12 +Button B: X+47, Y+82 +Prize: X=8783, Y=4556 + +Button A: X+12, Y+53 +Button B: X+85, Y+35 +Prize: X=18387, Y=7483 + +Button A: X+14, Y+44 +Button B: X+94, Y+44 +Prize: X=5970, Y=5940 + +Button A: X+38, Y+26 +Button B: X+13, Y+41 +Prize: X=4108, Y=5636 + +Button A: X+51, Y+79 +Button B: X+77, Y+34 +Prize: X=6236, Y=2923 + +Button A: X+82, Y+95 +Button B: X+89, Y+17 +Prize: X=10900, Y=8667 + +Button A: X+14, Y+54 +Button B: X+76, Y+50 +Prize: X=3624, Y=4982 + +Button A: X+67, Y+12 +Button B: X+23, Y+83 +Prize: X=10446, Y=4541 + +Button A: X+24, Y+60 +Button B: X+63, Y+33 +Prize: X=17069, Y=15263 + +Button A: X+20, Y+95 +Button B: X+43, Y+28 +Prize: X=1916, Y=6986 + +Button A: X+50, Y+21 +Button B: X+25, Y+67 +Prize: X=14100, Y=18316 + +Button A: X+40, Y+13 +Button B: X+39, Y+59 +Prize: X=13034, Y=11426 + +Button A: X+38, Y+54 +Button B: X+33, Y+13 +Prize: X=8021, Y=11177 + +Button A: X+13, Y+54 +Button B: X+77, Y+13 +Prize: X=9827, Y=10690 + +Button A: X+50, Y+22 +Button B: X+16, Y+26 +Prize: X=11924, Y=7616 + +Button A: X+23, Y+58 +Button B: X+60, Y+27 +Prize: X=5109, Y=2442 + +Button A: X+38, Y+63 +Button B: X+44, Y+20 +Prize: X=7734, Y=12771 + +Button A: X+52, Y+76 +Button B: X+47, Y+20 +Prize: X=5926, Y=6616 + +Button A: X+24, Y+98 +Button B: X+73, Y+11 +Prize: X=5449, Y=8183 + +Button A: X+56, Y+85 +Button B: X+68, Y+12 +Prize: X=4252, Y=3079 + +Button A: X+19, Y+34 +Button B: X+47, Y+23 +Prize: X=839, Y=479 + +Button A: X+20, Y+39 +Button B: X+43, Y+12 +Prize: X=6796, Y=3395 + +Button A: X+65, Y+25 +Button B: X+23, Y+58 +Prize: X=11974, Y=11469 + +Button A: X+17, Y+52 +Button B: X+57, Y+17 +Prize: X=461, Y=2091 + +Button A: X+27, Y+53 +Button B: X+55, Y+29 +Prize: X=1810, Y=1342 + +Button A: X+24, Y+78 +Button B: X+68, Y+11 +Prize: X=7508, Y=1271 + +Button A: X+34, Y+94 +Button B: X+99, Y+25 +Prize: X=9055, Y=3397 + +Button A: X+43, Y+20 +Button B: X+49, Y+76 +Prize: X=17870, Y=4136 + +Button A: X+49, Y+16 +Button B: X+17, Y+29 +Prize: X=7755, Y=14760 + +Button A: X+55, Y+25 +Button B: X+14, Y+66 +Prize: X=2621, Y=6499 + +Button A: X+51, Y+58 +Button B: X+89, Y+24 +Prize: X=7560, Y=4428 + +Button A: X+34, Y+95 +Button B: X+52, Y+30 +Prize: X=4234, Y=7795 + +Button A: X+95, Y+11 +Button B: X+25, Y+99 +Prize: X=8155, Y=8921 + +Button A: X+66, Y+59 +Button B: X+13, Y+57 +Prize: X=7405, Y=9660 + +Button A: X+37, Y+54 +Button B: X+92, Y+18 +Prize: X=8410, Y=1926 + +Button A: X+14, Y+33 +Button B: X+56, Y+23 +Prize: X=8152, Y=4602 + +Button A: X+14, Y+34 +Button B: X+65, Y+20 +Prize: X=13444, Y=554 + +Button A: X+21, Y+54 +Button B: X+78, Y+20 +Prize: X=6282, Y=4236 + +Button A: X+40, Y+21 +Button B: X+13, Y+31 +Prize: X=3100, Y=5871 + +Button A: X+37, Y+80 +Button B: X+43, Y+11 +Prize: X=7602, Y=14473 + +Button A: X+86, Y+50 +Button B: X+20, Y+92 +Prize: X=5016, Y=7176 + +Button A: X+38, Y+18 +Button B: X+13, Y+36 +Prize: X=2274, Y=2808 + +Button A: X+21, Y+65 +Button B: X+44, Y+15 +Prize: X=3749, Y=2030 + +Button A: X+53, Y+15 +Button B: X+22, Y+53 +Prize: X=15552, Y=2522 + +Button A: X+72, Y+24 +Button B: X+25, Y+73 +Prize: X=15680, Y=2048 + +Button A: X+37, Y+24 +Button B: X+12, Y+40 +Prize: X=4607, Y=5920 + +Button A: X+73, Y+42 +Button B: X+26, Y+56 +Prize: X=16573, Y=14662 + +Button A: X+68, Y+21 +Button B: X+18, Y+58 +Prize: X=5818, Y=3239 + +Button A: X+16, Y+35 +Button B: X+72, Y+43 +Prize: X=6664, Y=6106 + +Button A: X+84, Y+81 +Button B: X+16, Y+81 +Prize: X=5316, Y=11421 + +Button A: X+29, Y+15 +Button B: X+27, Y+74 +Prize: X=2469, Y=2898 + +Button A: X+15, Y+86 +Button B: X+75, Y+38 +Prize: X=2955, Y=5574 + +Button A: X+74, Y+22 +Button B: X+19, Y+71 +Prize: X=8711, Y=2627 + +Button A: X+16, Y+30 +Button B: X+48, Y+29 +Prize: X=5232, Y=13215 + +Button A: X+12, Y+41 +Button B: X+79, Y+47 +Prize: X=8121, Y=5678 + +Button A: X+20, Y+37 +Button B: X+38, Y+21 +Prize: X=14746, Y=1962 + +Button A: X+35, Y+58 +Button B: X+80, Y+20 +Prize: X=3555, Y=1726 + +Button A: X+59, Y+16 +Button B: X+13, Y+71 +Prize: X=8034, Y=5167 + +Button A: X+22, Y+56 +Button B: X+73, Y+21 +Prize: X=8784, Y=7196 + +Button A: X+73, Y+12 +Button B: X+25, Y+31 +Prize: X=3979, Y=3128 + +Button A: X+72, Y+70 +Button B: X+11, Y+40 +Prize: X=7193, Y=9660 + +Button A: X+41, Y+18 +Button B: X+30, Y+49 +Prize: X=16627, Y=2420 + +Button A: X+51, Y+15 +Button B: X+11, Y+24 +Prize: X=4579, Y=1301 + +Button A: X+50, Y+37 +Button B: X+24, Y+56 +Prize: X=3574, Y=3639 + +Button A: X+17, Y+34 +Button B: X+52, Y+18 +Prize: X=2105, Y=15858 + +Button A: X+40, Y+74 +Button B: X+98, Y+38 +Prize: X=1540, Y=1416 + +Button A: X+80, Y+13 +Button B: X+41, Y+76 +Prize: X=5729, Y=7102 + +Button A: X+18, Y+53 +Button B: X+64, Y+12 +Prize: X=18926, Y=2619 + +Button A: X+28, Y+82 +Button B: X+72, Y+12 +Prize: X=7592, Y=3740 + +Button A: X+46, Y+17 +Button B: X+39, Y+61 +Prize: X=11153, Y=7031 + +Button A: X+88, Y+46 +Button B: X+43, Y+88 +Prize: X=7711, Y=9076 + +Button A: X+97, Y+60 +Button B: X+33, Y+99 +Prize: X=6934, Y=6018 + +Button A: X+30, Y+13 +Button B: X+51, Y+70 +Prize: X=5096, Y=903 + +Button A: X+80, Y+40 +Button B: X+13, Y+48 +Prize: X=5087, Y=3712 + +Button A: X+81, Y+43 +Button B: X+38, Y+79 +Prize: X=4714, Y=4032 + +Button A: X+43, Y+17 +Button B: X+22, Y+34 +Prize: X=10335, Y=2029 + +Button A: X+35, Y+15 +Button B: X+37, Y+60 +Prize: X=18072, Y=16940 + +Button A: X+56, Y+17 +Button B: X+17, Y+47 +Prize: X=5477, Y=17402 + +Button A: X+49, Y+24 +Button B: X+11, Y+32 +Prize: X=16331, Y=13400 + +Button A: X+78, Y+82 +Button B: X+88, Y+19 +Prize: X=4818, Y=1757 + +Button A: X+51, Y+11 +Button B: X+17, Y+39 +Prize: X=16088, Y=11070 + +Button A: X+43, Y+25 +Button B: X+29, Y+56 +Prize: X=11532, Y=3270 + +Button A: X+97, Y+23 +Button B: X+94, Y+92 +Prize: X=16932, Y=9522 + +Button A: X+61, Y+24 +Button B: X+11, Y+30 +Prize: X=18123, Y=18320 + +Button A: X+20, Y+38 +Button B: X+32, Y+14 +Prize: X=17300, Y=7256 + +Button A: X+22, Y+80 +Button B: X+82, Y+16 +Prize: X=444, Y=768 + +Button A: X+12, Y+61 +Button B: X+77, Y+23 +Prize: X=18198, Y=3897 + +Button A: X+13, Y+93 +Button B: X+72, Y+50 +Prize: X=2887, Y=7631 + +Button A: X+57, Y+20 +Button B: X+19, Y+44 +Prize: X=11615, Y=3772 + +Button A: X+29, Y+55 +Button B: X+47, Y+20 +Prize: X=13874, Y=2240 + +Button A: X+56, Y+32 +Button B: X+16, Y+30 +Prize: X=5560, Y=3782 + +Button A: X+47, Y+15 +Button B: X+18, Y+41 +Prize: X=15886, Y=6408 + +Button A: X+31, Y+67 +Button B: X+46, Y+17 +Prize: X=3716, Y=4817 + +Button A: X+38, Y+13 +Button B: X+54, Y+76 +Prize: X=6854, Y=9010 + +Button A: X+19, Y+60 +Button B: X+49, Y+12 +Prize: X=7644, Y=5576 + +Button A: X+61, Y+18 +Button B: X+14, Y+54 +Prize: X=11432, Y=9926 + +Button A: X+14, Y+56 +Button B: X+36, Y+17 +Prize: X=14644, Y=14881 + +Button A: X+60, Y+21 +Button B: X+19, Y+47 +Prize: X=959, Y=13763 + +Button A: X+64, Y+15 +Button B: X+16, Y+69 +Prize: X=11312, Y=8135 + +Button A: X+13, Y+55 +Button B: X+81, Y+31 +Prize: X=4965, Y=10539 + +Button A: X+12, Y+57 +Button B: X+79, Y+12 +Prize: X=13806, Y=19367 + +Button A: X+31, Y+21 +Button B: X+16, Y+47 +Prize: X=3046, Y=4884 + +Button A: X+69, Y+34 +Button B: X+18, Y+90 +Prize: X=2625, Y=9082 + +Button A: X+11, Y+91 +Button B: X+94, Y+43 +Prize: X=6738, Y=6521 + +Button A: X+42, Y+64 +Button B: X+41, Y+17 +Prize: X=14992, Y=19084 + +Button A: X+26, Y+56 +Button B: X+55, Y+14 +Prize: X=9439, Y=19758 + +Button A: X+31, Y+11 +Button B: X+12, Y+49 +Prize: X=12096, Y=439 + +Button A: X+36, Y+13 +Button B: X+15, Y+94 +Prize: X=1818, Y=1188 + +Button A: X+64, Y+13 +Button B: X+43, Y+97 +Prize: X=5574, Y=2721 + +Button A: X+49, Y+35 +Button B: X+39, Y+97 +Prize: X=6430, Y=7566 + +Button A: X+18, Y+78 +Button B: X+36, Y+18 +Prize: X=3078, Y=6714 + +Button A: X+12, Y+30 +Button B: X+56, Y+33 +Prize: X=18052, Y=7343 + +Button A: X+22, Y+70 +Button B: X+39, Y+11 +Prize: X=2986, Y=12450 + +Button A: X+14, Y+59 +Button B: X+73, Y+16 +Prize: X=5132, Y=5489 + +Button A: X+49, Y+16 +Button B: X+41, Y+68 +Prize: X=2601, Y=564 + +Button A: X+63, Y+90 +Button B: X+84, Y+11 +Prize: X=12810, Y=8054 + +Button A: X+41, Y+14 +Button B: X+27, Y+52 +Prize: X=2989, Y=18458 + +Button A: X+20, Y+96 +Button B: X+78, Y+22 +Prize: X=3298, Y=8430 + +Button A: X+33, Y+80 +Button B: X+56, Y+15 +Prize: X=4260, Y=5980 + +Button A: X+76, Y+16 +Button B: X+14, Y+81 +Prize: X=4602, Y=7135 + +Button A: X+49, Y+20 +Button B: X+18, Y+73 +Prize: X=3478, Y=2667 + +Button A: X+42, Y+44 +Button B: X+17, Y+96 +Prize: X=3420, Y=4052 + +Button A: X+11, Y+59 +Button B: X+58, Y+26 +Prize: X=7683, Y=7795 + +Button A: X+85, Y+48 +Button B: X+13, Y+86 +Prize: X=8681, Y=7026 + +Button A: X+18, Y+61 +Button B: X+43, Y+14 +Prize: X=9307, Y=14925 + +Button A: X+31, Y+54 +Button B: X+33, Y+16 +Prize: X=11353, Y=508 \ No newline at end of file diff --git a/13/main.go b/13/main.go new file mode 100644 index 0000000..fc024ef --- /dev/null +++ b/13/main.go @@ -0,0 +1,154 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "strconv" + "time" +) + +const FILE_PATH = "./input.txt" + +//const FILE_PATH = "./sample.txt" + +func LoadInput(filename string) ([]string, error) { + file, err := os.Open(filename) + if err != nil { + return nil, err + } + defer file.Close() + + var lines []string + scanner := bufio.NewScanner(file) + for scanner.Scan() { + lines = append(lines, scanner.Text()) + } + + if err := scanner.Err(); err != nil { + return nil, err + } + + return lines, nil +} + +type Vector2 struct { + x int + y int +} + +type Puzzle struct { + buttonA Vector2 + buttonB Vector2 + price Vector2 +} + +type structuredInput = []Puzzle + +func TransformInput(lines []string) structuredInput { + var result = make([]Puzzle, 0) + var numb int + var buttonA Vector2 + var buttonB Vector2 + var prize Vector2 + var j int + for i := 0; i < len(lines); i += 4 { + buttonA = Vector2{} + numb, _ = strconv.Atoi(lines[i][len("Button A: X+") : len("Button A: X+")+2]) + buttonA.x = numb + numb, _ = strconv.Atoi(lines[i][len("Button A: X+")+5 : len("Button A: X+")+8]) + buttonA.y = numb + + buttonB = Vector2{} + numb, _ = strconv.Atoi(lines[i+1][len("Button A: X+") : len("Button A: X+")+2]) + buttonB.x = numb + numb, _ = strconv.Atoi(lines[i+1][len("Button A: X+")+5 : len("Button A: X+")+8]) + buttonB.y = numb + + prize = Vector2{} + j = 0 + for ; j < len(lines[i+2]); j++ { + if lines[i+2][j] == ',' { + break + } + } + numb, _ = strconv.Atoi(lines[i+2][len("Prize: X="):j]) + prize.x = numb + numb, _ = strconv.Atoi(lines[i+2][j+4:]) + prize.y = numb + + result = append(result, Puzzle{buttonA, buttonB, prize}) + } + + return result +} + +func calculatePuzzleSolution(puzzle Puzzle) int { + var mf float64 = 0 + var m int + var n int + + // This case would be possible if a and b are multiple of each other so either b or a must be 0 this is never the case + if puzzle.buttonB.x*puzzle.buttonA.y == puzzle.buttonA.x*puzzle.buttonB.y || puzzle.buttonB.x*puzzle.buttonB.y == 0 { + return 0 + } + + mf = float64(puzzle.buttonB.x*puzzle.price.y-puzzle.price.x*puzzle.buttonB.y) / float64(puzzle.buttonB.x*puzzle.buttonA.y-puzzle.buttonA.x*puzzle.buttonB.y) + m = int(mf) + + if float64(m) != mf { + return 0 + } + + n = (puzzle.price.x - puzzle.buttonA.x*m) / puzzle.buttonB.x + + return m*3 + n +} + +func Part1(input structuredInput) int { + var result = 0 + + for _, puzzle := range input { + result += calculatePuzzleSolution(puzzle) + } + + return result +} + +func Part2(input structuredInput) int { + var result = 0 + + for i := 0; i < len(input); i++ { + input[i].price.x += 10000000000000 + input[i].price.y += 10000000000000 + } + + for _, puzzle := range input { + result += calculatePuzzleSolution(puzzle) + } + + return result +} + +func main() { + var start time.Time + var elapsed time.Duration = 0 + input, err := LoadInput(FILE_PATH) + if err != nil { + fmt.Println("Error loading input:", err) + return + } + + structuredInput := TransformInput(input) + fmt.Println("Structured Input:", structuredInput) + + start = time.Now() + fmt.Println("Solution Part 1: ", Part1(structuredInput)) + elapsed = time.Since(start) + fmt.Printf("Part 1 took %s\n", elapsed) + + start = time.Now() + fmt.Println("Solution Part 2: ", Part2(structuredInput)) + elapsed = time.Since(start) + fmt.Printf("Part 2 took %s\n", elapsed) +} diff --git a/13/sample.txt b/13/sample.txt new file mode 100644 index 0000000..444a287 --- /dev/null +++ b/13/sample.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 \ No newline at end of file