Advent of Code 2024
Mix.install([
{:smaoc, path: "/Users/netto/apps/libs/smaoc"}
])
Day one
solution_module = Smaoc.Solution
solution_module = Smaoc.Solution.Day1
defmodule solution_module do
defp parse_input(input) do
input
|> String.split("\n", trim: true)
|> Enum.map(fn row ->
row
|> String.split()
|> Enum.map(&String.to_integer/1)
|> List.to_tuple
end)
|> Enum.unzip()
end
def solve(:part1, input) do
{l1, l2} = parse_input(input)
l1
|> Enum.sort()
|> Enum.zip(Enum.sort(l2))
|> Enum.reduce(0, fn {n1, n2}, acc -> acc + abs(n1-n2) end)
end
def solve(:part2, input) do
{l1, l2} = parse_input(input)
frequency_map = l2
|> Enum.group_by(&(&1))
|> Enum.into(%{}, fn {n, g} -> {n, length(g)} end)
Enum.reduce(l1, 0, & &2 + &1 * Map.get(frequency_map, &1 , 0))
end
end
year = "2024"
day = "1"
run_config = ["example", "part1", "part2"]
inputs = %{
"puzzle" =>
"15131 78158\n32438 35057\n12503 57702\n73808 43128\n57168 71761\n97870 29344\n18072 79079\n55097 92997\n36615 67927\n63626 85851\n19535 91599\n20386 53482\n32817 55364\n90111 84813\n81180 13958\n20278 82963\n71822 70030\n36650 74064\n96658 93643\n48953 12223\n87910 32104\n15586 46936\n59112 47057\n36552 32104\n54311 15545\n14521 35085\n46924 41818\n79287 17659\n91525 46171\n77523 63000\n14229 61327\n20514 77151\n30019 35029\n78834 57168\n96186 92129\n99772 60459\n62659 23209\n44811 97907\n41778 46924\n39724 54539\n56672 11103\n37872 44088\n67848 46924\n55337 58014\n48137 34267\n57761 47261\n90770 82701\n87830 32104\n14118 43916\n64511 97016\n67927 26386\n76032 55621\n46116 43948\n96284 26386\n51398 32104\n52363 45099\n84966 24105\n29725 47057\n92179 73851\n77151 57702\n31670 23131\n83560 34930\n62543 62129\n88635 55364\n14456 87507\n62848 35057\n31081 15535\n20287 11590\n58199 55876\n78634 63263\n21931 62559\n96294 23071\n18891 21157\n54875 35057\n40666 75460\n68475 71547\n93112 57702\n17780 50710\n89025 82701\n10487 77363\n14442 67828\n18287 10668\n73030 47436\n88998 81809\n47512 43866\n49438 52980\n62202 13958\n42062 33002\n35797 54746\n61308 74313\n98706 85679\n51049 29787\n96082 47057\n82102 77395\n91642 37908\n86709 16527\n11536 39339\n57804 77151\n58098 58014\n29840 37272\n68500 77570\n18840 17486\n42529 62129\n74868 62855\n48556 44088\n64424 35057\n87547 70030\n25349 55364\n24698 95115\n29610 37403\n10024 93643\n80179 44088\n86009 67277\n75396 28216\n18309 37500\n14754 67927\n98264 13958\n28294 77151\n50417 96240\n27171 12050\n79907 32187\n94597 73714\n36251 58014\n42293 43948\n22552 46924\n18765 85646\n65758 37771\n16028 74814\n15096 32104\n27990 62738\n91867 23131\n48177 62129\n43833 67927\n91992 96240\n25767 58014\n56422 35328\n39281 87024\n85701 70030\n40915 95206\n25378 23022\n17827 44745\n74880 31126\n51583 56967\n14996 82701\n24393 64040\n13557 31621\n87102 77151\n57922 50349\n18436 82701\n36961 68507\n33558 18947\n29752 24528\n88141 99508\n65521 66940\n98636 24754\n83809 23131\n13839 85851\n81470 35057\n93818 69550\n72210 82295\n10853 84284\n78121 55200\n28208 85199\n75892 13111\n62655 18720\n59696 86838\n18410 26693\n82521 30547\n68047 85199\n59444 62129\n73400 82753\n52751 25250\n94229 67927\n44728 45424\n84688 47457\n54885 53247\n66708 85987\n16610 19000\n52212 47057\n33467 90494\n11933 34797\n11426 23370\n98122 11318\n24974 98740\n89866 61735\n63042 84601\n97878 62129\n86324 88329\n93550 65587\n21893 32872\n32422 82701\n97593 95724\n79956 43017\n18574 66940\n69417 70030\n20527 62986\n32901 78479\n76892 14216\n80784 20119\n70030 46924\n45455 19210\n84089 55364\n51290 32104\n78084 35819\n19446 43664\n83281 82701\n88850 60032\n41737 26655\n28334 87060\n57007 63359\n35230 79052\n97142 62408\n71663 44088\n21967 56111\n73266 70030\n37751 73992\n71909 10908\n49256 76543\n87879 10005\n18958 99715\n33674 26386\n88578 16115\n38184 92129\n23162 94507\n94689 27138\n50188 23236\n73498 92740\n80946 14521\n20434 62129\n96199 54539\n97269 74914\n75164 56409\n63802 46857\n85851 39471\n13886 21128\n82608 43875\n47631 35057\n41955 83525\n41722 49739\n80210 73310\n72032 29229\n99588 19663\n75340 68873\n72016 64274\n87488 54539\n54539 89609\n92646 49227\n92493 92129\n51219 62129\n94294 66940\n35339 82701\n60625 25516\n71044 38554\n65428 57974\n47057 38596\n79756 64175\n25694 69619\n96457 13207\n13870 77151\n61984 33464\n14480 55364\n31924 14216\n33548 35819\n66463 52868\n36209 21830\n38146 62515\n43109 93643\n39326 73266\n67802 83861\n80246 93894\n32312 70030\n67288 20405\n11591 84936\n17019 49240\n45637 58014\n63060 82442\n96782 87050\n49139 57325\n13278 38425\n10622 58014\n70609 55364\n37494 57385\n50253 77151\n30770 88060\n48235 27041\n77045 46924\n36713 60284\n36647 73266\n21913 37190\n84907 76623\n83140 58014\n40049 38908\n96240 49588\n91375 20178\n44851 53224\n85957 77812\n31141 62129\n73469 75003\n54379 73141\n90253 26386\n37361 83861\n77965 86183\n44088 98740\n65748 44088\n92167 27474\n34050 39710\n53845 35057\n39439 70030\n56254 80666\n81736 35057\n22481 41619\n94515 47057\n40865 47438\n94090 94307\n25243 99699\n70472 44088\n92113 36000\n84122 44088\n75877 47057\n46967 98088\n89199 62129\n45284 61031\n25894 24258\n81546 49603\n18098 62129\n35845 58264\n30136 84643\n79351 85199\n91114 29608\n10796 73266\n80157 13958\n13776 34799\n32867 82701\n72659 83316\n70346 32104\n82707 26071\n93643 88453\n56487 73266\n17461 80601\n74189 35819\n89473 80231\n89648 29082\n21185 91451\n45756 24922\n13958 92570\n49766 46924\n71014 15764\n78218 47624\n36683 52276\n12805 18935\n89940 75569\n92619 62002\n26109 85199\n85199 47057\n74790 77094\n61077 44984\n21011 24325\n91299 35819\n13145 92130\n74616 25253\n68242 57168\n88099 29422\n98816 50970\n92627 32104\n60619 54539\n18592 99696\n97961 85199\n37971 86471\n76808 65290\n26960 44025\n21159 18065\n21820 51610\n87396 13958\n51739 69215\n36150 67927\n36428 77167\n81368 85546\n36684 74331\n87943 57127\n83934 39052\n93369 57168\n25759 23805\n90295 85638\n33748 35057\n23965 56026\n18136 47566\n97136 87779\n11751 98740\n77584 72651\n47535 14216\n35157 40935\n38666 20886\n49584 34431\n70553 57619\n41660 90498\n34861 70030\n97329 82739\n83411 32104\n74970 72228\n36340 26425\n40870 92129\n96019 35057\n35996 62535\n35750 17289\n44648 26386\n14216 68378\n41202 76995\n28670 44197\n12646 99599\n30412 91461\n18596 74757\n38836 73266\n63846 70555\n84175 23131\n36177 25567\n76440 41764\n89469 30895\n28950 43948\n93707 70030\n93976 73909\n15262 31486\n86652 23131\n65454 88787\n76119 46924\n44343 98685\n29424 46693\n97543 32104\n73497 76030\n87093 58014\n49551 16528\n45191 73266\n21283 34339\n27141 73266\n20255 57702\n48823 35838\n74136 57964\n18194 80112\n37794 96240\n46775 98740\n52309 42291\n12317 39213\n98269 96240\n82747 89172\n28972 54579\n40842 85851\n24862 46924\n90115 29514\n97189 85851\n60429 85233\n35563 99130\n42174 69145\n62129 12281\n87307 72432\n54431 47057\n32208 43948\n36159 92837\n92813 16218\n30956 87764\n81881 16847\n82389 14216\n81627 46027\n12133 59074\n83315 88230\n17677 82701\n11309 32104\n24911 35927\n77700 98147\n43948 53055\n82304 22718\n94870 55364\n67575 85199\n49305 93182\n15751 15044\n66060 26171\n30935 41610\n28356 32565\n18811 12256\n64019 23131\n34225 17638\n15964 13958\n21017 44088\n34116 81436\n52676 32857\n95338 16079\n78527 46924\n93795 85851\n12924 64525\n85065 79359\n45073 47356\n30072 43948\n98834 32104\n57372 73266\n83929 79432\n90423 82701\n22832 98740\n48430 59406\n73629 93643\n26263 94506\n94074 14216\n26414 98740\n56951 55364\n50559 43948\n63550 31546\n90368 63317\n32146 46924\n47438 57185\n58449 43948\n47368 85851\n32574 15690\n83798 92129\n14115 48770\n81573 66940\n51307 52219\n13174 47057\n36828 67828\n38526 44088\n44179 54539\n52115 89989\n78802 62495\n34661 14805\n32323 59466\n27132 30442\n79104 63409\n63502 46386\n97485 55364\n93125 45846\n22160 14216\n94150 21543\n16960 75856\n41717 62129\n16797 13241\n16286 31406\n81133 73266\n62615 36776\n38433 47057\n17558 77268\n31164 99409\n98740 37183\n16053 46924\n83861 14216\n89754 14216\n90249 14216\n45631 44427\n79425 67927\n41085 82701\n61288 93605\n66018 98413\n22664 49595\n48544 78826\n24552 57029\n13795 59246\n17199 69353\n33038 93573\n37670 50912\n22237 40613\n93548 92536\n71344 90698\n95400 97202\n16457 29422\n79172 12325\n87249 25678\n32398 57782\n42920 65021\n20491 17593\n29343 15560\n51134 56929\n87045 18964\n16859 67927\n50451 23131\n88013 99947\n79869 26386\n17158 13958\n47399 93686\n32349 20008\n88683 69537\n49926 93643\n86432 89768\n82719 35057\n56739 92864\n95877 43633\n69037 59576\n95747 72337\n15660 23131\n13684 67506\n87807 24977\n45695 44088\n14570 23131\n45507 96958\n79826 46189\n86233 96377\n57051 96244\n16227 70718\n66940 87229\n16621 77709\n67736 19049\n36049 43120\n27324 13585\n89099 46924\n80234 73266\n30105 82570\n42497 85199\n20275 47057\n84842 67828\n18545 31766\n22010 89576\n44172 33974\n11085 32612\n48341 28004\n94313 14216\n65788 46924\n27317 92981\n68318 70030\n56329 60704\n29327 91745\n53630 57702\n24518 82701\n96364 81945\n95503 47057\n41188 40000\n16708 20405\n31294 30878\n33264 98085\n64245 96240\n14497 26073\n77398 21420\n16427 72248\n26395 46924\n22620 93997\n17321 12686\n26035 72607\n58951 54463\n38225 30571\n89267 35057\n30825 66365\n98399 67169\n80743 46924\n80557 91342\n35024 72939\n53184 15700\n71001 47443\n97339 33591\n96913 78805\n42578 73266\n53465 82681\n74719 75723\n96923 58014\n92916 71872\n26229 14521\n42662 96240\n81620 47057\n46956 29400\n39197 98476\n30330 45605\n57702 20507\n82062 62129\n37754 10380\n97560 40495\n45988 54539\n42413 38989\n58786 26969\n41724 60576\n55364 69527\n64004 44088\n87772 31704\n65614 23131\n44781 53388\n78305 40217\n32629 36036\n78238 51508\n61460 14216\n46112 96240\n61748 90420\n41222 62129\n14622 23131\n12228 54539\n95242 60673\n46228 69114\n80525 75711\n45245 46098\n67491 58014\n52166 83687\n38396 67828\n31358 43948\n55034 37772\n56827 46924\n79835 93798\n89347 58014\n82227 18043\n63832 32104\n62004 10083\n26506 92531\n69651 29640\n72433 82716\n40513 63891\n18717 92129\n30405 23131\n74331 44088\n72157 67849\n74767 54539\n30847 35819\n18242 20586\n69756 67844\n72005 57702\n92985 86192\n35084 52372\n73020 92992\n48804 93643\n75034 57702\n67280 55364\n13826 44088\n58014 28935\n26965 41912\n32785 70621\n67828 88974\n24669 12565\n83563 46791\n24440 98740\n85814 99882\n96689 89250\n83424 99433\n86597 92129\n35057 19703\n90254 75605\n27503 45668\n80689 57779\n85142 43542\n47144 32104\n81029 55196\n88306 85851\n44736 91531\n44675 70030\n56611 75708\n99455 48355\n76675 46015\n58779 43948\n87090 93643\n28546 78920\n60401 31361\n25679 91728\n40839 57168\n36746 43948\n79132 82701\n66132 61087\n68819 36117\n36538 12235\n27205 76760\n24399 23139\n44240 45473\n35819 96240\n12508 99554\n76682 43948\n92401 85296\n86766 41706\n96643 27209\n53030 85851\n10426 29096\n47697 20405\n68686 82701\n55276 98740\n88787 14521\n68667 54484\n88551 82701\n86242 93860\n33643 17327\n19228 49220\n94076 63820\n66464 95977\n32020 57329\n39310 47057\n45805 82325\n62915 96018\n13011 60296\n88834 40986\n82701 44460\n79163 37444\n57767 47909\n21571 56724\n48453 66228\n92533 20251\n71231 43948\n26769 54336\n71828 96240\n14891 30317\n92462 74559\n57405 62129\n64689 45242\n14673 75437\n37392 12408\n88004 68886\n11897 85851\n35121 19747\n65978 46924\n59214 35819\n69160 82701\n86199 78031\n84182 79283\n46746 70030\n93280 31194\n78233 42061\n31751 44088\n92129 41105\n81082 44088\n69123 85851\n20505 66320\n41538 43948\n64819 28581\n20294 73266\n48547 31547\n47633 15882\n96892 58776\n22150 41774\n18701 93643\n61229 42035\n78415 32104\n66928 65236\n35556 79431\n33671 62129\n96468 87478\n50427 58131\n25039 99100\n80962 32104\n69045 62129\n32104 75645\n59924 23131\n18240 70030\n88763 58014\n60348 43980\n20717 51159\n81946 79855\n20510 68239\n37273 43948\n99008 54986\n13046 53592\n87961 14216\n16856 87339\n13289 29653\n81110 65830\n25077 66583\n53154 96594\n22799 77151\n44901 98740\n80985 40597\n39889 66837\n32167 67057\n46469 19487\n42664 77151\n28717 67927\n48319 23742\n20405 63271\n99160 68742\n37312 86445\n49441 84577\n42459 77403\n76352 25777\n42818 73266\n96351 89012\n55426 69362\n44989 93643\n68109 67066\n87896 81830\n73110 89259\n41918 35819\n46805 73266\n61826 43948\n32096 54757\n26386 22428\n70847 17131\n63265 63742\n66807 18158\n29422 36229\n56355 37525\n22577 46924\n99518 44088\n16441 66929\n26818 76171\n18649 85851\n76731 61187\n30590 91024\n90428 58160\n16076 67927\n13553 37915\n91615 32416\n36190 63670\n49749 49989\n62226 58313\n25075 46700\n30720 89560\n20085 28489\n95853 74174\n94343 35819\n18518 80833\n98111 86331\n63474 33979\n24642 67927\n76558 23131\n26475 58014\n80306 58014\n92346 48193\n20270 95402\n23131 43948\n23638 60254\n86655 57352\n58258 45523\n34945 61572\n33250 96240\n84692 11925\n74810 80726\n50681 52269\n79610 73266\n30424 17447\n14983 82701\n37491 93643\n36576 73266\n31400 92479\n74498 62129\n19311 85090\n78393 54666\n44638 35057\n71239 35819\n33836 77370\n87014 35057\n49752 31956\n89676 85199\n31538 14521\n54931 18949\n78700 85199\n57624 83620\n55476 42249\n36922 23131\n83133 96903\n33766 38715\n90922 92129\n84184 85199\n84873 98740\n30986 46301\n66208 66981\n76128 44088\n54499 46924\n11089 73266\n63966 66921\n24165 60756\n65766 13958\n98485 92129\n31557 32104\n62423 44088\n54888 52459\n61829 75842\n26964 63459\n63722 32104\n71060 45395\n60721 85952\n14154 56940\n71805 82701\n74964 80051\n23705 85348\n27306 30788\n57026 35057\n95790 30087\n47055 67481\n20026 75622\n92097 12792\n22924 38758\n30454 42427\n77910 99903\n20644 30998\n51589 39385\n83392 76104\n92902 93643\n44609 42484\n82287 20771\n88814 15393\n39082 73266\n37969 85199\n57693 96633\n43012 93643\n29944 78876\n68317 66940\n33738 58014\n17794 98740\n41165 47180\n14871 41373\n42771 43164\n82391 29055\n79484 53019\n58189 29804\n19422 82701\n48923 83734\n76839 85851\n71377 23080\n50558 44088\n25393 45650\n39296 84954\n84189 57168\n85258 22386\n30912 13039\n77881 48653\n67451 46924\n47082 89946\n91778 85851\n99760 37363\n",
"example" => "3 4\n4 3\n2 5\n1 3\n3 9\n3 3"
}
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})
solution_module = Smaoc.Solution
solution_module = Smaoc.Solution.Day2
defmodule solution_module do
defp parse_input(input) do
input
|> String.split("\n", trim: true)
|> Enum.map(fn row ->
row
|> String.split()
|> Enum.map(&String.to_integer/1)
end)
end
defguardp is_asc(n1, n2) when n2 - n1 > 0 and n2 - n1 < 4
defguardp is_desc(n1, n2) when n1 - n2 > 0 and n1 - n2 < 4
defp valid?(row, skipped \\ false, dir \\ nil)
defp valid?(_, _, :fail), do: false
defp valid?([_], _, _), do: true
defp valid?([n1 , n2], skipped, dir), do:
not skipped or calc_dir(n1, n2, dir) != :fail
defp valid?([n1, n2, n3 | rest], false, nil) do
(
valid?([n2, n3 | rest], false, calc_dir(n1, n2))
or
valid?([n3 | rest], true, calc_dir(n1, n3))
or
valid?([n3 | rest], true, calc_dir(n2, n3))
)
end
defp valid?([n1, n2, n3 | rest], false, dir) do
(
valid?([n2, n3 | rest], false, calc_dir(n1, n2, dir))
or
valid?([n3 | rest], true, calc_dir(n1, n3, dir))
)
end
defp valid?([n1, n2 | rest], true, dir), do:
valid?([n2 | rest], true, calc_dir(n1, n2, dir))
defp calc_dir(n1, n2, dir \\ nil)
defp calc_dir(n1, n2, nil) when is_asc(n1, n2), do: :asc
defp calc_dir(n1, n2, nil) when is_desc(n1, n2), do: :desc
defp calc_dir(n1, n2, :asc) when is_asc(n1, n2), do: :asc
defp calc_dir(n1, n2, :desc) when is_desc(n1, n2), do: :desc
defp calc_dir(_ ,_, _), do: :fail
def solve(:part1, input) do
input
|> parse_input()
|> Enum.count(&valid?(&1, _skipped = true))
end
def solve(:part2, input) do
input
|> parse_input()
|> Enum.count(&valid?/1)
end
end
year = "2024"
day = "2"
run_config = ["example", "puzzle", "part1", "part2"]
inputs = %{
"puzzle" =>
"20 21 24 25 27 29 27\n60 61 62 64 64\n15 18 21 22 25 26 30\n5 8 11 14 16 19 20 26\n20 22 20 23 24\n89 91 92 95 98 95 96 95\n3 5 7 10 11 14 13 13\n82 85 83 84 86 90\n82 83 84 81 86\n27 28 28 30 33\n2 4 4 6 9 10 13 11\n64 65 65 68 69 72 72\n60 63 63 64 65 67 71\n14 17 17 20 21 27\n16 19 21 25 26\n57 59 63 65 62\n86 89 91 95 95\n2 5 8 10 14 18\n10 13 14 17 19 23 29\n17 18 24 26 29\n28 29 36 38 35\n53 56 58 61 68 69 70 70\n7 10 13 16 22 24 28\n68 70 73 80 81 84 89\n28 27 28 30 33 35 37\n90 89 91 93 95 94\n6 5 7 8 11 11\n33 32 34 35 39\n20 18 19 21 22 23 26 33\n27 26 24 27 28\n10 8 5 8 7\n10 8 10 13 15 17 14 14\n77 75 78 79 80 77 81\n9 8 9 6 12\n9 8 10 11 14 14 17 18\n6 3 4 5 7 7 9 6\n92 90 92 94 94 94\n88 87 87 90 93 97\n58 55 56 57 57 62\n12 11 14 15 18 19 23 25\n85 82 86 88 86\n57 55 58 60 64 64\n27 25 28 32 35 36 40\n20 19 20 24 29\n42 40 41 46 49\n4 2 5 12 14 17 15\n9 6 8 9 11 17 17\n32 31 32 34 40 43 45 49\n10 8 14 17 18 24\n62 62 65 68 69 72 75\n16 16 17 18 21 24 22\n4 4 5 8 11 13 13\n40 40 42 43 46 49 53\n16 16 19 22 29\n44 44 46 47 48 46 47 50\n26 26 29 31 29 30 32 30\n80 80 82 85 84 85 85\n6 6 3 4 6 9 13\n44 44 46 45 48 51 58\n68 68 68 69 72\n78 78 79 79 82 79\n6 6 8 10 10 10\n47 47 50 50 52 54 55 59\n2 2 2 4 7 9 10 17\n17 17 20 24 26 27 30\n84 84 86 90 87\n37 37 41 43 43\n50 50 51 55 57 60 64\n11 11 15 16 18 20 26\n27 27 29 31 33 39 41\n36 36 43 44 41\n51 51 53 55 58 64 64\n51 51 56 59 61 63 64 68\n70 70 77 79 80 82 83 88\n60 64 65 66 67\n49 53 54 57 56\n80 84 85 86 89 92 92\n26 30 32 33 35 38 42\n28 32 34 37 39 41 43 48\n79 83 84 85 83 86\n5 9 11 12 15 12 14 11\n58 62 64 62 62\n25 29 28 31 34 35 39\n38 42 43 40 43 46 52\n85 89 91 91 93 95 96\n8 12 15 15 12\n18 22 24 27 27 30 32 32\n33 37 39 40 40 43 45 49\n19 23 23 26 31\n66 70 71 73 75 76 80 83\n46 50 52 55 59 57\n46 50 51 53 56 60 62 62\n79 83 87 89 91 95\n22 26 30 31 34 39\n19 23 26 28 31 33 40 41\n11 15 17 18 20 25 26 25\n45 49 54 55 57 59 62 62\n57 61 63 68 69 73\n43 47 48 54 59\n72 77 79 82 83 84 87 88\n6 11 12 13 15 18 21 20\n76 81 82 84 87 87\n17 23 26 29 30 34\n70 75 77 80 83 86 89 94\n61 67 65 67 69\n77 84 86 89 90 92 89 87\n23 30 27 28 29 29\n24 29 31 28 32\n15 22 24 21 26\n15 21 22 23 23 26\n84 91 92 93 96 97 97 96\n23 28 28 30 31 31\n9 14 15 15 16 18 22\n50 57 59 60 60 65\n79 85 89 91 94 95\n6 11 14 18 16\n71 76 80 82 84 84\n17 24 28 30 33 34 38\n40 45 46 50 53 60\n70 76 78 81 86 87 88\n44 51 56 57 60 63 60\n13 18 19 24 26 28 28\n81 86 93 94 95 99\n1 6 8 11 12 17 22\n12 9 8 7 8\n65 62 60 58 58\n58 55 52 49 47 43\n99 98 95 92 91 84\n20 17 15 14 11 9 12 9\n15 13 11 8 11 10 9 12\n86 83 80 81 79 79\n76 74 71 69 67 68 64\n45 44 41 40 38 37 38 32\n48 46 45 45 43 42\n92 90 88 85 83 82 82 83\n68 66 66 63 60 60\n44 41 41 38 37 34 30\n90 87 84 84 82 80 77 72\n19 18 16 15 11 10\n98 97 96 95 91 88 89\n54 53 51 50 49 45 45\n57 56 52 50 49 45\n60 58 56 53 52 48 45 39\n89 88 87 81 79 76 75 73\n92 89 88 86 83 78 75 78\n50 49 47 40 38 36 36\n53 50 48 43 42 38\n93 90 85 82 77\n23 26 25 23 20\n68 71 69 68 67 70\n38 40 37 35 33 31 29 29\n79 81 78 76 74 71 69 65\n97 99 98 95 88\n10 11 8 6 8 7\n79 80 83 81 82\n5 8 5 2 3 1 1\n47 49 48 50 46\n33 34 32 33 30 25\n24 27 27 24 22\n15 17 14 12 12 13\n29 30 27 27 27\n93 96 94 94 92 89 85\n18 19 16 14 14 9\n55 57 56 52 50 48 47\n41 44 40 39 36 38\n52 55 52 48 45 43 41 41\n17 20 18 14 10\n70 72 70 66 60\n86 87 84 77 75 73\n46 47 45 44 41 36 35 36\n78 79 78 73 73\n80 83 81 74 72 70 68 64\n17 18 11 9 4\n14 14 11 9 8 6\n89 89 86 85 83 81 83\n72 72 69 66 66\n99 99 97 96 94 90\n87 87 85 84 82 81 74\n55 55 57 55 52 49\n89 89 90 87 88\n30 30 27 24 27 26 26\n77 77 78 76 75 74 70\n67 67 66 69 67 64 57\n76 76 75 75 74 73 72 70\n24 24 23 23 20 19 20\n51 51 51 48 47 44 42 42\n92 92 89 86 83 83 79\n74 74 74 71 68 62\n89 89 87 84 80 78 76 75\n79 79 76 72 73\n48 48 47 43 43\n91 91 88 87 86 84 80 76\n90 90 89 85 83 77\n29 29 27 26 23 17 14\n92 92 86 84 85\n38 38 32 30 29 26 24 24\n24 24 17 15 11\n55 55 48 45 38\n83 79 76 74 73 71 70\n85 81 79 78 77 79\n54 50 48 45 45\n50 46 45 44 41 37\n85 81 80 79 76 74 68\n83 79 78 77 80 78\n56 52 55 53 55\n43 39 38 41 39 39\n51 47 46 48 44\n20 16 13 12 14 8\n99 95 93 92 92 89\n95 91 88 85 83 83 82 84\n87 83 82 82 79 77 76 76\n91 87 85 84 82 82 80 76\n17 13 12 11 9 9 4\n43 39 38 37 33 32 30 28\n58 54 53 49 48 47 49\n93 89 88 84 81 78 78\n83 79 78 76 75 71 70 66\n89 85 81 79 76 70\n91 87 82 81 80 79 77\n87 83 76 75 73 75\n28 24 18 16 15 13 12 12\n77 73 72 66 63 62 58\n85 81 79 72 69 66 61\n34 28 26 25 23 20\n81 76 74 71 68 67 66 69\n94 87 85 82 79 77 77\n93 86 83 80 76\n44 38 35 32 30 24\n45 39 36 39 38\n18 13 14 11 14\n51 44 46 44 44\n33 27 30 29 27 23\n44 38 35 34 36 30\n38 31 28 28 26 23 21\n90 83 82 80 80 82\n51 46 45 42 40 37 37 37\n17 10 9 6 6 2\n83 77 76 73 73 72 71 66\n64 58 54 52 51 50\n58 52 49 45 42 44\n35 30 26 23 23\n35 28 24 22 21 20 16\n31 26 22 21 18 17 14 9\n20 13 11 6 3 2 1\n92 86 83 80 77 71 72\n78 72 69 62 60 59 59\n56 51 48 41 38 34\n72 65 63 61 58 52 50 45\n36 34 34 35 39\n62 62 59 61 61\n23 17 16 15 15 14 11 10\n16 20 22 24 31 34 38\n1 7 9 8 10 11\n81 78 80 79 81 82 87\n15 18 20 21 23 26 30 34\n20 20 17 14 13 16 14 10\n7 11 13 16 15 15\n39 39 39 36 33 33\n39 43 45 46 51 53 60\n21 15 13 11 8 7 6 2\n15 20 22 23 25 22 23 29\n34 34 28 25 28\n32 30 27 27 24 25\n52 54 51 49 47 46 45 46\n46 49 49 48 47 43\n42 43 44 46 48 50 54\n90 90 91 91 93 94 94\n96 93 90 83 82 80 78 76\n49 56 57 59 62 66 66\n71 69 70 74 75 76 83\n54 52 54 57 63 64 65 70\n78 71 66 65 62 61\n67 71 73 74 81 82 82\n23 17 16 16 11\n88 84 83 79 73\n59 59 63 66 66\n66 62 62 59 55\n69 71 68 66 63 62 55 50\n48 48 45 43 41 35 32 26\n19 15 14 11 9 9 9\n60 59 58 55 51 45\n10 14 17 17 20 23 27\n77 77 74 72 73 71 70 63\n73 73 72 75 75\n15 22 24 23 25 27 28 28\n90 90 92 91 93\n64 67 67 65 64 62\n97 93 91 89 85 88\n42 42 38 35 32 32\n76 74 77 74 71\n71 68 67 64 63 62 64\n13 15 13 11 7 6 5 2\n67 67 71 72 73 70\n20 17 19 19 20 21\n69 74 75 76 79\n39 35 33 30 28 26 29 29\n68 66 63 62 59 52 52\n25 19 17 14 13 9 7 10\n53 53 56 63 63\n43 39 37 34 33 31 27\n31 33 35 35 36\n32 35 38 39 39\n28 30 33 36 42 39\n51 49 52 55 58 63\n20 16 12 9 5\n38 33 30 29 26 23\n56 56 57 61 64 66 68\n57 60 63 62 65 72\n26 19 18 17 16 13 9 7\n27 33 36 41 43 46 50\n85 85 86 89 92 94 92\n43 44 51 54 57\n68 74 78 81 84 86 88 92\n54 58 60 62 64 64 66 66\n32 28 26 24 26 24 22 15\n4 3 4 7 7 10 17\n6 11 13 15 17 23\n30 34 36 40 40\n83 87 90 91 93 91\n58 58 56 55 54 51 52 54\n64 66 65 63 56\n14 17 15 15 16\n22 18 16 14 13 11\n66 61 62 61 63\n68 67 64 66 67 71\n25 31 34 32 31\n58 62 63 64 65 67 69 75\n44 45 43 36 35 34 31 27\n55 60 67 69 68\n31 29 28 31 33\n69 75 77 79 82 82 89\n90 90 92 94 94 98\n57 57 55 53 56 54\n42 36 35 38 37 36 33 26\n57 57 60 65 67 68 72\n55 58 57 52 49 47\n88 88 90 91 91\n51 51 54 54 55 56\n18 22 25 27 30 33 37 43\n58 65 66 69 72 74 78 76\n40 39 36 32 29 28 25\n70 66 64 61 60 63\n13 15 18 21 24 27 34 34\n76 79 72 71 70 73\n72 68 66 64 64 61\n13 12 13 15 17 18 22 26\n86 82 82 81 80 79 77 71\n37 37 35 34 29 28 28\n61 62 65 68 68 68\n24 25 23 24 24\n81 81 80 77 71 70 69 65\n27 27 34 36 37 40 43 50\n52 49 47 50 49 48 47 47\n66 69 76 79 83\n54 54 52 47 44 43 40\n85 87 87 86 84 82 80 75\n21 15 11 8 7 3\n54 54 53 53 51 49 45\n56 49 52 50 47 44 44\n85 83 80 82 78\n53 54 58 60 62 63\n86 89 88 89 85\n44 50 53 53 56 58\n44 48 50 53 53 56 62\n14 16 14 12 10 6\n57 56 58 59 62 66 67 67\n83 82 84 87 89 91 91 91\n20 13 9 7 4 2 2\n3 4 6 6 8 9 11 16\n83 83 87 88 93\n60 61 64 67 70 73 76 74\n37 36 41 44 46 48 49 49\n91 91 88 87 86 86 84 81\n66 68 61 59 56 56\n11 9 12 14 18 19\n39 34 31 31 30 33\n33 33 31 30 28 26 19\n25 27 24 22 18 17 15 17\n52 52 54 53 52\n20 25 25 26 30\n33 36 35 32 29 27 27\n34 30 27 25 25\n10 8 9 10 13 10 11 14\n34 41 44 45 51 51\n4 4 6 7 10 14\n34 31 34 38 40 41 44 43\n17 13 10 9 10 9 6 5\n75 71 70 65 61\n56 55 53 52 49 46 42 38\n56 52 45 42 40 39 38 39\n17 21 24 24 25 28\n59 53 51 50 51 48 47 43\n95 89 86 82 76\n12 12 10 7 5 3 3\n22 24 23 24 23\n82 80 79 78 75 75 75\n64 65 66 69 72 76 82\n93 87 85 85 85\n22 22 22 20 18 20\n73 72 74 77 80 83 85 88\n42 44 46 45 43\n15 15 18 17 18 19 24\n39 43 44 43 42\n79 83 84 88 85\n16 20 23 20 24\n16 13 11 8 9 8\n22 25 25 26 28 32\n43 47 49 50 52 51 52 57\n19 16 15 13 13 9\n76 83 84 82 86\n24 24 25 28 30 30 33 38\n20 16 15 10 7 7\n19 24 27 31 34 36 41\n43 47 51 52 53 55 56\n63 62 64 66 72 73 77\n10 8 11 12 14 16 18 18\n70 70 69 68 65 61\n6 10 12 16 20\n81 85 86 87 89 92 92\n51 48 46 45 42 41 38 34\n24 29 31 32 33 30\n68 68 68 71 74 77 80 77\n5 7 8 10 12 16 18 15\n59 59 62 63 66 67 68 71\n18 21 24 31 32 33 36 42\n22 26 29 30 34\n38 42 44 45 47 49\n44 38 35 32 25 20\n20 14 12 11 11 9 7 3\n57 61 62 64 66 71 70\n75 75 71 69 66\n30 25 22 17 16 15 11\n34 34 30 27 25 22 25\n13 16 15 12 10 6 2\n35 34 36 35 30\n11 11 10 9 8\n53 51 48 42 41 42\n84 83 84 82 82\n90 92 90 89 89 89\n72 76 76 78 80 78\n81 86 88 91 94 95 95 92\n30 32 34 36 33 35\n22 26 28 31 32 38 40\n79 73 66 63 62 65\n47 43 40 34 32\n20 17 18 21 25\n63 60 66 69 72 73\n71 76 78 81 85\n29 31 31 32 34 31\n35 36 35 33 30 26 19\n64 68 70 71 68 70 72 73\n66 60 55 53 50 49 46 46\n17 18 15 12 10 6 6\n79 75 72 69 65 62\n7 12 15 19 22 25\n42 42 38 37 33\n12 8 5 5 4 3 2 5\n71 68 66 65 64 63 62 62\n6 3 5 8 10 12 11\n93 86 85 84 82 84\n31 32 30 31 31\n53 53 56 59 62 61 65\n26 26 29 35 37\n13 14 13 15 19\n33 30 31 33 35 35 34\n53 60 67 68 71 72\n93 91 87 85 84 83 84\n38 38 40 42 43 46 48 53\n33 39 41 44 51 58\n43 43 40 36 34 29\n50 52 54 53 52 45\n26 19 17 14 14\n66 62 59 60 61\n9 12 16 19 22 22\n89 88 86 83 82 80 78\n25 26 29 32 33\n61 58 56 54 52\n15 12 10 7 6 5\n44 41 39 37 35 33\n80 79 76 75 72\n55 54 51 48 45\n72 69 66 63 62 61\n49 50 53 54 57 59 61\n88 86 84 81 78 76 74 73\n45 44 41 38 37 36 35 32\n77 80 83 86 88 90 92\n92 89 88 85 84\n48 49 51 54 56 58\n92 91 88 85 83 82 80 77\n28 27 26 23 22 19 17\n28 27 24 21 19 18 16\n58 61 63 64 66 67 69 71\n52 55 57 60 62 64 65 67\n20 19 16 15 12\n28 27 26 23 20 17\n66 64 61 58 57\n27 24 22 19 16 14 13 10\n16 18 20 23 25 28 30 32\n85 87 88 90 91 92\n81 79 77 76 74 72\n30 31 33 35 38 40 41\n9 10 12 13 16 17 19\n32 30 28 26 24 22\n40 43 46 49 50 51 53\n15 16 19 22 23 25 28 31\n53 51 48 46 43 41\n65 66 69 72 75\n33 34 35 36 37 39 42\n67 70 72 74 77 78\n23 22 20 19 18 16 15 14\n22 21 18 17 15 14 12\n14 13 10 9 8 5\n35 34 32 29 26 23 22 19\n86 84 82 79 78 77 76 74\n34 37 39 40 41 44 46 48\n66 68 71 74 77 78 79\n73 71 70 69 67\n47 46 44 43 41 40\n22 21 19 17 16 15\n78 80 83 86 89 90 91 93\n41 38 36 33 32 29 27\n70 72 73 76 79 80 83 86\n63 64 66 69 70 73 74\n26 25 22 19 16 14 13\n42 39 37 35 34 31\n3 6 8 9 12 15 18\n58 56 55 52 51 48 46 44\n9 10 12 14 16 18 19 21\n93 91 90 88 86 85 82 79\n86 84 83 80 78 77 76\n71 68 65 64 61\n53 51 50 48 46 43\n34 37 38 41 42\n63 60 58 55 54 52 49\n40 37 36 35 33 30\n36 37 40 42 45 47 49 50\n58 60 63 66 69\n8 10 13 15 18 19 21 23\n3 4 7 8 10 12 13 15\n26 23 22 21 20\n85 87 90 93 94\n12 15 18 21 22 23 24\n89 91 93 95 96 97\n50 49 46 44 42 41 38 35\n43 41 40 38 35 34 33\n65 66 68 70 72 73 74\n20 17 15 14 11\n63 65 68 69 70 72 74\n66 65 64 63 61 59\n31 32 33 35 37 38 39\n48 47 44 42 41 39\n38 40 41 44 47 48\n92 90 89 87 85\n62 61 60 59 57 54 51\n17 20 22 24 27 29 31\n89 87 86 83 81 78\n47 50 53 54 57\n22 19 16 13 11 10\n50 48 45 44 41 39 36 33\n75 78 81 82 85\n78 76 75 72 69\n45 43 42 41 39 38\n45 48 50 53 54 56\n35 34 31 30 28 27 24\n54 57 60 62 63\n50 51 52 55 57 58 59 61\n49 47 46 44 43\n51 49 46 43 41 38 37 34\n43 42 39 37 35 33 31 28\n31 33 36 37 39\n24 25 27 28 29 31 33 34\n6 9 10 13 14 17 20 21\n79 80 82 83 86 89 90\n29 28 25 22 19 17\n56 53 52 51 50 49 48 47\n10 7 6 5 4 3 1\n87 88 90 91 92\n12 9 6 4 3 1\n19 17 14 12 10\n22 24 26 29 31\n96 94 91 90 87 86\n37 40 41 42 43 46 49 51\n39 36 35 33 32 29\n24 27 28 29 32 33 35 38\n42 39 36 33 31\n68 69 71 73 74 76 79 80\n43 44 46 47 49 51 53\n44 41 40 38 37 35\n66 67 69 71 73 74\n48 46 43 40 38 35\n24 23 22 20 19 18 16\n27 30 31 33 34 35\n74 77 78 79 80 81\n7 10 13 16 19\n7 9 11 12 13 16\n50 48 47 44 43 40 38 36\n24 22 19 18 15 14 13\n31 30 27 26 25 23\n65 62 60 58 55 53 50 49\n68 66 63 62 60 59 58 55\n36 33 31 30 27 26 23\n42 41 40 37 34 31 29 26\n31 29 27 25 24\n86 84 81 78 77 75 73 72\n9 12 14 17 19 20 22\n64 65 67 69 71 74 77 79\n94 93 90 87 86\n50 47 44 41 40 38 37\n15 13 12 11 10 8\n36 33 30 27 26 25 22 19\n80 81 82 83 84 87\n14 11 10 9 6\n12 11 9 8 6 4\n37 40 43 44 46 49 50\n34 35 37 39 41 44\n80 81 82 85 87\n55 58 59 60 63\n57 59 61 63 66 67\n83 84 85 87 89 90\n86 84 82 80 78 75 74\n60 59 56 53 51\n27 26 23 21 20 19\n13 14 17 19 20\n66 65 64 61 60 57 56 54\n62 63 65 67 69\n85 86 89 91 94\n6 7 9 11 12 15 17\n9 11 14 17 20 21\n86 83 80 79 78 75 72 71\n52 53 56 57 60 63 64 66\n38 35 33 31 30 28 25\n47 44 42 39 37 34 31\n97 94 93 91 89 88\n68 69 72 74 76 77 79\n69 66 65 64 61 58 57\n38 36 33 30 27 25 22\n11 14 16 18 20 22\n35 32 30 27 24 21 19 16\n86 87 89 90 91 92 93\n7 9 11 13 15\n78 81 83 85 87 88 91\n48 49 51 52 53 56 57 59\n36 39 42 43 44 45 46 47\n48 51 52 53 55 56\n79 76 75 73 71 68 65 63\n15 14 13 10 7 5 4 2\n83 82 80 78 77 74\n19 18 16 15 12 9 7 4\n95 93 90 87 84 82 79 76\n49 46 44 42 41 39 37 36\n49 48 47 46 44\n35 36 39 41 43\n2 4 5 8 9 10 12 14\n25 22 20 18 16 14\n67 64 61 59 56\n64 67 70 73 75 76 78 81\n54 51 49 46 43 42 39 38\n95 94 93 91 88 87 84 81\n64 65 68 70 71 74 76 77\n73 71 68 66 63 61 59\n81 79 78 75 74 71 69 67\n62 60 58 55 54 53 50\n79 82 83 84 85\n52 55 56 58 59 60 62 65\n44 45 46 47 48 50 52 55\n42 44 47 48 51\n54 52 50 49 48\n17 15 13 11 9 8 6 3\n76 79 81 82 84 85\n60 63 64 67 69 70 73 75\n18 19 20 22 24\n25 28 30 32 35 38 40 42\n66 67 69 71 72 73 75\n17 20 23 26 29 32 34 37\n78 76 75 72 70\n53 51 48 46 43 40 37\n94 91 88 86 85 82 81 78\n71 73 74 75 76 78 80 82\n80 78 75 73 71 69 66 63\n37 36 33 31 30 29 28\n35 38 40 43 46 47\n35 38 41 42 44\n34 33 31 28 27 24\n82 79 78 77 76 74\n27 29 31 33 36 37 40\n17 18 19 22 25 27 30 31\n75 77 78 79 82 84\n21 19 18 15 12 10\n49 52 54 57 60 61 62\n51 54 55 58 60 62\n69 68 65 62 59 57 55\n64 61 60 57 55 53 50\n74 71 69 66 64 61 59\n55 53 50 49 47 46 45 43\n69 72 73 76 78 81 82\n74 72 71 69 66 64 61 58\n32 29 28 25 23 21 18 17\n79 82 85 88 89 92 93 95\n49 52 54 55 58 60 62 65\n88 85 84 81 78 77\n25 26 29 31 32\n66 69 70 71 73 76\n49 51 53 54 57 58\n36 38 41 43 44 45 48 49\n97 96 93 90 88 86 85 83\n41 40 39 37 35 32 29\n57 59 60 61 62 64 67\n37 35 34 32 29\n52 51 48 45 44 43\n12 13 14 15 16 19\n8 9 11 12 13 14 17 18\n71 73 74 76 77 80\n34 32 30 28 27 24\n41 43 44 46 49 51\n17 19 21 24 27 29 32\n22 20 19 16 13 10 9 6\n94 92 90 89 86\n38 35 33 32 30 28 25\n28 29 30 33 36 37 38\n91 88 87 86 83 82 81 79\n37 38 39 41 44 46\n80 77 75 73 72 70 69\n76 77 79 82 84 85\n22 25 27 29 32 33\n57 55 54 52 51 49 46 45\n66 67 70 71 74\n65 62 60 59 58 57 56\n10 9 8 6 3 2\n66 63 61 59 57 54 52\n42 45 47 49 52\n86 83 80 79 77\n57 59 62 63 66 68 69\n13 14 17 20 21 22\n60 58 56 55 52\n89 88 86 83 81 79\n76 73 72 69 67 66\n42 39 38 36 35\n72 74 77 80 82 83 84 87\n56 57 59 62 65 67\n45 46 47 48 49 51 54\n76 77 80 83 86 87\n14 11 9 6 3\n75 78 81 84 87 89\n57 59 62 63 66 67 68 69\n54 57 60 62 63 65 66 69\n29 30 32 34 37 40 41\n77 79 81 84 86 88\n37 39 40 42 43\n82 79 76 74 71 70 68\n46 44 43 42 41 40 39 38\n9 10 12 14 17 20\n48 49 51 52 53 54\n44 46 49 51 52 55\n32 31 29 28 26\n44 46 48 50 52 54\n57 58 61 63 65\n40 42 45 46 49 51\n62 59 56 53 52\n52 53 55 56 58\n64 65 66 69 71 72 73 74\n31 29 26 24 23\n48 46 45 43 40\n29 31 34 35 38\n67 68 69 72 74 76 78\n66 64 62 61 60 57 54\n38 37 34 33 32 29 28\n7 9 12 14 17 20 21\n73 72 71 69 68 65 62\n15 16 18 19 20 21 23 25\n90 89 86 84 81 78 76\n75 78 79 80 81 82\n95 94 91 90 89\n90 92 94 95 96 97 99\n73 70 68 67 64\n19 17 15 13 11 10 7 4\n76 79 82 85 87 90\n75 76 78 81 83 85\n77 79 81 83 85\n89 87 86 84 81 80 79 76\n58 61 62 63 66 67 69\n20 23 25 27 30\n42 40 38 36 34 32\n68 65 64 63 62\n35 37 40 41 44 45\n35 36 39 41 42\n66 63 61 60 58 57 54\n70 67 64 61 58 55\n88 90 93 95 97 98 99\n75 76 79 82 84 85 86\n83 80 77 75 72 70 69\n76 74 72 70 68 67\n14 15 18 20 22 25 26 27\n15 17 18 19 22\n10 9 8 7 4\n16 19 21 24 27\n36 35 32 30 27 25\n40 37 34 32 31\n42 39 38 36 34\n76 74 73 70 67 65 64 62\n30 28 25 22 19 17 15 14\n58 57 54 51 49 48 45 42\n18 17 16 15 14 13\n30 29 26 25 22\n62 63 66 67 68 69 72\n69 72 75 76 79\n23 21 20 17 14 13 11 8\n35 34 31 30 27\n90 88 85 84 81 78\n98 95 93 91 88\n81 80 78 76 73 70 68\n77 78 81 82 83 86\n75 77 78 79 81\n21 20 17 15 13 12\n41 43 44 46 49 51 53 56\n32 34 35 38 41 43 44\n89 87 84 82 79 77\n35 38 39 40 43 46 47\n35 37 40 42 45\n80 79 77 74 72 70 69\n67 68 71 72 73 75 76 79\n9 10 13 15 16 19 22\n31 32 34 36 37 39\n81 78 76 75 72 69 68 66\n10 11 13 16 19 21 24\n57 60 61 64 66\n62 59 58 56 55 54 51\n1 3 6 7 9 10 12\n13 16 17 18 19 20 21 23\n51 50 48 46 45\n32 35 38 41 43 45\n91 90 87 84 81 79 77 74\n64 67 69 70 72 73\n37 40 42 43 45\n48 51 54 55 58 61\n46 49 51 53 54\n43 46 49 50 53\n51 54 56 59 61\n57 60 62 63 64 66 67 69\n44 42 41 40 38\n53 51 48 47 45 42 40 38\n72 73 74 76 79 81\n25 22 19 17 15 13 10\n22 19 18 17 15 14 12\n37 35 34 32 31\n76 74 72 70 67 64 61 59\n60 61 64 66 68 70\n8 10 12 13 16\n99 97 95 92 89 86 84\n87 84 83 82 80 79\n80 78 75 74 72 70 68\n86 84 81 79 78 77 74 73\n87 88 89 91 92 94 97\n39 36 35 33 31\n52 49 47 45 44 43\n45 42 40 39 37 34\n68 70 72 74 77\n87 89 90 91 94\n61 58 56 53 51 48 45 43\n75 78 81 84 87 90\n44 47 50 52 54 57\n82 85 88 91 93 94\n3 5 8 11 14 17 18 19\n53 50 49 46 43\n87 85 82 80 77 75 72 71\n70 67 65 64 63 60 59\n28 29 31 33 36 38\n76 77 78 80 83 86 87 89\n41 42 45 46 48 51\n47 46 43 42 40 37 36\n86 85 82 80 79 78 77 75\n32 29 28 27 24 21\n3 5 8 9 10 12\n11 14 15 18 20 21\n28 31 34 36 39\n25 24 22 21 20 17\n67 68 69 71 73 75 77\n48 46 43 42 39 38 37\n23 26 27 30 33 36\n68 70 73 74 75 76 77\n83 85 88 91 93 96\n55 54 51 50 48\n46 48 49 51 52 55 58 59\n35 37 40 41 44\n61 64 65 66 67 68 70 73\n3 4 7 10 11 13 16\n99 97 94 93 91 90\n45 42 40 37 34\n26 27 30 32 33 36 37\n34 32 31 28 25 22\n91 92 94 97 98 99\n55 58 60 63 64 66 67 70\n15 17 18 21 22\n58 60 63 64 65 66\n28 31 34 35 37 40 42\n63 66 69 70 71 72 75\n51 53 54 55 57 58 59\n79 82 85 88 91 93 94\n20 22 24 27 28\n67 66 63 61 60 58 55\n46 43 41 40 37 34 31 30\n38 35 33 32 29 28 26 23\n58 56 55 54 53 50\n83 86 89 92 95 96\n12 14 16 17 18 20 21\n68 65 63 62 60 59 57 54\n90 88 85 84 82 81 80 79\n59 56 53 52 50 48 47\n27 28 31 32 35 36 37\n81 79 77 74 73 70\n56 55 54 53 52 50 49\n40 41 44 46 49\n71 74 77 80 82 84 85 86\n40 43 46 49 50\n69 67 66 63 60 59\n35 36 38 40 42 43 45\n20 18 17 15 13 11 10 7\n32 29 27 24 23 22 20 18\n77 78 80 81 82\n25 23 21 19 16 15\n85 86 87 88 90\n18 20 21 24 26 27 30\n1 4 5 7 10\n81 82 85 87 90 93 96 98\n27 24 21 18 15\n82 85 87 89 92 94 96 99\n49 51 52 53 56 59 60\n80 79 76 73 71 69 66\n66 63 62 59 56\n65 64 61 58 56 55 52\n45 48 49 52 54 55 58\n82 81 78 77 75 73 71 70\n66 64 63 60 58 57 55\n62 59 56 54 51 49 46\n7 6 5 4 2\n32 31 28 25 22 19 18\n78 80 83 84 85 88 89\n56 57 59 61 63\n53 50 48 47 46 45 44 42\n83 82 81 80 78\n28 31 32 35 37 38 40\n4 5 7 9 10 12 15\n44 47 48 50 53 54\n51 53 54 56 57 60\n2 5 7 10 13 15 17 20\n24 25 26 28 31 33\n24 27 29 32 35 37\n87 88 90 92 95 98\n47 49 50 53 55 57 60\n87 85 83 82 81 80 78\n3 5 8 10 12 14 16 17\n27 29 31 34 35 36 37 39\n10 12 15 16 18 20 21\n36 37 39 42 43 44\n75 76 77 80 82 83\n76 77 78 80 81 84 85 86\n23 21 20 17 15 12 10 8\n86 83 80 78 77 74 72\n82 80 79 76 73 72\n62 65 66 67 70\n94 92 90 88 85 83 81 80\n47 45 43 42 40 37 36\n32 35 37 40 41 42 43\n77 78 81 83 85 86 89 90\n20 19 18 16 13\n37 40 42 45 46 49\n31 32 35 36 38 39\n62 64 66 68 69 70 71 73\n83 84 87 90 91\n4 5 7 9 12 13 16\n59 60 61 64 65 68\n61 59 56 54 52 49 48 45\n26 25 23 22 19 16\n69 72 74 76 77\n75 78 79 82 83 85 86\n67 68 69 70 72 74 75 78\n68 65 62 61 59\n20 21 22 23 24 25 27 29\n30 28 26 25 23 21\n72 70 68 65 62 59 56\n69 70 72 75 78 79\n12 14 17 18 20 21 22\n13 16 18 20 21 22 24 27\n82 83 86 87 89 90 93\n45 48 51 54 55 58\n77 78 81 82 85 88 90 93\n87 88 89 91 94 97\n44 42 41 38 35 33\n39 36 34 32 31\n37 39 41 42 45 48 51 54\n72 75 78 79 81\n64 67 70 71 73 76\n60 57 55 54 51 48 46\n29 28 26 23 21 18 15\n16 15 12 9 8\n71 70 67 64 62 61\n6 8 9 10 12 13 16 19\n42 40 38 35 34 33\n80 82 83 85 87\n41 38 37 35 34 33 30\n54 57 59 61 64 65 67\n",
"example" => "7 6 4 2 1\n1 2 7 8 9\n9 7 6 2 1\n1 3 2 4 5\n8 6 4 4 1\n1 3 6 7 9"
}
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})