Day 01
Mix.install([
{:smaoc, git: "https://github.com/nettinho/smaoc"}
])
Section
solution_module = Smaoc.Solution
solution_module = Smaoc.Solution.DayX
defmodule solution_module do
defp parse_input(input) do
String.split(input, "\n", trim: true)
end
defp split_list(parsed_input) do
Enum.reduce(parsed_input, [[], []], fn row, [l, r] ->
[a, b] = String.split(row) |> Enum.map(&String.to_integer/1)
[[a | l], [b | r]]
end)
end
def solve(:part1, input) do
parse_input(input)
|> split_list()
|> Enum.map(&Enum.sort/1)
|> Enum.zip_with(fn [ln, rn] -> abs(ln - rn) end)
|> Enum.sum()
end
def solve(:part2, input) do
[l, r] = parse_input(input) |> split_list()
for ln <- l, rn <- r, ln == rn, reduce: 0 do
acc -> ln + acc
end
end
end
year = "2024"
day = "1"
run_config = ["puzzle", "part2"]
inputs = %{
"puzzle" =>
"35446 18696\n46314 66062\n33933 83974\n83974 34443\n98207 12657\n38488 57125\n95930 81859\n52767 12657\n16477 53659\n14481 84757\n29083 51122\n36158 15438\n61387 10295\n76932 66328\n36700 83181\n90500 70317\n55528 55820\n31179 94554\n22822 16886\n23069 99080\n69000 50666\n91611 49688\n10965 12657\n62470 27096\n38922 83974\n88317 67082\n49184 78816\n46731 90213\n56390 89965\n67724 21120\n60777 88500\n38607 91051\n89620 42599\n19492 59958\n12399 89965\n14491 21092\n89224 65224\n92053 89616\n61752 33001\n14662 46961\n62308 99609\n63106 37570\n98323 89620\n10130 47868\n44468 92294\n55055 99080\n21162 23460\n62629 83614\n64760 76835\n59948 58492\n93112 81859\n19027 67250\n68050 27547\n39607 27547\n72923 77124\n59390 45817\n33001 47868\n70458 64427\n36441 47868\n44963 70577\n56327 83974\n35920 89031\n56574 16410\n19886 20797\n10538 56032\n43629 89965\n40166 54408\n71819 87037\n71239 58805\n84091 36969\n27282 83974\n61675 83974\n13092 65566\n22564 69172\n73337 83623\n65255 88498\n14204 49627\n90941 12657\n12650 65455\n39913 16886\n91204 42662\n12353 24980\n86940 43602\n45417 86117\n93805 13685\n86595 32060\n95504 49974\n49450 18696\n54656 82794\n24239 65070\n39200 94275\n45741 65455\n86169 41093\n30646 56972\n28947 45593\n27981 18232\n74967 83592\n28791 27193\n58805 69918\n41082 52767\n49770 52767\n40558 92562\n38248 72945\n51400 16886\n20599 11817\n77640 81133\n54049 56972\n82155 36807\n88848 49688\n74986 21092\n84534 83372\n52277 53938\n27375 46406\n82985 44993\n44699 83974\n56937 87037\n77717 49519\n97383 12353\n94620 17706\n93133 79684\n63717 33001\n13006 56032\n20078 55429\n68979 18696\n97191 84071\n47911 62971\n48256 56784\n34443 47868\n44941 56972\n43750 83153\n16717 42999\n36163 79265\n29877 82188\n54069 59608\n21897 70982\n46002 35871\n47632 28298\n92150 34443\n47440 90606\n21000 89334\n22797 91051\n67853 81395\n30016 59612\n65558 65566\n46885 12353\n49714 12353\n40300 27547\n97130 33789\n89917 70893\n99566 49688\n53392 56972\n92478 44580\n69059 12657\n88594 66111\n25017 51845\n66050 49129\n18086 33001\n44548 56032\n91368 26310\n90745 82691\n50489 65566\n29928 45682\n81859 89620\n74633 95869\n98553 47868\n80866 49688\n24016 20910\n36650 33001\n19561 74850\n63484 49688\n58451 18696\n29016 32060\n54718 25325\n89003 33001\n68471 11145\n88206 89620\n13290 66328\n86949 22014\n77758 88623\n75063 96681\n99425 31778\n71300 62538\n88500 11195\n78917 56972\n43065 88068\n33189 89088\n46705 83036\n56972 50663\n24844 91051\n57908 63316\n15446 88452\n76421 36179\n98232 25703\n37640 49688\n35383 44539\n11291 12353\n62140 83592\n55579 88733\n83570 87934\n76450 35834\n84820 47091\n24416 78402\n45763 65455\n82938 66922\n65397 65566\n45162 18361\n71395 72305\n72027 97029\n85465 28881\n32751 65455\n65455 80742\n79640 10727\n88492 84005\n66028 32752\n23677 43498\n22716 26101\n62036 87090\n18882 82877\n24085 91061\n97952 56032\n16125 12353\n69534 44480\n42997 33448\n45250 68695\n84290 92562\n22335 32582\n47550 99080\n36928 73869\n40790 11220\n41540 71545\n16448 67875\n44580 45593\n35045 70157\n69798 63807\n50519 97965\n69580 16886\n87702 24341\n57895 58808\n20766 27547\n74455 59612\n33358 83592\n80944 78627\n71806 29266\n88258 82877\n21771 64556\n88011 25173\n95793 49627\n95847 45593\n56747 12657\n32448 12657\n93453 50250\n72594 74557\n52172 18099\n93959 70300\n74332 38126\n79878 67746\n49680 54928\n18265 33001\n95331 59612\n18366 33001\n25504 88500\n62474 60901\n31197 29540\n66986 49688\n63340 88500\n69519 27915\n21052 52553\n72184 27193\n43404 49627\n95052 59327\n27977 83614\n13673 18696\n13363 27547\n82059 47868\n52928 82877\n55266 25800\n55292 89620\n66838 81751\n85014 62704\n18772 89391\n99322 39583\n68363 58608\n45148 58708\n63006 27193\n92687 12754\n55913 75671\n45593 65455\n79018 51305\n87110 56230\n66328 14246\n54561 53594\n56406 14740\n95001 49947\n12373 81859\n65064 16886\n17403 75896\n58690 53427\n50959 27547\n40939 52963\n50275 47946\n73990 32060\n39728 49688\n64531 74946\n44868 56972\n72719 27906\n35784 16310\n13911 26147\n45218 21092\n27025 54743\n64719 65566\n22135 12657\n13725 71262\n16787 49149\n26004 27547\n83956 25800\n20869 65750\n92705 49627\n41237 33001\n47868 54678\n46965 44772\n76833 67617\n10593 96338\n91447 12858\n41369 18696\n88036 97875\n56077 40100\n83258 73796\n17955 99080\n47587 12353\n71731 21884\n43926 76598\n26878 21142\n85135 21092\n13199 91051\n55583 72621\n72584 63423\n10908 82877\n59612 45593\n72725 95288\n22111 82877\n15422 16886\n51152 97377\n14804 61202\n62625 53427\n89653 38262\n13230 39503\n83705 39416\n88216 34340\n30601 23296\n86040 70921\n76367 32060\n17566 62842\n49688 26555\n51987 27192\n99083 16886\n50529 28284\n18618 92562\n49357 27193\n83692 27547\n34017 12353\n34588 65455\n79808 56032\n76557 83614\n52422 73787\n99664 83974\n23712 89620\n10628 79497\n35405 89633\n55143 97586\n97421 13687\n17759 32060\n94690 46885\n40501 39940\n41037 85460\n70591 40719\n64400 83974\n25588 12353\n92616 83974\n65267 12288\n21298 82152\n21216 24498\n83830 95148\n69200 34443\n92744 83974\n84255 72646\n60019 33001\n72406 89620\n80749 83614\n81952 73514\n80454 27193\n32161 15624\n96805 12657\n87229 45593\n52706 21688\n54224 33221\n59272 81859\n39664 89965\n52726 88500\n17451 53746\n53896 58280\n72032 56972\n41654 83606\n45801 76761\n59531 56972\n69619 65455\n47931 88500\n37408 15916\n46419 27677\n24027 99080\n87213 89400\n59190 71907\n91014 77947\n20262 52969\n99705 17001\n77899 98899\n66940 12657\n96845 16886\n85833 89620\n24005 72223\n70935 48677\n80570 92562\n14398 81859\n34541 83183\n28018 92562\n87037 90231\n71966 34443\n46070 83974\n28730 56032\n37205 65566\n78756 83974\n92078 88687\n84234 22235\n65644 83974\n69979 57474\n26206 40074\n10787 70635\n25443 81859\n16577 86943\n83988 11918\n12284 12657\n57347 16886\n25269 45386\n26028 52805\n28804 77340\n50690 72129\n79036 63115\n70738 71491\n66916 96652\n81977 46885\n43130 58805\n97899 98026\n50454 97303\n77142 33793\n20238 99451\n25279 49627\n37235 83614\n49627 84495\n40512 15742\n84237 18675\n57852 65767\n60277 53427\n60816 99080\n48621 62202\n48990 65455\n90883 47035\n32060 33001\n47930 56032\n53524 55589\n76420 16886\n12331 72983\n93348 48516\n21092 40456\n80416 62693\n18172 66930\n83267 47868\n56035 31836\n19129 12657\n31465 83592\n64173 33001\n74397 70918\n20717 12819\n51944 72328\n71053 27547\n80370 56032\n68857 90951\n48914 33001\n41820 53931\n31445 99080\n12669 38918\n79174 56972\n45196 22048\n43488 27193\n49986 39514\n65806 85882\n48018 89620\n86144 92562\n95852 58805\n47095 89620\n96313 45593\n39688 86998\n89088 56972\n10994 27193\n44290 45593\n32871 49668\n74126 69396\n59913 35109\n37148 83974\n56032 24108\n92348 23837\n76049 45593\n28805 74542\n35070 46272\n40283 47868\n32870 21092\n87890 11410\n85129 84836\n89021 23016\n54444 52767\n60250 15651\n82877 99080\n13101 66125\n95310 44178\n99602 87037\n39771 61194\n92562 67527\n26053 81299\n99211 52767\n31519 14876\n66988 89620\n55719 34142\n47519 37927\n81355 67645\n64580 83371\n53953 40028\n28575 23345\n88211 96106\n25538 33194\n35298 66440\n11466 12353\n33575 18696\n86250 59305\n84467 53562\n59023 91051\n81764 58973\n80503 18696\n73651 65455\n74173 65566\n59081 38453\n54695 27547\n25202 43565\n90138 53680\n87761 98899\n76616 26486\n98411 12657\n87945 89620\n69634 64725\n94813 92562\n64622 21092\n46511 18696\n49212 70971\n34375 23916\n64884 81859\n94136 95813\n89737 59612\n45383 16739\n60780 34100\n60956 56032\n27402 25216\n61698 78097\n77163 74327\n30740 83974\n78975 99080\n34208 88571\n74233 14179\n95918 47868\n74949 65566\n41203 47868\n27671 56032\n38515 20386\n82734 92813\n70727 25800\n10326 33001\n83563 45593\n46938 58588\n43092 65566\n96771 57693\n32365 21390\n65514 25800\n21151 91810\n53822 66328\n89965 49039\n97207 20005\n18794 23172\n85061 82877\n29500 93001\n86025 29962\n18550 74091\n92402 69893\n58049 16886\n47165 82877\n40002 81859\n82066 71414\n99593 12657\n95278 82877\n23474 33508\n26508 32060\n13412 78711\n58286 35717\n79549 25448\n59275 87684\n59102 83592\n59475 65455\n71391 49481\n64011 27193\n34907 27193\n96020 65566\n32676 48353\n82228 64987\n85683 33001\n84073 49627\n89790 91054\n79448 42717\n57726 66328\n30683 65566\n27124 74353\n13404 65566\n47973 32110\n75389 32060\n39880 90141\n47176 25763\n77298 75035\n36334 32060\n55391 40175\n75215 50282\n89669 27719\n36393 33001\n79118 21092\n81448 47868\n51834 49990\n40739 49688\n52754 56972\n35389 36568\n31791 30926\n44345 27193\n11231 58125\n21968 32060\n78789 12353\n81898 62528\n22004 84635\n50202 69626\n83592 51107\n58853 79346\n42190 68523\n45830 99080\n81738 12353\n99265 99469\n90691 38910\n38908 20889\n20275 89965\n24933 24939\n71243 83614\n67641 13684\n63940 34940\n16484 46405\n95114 80965\n52206 65455\n45310 68999\n76892 94531\n71763 25077\n28803 25055\n19132 65455\n62482 16017\n20185 65455\n53459 47868\n86711 18696\n25418 70965\n41208 97960\n18696 38086\n25923 21953\n90443 92562\n84272 27547\n58778 45593\n83614 10136\n46699 32890\n76064 27547\n99080 28452\n18497 12353\n60862 77196\n19752 27547\n22338 53427\n66112 32195\n41917 82202\n50594 45593\n15550 96715\n61435 88975\n96294 32060\n47560 77044\n60387 49627\n76943 45593\n78435 87312\n57089 89620\n97691 18696\n30869 76316\n51101 17127\n89100 49688\n28552 99080\n50599 21092\n62850 89620\n97312 27547\n81531 45593\n69183 54914\n88793 56972\n48548 45593\n66705 56032\n71169 16358\n55885 12353\n55064 66328\n59988 38915\n89486 45971\n66564 62229\n21432 73083\n69247 49688\n15787 12657\n91085 82877\n14618 12353\n99031 46480\n80969 91051\n68503 18696\n89919 12657\n97125 81859\n36492 34656\n50873 18696\n50741 27547\n27193 99250\n13260 89620\n70660 50852\n23872 40621\n23133 34336\n18937 49627\n84631 18350\n31466 97019\n82842 70754\n96642 16614\n99278 21092\n37578 44363\n87003 59612\n43407 43149\n73286 92643\n45369 18696\n60219 47988\n92605 12811\n80646 91257\n29493 25800\n64968 16886\n67454 56032\n39669 52921\n45812 92562\n98524 34245\n68102 13668\n33914 59590\n90204 20381\n78331 21373\n41990 17121\n98264 13737\n12657 97505\n14876 12560\n86663 13560\n81960 46045\n94521 12578\n84699 89846\n65933 89620\n69417 46940\n77051 30362\n75075 44987\n33494 56972\n49618 81859\n71385 41628\n72195 47868\n62025 65455\n23253 49627\n70062 81859\n14577 16886\n72180 61232\n92457 12657\n91879 53427\n49809 97285\n73214 49688\n63136 65455\n25107 99080\n77516 18306\n84079 45956\n68470 12935\n80077 35901\n33487 93929\n98439 81859\n25106 49627\n29578 21746\n41763 49627\n38888 82877\n21105 59612\n27547 85476\n34649 96912\n98652 37966\n26548 51315\n91140 70379\n88522 66328\n18801 81859\n88360 27197\n54575 33001\n54004 83017\n50564 99080\n19887 42385\n65566 93192\n13908 81859\n38021 51863\n53431 65566\n63143 49688\n77152 16886\n95334 94999\n99112 84555\n22226 47868\n81497 25800\n56613 89560\n32899 66913\n73926 32060\n14710 59039\n81998 56498\n51537 23626\n92298 72999\n61627 48753\n25800 33001\n89153 35814\n15490 59612\n98839 49749\n88591 27547\n47330 83974\n94242 38771\n30493 25606\n47111 97620\n76006 83974\n88435 49627\n12581 14185\n52999 82877\n64534 46741\n70617 18696\n78842 89208\n72607 51926\n44479 91090\n32783 26114\n27725 65566\n71384 17667\n75007 81596\n25465 98911\n97702 81141\n87869 32060\n85114 81859\n67686 97990\n22260 12353\n67159 32060\n97547 16886\n26163 79445\n90733 83974\n62958 47018\n87531 53073\n28421 82286\n31349 92110\n62113 17868\n59754 42706\n82004 12353\n69805 89458\n73669 77228\n36269 97413\n35228 27547\n38938 12657\n88675 89620\n90579 71041\n89858 83974\n19686 18696\n16625 49627\n91432 81859\n17607 83974\n89530 45593\n40107 56032\n28095 41567\n93573 70856\n85006 18696\n19091 45593\n82765 12657\n20545 24253\n24106 49627\n60438 88622\n27926 16886\n97985 89965\n79204 89810\n91051 83614\n75382 82877\n50290 96422\n66045 81859\n61679 35777\n46984 56988\n18043 21092\n53300 90453\n57214 78410\n11949 81859\n45225 22918\n82542 65566\n11498 27547\n44155 56972\n97659 13416\n64945 53035\n10456 52940\n66710 16886\n52752 68386\n21492 63909\n10804 70233\n53427 70763\n81459 89620\n24486 29799\n94315 88192\n99345 81859\n26426 16886\n59747 65455\n78335 28188\n76856 55257\n38024 89620\n76867 76062\n25261 27547\n21948 44580\n25796 49407\n26541 34513\n85517 29546\n51634 23929\n16886 98484\n94563 31195\n94244 82759\n19517 83614\n15629 47203\n13661 64125\n54946 63802\n69496 18696\n10488 32505\n92729 23426\n28136 32060\n55489 83964\n34355 47868\n75542 76179\n70632 99080\n29904 71317\n73989 53368\n86241 48586\n82353 46831\n78028 53147\n92984 83641\n55747 21015\n17389 18696\n94992 29411\n69555 88500\n66820 26798\n96784 92681\n19019 99080\n67383 42448\n64708 12353\n20616 92061\n22213 89965\n34850 12996\n99572 36736\n76670 92372\n11930 91013\n18321 99080\n42025 57447\n99887 75845\n95958 48242\n44579 18696\n79387 34443\n82753 27308\n93967 52098\n90819 66336\n38322 35403\n10019 12353\n78459 37576\n69905 16060\n14796 98743\n14487 17417\n79979 66300\n59836 12353\n37308 56032\n63835 88500\n30048 79432\n71914 99080\n76352 56972\n74621 56972\n33804 98899\n23449 33001\n99868 27547\n57457 83513\n44296 36718\n43642 99921\n49243 90701\n28205 27193\n98899 19172\n",
"example" => "3 4\n4 3\n2 5\n1 3\n3 9\n3 3\n"
}
response =
for part <- ["part1", "part2"], input_key <- ["puzzle", "example"] do
{part, input_key}
end
response =
response
|> Enum.filter(fn {part, input_key} ->
part in run_config and input_key in run_config
end)
|> Enum.map(fn {part, input_key} ->
[
part,
input_key,
part |> String.to_atom() |> solution_module.solve(inputs[input_key]) |> inspect
]
end)
Smaoc.Response.new(%{response: response, run_config: run_config, year: year, day: day})