Powered by AppSignal & Oban Pro

Day 01

2024/day01.livemd

Day 01

Mix.install([:kino_aoc])

Section

{:ok, puzzle_input} =
  KinoAOC.download_puzzle("2024", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
{:ok,
 "28186   35627\n51854   34597\n19211   51032\n79370   53096\n68126   40302\n43284   25771\n80565   99650\n83151   70796\n91092   74579\n70740   98650\n45166   53096\n24309   45165\n62950   26641\n23291   91017\n56683   53851\n22308   81625\n83150   34155\n87443   91017\n56834   91784\n35159   67595\n10722   83450\n92257   23419\n15995   96671\n89901   39216\n25104   76669\n37075   56652\n15874   66083\n33493   35627\n87420   31838\n11269   91386\n92604   83450\n34888   99650\n49759   40926\n38211   27379\n93866   22096\n88205   66217\n55772   60776\n83556   78255\n22292   50829\n22487   78358\n27260   79702\n74570   90319\n27532   14353\n40720   67595\n99885   65688\n25733   53752\n12466   14411\n88402   40165\n63328   13804\n45165   62461\n24913   94225\n32251   76669\n91004   40165\n48939   45165\n98082   34561\n74569   42932\n99641   54600\n42748   22021\n23376   54490\n38706   69865\n64985   87783\n14431   78715\n37671   94814\n27425   60776\n21801   76669\n96975   33493\n56680   31838\n41265   71129\n99081   32487\n53077   82615\n54490   55624\n22649   60776\n82601   25943\n93133   96412\n77182   78358\n67827   76838\n45976   89107\n20352   89034\n28891   23800\n87739   76669\n47802   99650\n18060   28437\n65882   93980\n53343   13764\n84301   93604\n62547   93479\n79067   45165\n70139   54490\n28158   76669\n71631   39775\n36521   57540\n78928   37888\n75943   39076\n28462   60107\n95828   94225\n49768   73181\n40545   97945\n18963   74260\n17934   63046\n73054   13454\n43170   60924\n90257   28180\n99765   33493\n41380   50296\n24225   62945\n66579   73961\n73361   54622\n26339   91017\n84080   62041\n89322   54600\n84610   18344\n58420   87051\n12253   83450\n25631   91017\n71764   63533\n52908   40165\n56578   46636\n99876   61946\n43934   64469\n78242   11111\n97629   28916\n21477   91017\n97639   64456\n90978   53077\n94412   73836\n49249   96113\n92750   14411\n12961   13764\n84319   22230\n83435   78146\n48951   86109\n40258   13764\n54600   65577\n51432   53096\n11527   20394\n68196   94225\n14939   91017\n13158   39216\n62120   93587\n20939   71764\n58436   28038\n37198   31838\n59152   17554\n52958   44145\n64236   18285\n63763   56578\n40304   99650\n86564   78910\n45684   52760\n43139   61946\n99974   76669\n44698   86004\n19940   22021\n29106   78358\n60431   91386\n50880   76451\n96595   42193\n40966   73961\n64515   61946\n31081   39834\n87614   70892\n82663   54622\n73537   62994\n14125   56652\n51361   35627\n26084   35817\n82915   20069\n72409   22021\n22834   20071\n93476   83787\n63719   53096\n41505   48056\n56055   20404\n37255   99650\n33468   60776\n70472   22598\n66290   53077\n91071   67595\n30888   33173\n60826   29871\n12334   78358\n62744   69424\n85449   79500\n22333   16295\n67621   18455\n12605   90059\n32490   25835\n96639   75870\n82412   39747\n76964   60153\n60776   60776\n68837   39216\n35635   67595\n85239   14964\n15278   83450\n63581   35178\n77006   18285\n88570   80424\n61499   81689\n57466   47392\n78524   84304\n11821   53989\n62425   28916\n36264   50872\n38567   13061\n16357   45165\n17202   94451\n64290   31838\n76075   55071\n87325   40165\n93961   99650\n49866   65601\n91725   14411\n44721   18285\n44065   33493\n22521   56578\n28070   54600\n45621   54600\n54677   26913\n79647   24298\n89613   31415\n86493   13764\n16243   64218\n12832   21187\n43847   35189\n75859   54600\n69276   75826\n43251   14411\n96012   41446\n35482   35817\n45380   82383\n66801   31838\n79199   92341\n33087   70511\n40619   28916\n67655   80670\n22431   60776\n62731   54622\n29873   25771\n99354   63481\n36415   61946\n29742   94919\n64872   53077\n93028   55635\n32784   18285\n87488   68734\n56652   18285\n49968   80712\n82653   53096\n30377   24784\n40120   45165\n88404   70120\n69179   45165\n99645   67595\n44883   45165\n76320   43595\n29057   90019\n28502   61946\n73459   84304\n96354   54622\n77589   14301\n51381   54490\n40490   95808\n36023   27135\n13434   63807\n27250   35627\n13764   32845\n28229   34954\n56430   76669\n98593   63811\n11192   60776\n81601   72265\n86908   77116\n25484   82383\n31115   42206\n75124   70148\n96785   53096\n59814   85995\n17024   57255\n81701   41971\n43938   33493\n91646   33599\n96616   81828\n73270   87775\n75876   35817\n53007   83450\n39527   33975\n35936   17039\n95194   23302\n96876   80147\n68136   91386\n31253   19760\n98767   " <> ...}
{left, right} =
puzzle_input
|> String.split("\n", trim: true)
|> Enum.map(fn line ->
  line
  |> String.split(" ", trim: true)
  |> Enum.map(&amp;String.to_integer/1)
  |> List.to_tuple()
end)
|> Enum.unzip()
{[28186, 51854, 19211, 79370, 68126, 43284, 80565, 83151, 91092, 70740, 45166, 24309, 62950, 23291,
  56683, 22308, 83150, 87443, 56834, 35159, 10722, 92257, 15995, 89901, 25104, 37075, 15874, 33493,
  87420, 11269, 92604, 34888, 49759, 38211, 93866, 88205, 55772, 83556, 22292, 22487, 27260, 74570,
  27532, 40720, 99885, 25733, 12466, 88402, 63328, ...],
 [35627, 34597, 51032, 53096, 40302, 25771, 99650, 70796, 74579, 98650, 53096, 45165, 26641, 91017,
  53851, 81625, 34155, 91017, 91784, 67595, 83450, 23419, 96671, 39216, 76669, 56652, 66083, 35627,
  31838, 91386, 83450, 99650, 40926, 27379, 22096, 66217, 60776, 78255, 50829, 78358, 79702, 90319,
  14353, 67595, 65688, 53752, 14411, 40165, ...]}

Part 1

left
|> Enum.sort()
|> Enum.zip_with(Enum.sort(right), &amp;abs(&amp;1 - &amp;2))
|> Enum.sum()
1603498

Part 2

freq_left = Enum.frequencies(left)
freq_right = Enum.frequencies(right)

freq_left
|> Enum.map(fn {id, n} -> id * n * Map.get(freq_right, id, 0) end)
|> Enum.sum()
25574739