aoc 2025
Library
defmodule AOC do
# int("123") = 123
def int(s), do: String.to_integer(s)
# str(123) = "123"
def str(x), do: to_string(x)
# dup(1, 3) -> [1,1,1]
def dup(x, n), do: for(_ <- 1..n//1, do: x)
# int2d("1 2 3\n4 5 6") = [[1,2,3], [4,5,6]]
def int2d(s, sep \\ ~r/[^\d]+/) do
String.split(s, "\n", trim: true)
|> Enum.map(fn s -> for i <- String.split(s, sep), i != "", do: int(i) end)
end
# mod(5, 3) = 2
def mod(a, b), do: Integer.mod(a, b)
# divmod(5, 3) = {1, 2}
def divmod(a, b), do: {div(a, b), mod(a, b)}
def puts(s), do: IO.puts(inspect s, printable_limit: :infinity) && s
def putm(m) do
for({{h, w}, _} <- [Enum.max m], i <- 0..h, do: IO.puts(for j <- 0..w, do: m[{i, j}])) && m
end
def s2map(s) do
for {r, i} <- String.split(s, "\n", trim: true) |> Enum.with_index(),
{c, j} <- String.to_charlist(r) |> Enum.with_index(),
into: %{}, do: {{i, j}, c}
end
def add2({x, y}, {u, v}), do: {x + u, y + v}
def sub2({x, y}, {u, v}), do: {x - u, y - v}
def mul2({x, y}, k), do: {x * k, y * k}
def l1norm({x1, y1}, {x2, y2}), do: abs(x1 - x2) + abs(y1 - y2)
def dir4(), do: [{1, 0}, {0, 1}, {-1, 0}, {0, -1}]
def dir8(), do: [{-1, -1}, {-1, 0}, {-1, 1}, { 0, -1}, { 0, 1}, { 1, -1}, { 1, 0}, { 1, 1}]
def move(p, ds \\ dir4()), do: for(d <- ds, do: add2(p, d))
def set(enum \\ []), do: MapSet.new(enum)
defmacro cache(key, do: expr) do
quote do
Process.get(unquote(key)) || unquote(expr) |> tap(&Process.put(unquote(key), &1))
end
end
# connected components
def cc(g, ps \\ [], c \\ set(), cs \\ [])
def cc(g, [], c, cs) do
case Enum.take(g, 1) do
[] -> [c | cs]
[{p, e}] -> cc(Map.delete(g, p), e, set([p]), [])
end
end
def cc(g, [p|ps], c, cs) do
case Map.pop(g, p) do
{nil, g} -> cc(g, ps, c, cs)
{e, g} -> cc(g, e ++ ps, MapSet.put(c, p), cs)
end
end
# keyword to graph [{k,v}] -> %{k => [v]}
def k2g(ks) do
for {p, q} <- ks, {p, q} <- [{p, q}, {q, p}], reduce: %{} do
g -> Map.update(g, p, [q], &[q | &1])
end
end
def str2d(s, r1 \\ ~r/\n/, r2 \\ ~r/\W+/) do
for s <- String.split(s, r1, trim: true), do: String.split(s, r2, trim: true)
end
end
2025
defmodule Day1 do
import AOC
def part1(input) do
for [s] <- input |> str2d(), reduce: {50, 0} do
{dial, count} ->
{d, n} = String.split_at(s, 1)
sign = d == "R" && 1 || -1
n = int(n)
dial = mod(dial + sign * n, 100)
count = count + (dial == 0 && 1 || 0)
{dial, count}
end
|> elem(1)
end
def part2(input) do
for [s] <- input |> str2d(), reduce: {50, 0} do
{dial, count} ->
{d, n} = String.split_at(s, 1)
sign = d == "R" && 1 || -1
n = int(n)
dial2 = mod(dial + sign * n, 100)
dist = sign > 0 && 100 - dial || (dial == 0 && 100 || dial)
m = n - dist
count2 = count + (m > 0 && div(m, 100) + 1 || 0) + (m == 0 && 1 || 0)
{dial2, count2}
end
|> elem(1)
end
end
input = "L68\nL30\nR48\nL5\nR60\nL55\nL1\nL99\nR14\nL82\n"
input = "R30\nL18\nR46\nR15\nL15\nL4\nR2\nR47\nR4\nL34\nL47\nR38\nR6\nL42\nL29\nR7\nL16\nL46\nR34\nL40\nR50\nL49\nR18\nL14\nR25\nL4\nR8\nR39\nL34\nL11\nR42\nR31\nL19\nL20\nR26\nR40\nR1\nR39\nL48\nL43\nR29\nL29\nL9\nL50\nR39\nR23\nR30\nL15\nL30\nL4\nL27\nR76\nR2\nL97\nR85\nL55\nL83\nR69\nR81\nR28\nL28\nL24\nL48\nL28\nR2\nL2\nR65\nR35\nR10\nL10\nR23\nR63\nL54\nL32\nL39\nR84\nR86\nR69\nL94\nR94\nR9\nR49\nL74\nL84\nR12\nL99\nL13\nL1\nL35\nL13\nL37\nL14\nR31\nR45\nL76\nL38\nR40\nL33\nL25\nR77\nR79\nL38\nR38\nR90\nR10\nL41\nL53\nR27\nR27\nL60\nL5\nR50\nR77\nR10\nL32\nL80\nL75\nR98\nL11\nL87\nL24\nR81\nR73\nR25\nL25\nR10\nR37\nL22\nL84\nR284\nL76\nR976\nR54\nL54\nR29\nR42\nR229\nR32\nL72\nR81\nR767\nR492\nR74\nL22\nR48\nL95\nR12\nL74\nR57\nL67\nR167\nL23\nR41\nR7\nR75\nL85\nR85\nR68\nL69\nL3\nL42\nR214\nL11\nR69\nL68\nR32\nL572\nL93\nR65\nL19\nL726\nL45\nL21\nR21\nR496\nL96\nL21\nR14\nL51\nR641\nR17\nR15\nL732\nL10\nR27\nR41\nR59\nL63\nR940\nL27\nL50\nR73\nR61\nL6\nR14\nR58\nR82\nR91\nL46\nL65\nR38\nL21\nL79\nL74\nL33\nL45\nL379\nR31\nR97\nR60\nR543\nL49\nR242\nR746\nR49\nL31\nR2\nL306\nR94\nR27\nR975\nR36\nL85\nR93\nL4\nL480\nR61\nR30\nL98\nL74\nL11\nL17\nR78\nR55\nR367\nL91\nL54\nL95\nL60\nR41\nL14\nR73\nL44\nL9\nR844\nR2\nR82\nL75\nR44\nR56\nR97\nR3\nL40\nL95\nR935\nL57\nL1\nR43\nL85\nL15\nL48\nL837\nR55\nL78\nR402\nR424\nL98\nR95\nL38\nR38\nL90\nR490\nR54\nL9\nR81\nL2\nL924\nR78\nL32\nL46\nL5\nL395\nR53\nL53\nL22\nR22\nR74\nL74\nL16\nL63\nR37\nL58\nR566\nR34\nL707\nL93\nR30\nL887\nR4\nL526\nL21\nR79\nL53\nL526\nR9\nL9\nR89\nR468\nR43\nL22\nL78\nR62\nL62\nL149\nL51\nR45\nR55\nL4\nL90\nR93\nR59\nL39\nR84\nL3\nL371\nR44\nL1\nL72\nL12\nL2\nL86\nR46\nL346\nR40\nR22\nL33\nR38\nL5\nR84\nL70\nR20\nR4\nR987\nR98\nL88\nR3\nR65\nR52\nL67\nR7\nL80\nR23\nL46\nR64\nR82\nL82\nR31\nL95\nR62\nL80\nR164\nL91\nL81\nR72\nR33\nL33\nL99\nR93\nL94\nR584\nR16\nL31\nR77\nR48\nR6\nR80\nR697\nR23\nL62\nR65\nL75\nR41\nR58\nL27\nR38\nL438\nL41\nL515\nR746\nL90\nL14\nL205\nR19\nL2\nR41\nR61\nL87\nL13\nR1\nR23\nR196\nL50\nR76\nR929\nR25\nR945\nR28\nL76\nR70\nR47\nL62\nL55\nR40\nL251\nR50\nR982\nL18\nR9\nR2\nL79\nR733\nR59\nL24\nL49\nR57\nL48\nL28\nL31\nR99\nR65\nL65\nL1\nR115\nL87\nL97\nL239\nL733\nR81\nL39\nL76\nL37\nL87\nR42\nR58\nR76\nR42\nR12\nL18\nL6\nL6\nR890\nL46\nL4\nL72\nR84\nL552\nR22\nR78\nL66\nR66\nR12\nL43\nR31\nR29\nR78\nL168\nL39\nR556\nL56\nR44\nL44\nR99\nR96\nR49\nR61\nL469\nL36\nL57\nL12\nL831\nR365\nL78\nR927\nL60\nL12\nR75\nL82\nR28\nR37\nL21\nR68\nR653\nR868\nL34\nL16\nL64\nR9\nR37\nR434\nL31\nR811\nR86\nL56\nL865\nR46\nR54\nR543\nL145\nR23\nL30\nL99\nR29\nR38\nR62\nL540\nL60\nL84\nL969\nR90\nR227\nR50\nR72\nL488\nL82\nL16\nL86\nL65\nR51\nR87\nR13\nR626\nR94\nL5\nR45\nR446\nR76\nR88\nL70\nL92\nR92\nL22\nR22\nR536\nL22\nL9\nL730\nL69\nR35\nL34\nR37\nR88\nR89\nR79\nR56\nL888\nL68\nL53\nR53\nR620\nL15\nR95\nL794\nR94\nL10\nR76\nR87\nL69\nR16\nR737\nR98\nL5\nL30\nL20\nL2\nL953\nL29\nL988\nR16\nL87\nL81\nL156\nL51\nR478\nR65\nL792\nR33\nL33\nR99\nR7\nR14\nL20\nL11\nR11\nL37\nR387\nL7\nR15\nL58\nL6\nL294\nR29\nL29\nR10\nR38\nL52\nL7\nL89\nR596\nL79\nR88\nL78\nR473\nL63\nL37\nR3\nL703\nR55\nR146\nR435\nL36\nL91\nL215\nR35\nR41\nR69\nL31\nR42\nR50\nL32\nR2\nL70\nR69\nR55\nR67\nR6\nL97\nL16\nR17\nR40\nL496\nL661\nL75\nL9\nL358\nR776\nR54\nR28\nL80\nL20\nR446\nL446\nR223\nL73\nL83\nR75\nR108\nR89\nL50\nL889\nL720\nR69\nR41\nL90\nR125\nL25\nR63\nL26\nR12\nR51\nR68\nR55\nR7\nL30\nL16\nL84\nR92\nR78\nR16\nL62\nR76\nL961\nL75\nL69\nL95\nL983\nL17\nL92\nL63\nL54\nR9\nR45\nR39\nL84\nR97\nL203\nR19\nL109\nR48\nR77\nR38\nL67\nL16\nL78\nL6\nR65\nR10\nR961\nR28\nR36\nR93\nR291\nL84\nL38\nR38\nR31\nR877\nR18\nR46\nR28\nL44\nL3\nL53\nR30\nL22\nR92\nL70\nR96\nR18\nR90\nL834\nR47\nL47\nL68\nL35\nL97\nR69\nL69\nR422\nR408\nR70\nR24\nL24\nL11\nL98\nL18\nR27\nL20\nR20\nR96\nL96\nL505\nL13\nR680\nL62\nL18\nR60\nR658\nL73\nR73\nR16\nL16\nL548\nR988\nL40\nR83\nL620\nL674\nL889\nL99\nL1\nL97\nR43\nR980\nL151\nL75\nL3\nL972\nR21\nL81\nL946\nL20\nL99\nL6\nR6\nR28\nL34\nR6\nR87\nR2\nR729\nL59\nL43\nR33\nL78\nR969\nL67\nR70\nL40\nR97\nL76\nL54\nR22\nR75\nR33\nL80\nR1\nR89\nL46\nL63\nL1\nR54\nR46\nR976\nR93\nL17\nL52\nR20\nR88\nL8\nR94\nL94\nL79\nL921\nR33\nR939\nL672\nR29\nL29\nR75\nR925\nR77\nR6\nR64\nL447\nL411\nL89\nL64\nL736\nL28\nR28\nR65\nL65\nR430\nL853\nL77\nL785\nL475\nR1\nR2\nL92\nR5\nR825\nL34\nL47\nL59\nL43\nL93\nL82\nL924\nR32\nL31\nL89\nR636\nR53\nR4\nL19\nL82\nR17\nR22\nL442\nL92\nR92\nL55\nL58\nR13\nR61\nR91\nR914\nL36\nR94\nL21\nR77\nR28\nL794\nR2\nR934\nR640\nL377\nL64\nL98\nL97\nR46\nL367\nL33\nL67\nR67\nL12\nR55\nR57\nR58\nL58\nL714\nL11\nL75\nR64\nR28\nR16\nL62\nR54\nL44\nL156\nL579\nL21\nL45\nL99\nL50\nL39\nR11\nR61\nL39\nR24\nR32\nL37\nR3\nR78\nL86\nL414\nL98\nL2\nL14\nL73\nR79\nR12\nR903\nR893\nR72\nL8\nR59\nR77\nR89\nL94\nR9\nR96\nR760\nL160\nR13\nR87\nR45\nL45\nR376\nL76\nR6\nL61\nR71\nR684\nL76\nR919\nR50\nR70\nR87\nL50\nL69\nL79\nR5\nR38\nL54\nL41\nR627\nL27\nR33\nR72\nL305\nR627\nL27\nL94\nL6\nL466\nL73\nL53\nL60\nL526\nR78\nL12\nL88\nR59\nL317\nR58\nL38\nR55\nL917\nL94\nR94\nR68\nR101\nL69\nR17\nL749\nL82\nR84\nR66\nR64\nL74\nR47\nR51\nR91\nR98\nL713\nL71\nR17\nR54\nR96\nR74\nR48\nL27\nL291\nL56\nL44\nR132\nL18\nL49\nR35\nL82\nL24\nR55\nL39\nR90\nL35\nL81\nL773\nL18\nR63\nL56\nR71\nR39\nL57\nL14\nL39\nL81\nL254\nL5\nR40\nR27\nL3\nL9\nL15\nL21\nL18\nR39\nL71\nL81\nL304\nR637\nL46\nR65\nR1\nL672\nR71\nL89\nL79\nR64\nR4\nL40\nL60\nR6\nR28\nL34\nL64\nL36\nL92\nR92\nL19\nR634\nL215\nR70\nL70\nL21\nR46\nL36\nL89\nL9\nL26\nL11\nR91\nL6\nR61\nR5\nR53\nL6\nR91\nR4\nL72\nR68\nL43\nR83\nR31\nL19\nL76\nR94\nL15\nR239\nL237\nR60\nL24\nR937\nR24\nL97\nR64\nR12\nL29\nL47\nR37\nL37\nR49\nR46\nL23\nL85\nL187\nL698\nL602\nL97\nL93\nR90\nL72\nL28\nR18\nR82\nR12\nL83\nL40\nL136\nL53\nR51\nR51\nL94\nR90\nR90\nL772\nL716\nL15\nR78\nR52\nL15\nR24\nR12\nR84\nR98\nR82\nL227\nR93\nL166\nL52\nR52\nR69\nL8\nR26\nL87\nL70\nR70\nL11\nR934\nR98\nL10\nR43\nL31\nL315\nL7\nL8\nR20\nR87\nR84\nL41\nL43\nL832\nR846\nL14\nR6\nR338\nL72\nR28\nR44\nL644\nL10\nL51\nR890\nL13\nL54\nR767\nL67\nL817\nR90\nL4\nR69\nL73\nR21\nR52\nR59\nR94\nR35\nL88\nL53\nR553\nL67\nL51\nR18\nL93\nR88\nR83\nR6\nL48\nR64\nR5\nL59\nL2\nR56\nL921\nR927\nL6\nL53\nR53\nR796\nL96\nR61\nR39\nR52\nR24\nR2\nR22\nR84\nR93\nL12\nL43\nR678\nL4\nR78\nL267\nR29\nL36\nL28\nL672\nL52\nR293\nL67\nR26\nL76\nR76\nL81\nL98\nL21\nL554\nL6\nR60\nL14\nL86\nR361\nR29\nR47\nL37\nR37\nL37\nL75\nR98\nR77\nL286\nR86\nR15\nR35\nR10\nR40\nL66\nR66\nR46\nL30\nR527\nL48\nL78\nR19\nR86\nR53\nR86\nR39\nR60\nR40\nR64\nR92\nL774\nL23\nL31\nR57\nL15\nL35\nR50\nL85\nL80\nL36\nR16\nR56\nR80\nL36\nL740\nR97\nR85\nR29\nR3\nR326\nR64\nR36\nR53\nL18\nL83\nR71\nR39\nL62\nL81\nL92\nL27\nR4\nR83\nL187\nL39\nR84\nL292\nL53\nL22\nL78\nL51\nL49\nL809\nL391\nL471\nR11\nL40\nL609\nR46\nL837\nL1\nL99\nL827\nL59\nR86\nR98\nR10\nL768\nR55\nR96\nL91\nL34\nR634\nL857\nL43\nR28\nL28\nR89\nL28\nR87\nR52\nL85\nR58\nL73\nR3\nR97\nL356\nR93\nL81\nR29\nL85\nL54\nL846\nR39\nL119\nL41\nR721\nR5\nR456\nL61\nR93\nR207\nR6\nL19\nL62\nR9\nL78\nL95\nL66\nL95\nL39\nL91\nL570\nR24\nR76\nL42\nL78\nR18\nL62\nL36\nR54\nL54\nR7\nR94\nR5\nR66\nR817\nR30\nR58\nL81\nR204\nL40\nL60\nL49\nR49\nR327\nL68\nL59\nR54\nR98\nR32\nR75\nR714\nR98\nL37\nL34\nR48\nR52\nL619\nR9\nR10\nL489\nL97\nL14\nR682\nR18\nR74\nL87\nL45\nR14\nR46\nL2\nR95\nR545\nR60\nL45\nL96\nR41\nL95\nR58\nR37\nR56\nL50\nL95\nR889\nR80\nR20\nR43\nL24\nR25\nR84\nR872\nL77\nR77\nR357\nL7\nL89\nL66\nR66\nL61\nL18\nL33\nR40\nR11\nR40\nL41\nL81\nR82\nL452\nR453\nR99\nL56\nR17\nR339\nL50\nR97\nR14\nR699\nL488\nL72\nR40\nL82\nR24\nR18\nR14\nR86\nL29\nL3\nR32\nR86\nL78\nR358\nL2\nR36\nL3\nR705\nR98\nR38\nL77\nL720\nR59\nL43\nR95\nL67\nR15\nR47\nL83\nL36\nR109\nR63\nL7\nR25\nR52\nR30\nR577\nL294\nL83\nR7\nL59\nL46\nR52\nR86\nL99\nL18\nR12\nL242\nR7\nL52\nL14\nR66\nL12\nR75\nR75\nR61\nL86\nL13\nL40\nL502\nL34\nL24\nR42\nL1\nR59\nR60\nR48\nL1\nR931\nL238\nL32\nR54\nL846\nL76\nR924\nR4\nR237\nL65\nL14\nR14\nL931\nR50\nL19\nL92\nL1\nL7\nR9\nL9\nR91\nR148\nR61\nL60\nL40\nL71\nR71\nR51\nR82\nR712\nL97\nR22\nR30\nL68\nL3\nR99\nL10\nR448\nL66\nR382\nL82\nR664\nR36\nR41\nR663\nR68\nL32\nR60\nR42\nL460\nR24\nL92\nR25\nR661\nL83\nL443\nR26\nL34\nR81\nL47\nR526\nL26\nR69\nR9\nL53\nL733\nR708\nR67\nL48\nL88\nL12\nR881\nR7\nL58\nR351\nR7\nL52\nL55\nL27\nL89\nR32\nL14\nL28\nR26\nR7\nR93\nL17\nR82\nL65\nR887\nL61\nR86\nR49\nR97\nL58\nL66\nR66\nR47\nR993\nL240\nL70\nR70\nL44\nR13\nL971\nR73\nL32\nR59\nL73\nR75\nL94\nL70\nR6\nL72\nR27\nR95\nR8\nL41\nR21\nR34\nR223\nR18\nL51\nR27\nR95\nR74\nL10\nL90\nR658\nR27\nR215\nL3\nR3\nL65\nL80\nR38\nL46\nL16\nL91\nR260\nR63\nR28\nL99\nL92\nR28\nL96\nL332\nL82\nL61\nR628\nR966\nR33\nL88\nL519\nL77\nL63\nL399\nR62\nL93\nR793\nR63\nL47\nL5\nR635\nR71\nL80\nL78\nL98\nR45\nL6\nL80\nL20\nL31\nR848\nL61\nR27\nR44\nR94\nL621\nL36\nL45\nL40\nL79\nL91\nR49\nR63\nL59\nR84\nL17\nL55\nR67\nL52\nR11\nR66\nR90\nL75\nL81\nR21\nL78\nL45\nR74\nR28\nL16\nR416\nL89\nL25\nL86\nR6\nR94\nR662\nR38\nL40\nL42\nR61\nL79\nR36\nR59\nR5\nL873\nL40\nL68\nR5\nR548\nL793\nL79\nR24\nR876\nR59\nL230\nL52\nL396\nR19\nL68\nL632\nL63\nL37\nL92\nL8\nL993\nL41\nL79\nL524\nR28\nR9\nR138\nL883\nL98\nR94\nL71\nR20\nL41\nR41\nL363\nR63\nL31\nL69\nR3\nL8\nR36\nL917\nL56\nR42\nL978\nR30\nR71\nR736\nL59\nR67\nR33\nL142\nR242\nL36\nR236\nR23\nR44\nR72\nR91\nL20\nL61\nR65\nR90\nL4\nL38\nL62\nR75\nR21\nL979\nL58\nL99\nR92\nL11\nR57\nR38\nR337\nR7\nL74\nL6\nR96\nR12\nL8\nL27\nL11\nR2\nL64\nL61\nL39\nR24\nL2\nR875\nL35\nR47\nL9\nR90\nL53\nR11\nR86\nR66\nL8\nR8\nL48\nL167\nL85\nL833\nR2\nL28\nR220\nL36\nL97\nR72\nR44\nR9\nL53\nL395\nL26\nL45\nL84\nR2\nR48\nL34\nR32\nR24\nL8\nR13\nR73\nR491\nR9\nR39\nL42\nL616\nL81\nR44\nL78\nL35\nL31\nR576\nL26\nR30\nR31\nR6\nR983\nR35\nR465\nR99\nR67\nL9\nL57\nR26\nL17\nL76\nL86\nL480\nR42\nL44\nL65\nR292\nR8\nL35\nL13\nR10\nR5\nL11\nR32\nL88\nR34\nR33\nR794\nL92\nL69\nR25\nL25\nL42\nR59\nL4\nR87\nL802\nR840\nR13\nR49\nL57\nL8\nR35\nL53\nR83\nR60\nR40\nR43\nL43\nL60\nL40\nR399\nR82\nR664\nR47\nR8\nL18\nR18\nL838\nL62\nR95\nR13\nL76\nL33\nL21\nR422\nR59\nR6\nR91\nR44\nL32\nR32\nR56\nR44\nR22\nR84\nL62\nL44\nL20\nR20\nR86\nL86\nR67\nL67\nL61\nR24\nL63\nL77\nR85\nR95\nL16\nR13\nR68\nL268\nR42\nL382\nR92\nL52\nR32\nL78\nR73\nR82\nL180\nL529\nL521\nR18\nL63\nR866\nR24\nL24\nR4\nR396\nL70\nR10\nL38\nR99\nL701\nL45\nR381\nR461\nL72\nL85\nR92\nL832\nR66\nL166\nR83\nR519\nL53\nR583\nR51\nR17\nR777\nL37\nL86\nL754\nL98\nL73\nL93\nL30\nR794\nR63\nR37\nL631\nL69\nL32\nL68\nL73\nL61\nR64\nL91\nL39\nR689\nL24\nL65\nR7\nR39\nL25\nR903\nR76\nR86\nR87\nR3\nL65\nL11\nL77\nR71\nR47\nL55\nL69\nL82\nR8\nR57\nL46\nL57\nL48\nL49\nL38\nL531\nR72\nL99\nL69\nR772\nL566\nR59\nR88\nL83\nR95\nL32\nL82\nL89\nL30\nR33\nR14\nL57\nR43\nR93\nR386\nR21\nL14\nR14\nR79\nL56\nL96\nR76\nL42\nL91\nL64\nR90\nL96\nL837\nR68\nR13\nL94\nR50\nL13\nL38\nL5\nL44\nL63\nL82\nR479\nL10\nR76\nR16\nL16\nL73\nR37\nR907\nR28\nL99\nR227\nL6\nR79\nR89\nR51\nR266\nL52\nR59\nL13\nL40\nL660\nR34\nL34\nL9\nR91\nR518\nL16\nR681\nL65\nR48\nR52\nL74\nL26\nR9\nR91\nR559\nR61\nR40\nR96\nR25\nL963\nL23\nR5\nR84\nR553\nR73\nL10\nL89\nR55\nL66\nL162\nL708\nR70\nL24\nR21\nL88\nR93\nR73\nR25\nR58\nL49\nR41\nR72\nL91\nR30\nL64\nR3\nL54\nR54\nR74\nR26\nL49\nL59\nL4\nR12\nR29\nR71\nL901\nR1\nR2\nL43\nL86\nR20\nL95\nR302\nL58\nR93\nR278\nR1\nR39\nL804\nR2\nR49\nL93\nL523\nL84\nL42\nR290\nL72\nL76\nL559\nR59\nR9\nR91\nL48\nL33\nR938\nL25\nR556\nR12\nR4\nR96\nR42\nR922\nR36\nL47\nR21\nL79\nL46\nL43\nR37\nL453\nR10\nL73\nL42\nR15\nL93\nR93\nR65\nR61\nL28\nL98\nR53\nL90\nR37\nR76\nL1\nR60\nR65\nL69\nR40\nR924\nR5\nL73\nL78\nL57\nL31\nR61\nL75\nR53\nL86\nR986\nL41\nR41\nR406\nL6\nL508\nL92\nR59\nR41\nR20\nL20\nR771\nR65\nL55\nL35\nL886\nL58\nR98\nR77\nR10\nL586\nR99\nR90\nR110\nL80\nR80\nL32\nR25\nR95\nL83\nR17\nR78\nL297\nR97\nL959\nL74\nL67\nR535\nL27\nR93\nL6\nR56\nL51\nR58\nL28\nR170\nL58\nL3\nR2\nL41\nR34\nR777\nR331\nR58\nL519\nL339\nR12\nR93\nL39\nL69\nR20\nR17\nL76\nL96\nL60\nR556\nR82\nR18\nL90\nL10\nL76\nL8\nR84\nL36\nR53\nR785\nL2\nR30\nL30\nR18\nL17\nL32\nR13\nR18\nR96\nL88\nR92\nR892\nL30\nR238\nR21\nR579\nR52\nL552\nL879\nR79\nL46\nL93\nL14\nL55\nL5\nR72\nL327\nL81\nR70\nL490\nL83\nR8\nL99\nL651\nL30\nL10\nL66\nR50\nL15\nL14\nL321\nR82\nL82\nR42\nL42\nL91\nR749\nL49\nR191\nL92\nL82\nR82\nR903\nL165\nR54\nR63\nR37\nL20\nL80\nR54\nL54\nR898\nL466\nL61\nL5\nL94\nR28\nR3\nR97\nL34\nL907\nR34\nL93\nL58\nR7\nR42\nR78\nL85\nL11\nL21\nR553\nL66\nL39\nR98\nR2\nR286\nR14\nR856\nR21\nR81\nL60\nL99\nL11\nR12\nR26\nR83\nL92\nR83\nL45\nR28\nR975\nR63\nR958\nR21\nR4\nL2\nL33\nR31\nL157\nL143\nL8\nL92\nL27\nL7\nL66\nR40\nR40\nL380\nL63\nR35\nL72\nR37\nL681\nR44\nL36\nL26\nL90\nR206\nR77\nR14\nR10\nR45\nL76\nL24\nL691\nR67\nR24\nL250\nR79\nL71\nL99\nL59\nL46\nL29\nR76\nL931\nL70\nL94\nR30\nL60\nL13\nL430\nL98\nL53\nL68\nR73\nR13\nR789\nR94\nR17\nR870\nL70\nR75\nL75\nL30\nL44\nR74\nR6\nL9\nL98\nL99\nL94\nL6\nL409\nL91\nR26\nL82\nR356\nL18\nL1\nL13\nR486\nR43\nR83\nR57\nL16\nR55\nL37\nR61\nR80\nR10\nR43\nL63\nR46\nR84\nR2\nR98\nR71\nR214\nL7\nL96\nR86\nL68\nL97\nR958\nR77\nR62\nR1\nR520\nR24\nR75\nR880\nL54\nR70\nL16\nL59\nL70\nR99\nR30\nR48\nL43\nR679\nR22\nR14\nL20\nL804\nL96\nL587\nR987\nR65\nL365\nL84\nR48\nL55\nL965\nL1\nL43\nR2\nR98\nR13\nR11\nR87\nL475\nR47\nR97\nL97\nR17\nR42\nL25\nR1\nR627\nR88\nL77\nL21\nR47\nL40\nL16\nR890\nL25\nR71\nR65\nR20\nL347\nR99\nR64\nR37\nL69\nL55\nR24\nR99\nR53\nR79\nR69\nL60\nR89\nR71\nR53\nL56\nL97\nL69\nL48\nL3\nR34\nR25\nR541\nR20\nR73\nR27\nR75\nR25\nL681\nL19\nR244\nL94\nR80\nR72\nR7\nL72\nR70\nL29\nL20\nR556\nL370\nR322\nR34\nL37\nL763\nR73\nL71\nL719\nL83\nR30\nL80\nL150\nR85\nL379\nR94\nL36\nR71\nR65\nR17\nL517\nR98\nL91\nL7\nL81\nL19\nR343\nL43\nR23\nL20\nL3\nR56\nL1\nL91\nL964\nL66\nL91\nR857\nL17\nR17\nL49\nL51\nL13\nR13\nL78\nR878\nL38\nL56\nR11\nL884\nL323\nR90\nL63\nR63\nL37\nL63\nR83\nL3\nL43\nL769\nL68\nR27\nR83\nR90\nR221\nR94\nL14\nL1\nR82\nL8\nL86\nR51\nR861\nR1\nL8\nR77\nL70\nL45\nL655\nL21\nR69\nR61\nR91\nR65\nR95\nR40\nR616\nR84\nL93\nL57\nL28\nL22\nL24\nL47\nL29\nR42\nR98\nL90\nR48\nL29\nR31\nR30\nR70\nR20\nL718\nR37\nL439\nR23\nR6\nL129\nR52\nL95\nR12\nR31\nL579\nL6\nR893\nR45\nR647\nL192\nL8\nR439\nL39\nR49\nR612\nL61\nL54\nR54\nL233\nL67\nL4\nR59\nL17\nL173\nR39\nL3\nL25\nL37\nR561\nR73\nR13\nR52\nR180\nL18\nR38\nR62\nR36\nR13\nR551\nL23\nL177\nR42\nL42\nL60\nL41\nR1\nL99\nL1\nR749\nR51\nR73\nR24\nR41\nL57\nR26\nL791\nL259\nL82\nR4\nR3\nR97\nR21\nR27\nL75\nL52\nR45\nR55\nL558\nR54\nR83\nR21\nR56\nR14\nL70\nL91\nR51\nL96\nR58\nR77\nL31\nL433\nR11\nL91\nR45\nL32\nR32\nL13\nL87\nR50\nR850\nL11\nR11\nR35\nL35\nR89\nR11\nR7\nL89\nR35\nL53\nR65\nL65\nL65\nR728\nL755\nR707\nL736\nL17\nL62\nL34\nL66\nL9\nR54\nR55\nL79\nL21\nR96\nL23\nR627\nR395\nL326\nR85\nR77\nL639\nL92\nR53\nL47\nL6\nL45\nR45\nL15\nR57\nL19\nR438\nR769\nR970\nR85\nL78\nR86\nR7\nR94\nL877\nR83\nR48\nL82\nL66\nR79\nL79\nR901\nL57\nL84\nL68\nL18\nR41\nL715\nL2\nR2\nR20\nL63\nR402\nL95\nL164\nR60\nR40\nL13\nL24\nR61\nR77\nL76\nL63\nL6\nR63\nR30\nL349\nL4\nL88\nL25\nL83\nR99\nL30\nR31\nL15\nL85\nR475\nL575\nR74\nR12\nL886\nR46\nR74\nL980\nL40\nR56\nR104\nR40\nL38\nR37\nL79\nR680\nL333\nL76\nR9\nR94\nR166\nL55\nL24\nL267\nR386\nL289\nR659\nR30\nL81\nL19\nL44\nL56\nR53\nR2\nR50\nL5\nR728\nL31\nL91\nR20\nL74\nL1\nL651\nL2\nL6\nL17\nL175\nL88\nR50\nL401\nL4\nR237\nL67\nL939\nL55\nL42\nR952\nR33\nL312\nL64\nL53\nL28\nL19\nR4\nR96\nL30\nR37\nL282\nL2\nR38\nL35\nR567\nR89\nR925\nL61\nL746\nL69\nL31\nR17\nL53\nR89\nR22\nL75\nL920\nR73\nL37\nL16\nL776\nL824\nR259\nL295\nL64\nR40\nR13\nL24\nL29\nL87\nR33\nR54\nR6\nR794\nR72\nR909\nR1\nL1\nR861\nR58\nR33\nL42\nR7\nR20\nL52\nL54\nL721\nR42\nR167\nR88\nR82\nR62\nR152\nR647\nR70\nL601\nL183\nL73\nR671\nR463\nL52\nL26\nL46\nR849\nL61\nL20\nR78\nL15\nR15\nL90\nL21\nR11\nL602\nL355\nR57\nL690\nL110\nR857\nL771\nR13\nL422\nR81\nR53\nL82\nR5\nR85\nR81\nR163\nR57\nR69\nL34\nL55\nR92\nL77\nR28\nL49\nR6\nR630\nL50\nL34\nR20\nL42\nL21\nR97\nL59\nL81\nR206\nL49\nL17\nL81\nL19\nL21\nR48\nL27\nR931\nR69\nR870\nR30\nL11\nR11\nR95\nR74\nR222\nR9\nR89\nL31\nL658\nL36\nR22\nL393\nL96\nL97\nR32\nL366\nL12\nR36\nL90\nL367\nL65\nL268\nR29\nR22\nL885\nR72\nL657\nR29\nL10\nL71\nL87\nL42\nR236\nL36\nR47\nR43\nL390\nL11\nL349\nR460\nR32\nL32\nL18\nL96\nL186\nL21\nR21\nL94\nL6\nL17\nL83\nR296\nR3\nR73\nL26\nL47\nL99\nL75\nL663\nR52\nR569\nL85\nL47\nR75\nL15\nL89\nL22\nR66\nL31\nL90\nL45\nL645\nL155\nL27\nL73\nL41\nR80\nL939\nL127\nL73\nL71\nR24\nL724\nR71\nR62\nR438\nL34\nL39\nR51\nL175\nR125\nL19\nL209\nR40\nL40\nR951\nL671\nR72\nR54\nL13\nR707\nL460\nR60\nL631\nL85\nR70\nL397\nR42\nL999\nR25\nR480\nR495\nL231\nL85\nR19\nL3\nR627\nL404\nR60\nL20\nR91\nL3\nL19\nR68\nL41\nL2\nR843\nR99\nR401\nR470\nL264\nR12\nR65\nR517\nR383\nL83\nL56\nL44\nR36\nL9\nL127\nR74\nR388\nR738\nR344\nR37\nL32\nR851\nR83\nL83\nL652\nR866\nR86\nL75\nR87\nR24\nR8\nR21\nL20\nR41\nL986\nR76\nL25\nR58\nL62\nR16\nL80\nL39\nL97\nR53\nR131\nR61\nR8\nL99\nR54\nR45\nL51\nL849\nL615\nR17\nL33\nL369\nR65\nL496\nL276\nR7\nL71\nR44\nR76\nL56\nL835\nR86\nR56\nR28\nR972\nL261\nL15\nL53\nL71\nR732\nL529\nL27\nL703\nR327\nL79\nL58\nL85\nL78\nR53\nL53\nR653\nL26\nR11\nL43\nL38\nL81\nR578\nL54\nR25\nR75\nL92\nR792\nR60\nR57\nR80\nR93\nR883\nL73\nL19\nL81\nL58\nR26\nR32\nR88\nR1\nR36\nL25\nR266\nR86\nR48\nL34\nL966\nR75\nR25\nL73\nR28\nL55\nR58\nL33\nR75\nL84\nL12\nR96\nR53\nR2\nR45\nL57\nR1\nR46\nR3\nL93\nL46\nL632\nL689\nR60\nL7\nL13\nL57\nL6\nL432\nL847\nR219\nL750\nR378\nL96\nL82\nR54\nL59\nR85\nL14\nL23\nL43\nR668\nL64\nL4\nL90\nL10\nL51\nL49\nR71\nL43\nR572\nR48\nR16\nL564\nL97\nL98\nR23\nR43\nL671\nR42\nL42\nR63\nL83\nL76\nR96\nL40\nR12\nL272\nL98\nR98\nL57\nL89\nR1\nR46\nL19\nL62\nR80\nR60\nL37\nL75\nR71\nR74\nL56\nR719\nR13\nL32\nL780\nR62\nL19\nR9\nR20\nL474\nR345\nR92\nL80\nR72\nL29\nR845\nR592\nR4\nL61\nL5\nL30\nR12\nR8\nL741\nL79\nR37\nR717\nL64\nL7\nL24\nL12\nL40\nL707\nR76\nL802\nR48\nR730\nL752\nR82\nL875\nR16\nL59\nR45\nL909\nR474\nL37\nR96\nL28\nL31\nR26\nL344\nL356\nL1\nL486\nL181\nR8\nL9\nL436\nL78\nL1\nR462\nL717\nR33\nL594\nR807\nR30\nL38\nL87\nR99\nL11\nL46\nL54\nR355\nR78\nR67\nR25\nL9\nR226\nR74\nL60\nL56\nR44\nL62\nL32\nL56\nR16\nL10\nL64\nL197\nL51\nR2\nL90\nR92\nR18\nL29\nR19\nR62\nR55\nL17\nR735\nR65\nR20\nR60\nR20\nR787\nL87\nL2\nR4\nR53\nL15\nR860\nL9\nL291\nR38\nR446\nR208\nR8\nL20\nR15\nR1\nL896\nR64\nL60\nL93\nR6\nR83\nL87\nL113\nL29\nL71\nR29\nL3\nL54\nR70\nL42\nL39\nL61\nR83\nR5\nR733\nR36\nL81\nR24\nL9\nR650\nR81\nL699\nL70\nL77\nL40\nL36\nL425\nR366\nL88\nL53\nR26\nL26\nR46\nL20\nR72\nR8\nL6\nR98\nL965\nL32\nR721\nL22\nL62\nR89\nL34\nR47\nR60\nR14\nR73\nR50\nR128\nL123\nL22\nR429\nR51\nR81\nL99\nR18\nL47\nL21\nL32\nL2\nR2\nR51\nL25\nL933\nL93\nR58\nL72\nR86\nL29\nR50\nR7\nL3\nR3\nL34\nR779\nR21\nR44\nL329\nR19\nR58\nL61\nR3\nL509\nL51\nL11\nR394\nL936\nL887\nR71\nR81\nL652\nR79\nR216\nL92\nR97\nR66\nL44\nL422\nL55\nL45\nL89\nR97\nL49\nR41\nL535\nR35\nL25\nL75\nR318\nL72\nR54\nR815\nL283\nL21\nR54\nR66\nR759\nR877\nR364\nR52\nR17\nL308\nR8\nL68\nR25\nR28\nR15\nL61\nL3\nL312\nR96\nR69\nL14\nL84\nR838\nL29\nL86\nR919\nR67\nR443\nL681\nL212\nR50\nL97\nL82\nL48\nL73\nR217\nR30\nL785\nR71\nR36\nR66\nL58\nL420\nR543\nL8\nL920\nL72\nR32\nR88\nR80\nL513\nR5\nR97\nL66\nR831\nL99\nL73\nL10\nL18\nL54\nR560\nL160\nL79\nL95\nL56\nL33\nL99\nL38\nR78\nL78\nR983\nR17\nR93\nR86\nL62\nL663\nL896\nL58\nL88\nL4\nR9\nL14\nR97\nR69\nL11\nL58\nL2\nR790\nR12\nR808\nR30\nL28\nR849\nR52\nL244\nR33\nL484\nR3\nR34\nL270\nL83\nR1\nR78\nR321\nR98\nL220\nL43\nL35\nR40\nR47\nL56\nR59\nL56\nL34\nL94\nR72\nR89\nL67\nR1\nL5\nL96\nL4\nL82\nL22\nL244\nR80\nR5\nR67\nR6\nL59\nR53\nL25\nL12\nR55\nL18\nL6\nR36\nL81\nR51\nL422\nR72\nL83\nL967\nL55\nR55\nL24\nL919\nL357\nL295\nL83\nR78\nL39\nL69\nR8\nR385\nR1\nR22\nL1\nR93\nL30\nL70\nL50\nL50\nL22\nR42\nL96\nR68\nL11\nL26\nR84\nR329\nR787\nL55\nR40\nR65\nR92\nL70\nL85\nL89\nL17\nR20\nL47\nL9\nL96\nR96\nR18\nR82\nL3\nR17\nL414\nR73\nR77\nR75\nL89\nR61\nR92\nL58\nL69\nR66\nL8\nL820\nL810\nR24\nR2\nR14\nR35\nR63\nR150\nL61\nL839\nL67\nR35\nL273\nL530\nR57\nR226\nL3\nR233\nR344\nL96\nL204\nL20\nR20\nL78\nL29\nL258\nL766\nL61\nR90\nL98\nR944\nL69\nL25\nL99\nR771\nL258\nR36\nR16\nL77\nR173\nL12\nR47\nL405\nR35\nR23\nL57\nL39\nR96\nL61\nL55\nL364\nR80\nL84\nR51\nR33\nR787\nL87\nL44\nR97\nR336\nR589\nL278\nL98\nR98\nR76\nL76\nL5\nR481\nL87\nL571\nL18\nR68\nL68\nR856\nL62\nL17\nR6\nL90\nL29\nL368\nL20\nL39\nL28\nL9\nR49\nL49\nR59\nL74\nL17\nL12\nL81\nL36\nR97\nL70\nL77\nL37\nR58\nR690\nR12\nL12\nR90\nL90\nL33\nR7\nL42\nL32\nL29\nR43\nL14\nL56\nR56\nL93\nL647\nR40\nL86\nL717\nL82\nL6\nL25\nR54\nL4\nR22\nL56\nL779\nL235\nL69\nR76\nR3\nL318\nR22\nL57\nR3\nL64\nR90\nR44\nL235\nR244\nL25\nR92\nR72\nL98\nL66\nR730\nL30\nR58\nL31\nR97\nL24\nL9\nL366\nR75\nR1\nL901\nR91\nR90\nR90\nL88\nL83\nR69\nR99\nL968\nR993\nL68\nR75\nR79\nR7\nR14\nL61\nR38\nL77\nR50\nL74\nL54\nR223\nL45\nR6\nR215\nR96\nR83\nR32\nL132\nL537\nR37\nR51\nR49\nR91\nL91\nR39\nL22\nR383\nL8\nL92\nR56\nR44\nR33\nR49\nL82\nL88\nR76\nL60\nR87\nL15\nR172\nR371\nR1\nL44\nL43\nL41\nL74\nR1\nL79\nR435\nL12\nL87\nR28\nR78\nR294\nL11\nL285\nR37\nR19\nR68\nR72\nL59\nR59\nR91\nR203\nL94\nR1\nR35\nR64\nL47\nR47\nL75\nL717\nR92\nL27\nL45\nR72\nL22\nR22\nL25\nR76\nR45\nL283\nR87\nR509\nL9\nL966\nL22\nR988\nL72\nL28\nL64\nL36\nL69\nL814\nR83\nL86\nR28\nR51\nR58\nR79\nR70\nR547\nR52\nR1\nR78\nR92\nL26\nR56\nL936\nR536\nR75\nR525\nR13\nR96\nR637\nR64\nL52\nL29\nL43\nR14\nR62\nL95\nL97\nR30\nR85\nL85\nL577\nR77\nR243\nR141\nL91\nL93\nL33\nL89\nR22\nL76\nR321\nR6\nL805\nR97\nL43\nR94\nL87\nL46\nR539\nR27\nL51\nL74\nR998\nR514\nL14\nR45\nR21\nR34\nL8\nL292\nR3\nL630\nL860\nR80\nL2\nL41\nL50\nL20\nR57\nR64\nL58\nR57\nR88\nR63\nR76\nL27\nR260\nR2\nR18\nR75\nL55\nL4\nR384\nR20\nL97\nL402\nR10\nL772\nL70\nL967\nL682\nL20\nR87\nR13\nL27\nR53\nL256\nR15\nL85\nR77\nR23\nR48\nL48\nR88\nR712\nL3\nL97\nR94\nL95\nL50\nL49\nL222\nL56\nR45\nL367\nL56\nR23\nL567\nL74\nL65\nL58\nR45\nR62\nR190\nR42\nL42\nR99\nR326\nR95\nR80\nR38\nR42\nR55\nR49\nR16\nL986\nL65\nL49\nL92\nL708\nL18\nR12\nR93\nL74\nL62\nR221\nR28\nL19\nR19\nR89\nR11\nL919\nR19\nR68\nR12\nR380\nL160\nL54\nL95\nR241\nR48\nL2\nR633\nR87\nL25\nR501\nR69\nL845\nR78\nR86\nR44\nL66\nR65\nR82\nL61\nL86\nR12\nL44\nR9\nR435\nL137\nL815\nL60\nR76\nR575\nR181\nR868\nR56\nL56\nR70\nL70\nL7\nR507\nL34\nR34\nR567\nL833\nR67\nR99\nR811\nR7\nR72\nL64\nR942\nL68\nR75\nR966\nL41\nR60\nL370\nL14\nL15\nR39\nL78\nL66\nL24\nR3\nL710\nL90\nR72\nL96\nL311\nR4\nL42\nR38\nR634\nL34\nR12\nL12\nL75\nR75\nL85\nL426\nR11\nL281\nR81\nR61\nR58\nR39\nR42\nR46\nR54\nL32\nR32\nR41\nL41\nR53\nL53\nL88\nL12\nR43\nL28\nR85\nR65\nR35\nR69\nL69\nL48\nL50\nL802\nR97\nL402\nR89\nR74\nL18\nR60\nR98\nL83\nR98\nR87\nR38\nL38\nL35\nL85\nR13\nR7\nR52\nR48\nL11\nR11\nL44\nL6\nR91\nR59\nR60\nL23\nR91\nR83\nR5\nR95\nR13\nR96\nL47\nL73\nL60\nL85\nL42\nR30\nL10\nL9\nL24\nL56\nR63\nR32\nL39\nL4\nR69\nL82\nR86\nL69\nR67\nL67\nL31\nR51\nL64\nR40\nL53\nR42\nR15\nR17\nR13\nR48\nL32\nR16\nL62\nR79\nL30\nL19\nL27\nR9\nR20\nR13\nL26\nL11\nL18\nL34\nR9\nL36\nR39\nR8\nL47\nR9\nL26\nR2\nR26\nR3\nL39\nL36\nL41\nR34\nL11\nL44\nR10\nR32\nR32\nR46\nL39\nL36\nL36\nL30\nR28\nL39\nL38\nR22\nL5\nR31\nL35\nR40\nR46\nR1\nL3\nR38\nL46\nL39\nL7\nR19\n"
Day1.part1(input) |> IO.inspect(label: :day1_part1)
Day1.part2(input) |> IO.inspect(label: :day1_part2)
defmodule Day2 do
import AOC
def part1(input) do
input
|> str2d(",", "-")
|> Enum.flat_map(fn [a, b] -> int(a)..int(b) end)
|> Enum.filter(fn s ->
s = str(s)
n = String.length(s)
{a, b} = String.split_at(s, div(n, 2))
a == b
end)
|> Enum.sum()
end
def part2(input) do
input
|> str2d(",", "-")
|> Enum.flat_map(fn [a, b] -> int(a)..int(b) end)
|> Enum.filter(&repeat(to_charlist(&1), 1) > 1)
|> Enum.sum()
end
def repeat(cs, n) when length(cs) == n, do: 1
def repeat(cs, n) do
Enum.chunk_every(cs, n)
|> Enum.uniq()
|> case do
[_] -> div(length(cs), n)
_ -> repeat(cs, n + 1)
end
end
end
input = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124"
#input = "4077-5314,527473787-527596071,709-872,2487-3128,6522872-6618473,69137-81535,7276-8396,93812865-93928569,283900-352379,72-83,7373727756-7373754121,41389868-41438993,5757-6921,85-102,2-16,205918-243465,842786811-842935210,578553879-578609405,9881643-10095708,771165-985774,592441-692926,7427694-7538897,977-1245,44435414-44469747,74184149-74342346,433590-529427,19061209-19292668,531980-562808,34094-40289,4148369957-4148478173,67705780-67877150,20-42,8501-10229,1423280262-1423531012,1926-2452,85940-109708,293-351,53-71"
Day2.part1(input) |> IO.inspect(label: :day2_part1)
Day2.part2(input) |> IO.inspect(label: :day2_part2)
defmodule Day3 do
import AOC
def part1(input) do
input
|> int2d("")
|> Enum.sum_by(&find(&1, 2, 0))
end
def part2(input) do
input
|> int2d("")
|> Enum.sum_by(&find(&1, 12, 0))
end
def find(_, 0, r), do: r
def find(a, n, r) do
{d, i} = Enum.slice(a, 0..-n//1) |> Enum.with_index() |> Enum.max_by(&elem(&1, 0))
Enum.slice(a, i+1..-1//1) |> find(n - 1, r * 10 + d)
end
end
input = "987654321111111\n811111111111119\n234234234234278\n818181911112111"
input = "8221441533335523934234684734333842352334638213344455472314354533231333442559833436143312222328593824\n4537334536668466474564396658667455533434445866677578743536444475227844245366826854475546865646277786\n5711377113466675766354253665637477467166252166726612166663276146746564737732416111157574562175133489\n2212221522112223211221222224432312222232222222422222212222222221222222621221113211114422272222622222\n4433744433434333453543342843442233446337253224453333234333363344445331444433332411335316333444334322\n2932536643762349544637276279922336323343637373644457388665569365574947333365767853797833422863593389\n4224923339177445426521132321221387352234121242437422343592434419325343923344224222946427643253343325\n2532514435554595545544666545425545445736445367454433555551471552645541454756555953325758547354556354\n2312223243121323212322131222222212421126225312232222222112223222232122212223221342232322222113324222\n5245333434534354423334443355445433434454653434443334434445344423454342344344445664634334433335524123\n5321243272227426332423355336632332513232243224524122326324224222343324552235342522145432332622252322\n3454333336711572453923673645331331385171664743327343465337326532335354225333322343632233753554533635\n4322433531151337335232445252255322324535252443332247342222423345265283632324243125351422122538528353\n5316256665336362332255616514531161426411231233315653162134462454615364512452531342531213515311265789\n5623252425433353333423234516322323434332354323453235432323562534954336134512444335333273356243362452\n2473441123325482163232422546872327232311234532323216825125424372354343527533342432233641522436653435\n1622325234326623213367322233332335132222233623342333352231332163335253336323324233544322342332223663\n3244443442443244474373184853448343434333734454444559444943443435344445532554434742552324645374543524\n3324424522442444344244354233832723644644244526435438432933333453324344632344334564445274163643342444\n2316122122223221422522122221354222222422233222321222222262212364231222225121212242222542221322441123\n3567655354377643474575257645455554634558575495565757555354565675754446346975647372564345534666457234\n3422364344323233333334337253374431434324472272242424355553736654524345136212511225284331274432346344\n4757413228323232163333452474323284312214326422654271341344232124363662344432233582145455249244343542\n2274112222327244242737542223222611216713442441246234624447722425323474452841242543231225132432262113\n4142412624232224122222262324244122531422223121226212261122331121222224226322222221222113123222232222\n1732373332322223423322333214237341324332334532423223333523222122331213233323324233232332342223222332\n1371432332323333323332333424543335732234333363343323232333523333514126334333233536463333732322233332\n1332322423313131242233113222223322226322422222321232231342232212522231413222128234333227222313323323\n2423492322379442321338322476222468612292822222435123282222262422424334813364843329423433732222212145\n2212121324122422319242231232221646632448224222134322523133262434211225643242223232242222232222532143\n3884823542333253436727222565673625366541342462354556527134851825855454544334475435735543724575525357\n7695736452366643666876756753641456356454657544464646453545744646454564554687556675444455534436574654\n2322332333214363142322333222122252343623331322229333722243346335233453754331122237332233233234343332\n2725142445219453822122223452355564262235235421281241515445215374254584415524232455931574482522455422\n3244224422243412546222422434235234322343251224223435122225442232242332426426132411322143225313524223\n5334324551533455523523343445226533343632353454623512523446422434244363435524464532115312323335414434\n6622344334222177442132223445453573442762234465262412225765332831124262425635563483386244182345645632\n2333223321222242152233232233222322232212253133223122333323221321221232313252223233242113353222122312\n3562666539825364695654744958652435554883665858795552483466652358554552514934543664825345676465235655\n4464666454364494444247463377434334644434534444833732434444343346344244474434234345434344681875275443\n2244297484239274422545272942241287614722989322944223423129768536222738232342242342523226292276575342\n6356336374663644283543334432369343263733345463547355353444353366484667635542644274364274433346564375\n4495427464455352358884874577647536733723576739756677856638774763483577657457534424578294653383836786\n4544244533533344353433432463563545344335234333333333443433443234334543532344234343454733643334444224\n3436255392645334352836475492134823254254532766867595748572674523724464531492266342252422848243542773\n4528672646465642441363855571678622796563328659212751966562866657656835387655463272277335233634585765\n4557542665623222232646755657236636631452676322257363225673322736723137354532431464321161237323238331\n9846412752215324229554852232322632536522565323253636722832545653222247578533377347544132395592281695\n3422262331313134223632753123333211722235337323235621622221422253232683577332332233631213733343222233\n3356665435544416443416644455344433764635545626536364453426552433343452335333454557655556636369636535\n7248843442347433434445459543423453455275443331614544856327566643347337654245465453232727442344443574\n3126333161232262322123522222422223284222313644224212647212262222222123231223182322221324622221225212\n8521322222342231223231462332134322238325242131246123231332332123422224412232212231216232413353511223\n3233324643335343323334221333332453333333623233332335322424343533343323834364333433433347243342323423\n2225242226422222222341521252223332222252222222122925313223222422222712232122225223512221252222222222\n3224373423344359433323323324333254543432235432264243234136845563623332222313254244423427222232432233\n2955534855224345844584654455435553545445374549748583355844352436445445256253565425284555533544543444\n8276212434232222245422123422121222142212234442722121272222432122234222232422322212242224413722222262\n4122113164222425243215444232224113223332134312232312322254523227421344233242223232322332233221473432\n2122222123422223221112217222151222222221122222421232212221122211222122222233558222123222222222122212\n1214725411223122221151223234224526242222227222222222122122224233121124222922272115522442423712321242\n3432323222343226342223332323131332253313332233363223342336323236212323313223223321312333323432223532\n5356722933447877334775367528685644487657537464764775376384795256932486223374637637634639824576336333\n1344242123232233221322222744343322343225423242342622112233232721233322132244524312433323132232332222\n2225353222521434133422455312121544143314242341523244354134215445512133154344441241235411122241146789\n6312227332436353234641223452133253233433543222333333345323243223355222533215523142333622315229233343\n3442322231242222232223144242332223312422154322432122512333121332222322262411332222331222334534123221\n3371225333126223333333323312633232533333434323223343223423212323222531532515221213532332132223323243\n5325425235722532121243225215525418132532621266432222561222514216224432231234156622182223532555422532\n2383832323354324146634333633332552336432833352438532733333431352233435333633413615341313631323332333\n1222522452134222327422122222322212232212222221222231233232632122144142222333322221222222221222213223\n3383333553412533333353473333544513453393535257583333637323323453323271336589556335434753333333445433\n2444184422752421862341565221423322552122222422222224321263522513471244252144145313423223414255254623\n3345223271354444333434343354243334435333335343933354433333423433432243353343453233424356453533331423\n8662362213536433263438433831236244226324632332422323332233223427649435362229362113323353942357236162\n4429332621717829125964381858849428552571843425389718574628341727533961444823478622532223855849713224\n2423233123233153325193413333333223513233333123323323323242133433733323313453232124331333332432332323\n2223532626628445654465446717616646525563526434328594335474435764585565466335666335256468256343543152\n4434356433534533244424513554344554426244322555559363434244435123544463442345342436143435234434324442\n2232346222124323343232236242333432243432323275227325332521353222324333535535333122333333345533234423\n3334346434153454333333443444231454424464442336335344644334444444444444442434363433472544444443244434\n4123222213532412321332321252313511212232523222222223222252442222232342224535123122322225311261252222\n1133664743222344525254734444454243535533225533354334454432487372435583334526343548354554543537647132\n1124522642136422133462222233332232224222212324342222422212173363253112323122212185232222134423322531\n3625552645325643523523626352182432442352822462352556321825622244233421355256652225514242733444654533\n4121221221321241121131252222226221122222422221212221122242221221222222224221212133542123221221223221\n4233335343332333325333332333335324232133323253334242373343434531331232437435314336333225334532333243\n3332324173333343437342354324322343332423272242221248322224221232353432223224224433333314232322335232\n3488854754415831286313732382313378851347661551526457831633587588422324437687873648177188134185235339\n9955446675832864322914452826637683656542666758461825387134455252833595464554223633522551665175567652\n3343326133241371143222233314226533372336322323213323222323325322352363233242333351222773313435313331\n7222332572232233155582377262856426223332632223323237444212423322142445514441632233622512243352133222\n5927331546522122552112474824232172343244227225713369777227758232563236222265351273232763336552221585\n4421241124242443114134342112433114224243344313144112432424441213124123344143434131131313412131456789\n6939562135542475464943676867358743322348538933277386996738966346667587838276945757622745345599633378\n2342213123343222324433226133244534331334332312332333332225312331132312335413452322235313133421214214\n2312213433438323323232363322232553888324633332113422323453322923343431372622233431323233212633135223\n1222223123333218432232423724342214332333233224213433213422521334332373533332726647765733342233244232\n2332341334131333232423213222216343422342124422434342713233432227332332821132534424233343833131822234\n2423333335336313336543331143335332433333232433363243234363332363334333462437363333243433234334453532\n6422242222326221222232222163322253243423622452233321312232422231323223382522223232222222222322462322\n6777977587776776667448955987479778766577864566864257697775776275675775866655767679555786667673765776\n2313342543515333233313334123333132333333363334342333314323343323434313323333433233333333323333349322\n2122222422221222522222222222212323122222322221233224126312223222212232122222124322122222121222312221\n1243133134211422323222342224133431122444222436112323221242212241234122222122461213322241222122131213\n3111222212274525446125524344433544222255432314221242245285426312422444313431276222258383122541345221\n7323533623511443435513433155833332324343343335154343243634453435332334333564354434535345335343524233\n1337346746733871442436239546673467544435997136577473232254634753545747433392553899627316421222494448\n9484943925215475344233682872247983846394779423751336229534968641441966365463563884754429824332773283\n3322233241424124213233224222121224111522333426222123342442212312233234232133421332333422222122222223\n2132162525212114423122225222325212221221224212412222222226213712221221622212222222222222322222223221\n4422223552423234421541112342132443323142242421324148443524436324432452432214214523445252424232432243\n2412212223242422231212221423511212244222115221413312333212224122222222222412242321231222222222221224\n7876778987998858865897776899868699887777673856958667958875969866956975895758779885855983666859977569\n3433634566353133353344133424233345244454233464343223624544341423441235533364334246442443332432283534\n4544494846586459574445654446769275463434288944445747864484859357349468444564563944677649946843478444\n4343453642553923414252463421433424236443332355274254531543554355215344454332412422434434342732524144\n3263323326523427343363122736342553433568327235247333353463323353535362337313333643233244342773436833\n2342616133825228232427222335263622762233223324122261224437643111233232934422382423268223373664221543\n2222315222422322332262321252232313222221222223221262262312223252622222222222322311266521222212231222\n6432424944564434433442434443524523753446334444233333443432443242147482422343243933144322343522343544\n2312222232222222221233137252322131432221323212223322322222222322212132122221223212221222322213322111\n4545757236745855656547668553776547748467255464872946574346775258533453544542542354333495461756573556\n9748738846588978488765229448753833669657858728647745985799945548774224687999889776885886276655768785\n6445545445455255543354455554652542486515554325455456442434523552554344445762455242345153532545143654\n3333333123331253333336373332312425333343444333223333324123347222422333433223433333332824324342223233\n6556833685144584756564347345646545245538643637314563542555681636336575727857445552555576336756253474\n2282246222321322322222422122212252221221321212121222212122122222223622512222216322221221211235422125\n4422133323463331252132323421321236323322322333245224254233224234323214229322133823231333333233213622\n2222122322222522211222232322231123222222131223121222221282222212421222212352212222122392212112231211\n4244443443354335464433545494354355434354443443342443444343342534535245475444444313524434434444423434\n2231222311222221122213222233121222122332323221332543232322222121222222322221223411322222322231232241\n3324213244333242341411454513312226336533322742323323323336843213462363341333333295235332333335422332\n6285765544662843678955238675865556938277564688327872746163577415134782582598678363356615366665847658\n2142323622413332232223242632326322342332333323142223242224334312212332433233434238153323223522224365\n3124233573622422534244114523413622343153223246252213212244333243541242224126232623522433144142222322\n2242122525321213244423244234434312345424592234332325113232667442733332264224336424514242323445223614\n5333293733443324333242332224432534833333334335233323134525363644532346139333553143142274343438466733\n3446655334443357524532455514445545633555443244243234754444446514642345535436353355852464244256445426\n3594537734345444465463655654626533347776564446465533343534577553832544353525334843545365546453353666\n6322232645359164222643233246382242313417929762332533243534342545464438422412221522397454434361585412\n4362224224342236432222123337225214423143233746726352274232232462423274637223325351242337332333253122\n2324813833133975242362236333324333423242332112343332246333354332233342335636232334322433333431432333\n3466565666665553556554455365446656733436624345354365656468462255555236359566676266684345366658554653\n4434664226422645314358554341452343136552524243322546336534223436334747316934632715233244333733427213\n2213112212333122133444223213212242424162442233442342249443224432313243332341234421954362324135432432\n4231331442154345325443434354444444442433323446536224444348322424344244444344242444441444315344442442\n2223241222222112322215222224122132441221342222222232212122222522142621231221211222234232221213212212\n2557275346374328766332733645835253275555263132845333327575357862314835477658823522443865464435223273\n4526213231235754822477244442664784429224262223382338546724844726529262242672147853674638741553457484\n4484293545653344433332324271444324554241415553243244454223365415322452312334244225232444365444144325\n2243122222244313322223223223421322222342222242122222222242121222122223242222221222422113221333232522\n3552535537343555454343427345485624533543332233546313525745693453376334323234332483463824545347577356\n2893847327944131164113722727741646243748826227122447222327578633217728285226822344682265865642318822\n2323233122342323311352223523332634263233133213232212344624223622331222122622221337222231332223223215\n4762734388684535673367562665544656452585769453436524367447145769444554765332545867535354244634844553\n2232423271222273232233521315252241142432121123221232532332172222322726222225452212532216222123222342\n5253535543553434152355355555558322347552633575451245484442343334425255357424564448354314352293555125\n3132122111271233132222222223223422222224122221242223211244242331222223243222232323222112222222262232\n3123112532223265542421532223342324614721214733432532564524322222352321452453442632323234123144664542\n2442224311143255321124232367515224325353652332632334246322162137332332326244312332253262234625223233\n4413444474628353343452474636444442553214434553343344323384544613654323439433347453355433434233333435\n4122212122222222212222132222222232231222221341122221222222222222213221332124122224212332222233221213\n3222227142212322244622326222222172222433221324343234223222112321344352323325322211612422216321232212\n3253356368425122444463453764659324527227474263432625266192252375423663716433632676525622634622725424\n4234322224224223212224221422223223262232222232221244423625232221343222421322113242432232221222222322\n7193443462483583354543446524344442624643549433464125454212452467745565348444254767482444445554143527\n3322632433234333443333333332332333333343344834264643334336444334123243333133333333232233533313213333\n3223231134321322333223312232532122433133221232333423235223261322322227222822333313232323233322336332\n6648595464445663455985874435856635354586954644548454595867586966655586395824568656582636564464446556\n2234333331375827934432664233523932364634352333232442646433364323334533343243313432333343333333433426\n2526355458165343365443433253352253533322455353143455334324653355243334433324325314345243345345334454\n2221231222222212226321211332132122232251221222521332222222212322222233212221211231224324241523322223\n4522314356625524442243553324222425225546225576865853415413561454592361265452424524653125537425752243\n5523321443522732222253143541354563554456452334521222192522355522355532524126224583722625174523864245\n2722323242514756313222255232323221222514234322221513522312322225223241522222222252222262111212922352\n1123222222123112314112422222341222222122322143222322235142244215221822222722432142124232111212112532\n3313635332223434322222633231338663364325511223222234331655633162442826256352313232325332323116393233\n2332321132462624611963264228265576442132286256734225225276455611774224262417122265457262622662415257\n2222224522222223223222424232222224242212312322422311231212222122224224232124222423332124422322222354\n5232832621232122329332335728232133333332425232323311227532332242232382623522565213211435624233335523\n8347316436438546536527776437387236324543234758445542232243232438248159346538656582636696125973423358\n6225465346363346625242244662335432535324252443454354463323513144236586441546233353242545133545446533\n2325242221112324322323141221442221221344344334222232134232242223424253222254232252242332233232432222\n3322224222232222223234113247214422131221232112222223122732312322345431222122123212222413433232324233\n9384287434485534245544434536825447323537759567764774585755946246637835245944546415945452573574735538\n3576544464544524634556474565444547374467346434473444247543784344653446554656444244566553466344433334\n3379233262233223323533333321322212335322332623333313334323346253323313323343243632323423433233393232\n2223223222431322423321222212422222622121315212421221222221223321232212222221242213342222222122224212\n3333233242226332362533435233233322221232323252532323226381222323852313433232213222223323422836322332\n2869957667585574448565453455569625274633455552596543956554674455638278563575667447746265664374896966\n4448544735351475767334332353433334337365254224355554342476477354967884335336349243374765476414441834\n5232221222222222122211222322221222322222242222222222252122232212221231212222522224222223122232222122\n3224255241642224514133222231232223312223222223212123224422223222223252321244231312322322122442212232\n5214333262337445452922435231325724184224244342424245237235371428142821852614663444236263821222245564\n4467934453364644495445493736543742825744255563417554288935736844843395434435386433232435645575531526\n2132134422231312132224223332252152652232411222642322332221274223212222242274222123442322222222238231\n8622224232322312323422222123212223222121322222132222222523222122222222132222122242511123222121212211\n2232222222223322421221123222112222222212522212221222222222212242522125222124222212223232312212422322\n3333242331134213316633342231343333232833233333223333423343224223433333633325343324243733332323333533"
Day3.part1(input) |> IO.inspect(label: :day1_part1)
Day3.part2(input) |> IO.inspect(label: :day1_part2)