Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

Day 01

01.livemd

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})