# Day13
## Untitled
<!-- livebook:{"livebook_object":"cell_input","name":"input","type":"textarea","value":"691,418\n507,283\n371,371\n21,710\n10,260\n256,84\n601,892\n960,541\n755,392\n90,411\n435,603\n63,565\n1211,217\n328,719\n1186,325\n661,606\n1193,514\n1097,156\n353,49\n673,341\n850,292\n1210,812\n54,476\n1101,393\n982,719\n874,0\n1161,379\n457,322\n440,340\n1012,670\n746,259\n479,348\n1275,787\n505,94\n649,606\n1305,675\n269,217\n443,238\n969,850\n875,358\n149,514\n773,617\n1255,437\n589,358\n100,789\n773,66\n853,313\n1146,607\n815,78\n55,264\n875,225\n162,74\n589,39\n1066,31\n1277,70\n773,828\n815,750\n164,287\n1232,112\n338,742\n440,676\n300,700\n180,684\n132,740\n782,301\n1193,725\n895,758\n828,497\n392,534\n831,348\n479,124\n823,626\n955,500\n853,322\n962,327\n796,577\n1220,411\n90,859\n366,501\n1294,168\n1217,801\n927,281\n991,19\n1202,660\n1099,770\n753,543\n556,418\n457,40\n159,144\n818,105\n149,380\n967,623\n97,543\n1033,738\n949,236\n435,781\n459,604\n482,497\n952,420\n1146,415\n1143,268\n572,662\n388,86\n112,106\n1006,101\n1178,625\n338,376\n960,793\n917,39\n683,714\n1213,203\n902,841\n895,558\n355,500\n199,550\n855,443\n865,514\n815,32\n1135,796\n994,518\n651,513\n63,441\n633,486\n227,833\n820,415\n474,658\n619,102\n716,612\n443,572\n1250,282\n922,891\n1019,451\n15,822\n1111,344\n1272,841\n354,700\n440,4\n1198,442\n241,717\n1081,515\n559,254\n199,3\n1232,280\n634,424\n982,623\n20,439\n987,429\n952,474\n383,739\n16,168\n912,488\n383,603\n30,367\n1096,340\n706,289\n70,138\n177,739\n599,739\n1277,824\n492,372\n363,102\n470,696\n582,299\n590,808\n738,255\n671,751\n304,722\n800,194\n224,52\n3,177\n555,392\n793,87\n1059,802\n711,312\n1300,260\n1279,884\n443,656\n93,541\n38,501\n619,787\n1225,45\n283,299\n1143,626\n982,31\n833,67\n748,52\n1280,815\n482,397\n870,4\n388,891\n651,469\n465,182\n981,73\n875,291\n925,665\n853,572\n567,375\n415,336\n353,397\n38,841\n1009,234\n263,453\n93,801\n358,26\n0,623\n632,722\n776,389\n1124,799\n604,289\n72,299\n987,878\n154,497\n673,252\n537,393\n1044,183\n213,738\n600,700\n1218,842\n398,848\n113,66\n5,382\n247,684\n421,577\n1178,525\n10,824\n972,376\n132,154\n413,357\n932,408\n1250,631\n435,225\n55,312\n1295,143\n132,525\n383,281\n1089,721\n1138,747\n194,602\n853,406\n20,519\n1081,93\n97,515\n709,220\n969,44\n276,813\n3,513\n1056,747\n709,226\n1071,74\n552,276\n773,277\n944,501\n455,443\n241,537\n445,617\n673,194\n1181,124\n917,95\n20,872\n1272,53\n251,802\n426,866\n979,16\n957,647\n984,623\n75,696\n395,626\n385,665\n78,112\n415,758\n194,29\n1289,486\n1103,747\n745,887\n912,58\n445,501\n852,801\n407,210\n856,145\n78,280\n559,702\n278,149\n147,511\n1131,595\n1044,891\n753,203\n25,759\n1236,147\n1062,166\n587,492\n90,35\n710,558\n483,495\n1290,872\n1079,67\n1138,497\n175,546\n244,31\n60,360\n17,586\n256,607\n504,368\n975,203\n1014,68\n1218,52\n1111,792\n87,784\n868,253\n132,625\n350,345\n38,393\n112,408\n1275,443\n1136,70\n830,668\n330,367\n600,784\n666,742\n430,276\n600,682\n109,880\n1129,150\n1203,1\n1093,462\n793,311\n1071,522\n256,757\n581,19\n644,152\n1275,451\n517,583\n436,392\n410,640\n1221,7\n750,82\n579,708\n1071,136\n676,519\n1210,789\n1071,334\n986,255\n321,830\n120,632\n666,152\n1193,841\n1191,747\n981,373\n1225,849\n840,424\n1091,781\n89,887\n445,514\n1191,595\n867,686\n266,394\n947,787\n266,891\n581,427\n1116,292\n1213,799\n112,442\n197,770\n907,103\n669,850\n599,182\n455,891\n199,451\n321,892\n928,642\n321,2\n557,543\n324,255\n119,595\n634,22\n241,57\n600,558\n1001,117\n634,582\n306,470\n591,117\n1161,94\n504,526\n918,534\n547,333\n1309,633\n1010,194\n392,194\n585,373\n207,747\n621,70\n244,232\n649,667\n48,821\n827,847\n910,819\n87,550\n875,179\n590,341\n60,282\n350,541\n179,798\n691,443\n555,453\n805,380\n982,863\n244,214\n455,451\n35,443\n65,835\n262,476\n736,634\n1170,319\n763,648\n764,54\n92,52\n1307,201\n940,180\n1202,392\n495,32\n1241,129\n398,735\n975,271\n808,388\n1121,182\n150,779\n31,884\n843,812\n126,301\n132,389\n468,535\n750,555\n95,379\n1223,336\n1048,476\n773,380\n1069,165\n656,271\n840,696\n227,534\n542,116\n502,175\n349,184\n1063,684\n560,107\n440,710\n1275,418\n1116,602\n659,65\n420,824\n748,810\n725,373\n455,3\n360,592\n1108,620\n460,292\n433,173\n720,341\n73,831\n54,212\n202,620\n803,595\n472,476\n483,803\n65,59\n574,634\n490,479\n758,170\n10,152\n561,877\n363,107\n847,618\n1307,177\n1121,712\n283,75\n733,581\n244,863\n251,372\n1300,474\n410,607\n865,501\n556,28\n719,565\n991,791\n917,799\n1071,823\n184,422\n917,464\n1004,470\n590,658\n1216,364\n883,61\n574,186\n1250,3\n403,103\n1233,816\n99,789\n768,218\n698,729\n209,393\n955,394\n276,365\n17,840\n393,799\n1066,863\n473,140\n169,556\n1079,291\n479,796\n1218,84\n691,451\n1091,291\n293,264\n507,511\n1300,420\n454,145\n910,147\n977,892\n1201,880\n651,245\n666,420\n1086,52\n147,383\n233,857\n149,379\n524,93\n994,250\n353,647\n375,238\n1133,739\n211,770\n825,450\n1158,836\n676,183\n1211,789\n197,124\n918,418\n269,677\n1161,514\n710,476\n323,803\n754,418\n1288,127\n351,140\n145,822\n465,535\n805,800\n5,183\n89,455\n721,39\n1044,394\n288,53\n1178,817\n85,45\n181,700\n460,602\n415,558\n589,375\n1091,603\n1203,246\n599,712\n1051,739\n343,623\n1293,840\n146,472\n467,82\n1141,786\n1079,827\n1081,129\n867,208\n1034,172\n126,145\n75,248\n1141,338\n1049,800\n748,359\n219,221\n150,563\n691,866\n838,476\n350,793\n720,658\n60,263\n1213,95\n743,375\n1218,810\n328,271\n358,474\n180,870\n442,253\n80,36\n731,198\n649,556\n1164,472\n900,680\n1256,418\n152,759\n975,623\n1203,583\n354,194\n775,747\n358,516\n887,603\n254,147\n261,800\n711,134\n579,831\n1078,140\n639,353\n909,383\n1160,368\n100,105\n962,887\n1305,288\n241,357\n398,847\n599,155\n298,110\n806,368\n1148,74\n1221,887\n1268,101\n463,618\n806,526\n10,634\n102,842\n912,47\n889,465\n149,515\n991,467\n1091,837\n400,75\n1240,138\n831,770\n743,823\n213,156\n512,870\n1197,66\n922,86\n676,134\n1295,541\n890,824\n445,66\n144,866\n1262,373\n1113,124\n430,52\n713,677\n805,94\n765,208\n907,372\n426,28\n1290,519\n644,420\n1064,841\n191,52\n842,535\n803,611\n659,469\n353,759\n884,28\n244,702\n124,121\n1,633\n1091,333\n830,824\n1208,842\n219,333\n514,577\n1160,563\n517,535\n1066,287\n1004,404\n627,180\n107,246\n378,589\n1123,82\n20,183\n1215,651\n393,71\n186,799\n1111,102\n378,81\n443,208\n311,163\n1163,831\n768,408\n398,754\n845,570\n621,600\n1160,526\n1184,301\n57,777\n221,329\n296,68\n989,892\n217,462\n806,331\n234,824\n537,617\n1256,476\n836,870\n262,360\n316,518\n194,865\n329,73\n1098,505\n17,700\n895,735\n999,163\n1309,261\n276,81\n114,73\n928,418\n1238,299\n989,114\n1099,124\n1056,819\n572,169\n731,831\n77,57\n1290,312\n495,144\n1307,381\n462,110\n547,246\n465,712\n152,388\n1017,630\n212,389\n425,379\n555,441\n477,67\n217,432\n480,824\n470,24\n954,672\n564,35\n964,82\n159,816\n360,302\n1034,813\n510,28\n755,677\n\nfold along x=655\nfold along y=447\nfold along x=327\nfold along y=223\nfold along x=163\nfold along y=111\nfold along x=81\nfold along y=55\nfold along x=40\nfold along y=27\nfold along y=13\nfold along y=6\n"} -->
<!-- livebook:{"reevaluate_automatically":true} -->
```elixir
[dots, folds] =
"input"
|> IO.getn(1_000_000)
|> String.trim()
|> String.split(["\n\n", "\r\n\r\n"], trim: true)
dots =
dots
|> String.split(["\n", "\r\n"], trim: true)
|> Enum.map(fn line ->
line |> String.split(",") |> Enum.map(&String.to_integer/1) |> List.to_tuple()
end)
|> IO.inspect()
folds =
folds
|> String.split(["\n", "\r\n"], trim: true)
|> Enum.map(&(&1 |> String.split(" ") |> List.last() |> String.split("=")))
|> Enum.map(fn [axis, n] -> {axis, String.to_integer(n)} end)
```
<!-- livebook:{"reevaluate_automatically":true} -->
```elixir
defmodule P1 do
def calc(dots, {"y", n}) do
dots
|> Enum.split_with(fn {_x, y} -> y < n end)
|> then(fn {unchanged, folded} ->
folded
|> Enum.map(fn {x, y} ->
{x, n - (y - n)}
end)
|> Kernel.++(unchanged)
|> Enum.uniq()
end)
end
def calc(dots, {"x", n}) do
dots
|> Enum.split_with(fn {x, _y} -> x < n end)
|> then(fn {unchanged, folded} ->
folded
|> Enum.map(fn {x, y} ->
{n - (x - n), y}
end)
|> Kernel.++(unchanged)
|> Enum.uniq()
end)
end
end
```
<!-- livebook:{"reevaluate_automatically":true} -->
```elixir
P1.calc(dots, hd(folds)) |> length
```
<!-- livebook:{"reevaluate_automatically":true} -->
```elixir
defmodule P2 do
def calc(dots, folds) do
dots =
folds
|> Enum.reduce(dots, fn fold, dots ->
P1.calc(dots, fold)
end)
|> MapSet.new()
{min_x, max_x} = dots |> Enum.map(fn {x, _} -> x end) |> Enum.min_max()
{min_y, max_y} = dots |> Enum.map(fn {_, y} -> y end) |> Enum.min_max()
for y <- min_y..max_y do
for x <- min_x..max_x do
({x, y} in dots && "#") || "."
end
end
end
end
```
<!-- livebook:{"reevaluate_automatically":true} -->
```elixir
P2.calc(dots, folds) |> Enum.each(&IO.puts/1)
```