this repo has no description

Dump load of all uncommited changes

hauleth.dev 13c6e41f dff434f3

verified
+100
2019/1/input.txt
··· 1 + 54172 2 + 58469 3 + 92948 4 + 143402 5 + 57563 6 + 54532 7 + 68042 8 + 89847 9 + 70872 10 + 54069 11 + 107310 12 + 146439 13 + 88851 14 + 142869 15 + 71309 16 + 89613 17 + 70338 18 + 87708 19 + 95305 20 + 134384 21 + 128250 22 + 134991 23 + 91270 24 + 127819 25 + 68650 26 + 102556 27 + 129882 28 + 68688 29 + 129939 30 + 137344 31 + 102624 32 + 90828 33 + 86487 34 + 91712 35 + 114866 36 + 75697 37 + 107599 38 + 99053 39 + 87511 40 + 128128 41 + 57772 42 + 69314 43 + 90771 44 + 145376 45 + 100730 46 + 142675 47 + 112731 48 + 83985 49 + 123565 50 + 127325 51 + 86597 52 + 121772 53 + 131992 54 + 148859 55 + 93348 56 + 77294 57 + 119763 58 + 74636 59 + 95592 60 + 79628 61 + 78861 62 + 68565 63 + 88820 64 + 134291 65 + 69262 66 + 128678 67 + 118216 68 + 52799 69 + 92731 70 + 61600 71 + 63477 72 + 64016 73 + 131872 74 + 131412 75 + 146579 76 + 104400 77 + 99110 78 + 63458 79 + 144393 80 + 54787 81 + 148622 82 + 91323 83 + 61137 84 + 106082 85 + 103644 86 + 63795 87 + 126648 88 + 61489 89 + 140964 90 + 110963 91 + 72696 92 + 124370 93 + 110466 94 + 139317 95 + 108440 96 + 148062 97 + 89992 98 + 145645 99 + 70556 100 + 95739
+19
2019/1/solution.exs
··· 1 + defmodule Main do 2 + def calculate(value), do: max(div(value, 3) - 2, 0) 3 + 4 + def for_fuel(value), do: for_fuel(value, value) 5 + 6 + defp for_fuel(0, total), do: total 7 + defp for_fuel(value, total) do 8 + current = calculate(value) 9 + 10 + for_fuel(current, total + current) 11 + end 12 + end 13 + 14 + IO.stream(:stdio, :line) 15 + |> Stream.map(&String.to_integer(String.trim(&1))) 16 + |> Stream.map(&Main.calculate/1) 17 + |> Stream.map(&Main.for_fuel/1) 18 + |> Enum.reduce(&+/2) 19 + |> IO.inspect()
+1
2019/2/input.txt
··· 1 + 1,0,0,3,1,1,2,3,1,3,4,3,1,5,0,3,2,1,10,19,1,6,19,23,1,10,23,27,2,27,13,31,1,31,6,35,2,6,35,39,1,39,5,43,1,6,43,47,2,6,47,51,1,51,5,55,2,55,9,59,1,6,59,63,1,9,63,67,1,67,10,71,2,9,71,75,1,6,75,79,1,5,79,83,2,83,10,87,1,87,5,91,1,91,9,95,1,6,95,99,2,99,10,103,1,103,5,107,2,107,6,111,1,111,5,115,1,9,115,119,2,119,10,123,1,6,123,127,2,13,127,131,1,131,6,135,1,135,10,139,1,13,139,143,1,143,13,147,1,5,147,151,1,151,2,155,1,155,5,0,99,2,0,14,0
+41
2019/2/solution.exs
··· 1 + defmodule GravAssist do 2 + def calc([op, _, _ | rest], a \\ 12, b \\ 2) do 3 + hd(execute([op, a, b | rest])) 4 + end 5 + 6 + def execute(bytecode) when is_list(bytecode), do: execute(:array.from_list(bytecode)) 7 + def execute(bytecode), do: eval(bytecode, 0) 8 + 9 + defp eval(bytecode, ic) do 10 + case :array.get(ic, bytecode) do 11 + 99 -> :array.to_list(bytecode) 12 + op when op in 1..2 -> 13 + pos_a = :array.get(ic + 1, bytecode) 14 + pos_b = :array.get(ic + 2, bytecode) 15 + pos_r = :array.get(ic + 3, bytecode) 16 + 17 + result = compute(op, :array.get(pos_a, bytecode), :array.get(pos_b, bytecode)) 18 + 19 + new_bc = :array.set(pos_r, result, bytecode) 20 + 21 + eval(new_bc, ic + 4) 22 + _ -> :error 23 + end 24 + end 25 + 26 + defp compute(1, a, b), do: a + b 27 + defp compute(2, a, b), do: a * b 28 + end 29 + 30 + data = 31 + IO.read(:line) 32 + |> String.split(",") 33 + |> Enum.map(&String.to_integer(String.trim(&1))) 34 + 35 + IO.inspect(GravAssist.calc(data), label: :sol1) 36 + 37 + for(a <- 0..99, 38 + b <- 0..99, 39 + 19690720 == GravAssist.calc(data, a, b), 40 + do: {a, b}) 41 + |> IO.inspect(label: :sol2)
+2
2019/3/input.txt
··· 1 + R997,D543,L529,D916,R855,D705,L159,U444,R234,U639,L178,D682,L836,U333,R571,D906,L583,U872,L733,U815,L484,D641,R649,U378,L26,U66,L659,D27,R4,U325,L264,D711,L837,D986,L38,U623,L830,D369,L469,D704,L302,U143,L771,U170,R237,U477,L251,D100,R561,D889,R857,D780,R258,D299,L975,D481,L692,D894,R847,D416,R670,D658,L537,U748,R468,D304,L263,D884,R806,D13,R288,U933,R4,U291,L809,D242,R669,D50,R106,D510,R409,U311,R101,D232,R370,D490,L762,D805,L981,D637,L987,U403,R965,U724,L404,D664,L687,U868,L808,D174,L363,D241,L54,D238,R444,U75,R683,U712,L759,D569,R349,D378,L576,U437,R137,D822,R21,D595,L602,U147,R959,U350,R964,U625,L718,U331,L252,D386,L251,U371,R973,D709,R915,D837,L7,U727,L501,D520,L626,U161,L287,D224,L821,U555,L312,U234,L335,D572,L113,U673,L615,D919,R925,U16,R211,U77,R630,U786,R850,D221,R939,U559,R887,U779,L222,D482,L252,D682,L904,U568,R317,D453,R689,D917,R845,U260,R69,U613,R528,D447,L791,D119,L268,U215,L806,U786,R465,D787,L792,D823,R526,D709,L362,D748,L518,U115,L898,U784,R893,U911,R98,U215,R828,D100,R153,U496,L938,D403,R886,D317,L849,D59,R156,D27,L64,D771,R956,U880,R313,D244,L483,D17,R72,U467,L475,D444,R554,D781,R524,D152,L771,U435,L622,D601,R733,D478,L686,D12,L525,D467,L302,D948,L966,U572,L303,U914,R54,D417,R635,D425,R640,D703,R17,D187,L195,U59,R166,D616,L557,U458,L743,D166,R328,D640,R908,D775,L151,D216,L964,D202,L534,D239,R998,U167,L604,D812,L527,U526,L640,U93,L733,D980,R607,D879,L593,D721,R454,U137,R683,D343,L38,D398,L81,U392,R821,U247,L361,D208,R763,D771,L515 2 + L1000,D189,L867,U824,L193,D12,R704,U83,R371,D858,L970,D56,R877,D448,R962,U239,R641,D198,L840,D413,R586,D920,R650,U919,R375,D540,L150,U995,R54,D200,R61,D974,R249,U893,R319,U930,R658,U680,R286,D186,R963,U553,L256,U629,L554,U576,R887,U595,R629,D680,L684,U556,L302,U348,R825,D252,L684,U705,L258,D72,R907,U702,L518,U440,R239,U258,R825,U27,L580,D613,R357,D468,R519,U833,L415,D822,L798,U904,R812,U76,R86,U252,R427,U637,L896,U147,L294,U381,R306,U423,L688,D336,R648,U677,L750,D218,L649,D360,R710,D64,R317,U232,R261,D167,L49,D138,L431,D505,L535,U294,L553,U969,L144,U227,R437,D397,R359,U848,L48,D992,R169,D580,L219,D525,R552,U546,R849,D722,R894,D735,L182,U570,R274,D349,R312,U430,R441,U183,R645,D308,L416,U333,L687,U202,L973,D736,R382,U260,L176,D207,R706,U52,L142,D746,L328,D413,R879,D429,L679,D695,L224,D462,R358,D124,L515,D629,L873,D759,L763,U28,R765,D426,L93,U927,L395,U243,L393,D488,L729,U100,R488,D83,R47,U92,L871,D410,R405,D993,R537,D10,L79,D218,L686,D563,L31,U885,L784,D462,L160,U345,R204,U275,R162,U164,R843,D578,R255,D456,L398,U470,L576,D973,L337,D971,R205,U264,R707,U975,L60,U270,R1,U808,R844,D884,L952,D435,L144,D374,R389,D741,R404,D398,R282,D807,L316,U136,L504,U720,R859,D925,L711,U343,L535,D978,R578,U636,L447,D298,R574,U590,L142,D802,L846,D617,L838,U362,R812,U295,L328,U162,L617,D857,L759,D251,L343,U394,R721,U320,R836,U726,L950,D612,R129,U549,L970,D87,L341,D269,L659,U550,R835,D318,L189,U278,R871,D62,R703,U807,L389,U824,R521,D175,L698,U313,L942,D810,L498,U18,R168,D111,R607
+57
2019/3/solution.exs
··· 1 + defmodule Wires do 2 + @directions %{ 3 + ?U => :up, 4 + ?D => :down, 5 + ?R => :right, 6 + ?L => :left 7 + } 8 + 9 + @moves %{ 10 + up: {0, 1}, 11 + down: {0, -1}, 12 + right: {1, 0}, 13 + left: {-1, 0} 14 + } 15 + 16 + def load(list) do 17 + list 18 + |> Enum.map(&parse/1) 19 + |> wire() 20 + end 21 + 22 + defp parse(<<c, rest::binary>>) do 23 + {Map.fetch!(@directions, c), String.to_integer(rest)} 24 + end 25 + 26 + defp wire(steps) do 27 + steps 28 + |> Enum.reduce({[], {0, 0}}, &into_coordinates/2) 29 + |> elem(0) 30 + |> MapSet.new() 31 + end 32 + 33 + defp into_coordinates({_, 0}, {points, curr}), do: {[curr | points], curr} 34 + defp into_coordinates({dir, n}, {points, {x, y}}) do 35 + {dx, dy} = Map.fetch!(@moves, dir) 36 + next = {x + dx, y + dy} 37 + 38 + into_coordinates({dir, n - 1}, {[next | points], next}) 39 + end 40 + end 41 + 42 + w1 = 43 + IO.read(:line) 44 + |> String.trim() 45 + |> String.split(",") 46 + |> Wires.load() 47 + w2 = 48 + IO.read(:line) 49 + |> String.trim() 50 + |> String.split(",") 51 + |> Wires.load() 52 + 53 + MapSet.intersection(w1, w2) 54 + |> MapSet.to_list() 55 + |> Enum.map(fn {x, y} -> abs(x) + abs(y) end) 56 + |> Enum.min() 57 + |> IO.inspect()
+200
2020/1/input.txt
··· 1 + 1706 2 + 1466 3 + 1427 4 + 1744 5 + 1684 6 + 1386 7 + 2001 8 + 1750 9 + 1753 10 + 1770 11 + 1559 12 + 1616 13 + 1408 14 + 1860 15 + 1940 16 + 2002 17 + 1862 18 + 1918 19 + 1456 20 + 1209 21 + 1840 22 + 1462 23 + 1783 24 + 1644 25 + 1901 26 + 1791 27 + 1506 28 + 2005 29 + 1338 30 + 1383 31 + 1420 32 + 1631 33 + 1784 34 + 1897 35 + 1771 36 + 1588 37 + 1955 38 + 1937 39 + 1392 40 + 1396 41 + 1803 42 + 1429 43 + 1407 44 + 1698 45 + 1562 46 + 1913 47 + 1678 48 + 1198 49 + 1398 50 + 1703 51 + 1831 52 + 1489 53 + 1782 54 + 1864 55 + 1708 56 + 1397 57 + 1915 58 + 1953 59 + 1395 60 + 1610 61 + 1549 62 + 1564 63 + 1973 64 + 1931 65 + 2009 66 + 1980 67 + 1800 68 + 1443 69 + 1993 70 + 1900 71 + 1964 72 + 1581 73 + 1904 74 + 1665 75 + 1567 76 + 1057 77 + 1805 78 + 1402 79 + 1878 80 + 1729 81 + 1825 82 + 1682 83 + 1719 84 + 1469 85 + 1004 86 + 1591 87 + 1594 88 + 811 89 + 1523 90 + 1424 91 + 1756 92 + 373 93 + 1442 94 + 1718 95 + 1411 96 + 1892 97 + 1820 98 + 1977 99 + 1871 100 + 1890 101 + 1653 102 + 1372 103 + 1475 104 + 1476 105 + 1422 106 + 2004 107 + 1755 108 + 1676 109 + 639 110 + 1425 111 + 1853 112 + 1712 113 + 1525 114 + 1514 115 + 1455 116 + 1658 117 + 1963 118 + 1579 119 + 1861 120 + 1458 121 + 1474 122 + 1613 123 + 1681 124 + 1586 125 + 1441 126 + 1499 127 + 1865 128 + 1735 129 + 1989 130 + 1952 131 + 792 132 + 1669 133 + 1509 134 + 1481 135 + 1893 136 + 1445 137 + 1834 138 + 1779 139 + 1732 140 + 1826 141 + 1595 142 + 1829 143 + 449 144 + 1920 145 + 1707 146 + 1780 147 + 1935 148 + 1867 149 + 1769 150 + 1107 151 + 919 152 + 1382 153 + 1604 154 + 1875 155 + 1453 156 + 1496 157 + 1946 158 + 1659 159 + 1570 160 + 1692 161 + 1630 162 + 1638 163 + 1922 164 + 1691 165 + 1580 166 + 1880 167 + 1482 168 + 1762 169 + 1775 170 + 1376 171 + 1434 172 + 1856 173 + 1971 174 + 1646 175 + 1951 176 + 1416 177 + 1889 178 + 1773 179 + 1814 180 + 1471 181 + 1488 182 + 1736 183 + 1743 184 + 1459 185 + 1389 186 + 1498 187 + 1663 188 + 1611 189 + 1727 190 + 1699 191 + 1624 192 + 1511 193 + 1767 194 + 1754 195 + 1785 196 + 1491 197 + 1235 198 + 1510 199 + 1500 200 + 1485
+65
2020/1/solution.exs
··· 1 + defmodule Solution do 2 + def load(path) do 3 + path 4 + |> File.stream!() 5 + |> Stream.map(&String.to_integer(String.trim(&1))) 6 + |> Enum.to_list() 7 + end 8 + 9 + def run([], _, _), do: nil 10 + def run(_, _, sum) when sum < 0, do: nil 11 + def run([a | _], 1, a), do: [a] 12 + 13 + def run([a | rest], n, sum) do 14 + case run(rest, n - 1, sum - a) do 15 + nil -> run(rest, n, sum) 16 + nums when is_list(nums) -> [a | nums] 17 + end 18 + end 19 + end 20 + 21 + list = Solution.load("./1/input.txt") 22 + 23 + list 24 + |> Solution.run(2, 2020) 25 + |> Enum.reduce(&*/2) 26 + |> IO.inspect(label: "task 1") 27 + 28 + list 29 + |> Solution.run(3, 2020) 30 + |> Enum.reduce(&*/2) 31 + |> IO.inspect(label: "task 2") 32 + 33 + Benchee.run(%{ 34 + "first solution" => fn -> 35 + try do 36 + for x <- list, y <- list, z <- list, x + y + z == 2020 do 37 + throw(x * y * z) 38 + end 39 + 40 + :error 41 + catch 42 + num -> {:ok, num} 43 + end 44 + end, 45 + "optimized" => fn -> 46 + try do 47 + for x <- list, 48 + rest = 2020 - x, 49 + y <- list, 50 + y < rest, 51 + rest = 2020 - x - y, 52 + z <- list, 53 + z <= rest, 54 + x + y + z == 2020, 55 + do: throw(x * y * z) 56 + 57 + :error 58 + catch 59 + num -> {:ok, num} 60 + end 61 + end, 62 + "mine" => fn -> 63 + Solution.run(list, 3, 2020) 64 + end 65 + })
+1000
2020/2/input.txt
··· 1 + 5-10 b: bhbjlkbbbbbbb 2 + 3-4 j: hjvj 3 + 8-9 p: pmljtsttp 4 + 3-4 t: hvtttqhdjmmnbqwbgfs 5 + 4-6 m: mblwtzmvmdjkkmmtsckm 6 + 6-9 f: ffffftfff 7 + 1-3 g: xggg 8 + 3-10 k: rwkhttkxxdpnlkq 9 + 3-11 w: wwmwwwwwwwww 10 + 5-7 f: fffffffff 11 + 1-4 l: lglllbc 12 + 2-5 n: njnnn 13 + 6-8 t: tcjtltttttdttjttbt 14 + 10-20 d: djddddccdbdddddddndd 15 + 2-5 z: gzppzhrhzdthnpcr 16 + 13-14 p: plvppptppppzppbkpk 17 + 11-13 t: jjtjvzfhsrtsmkdhj 18 + 11-12 r: rtrdvrrxrrxrzr 19 + 2-6 x: dxsvxgvk 20 + 7-11 x: hcxxpvxrnmxckkq 21 + 12-17 s: sssssssssssrssssss 22 + 2-4 v: vvpvvvjvvjvvqbvv 23 + 15-18 h: thqhhhgjjqhhnhhznz 24 + 8-11 j: jbmgbtmjtbb 25 + 2-4 d: xxdfvp 26 + 2-7 p: fftlppz 27 + 9-13 d: dfddddddsdddds 28 + 5-7 d: ddddddz 29 + 2-3 h: hfbhhh 30 + 1-4 k: rmkvkkkk 31 + 16-17 w: wwwhwwwwwwwwwwwwq 32 + 5-8 l: gllxllnlqlglrplk 33 + 1-7 p: mhnpspp 34 + 5-13 f: qhwffbtfzmdffztfjs 35 + 2-8 f: fkjhvcbflbwhggtbbcb 36 + 2-3 m: bcmldxmdh 37 + 6-7 p: ppcpppw 38 + 3-10 m: mmmmmmmmmj 39 + 4-12 s: ssjssssssssmsss 40 + 2-5 j: rmjnjtjjjj 41 + 2-3 q: qqdqq 42 + 10-15 v: vvvvvvvvvvvvvvdvvvvv 43 + 1-4 w: wwwc 44 + 4-14 m: mmsmmmvmmmmmqqmmmmm 45 + 7-10 d: ddcdddzdddddd 46 + 4-5 h: hhhhh 47 + 9-17 p: ppppppppqppppppppp 48 + 6-7 m: mqtmnms 49 + 4-5 s: pssss 50 + 2-6 t: tdttttpwttt 51 + 7-8 l: llsxsllzlwl 52 + 7-10 f: fflffffkqffffm 53 + 3-4 f: cdfp 54 + 3-4 z: zzzz 55 + 6-7 s: sbssdvs 56 + 3-4 g: ggdv 57 + 11-16 l: lllllnbsqlfzwrfljkh 58 + 3-4 k: tqkxxfk 59 + 3-17 s: xshmvlmzrjdpnvlssn 60 + 1-16 l: lzzvllgktckllmlltl 61 + 5-6 l: qlltvl 62 + 6-7 p: npvbpcp 63 + 4-6 g: gmgvgn 64 + 12-13 r: rrnlrrwrtvrrrrcrrrv 65 + 11-12 h: hhvxhhhhwjhd 66 + 13-14 p: pdppcsjtppppppvtwpj 67 + 10-14 l: hljjkjxlfwzlllclzq 68 + 18-19 z: zzzzzzzzzzzzzzztzhn 69 + 11-12 p: hpspwrkqbnpp 70 + 16-18 h: hhhhhhghhhhhhhhwhbh 71 + 1-2 p: vpxnqqbgrxprmh 72 + 13-19 m: mmmmmmmmmmmmqmmmmqm 73 + 1-2 n: ncndsnl 74 + 9-10 x: xxxxxxxxxgxxd 75 + 9-12 w: wwwwwwwwwwzwwdfgwwp 76 + 3-5 h: nqhvhzb 77 + 4-5 j: jjjns 78 + 10-12 f: ffffffffffff 79 + 7-10 v: mgvrwvvsjw 80 + 3-5 m: wpmmm 81 + 3-10 s: ffsbvjdslsnshqs 82 + 9-10 z: mgzzbjzqsz 83 + 3-13 d: ddjdddddddddnd 84 + 2-4 l: tqkfhpwvvmc 85 + 1-3 z: zzzzzn 86 + 3-5 l: ctljlckdpnlchrzbc 87 + 6-7 v: hqvcvvv 88 + 11-13 v: vvvvcvvvvvvvvvv 89 + 8-9 t: ztndmlwdb 90 + 5-6 v: fdxxrvwpw 91 + 1-4 n: xnkb 92 + 16-17 v: vvvvvvvvvvvvvvvvnvv 93 + 12-14 b: bbbbbxbbbdbgbcb 94 + 1-7 w: wwwwwwrwwjtwk 95 + 3-10 d: bxnhbhrmgd 96 + 4-5 k: kkknkk 97 + 2-4 n: bndln 98 + 3-10 p: vpkppcppppcplpksp 99 + 9-10 d: fhbzbdzqsdxlhnbt 100 + 11-13 z: zzmzzzzwzpzzz 101 + 12-17 b: hkbcbbhthbrbbdgbl 102 + 11-13 c: cpccnxccxbjtm 103 + 5-6 n: nnrmnfnsnn 104 + 3-8 l: sslkllwljcgl 105 + 1-9 p: fpppzzpppppphtrhppp 106 + 4-11 h: kskbvrqhdjph 107 + 3-9 r: rsrvxnrchtrrrr 108 + 4-5 n: nwbln 109 + 3-4 g: gjgv 110 + 13-14 r: rrrrrrsrtrrrrrrrr 111 + 10-15 m: mmmmmmmmmtmmgmm 112 + 5-6 k: wkpkkqk 113 + 10-11 l: wlbllglkbltblrqlllm 114 + 6-7 d: ddddsrddd 115 + 17-18 v: vvvvvvvvvvvfvgvvsvv 116 + 6-10 n: nngnnnnvnknn 117 + 7-8 t: qdztnrnt 118 + 5-11 d: dfbdxqbmsdd 119 + 1-6 n: znnvqdnx 120 + 7-9 k: kkkkkkkkl 121 + 5-6 m: mmmszmtmmks 122 + 1-5 l: wlllllll 123 + 13-14 m: mcmmmmmlmmmmjmmm 124 + 1-7 k: kklkjvckb 125 + 14-15 d: ddddmddddmddddddd 126 + 18-19 k: kfkkkkkkkkkkkkkkkpkk 127 + 3-4 z: czjzc 128 + 17-18 t: btttttjmltrttxctgt 129 + 1-4 c: cccscqcccc 130 + 9-14 k: tcwcstszkvhjfmrqpkp 131 + 3-8 c: ccccccjcscncp 132 + 10-11 d: dddddddddmdd 133 + 3-5 m: rgmfmkmd 134 + 1-5 k: mfhnk 135 + 4-5 x: cwnxftlt 136 + 1-3 n: flnqmnnhnn 137 + 2-5 f: vwlcnsfd 138 + 4-8 c: cccccccbc 139 + 10-12 v: dhfvlvbvspjldzch 140 + 7-16 f: ffsmffffjffqfpffff 141 + 10-13 n: njtrrnnqntjtn 142 + 13-17 f: frffcfffrjffffdfpff 143 + 5-10 m: mmmmvfmmmmmmmmdm 144 + 5-6 v: vvvvvzvvvvv 145 + 6-12 r: dqrrcrhrhjsrrr 146 + 8-14 z: zzzzzzzlzzzgzsz 147 + 5-9 q: qkwzsvwdg 148 + 12-13 d: vzjfvddgctfdrr 149 + 6-7 f: mgndffb 150 + 2-5 x: nxxmx 151 + 7-9 c: cmxsccccf 152 + 1-7 n: nnnnnnnnnn 153 + 6-8 g: gggglfgp 154 + 2-13 v: kvwxcrfmpfcfdrgv 155 + 5-7 p: tpplpffpccpp 156 + 8-12 m: mmmmmmmmmmmxm 157 + 9-10 v: vvvvvvvvvcv 158 + 4-5 m: mbnmmkknmmwshmkthj 159 + 8-9 t: cltntrtpqwtcsftttf 160 + 8-16 f: ffffrffpffffffffff 161 + 6-8 t: sttcctttdttdwjdndtt 162 + 5-9 k: ckkkkvdkvkk 163 + 1-3 f: ffczfpgmf 164 + 2-4 w: wwlwwd 165 + 1-9 d: lddbhdddmtfdmdzdrdhd 166 + 16-17 h: xfqlbhhpbnclvztzzzx 167 + 2-7 r: rrbntqrrsrkrm 168 + 1-4 r: qwrr 169 + 12-14 b: tvbbzjbbbbbbbn 170 + 5-7 h: hhjvghth 171 + 2-3 d: dndrcx 172 + 8-9 c: ccccscccpc 173 + 5-8 s: srcsszcsp 174 + 13-15 g: gggggggglggggglggggg 175 + 11-13 b: bbbbbfrbfbbgbb 176 + 1-8 b: jbbkqbbbpbbbbbbp 177 + 11-14 n: nnnnnnnnnnmnnnn 178 + 1-4 g: qsggg 179 + 14-15 l: sllslllggllljkdlm 180 + 1-5 s: pvssbspdsshsssssrs 181 + 7-10 c: ccccccmcpgcc 182 + 6-14 m: bcfkpmvmcmmjml 183 + 1-3 n: ncnnnnn 184 + 12-14 j: bjfjxjjpjrjjjxjjk 185 + 10-12 v: vfvvvvvvqjvvvwvwt 186 + 6-13 d: stddxdnjrddhwgdhrfjf 187 + 5-6 w: qcwhnwwk 188 + 2-3 x: mcxfxckptzvw 189 + 12-20 b: lvgvbxsxxlvbhfcxbtzr 190 + 1-2 d: ddbdqd 191 + 5-10 h: mhtnjvhhhs 192 + 2-6 z: ztzzdxzzzqbvg 193 + 2-7 t: ttjkqztr 194 + 3-4 g: bgvggrxrhtlklfj 195 + 4-5 q: qqqvq 196 + 1-3 c: ccpc 197 + 4-6 j: jjrdjj 198 + 8-11 c: ncvshccccccsb 199 + 1-2 z: rzzqxczxbkpvgkxfzgvz 200 + 10-11 f: kffsffffbqf 201 + 18-19 v: vmvvvvvvvvvvvvvvvql 202 + 14-15 m: mmmmmmmmmnmmmpmm 203 + 12-17 z: zzzzzzzzczzdlzzzzz 204 + 4-6 g: zggggg 205 + 12-16 h: hhhfhhrnnkhhmhhtqvh 206 + 3-4 n: hxssbnn 207 + 6-9 m: mmmmmmmmdmmm 208 + 5-6 n: nnwtgn 209 + 6-10 c: lppbvxcmjc 210 + 7-8 d: dpddzddvdzdddzfddd 211 + 1-5 z: xlzmzzz 212 + 6-11 h: hjhhhphhhhf 213 + 1-9 h: hhdghtsmmjhhnnwz 214 + 6-9 t: ctldsstttstrz 215 + 3-4 t: qvktfwnjcjtqtjqtn 216 + 6-7 w: wwwwwwsww 217 + 11-12 m: nphmmmpmmmcm 218 + 8-9 p: ppppdppdp 219 + 12-13 l: cllzzglllbqlll 220 + 2-7 s: sslssssgbssbsssnss 221 + 6-14 j: jvjrxjjrlgvjzmgj 222 + 7-8 p: hxpnjvzqxm 223 + 2-10 g: xgzfgvdsxr 224 + 4-5 t: lttttxdtp 225 + 3-12 c: kkpckmphqfcc 226 + 4-7 v: rbsjcpvwgtfjpv 227 + 2-4 k: swqfkb 228 + 5-9 n: knfdnnnnn 229 + 12-14 t: zgwthtdtrxvvftst 230 + 3-5 v: vlvqtv 231 + 15-19 t: fqwkwbtjdqncnsmnqxr 232 + 3-8 c: mxccchksq 233 + 3-5 v: jtpvr 234 + 5-7 k: kbkkkshkkkzkkkt 235 + 8-9 z: zzzzzzzzzzz 236 + 6-13 k: kkkkkkkkkkkktkkk 237 + 5-7 c: mccchbwc 238 + 7-12 x: gxxxxlgmztwsxxxgj 239 + 3-12 b: ndsbdfdgvxtbmrqcrjhs 240 + 1-3 d: qxdtdt 241 + 3-7 b: qbbdbgb 242 + 12-15 p: ppmplpptppwppppg 243 + 7-8 r: rjrrrrrz 244 + 8-10 p: cppppgspsxpvp 245 + 1-5 w: wwwpwf 246 + 4-8 p: nhqlknppmpplb 247 + 1-6 c: cvccccrc 248 + 7-8 c: cccccctccccccc 249 + 4-12 x: jxrxtnxrxxvsx 250 + 9-15 g: jfgxnznpwhccdggnm 251 + 2-6 h: jphhphlvhgqbwnl 252 + 8-9 f: dfftbfxsxxqfdvlfs 253 + 1-12 t: dtttttttttttttt 254 + 3-7 h: hshhmhh 255 + 3-4 w: wwwj 256 + 5-6 z: zzzzzp 257 + 8-12 m: jmnwmtjmnqvrj 258 + 4-5 f: ffffvff 259 + 8-10 l: llllflllxll 260 + 4-8 x: zcvxtxxkm 261 + 13-15 p: pppppkppppbpppsp 262 + 3-6 h: hhhhphlhhghkt 263 + 2-13 t: tcttttjtttttltttttt 264 + 9-10 b: bbbbbbbbvb 265 + 7-8 w: fwbwwwqw 266 + 6-9 s: jssssssssssssssssw 267 + 13-17 p: pppppppppppppppppp 268 + 5-7 q: lqxcqqqqcmgtbqjrqmjg 269 + 4-17 t: tttpfttttjttttttvt 270 + 13-14 c: cccccccccccccj 271 + 1-2 p: pxrpqpmpp 272 + 3-8 l: rnlxbwwzjdsh 273 + 2-7 w: kwkghnsfcp 274 + 9-11 m: mmdrktmzmrzhmgdmg 275 + 8-11 z: wzxwzzbfznc 276 + 5-7 t: rtbtntt 277 + 2-3 v: nqvv 278 + 2-3 r: krrwb 279 + 10-11 q: qqqqlqqvqqqqqq 280 + 3-5 r: drrhh 281 + 7-9 f: ffffffffhv 282 + 4-13 m: rkmmbjnsjzjcmwmwk 283 + 15-17 s: jrrvwtnklssqshzpss 284 + 12-13 z: fczzpzzzzzzkl 285 + 10-12 z: jshkxzzzrdzj 286 + 6-13 k: kkkkkkkkkkfkgkkkkkk 287 + 14-15 w: wcjjlzkpbspcwcw 288 + 2-5 n: npnnznk 289 + 5-15 b: cgqlmxzqmvqzbvb 290 + 13-15 r: rrrprrrrrrrrlrr 291 + 5-6 z: pgfzxw 292 + 4-17 x: xlgxwsxjxdxxhqhtcj 293 + 11-16 z: zzjhzzlzrzkzwzlzz 294 + 7-8 b: tltbbrbbbkb 295 + 2-14 k: pnkkqfxkkqkkmkkdkjkk 296 + 1-3 f: hjmvjfxvxtgh 297 + 6-8 w: xgrvwwswwxg 298 + 16-18 v: vwvvvvvvvvkvvmvvvtv 299 + 3-10 w: wwwwwwwwwwwww 300 + 2-4 w: zcwwqwtdwj 301 + 3-7 r: ttrrnwszwqsp 302 + 1-7 m: mjjqlgm 303 + 12-15 x: xxxxxxxxxxxlxxnxx 304 + 3-6 z: zzzzzjz 305 + 8-9 s: sssssssvs 306 + 5-7 w: wlwswwd 307 + 17-18 z: zzzdzzzzzzzzzzzzzx 308 + 5-7 j: dchcjfj 309 + 2-5 k: cqpkn 310 + 8-10 x: xxxnxxxxxtx 311 + 1-5 t: tttttttt 312 + 5-6 k: lkkphk 313 + 11-13 c: scdtdcghdmcttcc 314 + 2-5 h: hhhhhh 315 + 4-6 r: clrrrr 316 + 2-13 s: szsssssssssssssv 317 + 3-11 x: krxmwcznvwrlcx 318 + 7-8 m: cmmttmbm 319 + 3-4 c: pdwccbxwfvhcgrx 320 + 5-8 p: ppppvppq 321 + 12-19 l: llfllrllmwlmlllllll 322 + 11-15 p: psplppzglptmppp 323 + 6-14 m: mmvmmgmmmpmmmxm 324 + 5-6 j: jjctdzj 325 + 9-10 k: xnkzkkpplpkkkkk 326 + 10-14 t: crsttgdtzgfqtx 327 + 6-7 j: jbkpsjjjsrzf 328 + 1-4 v: vsvvvvm 329 + 4-5 f: lhbnfgqmbfltqrxzzx 330 + 12-13 q: qrjkxcwqqkdjmsxfnqmf 331 + 18-19 q: qqpqqxzqjnqqbhqkqqv 332 + 16-20 m: nzbmqjwbmmmnhmlmszbf 333 + 5-9 k: kkkkxskkkkk 334 + 1-2 x: txhxx 335 + 9-12 s: sssssssssssr 336 + 3-4 s: qsssssh 337 + 19-20 f: mfffmpfhhffwrlkffvff 338 + 3-15 b: bbpbbbbbbbbbbbbbb 339 + 8-9 h: fbcjphblh 340 + 6-9 p: ppppbnpppfppw 341 + 6-20 n: nsxzcgbcgqvjwfrgtnsr 342 + 5-7 s: cssdjdssr 343 + 3-4 g: gggwgg 344 + 1-6 s: hsspsss 345 + 2-5 z: zlgzb 346 + 5-8 l: jsljljtlpqhjl 347 + 3-10 n: mznwwnvhgbg 348 + 2-3 c: cckcc 349 + 1-10 r: rrpcbdrrrr 350 + 16-17 q: kqjxngwrpqlsqklnq 351 + 2-4 n: mnmnn 352 + 8-9 n: nnnnnnnsrnl 353 + 2-4 r: qrhlrvwpqsvktzcqms 354 + 6-9 v: vbqlvvvhqvqpv 355 + 2-8 b: kngrzdbb 356 + 10-13 d: dddddddddwdddd 357 + 2-6 z: czkzhzqdffh 358 + 8-19 n: kngnjnftdsrnhsnmznn 359 + 8-10 m: rngxfjlmmvtctp 360 + 16-17 k: dlkkxxkkkczkkkkkvs 361 + 3-17 n: wllsknnzckmmsjmqnxc 362 + 11-12 h: csrhwxwdnkhh 363 + 3-7 g: ggggggngg 364 + 1-14 s: sssssssssssssssdl 365 + 8-16 m: mmmmmmmkmmmmmmmpm 366 + 8-9 b: kdbqtknpncbbffd 367 + 14-15 z: zjzzszcgnzczszg 368 + 12-16 g: jdvgrmdczssgtwsq 369 + 2-6 n: lwlklnfxlhwdkn 370 + 1-5 c: bnfbdzc 371 + 14-15 b: bbbbbbbbjbbbbtb 372 + 2-5 v: vnvvvvv 373 + 14-17 s: ssssszssssssssshmsss 374 + 7-9 h: fhmhjkcrhbl 375 + 11-15 g: fwhjldbbprhngcjg 376 + 9-15 m: mdcbhmmjlmfmmtmcmm 377 + 10-13 j: jjjjsjjjjlwjsjjl 378 + 1-5 s: dsssssssssssssssss 379 + 5-15 r: rrxprrrrrrrzvhrrrrr 380 + 5-7 b: svnbkbb 381 + 2-4 w: kwwqws 382 + 13-20 q: slgmkqmkvlqqwjfdhqdq 383 + 8-12 l: llllllljlllkll 384 + 9-20 c: cccccccccccccccccccc 385 + 5-6 n: wlcnnh 386 + 1-4 w: lzwwv 387 + 8-9 h: hhphhhhhhhdhh 388 + 8-10 t: mnsnktzgrn 389 + 11-16 v: bjvcvfrkgkvzvvvxb 390 + 11-18 v: vvvvvvvvvvvvvvvvvxvv 391 + 11-14 l: llllkllllrlqll 392 + 5-11 q: zwlqcqqnnqq 393 + 5-11 p: pftpphptptphtskqp 394 + 4-12 p: pvpwpzppppppppdk 395 + 2-4 h: hhhqhh 396 + 6-12 l: jznsrcnxkllz 397 + 13-15 j: vdjkhxjptxzfjjm 398 + 4-5 t: vzhft 399 + 7-10 m: bmrmztmwxmms 400 + 5-7 h: hswmtbhcb 401 + 13-17 f: vmhffvvfjtffpllftff 402 + 11-16 w: wqntqwmzcwwvhwwsxwlh 403 + 2-4 r: wrbb 404 + 2-10 b: bbbbbbbbbb 405 + 1-11 m: mmmmmmmmmmmmmmmmmmhm 406 + 13-14 r: rrrrrrrrrrrrrwrrrr 407 + 3-6 n: vnsprwznfn 408 + 3-4 v: vvvz 409 + 2-11 p: ppxjqmffgtp 410 + 7-10 s: sslmsssssss 411 + 10-11 j: jjlsjjjjjfjjj 412 + 4-7 b: fbbhggbcmr 413 + 12-13 s: sssssssssssgxs 414 + 8-10 l: lpllllhlcnlllxl 415 + 3-4 l: ljxlml 416 + 2-14 f: ffffffwfffzfcnfffwrf 417 + 7-10 h: kwdcfptcchhhhhgz 418 + 2-9 j: jjjjjsmjzjqjjj 419 + 4-13 w: wwcwwwmrwwwgqwr 420 + 3-5 t: ttmtttt 421 + 5-13 d: whpdqwpvkzsxdmgtnz 422 + 13-14 x: xxtbcxxxwxxxxx 423 + 1-7 t: ttttttdthtttttttt 424 + 6-15 x: pxfnxbnmpxgmwzxkv 425 + 2-11 m: kmcmjlddbwm 426 + 9-14 d: dddddddddddddldd 427 + 6-9 x: nxvkxvxxx 428 + 18-19 x: xsxxxrdxbkjmbdvfrrx 429 + 12-13 j: jnjjjgjjqrjjs 430 + 14-16 r: rrrrrmrrrrqrrxrvrvr 431 + 5-9 h: hhvvhmzjn 432 + 5-6 w: wwgfzt 433 + 10-13 v: vvvvvsvvvtvvxvvrvvv 434 + 2-4 h: hwhh 435 + 4-8 s: ssssssshss 436 + 5-12 n: nnnnnnnnnnncn 437 + 2-3 x: bxxmxcdzlj 438 + 14-16 x: chpxcprsxhxvkxzc 439 + 7-9 b: bbbbbbbbbb 440 + 10-11 x: xxskpxtfhxd 441 + 5-7 w: zwwwrww 442 + 1-8 l: splxkhxw 443 + 8-9 q: llcbqltqh 444 + 2-3 k: kkcckxm 445 + 6-11 c: ccccsccccccccccccccc 446 + 6-14 k: xkbbnkknkttqpb 447 + 12-16 d: dcddddrddnddvprsd 448 + 1-3 p: bpplj 449 + 4-6 n: nntbnpn 450 + 14-15 k: nwcckxptkgrrbkd 451 + 12-14 d: dddddddddddddxd 452 + 1-11 v: vvvvjvvvvvvvvv 453 + 4-6 g: gtgbfg 454 + 5-8 h: hhhhdhhhhhhh 455 + 13-15 n: nwnnpnftnbnknqn 456 + 3-4 m: mpfqmj 457 + 3-6 t: ttmtct 458 + 2-4 s: sssss 459 + 10-16 v: vvszvvgvvvvvvvvcv 460 + 11-13 t: stvdjtwjzftrtprpb 461 + 5-6 p: pppptp 462 + 12-15 d: ddtdjdddxdhxzdcd 463 + 12-16 b: bbbbbbbbbbbxbbbbb 464 + 12-14 n: qnnnnnnnnzlnnnn 465 + 9-11 v: sqkrmzjqvvv 466 + 2-5 d: cdpfdtjdkn 467 + 7-8 p: pppptppppp 468 + 2-4 s: ssszsss 469 + 13-15 d: cpdwdbvqxcffdrd 470 + 4-5 j: hbjjpppm 471 + 5-8 g: gvgmgjgrzz 472 + 6-7 s: sssssqn 473 + 1-11 p: tpstkbpmtbpg 474 + 17-18 m: zmmmsrsrgfpggmmmlgk 475 + 2-3 f: ffkhf 476 + 2-5 f: ftfff 477 + 2-10 m: gqxlmphwcmfc 478 + 6-8 v: bvgwwbvlvvvlrvv 479 + 13-14 n: nnnnnnnnnnnnnxn 480 + 2-7 f: ffffffff 481 + 9-10 x: xxxxxxxxxd 482 + 1-7 s: mssssdsksssdsssz 483 + 11-15 t: jtttttltmttgttthz 484 + 5-12 j: jqjjjjfndzjdjjjjjjjn 485 + 9-13 r: rrrrrrrrrrrrj 486 + 5-9 x: xxjxpcqxxcxznn 487 + 2-9 c: psdddswdcpd 488 + 4-10 f: fsffxffffmr 489 + 7-12 j: jxvjjjrjjhjfc 490 + 4-5 q: bqqhj 491 + 1-4 f: fwbclqb 492 + 1-2 k: skqk 493 + 9-11 b: bbbzbkbbhbb 494 + 1-2 g: nggv 495 + 3-7 m: mmfmmmpm 496 + 2-3 m: vpmr 497 + 7-10 d: ddddddjddm 498 + 2-15 t: hgvsftrbzglvmpwhsmp 499 + 1-5 t: qtttt 500 + 11-13 p: pppppppppppphp 501 + 4-5 p: cvqpzvpppfh 502 + 2-3 f: bbftxfnmb 503 + 2-3 r: rlrr 504 + 1-4 m: mvms 505 + 3-14 m: gfmprfxpvzhmhm 506 + 2-8 j: jdsjjlfl 507 + 8-12 k: kkkkskkvkkkkk 508 + 1-7 p: hpfpmpwp 509 + 5-8 x: xxxxxxxhxxxxxx 510 + 3-10 p: mmctgfppppxplpplppj 511 + 3-4 p: zfmpjbhwppk 512 + 13-16 z: zzzzzzzzzzzzvzzzz 513 + 1-3 d: djddd 514 + 2-7 p: nmplwdp 515 + 7-9 l: lglllllll 516 + 7-8 p: ptvsnpcp 517 + 9-10 m: rjnmxthbmg 518 + 5-6 j: jjccjv 519 + 6-8 t: tvcztdttxzkp 520 + 8-12 p: kmrpqdnppskj 521 + 6-8 j: lsjkhjjhbgj 522 + 11-12 x: hxxxlxmxxxtrxxxxk 523 + 3-6 p: pppppcgtpxpppplp 524 + 8-10 s: nphsvswsrssxmdh 525 + 10-11 p: pppcpptppkp 526 + 14-15 z: zzzzzzzzzzzzzcz 527 + 14-18 f: mffngzbffffznctfff 528 + 6-7 t: tttthhtttq 529 + 12-19 l: shqlqnkzwpplqjrwjcv 530 + 1-4 k: khkx 531 + 9-11 d: ddddddddpdrdddd 532 + 3-4 s: mvsssc 533 + 6-7 h: hhhhhhphh 534 + 8-14 v: vvrvsvwrwmpvlv 535 + 2-6 z: zxjvsn 536 + 9-12 f: ffffffffpfftf 537 + 2-5 s: lssmjh 538 + 11-14 k: kkwkkfkbpnjkbkk 539 + 4-15 x: ppcxmjmxvbrkxlqcthx 540 + 1-2 g: bpggz 541 + 3-5 x: vxjxxxnztm 542 + 7-8 r: rrrrrrrhr 543 + 8-13 n: nnblnxnnrmnnq 544 + 1-4 w: wwtxwwwjwwwwdwl 545 + 1-10 d: cddddddwfhdrdddqnd 546 + 1-8 j: jxmjjjrv 547 + 4-7 x: xfxxxxn 548 + 16-18 v: vvvvvvvvvvvvvvvvvvv 549 + 3-5 h: hhhhhh 550 + 9-11 z: zzztvzzhgzr 551 + 3-5 w: fcjwwjwwv 552 + 6-7 z: hszgzsl 553 + 3-9 l: fldswlflrll 554 + 10-11 n: fqbxpfncbln 555 + 7-14 m: jftmkxqhrmmcqmk 556 + 8-9 h: hhqqhkhmh 557 + 3-5 l: lnlqlhdjtd 558 + 4-11 x: lqjxqzlfsfhzjqqnttp 559 + 4-6 c: fccctcc 560 + 8-11 c: cccccccccckcr 561 + 2-3 k: jkxtkjhnkksksrrzhfkk 562 + 7-9 m: nmmmmmmkmrmmdjjms 563 + 5-12 m: mmmmprmsmbmmmm 564 + 1-2 l: lllll 565 + 3-7 m: gmmtchm 566 + 11-16 t: vddbsztmpttvsktp 567 + 9-13 f: ffffffffffffffffff 568 + 3-8 j: hjhldbcznnsx 569 + 5-7 v: vrfpvswbmbvvzv 570 + 6-15 z: bhlvbzvnlntzzzz 571 + 4-6 x: xzjrxcx 572 + 3-4 q: qqsw 573 + 5-6 r: rrrlrrrrrr 574 + 1-7 b: qbbbbbxbbb 575 + 6-7 b: bfbbjdd 576 + 4-11 f: lfrffpfgzqs 577 + 3-5 c: qccncmjgrczzmcz 578 + 9-15 x: vxxxxxnxxxxxxxxrxxxj 579 + 1-2 s: ssnls 580 + 5-9 z: zzpzzzzzszzzzzz 581 + 5-16 z: pzgzxgpwqmzwwlzz 582 + 6-7 c: ccqxccn 583 + 5-6 b: ngmbbs 584 + 2-19 d: cdmnqfjfxgtdwlrnhcd 585 + 9-12 p: thcvkgpcxptpxpp 586 + 3-6 g: sbstjvnhfgdr 587 + 1-18 f: fsffffffffffffffffff 588 + 2-16 f: rfxzxrjpbvfzcftf 589 + 13-14 v: rvxvvnsfcvvvrvvvqg 590 + 4-10 d: tqlddkdpdv 591 + 12-13 r: rrrrrrrrhrwrjdrlnr 592 + 5-6 x: xxvxgnxxxx 593 + 3-4 d: sddd 594 + 5-11 p: jphgprgjjpp 595 + 1-7 f: fjgfdvb 596 + 3-8 x: rpxvndgxx 597 + 1-17 b: jbbrxbbbtxjbrpbbb 598 + 7-10 h: bhhbzmdrkhhvhjx 599 + 1-5 v: fzdgv 600 + 5-7 f: vfdffftffffhflw 601 + 2-20 c: mcbhcvvxwxfvxqlgxpdc 602 + 5-8 w: vwktjwdsccgj 603 + 3-4 d: nntd 604 + 1-7 n: nnncmhnkgqn 605 + 2-6 r: bdvvbrr 606 + 1-15 b: bbbzwbbbbkbgkbp 607 + 3-8 f: slfvsmvftsstff 608 + 3-4 z: pvzzggdnhwzjzgp 609 + 8-9 n: nnnnvnnfn 610 + 4-10 n: nnnlnngnncnn 611 + 8-10 l: vktfwjrmslbh 612 + 3-6 n: nflmqn 613 + 4-5 s: svggkxz 614 + 3-4 w: wwjt 615 + 5-6 t: nbbbdt 616 + 3-8 d: jrjkdghxqwq 617 + 7-8 q: qqqqqqgq 618 + 7-8 k: qxgnkvckpkchqnmxb 619 + 1-5 v: vvvvvv 620 + 6-16 s: stmjwhvrrkfgrsxs 621 + 3-4 s: sdrswqnsjrnhrlds 622 + 12-15 r: rgdrrrrrrrrrrrgtg 623 + 12-14 g: gggggggggggjgggggggg 624 + 1-7 h: phhhhhdnhj 625 + 3-4 v: tknvv 626 + 10-11 j: jjbvjjxjjjjj 627 + 2-5 c: bcbff 628 + 7-11 r: rrrrrrxrrrdrrrrr 629 + 13-16 p: ppppppppppppdppr 630 + 14-16 t: tttttttvtttttttwttt 631 + 3-6 c: hclhccxhmxtjcbmjc 632 + 1-2 x: gxxxxx 633 + 2-3 w: wrwcqt 634 + 2-6 g: gmblggxgg 635 + 1-4 l: lllxpkml 636 + 1-2 d: mdddddd 637 + 4-8 q: qqqxqqqqq 638 + 3-4 v: mwvfvlqvv 639 + 3-6 w: wswwgc 640 + 2-4 d: bdfd 641 + 17-19 l: llllsldlbllllnlllzr 642 + 10-18 j: tjhgvshtbqjtcfcvlr 643 + 4-9 t: ttttttttttfttttttt 644 + 8-9 g: ngsggnbgqgtgglnjgcg 645 + 9-10 d: dddhdddvgbdbd 646 + 8-9 g: gtggvpgmq 647 + 11-15 j: jjqkjsmjkgfvjns 648 + 6-9 t: tqthttvtnttttttg 649 + 1-7 j: sjjjjjjjjjjjjjj 650 + 15-16 g: gggggggzgghgggqd 651 + 10-16 n: nnnnnjnnngnnnnnnnn 652 + 1-6 p: pppppppp 653 + 1-2 k: kdkk 654 + 1-2 b: bjvzqrgbhmgm 655 + 2-4 x: xvxxx 656 + 1-5 j: zjjjjjjj 657 + 2-5 f: lfnpwfz 658 + 1-12 j: hjjjjjjjjjjj 659 + 7-10 l: lllllqhlllllmmlpllll 660 + 11-12 m: mmmnmnmmmmmmmm 661 + 6-8 z: dzzzzfzzpz 662 + 14-15 c: cshjrbzhmmpckcwf 663 + 3-5 q: qqqqz 664 + 11-12 z: zzzzdzczzkprvztzfrdd 665 + 4-5 t: ttstbt 666 + 14-15 k: kkkkkkqkkkkkksr 667 + 1-12 j: jjjjjjjjjjjwgcjzj 668 + 2-3 k: rhkhkkg 669 + 1-16 z: zrzzzzkkhzzflzzzlzzq 670 + 12-13 h: hhhhhhhhhthgjhh 671 + 1-5 j: qqjjczwttz 672 + 11-12 h: hhhhhhhhhhmk 673 + 1-3 p: qpspbpjfq 674 + 1-3 f: ffzf 675 + 11-16 f: qdfmgnfnfvffflfhff 676 + 12-14 b: btwsgnvvljknbbdf 677 + 7-15 b: wdrgltbgdqscbhh 678 + 3-13 j: vwjpjjwjtcpjk 679 + 2-4 l: clxdsfqfdvkfhcgdswl 680 + 9-13 m: mmmmmmgmmpnmmmzmmk 681 + 4-5 x: hxxxx 682 + 1-4 b: bbbb 683 + 4-5 r: rrrrwfrv 684 + 6-9 n: nnnnnnnnsn 685 + 4-7 m: mvmmmmdmm 686 + 4-12 t: ttttttjtttttjttttt 687 + 1-3 c: bccc 688 + 2-3 m: mmcxbw 689 + 1-4 r: rrrrrr 690 + 8-10 l: lllllllplllllllll 691 + 18-19 h: hbhjdhhnnhfshkhhhgh 692 + 6-8 h: hfhwhwph 693 + 1-4 z: cfmz 694 + 2-3 m: vtmmznmvmrs 695 + 7-8 l: llhlwzlmjll 696 + 1-2 m: mmskncxdc 697 + 1-4 d: ndddd 698 + 1-3 m: mmgmmm 699 + 14-15 r: nzrgmcrrgmrxlbr 700 + 2-13 h: htkhhhhhhqhhlhhhkh 701 + 2-4 w: wkwsw 702 + 3-4 w: wmwr 703 + 2-9 v: kdzkhvnkv 704 + 8-9 t: wltttttkbktftk 705 + 9-14 n: vnhdtndfnsncpnf 706 + 3-10 n: jfnwcngtdz 707 + 13-15 j: nqzdlvnvvgnmhjj 708 + 1-12 q: qqqqqqqqqqqqq 709 + 10-12 c: cccdcmscbhcqccc 710 + 1-3 w: bzwwgg 711 + 2-14 d: pdkrpmxxzgcvqkzvvzqd 712 + 6-11 t: tfqvhtbmdztsnwnt 713 + 5-9 l: xllmllvjdds 714 + 6-14 h: pkhthnhxhhhjnscb 715 + 5-7 m: mmmmrmmm 716 + 8-10 x: xxxxxxxwxkxxx 717 + 4-5 k: lmkkkkkskg 718 + 1-2 d: dtdd 719 + 5-7 f: frfwsfr 720 + 4-5 w: rclww 721 + 4-5 g: gkkmtnlhbkgb 722 + 4-6 q: qqqfqqq 723 + 3-4 d: ddjb 724 + 11-13 n: nnnnnnnnnnnnnnnn 725 + 4-6 f: jvkxcffdgd 726 + 3-4 g: ktsgxzn 727 + 14-15 g: gggggggggggggggg 728 + 2-3 n: nqnnn 729 + 2-12 k: kbkpppkrkkjkkkk 730 + 5-7 c: ccccbcccc 731 + 9-10 l: plmrklsclx 732 + 4-11 m: mmmtmmmmmmqlm 733 + 6-7 b: bbbbbbq 734 + 7-9 g: kcgggklzg 735 + 3-6 p: ptxpppppppppppp 736 + 2-4 s: swsss 737 + 7-10 c: cccccccccpcc 738 + 5-7 d: dbddlddddcsdd 739 + 6-7 k: kkkkkkk 740 + 2-4 h: hwnvcj 741 + 1-9 g: nggggggggg 742 + 9-19 b: dzzpzvgwbdbmthmzfbhb 743 + 1-6 v: vrclmqxpvkhbvrfdmc 744 + 4-7 k: sgwktwtttmktrfjzn 745 + 13-16 x: whxxxxxxxxxxxxxsxx 746 + 4-9 z: zzzpzzzzzz 747 + 7-9 t: mwvtbhtxt 748 + 2-3 j: jfjdj 749 + 3-9 t: nrkffvgmtdstkkhtfpn 750 + 3-4 g: ggggxxdjsgrbf 751 + 4-10 x: kgbxbqnqmc 752 + 7-10 t: ztndqctmtttthxkwtlm 753 + 8-12 h: fbvccdshdvhhh 754 + 9-12 f: ffffsfffffjd 755 + 1-3 q: qkqqrvmmkh 756 + 13-14 r: rrrqrrrrrrrrrrrrrrr 757 + 2-3 g: bmdgkz 758 + 6-7 k: kkkkkkjk 759 + 4-9 q: qgzrflqqqd 760 + 12-13 s: brsswsfsvsfssps 761 + 5-9 q: drjcqnmwqbncmqqvcjgh 762 + 7-9 x: xxpxxgzxxxnx 763 + 2-13 s: ssdsssssjshsjsjswn 764 + 1-11 m: fmmmmmmmmsmmmh 765 + 3-8 f: zffrqqhflhvl 766 + 4-11 l: lqfwlxlllnl 767 + 12-16 k: kkkkkkkkkkkdkkkgkkkk 768 + 1-5 s: sssslss 769 + 3-13 n: ntnnnnpnnlndsnn 770 + 13-16 f: nzpfvhfrxpxjfmcfff 771 + 2-3 f: ffbf 772 + 3-7 r: nxrrrqrqnrrlbj 773 + 1-10 p: mppptppppcpppppppd 774 + 9-11 l: ftmflbbljjf 775 + 6-8 r: rrrrrlrrrr 776 + 10-16 k: zqknmwppdtckmpgk 777 + 10-13 t: dpqxttttttttb 778 + 2-4 f: ftff 779 + 9-14 k: krkkkqkkkkdkkrn 780 + 12-17 b: mbxbczbbbbdbbbbbpbnb 781 + 8-9 j: bjjjjjjjqjvxjfjjjjjj 782 + 1-3 s: lspsh 783 + 2-7 p: zpqlvwpmdp 784 + 6-8 q: qqqqqqqtqq 785 + 15-16 z: cxzmdcdzckrhzxzz 786 + 13-17 v: vvvvvvvvvvvvvvvvzv 787 + 6-8 c: ctcccccc 788 + 6-7 v: xjzvvfvjmnrvtvncjmdv 789 + 3-8 m: sqmfbqlm 790 + 3-9 p: bpqpxpfpzqpjjgv 791 + 8-10 n: clxnnnxvnnxnnnnnn 792 + 8-9 m: mmmmmmmmm 793 + 2-6 s: scssss 794 + 9-10 t: xtttttttftttt 795 + 3-5 c: rksck 796 + 16-17 h: ldhchxlhphlnmhvhh 797 + 3-6 b: bnbvlb 798 + 4-5 j: mjjjx 799 + 2-4 j: sklkmtrjpgprqdn 800 + 3-8 l: nllnlnll 801 + 1-6 g: jgbgpt 802 + 14-17 d: cqddcfsjddddxlcdd 803 + 4-6 h: qcqhwc 804 + 6-14 j: fzrkcjrqjssjdjjjjj 805 + 3-4 j: jdfj 806 + 1-3 k: fkpkkkck 807 + 11-12 w: wwwwbwwwwwfg 808 + 6-7 g: wngnhsg 809 + 4-13 d: bddjdddddddddpdddddd 810 + 7-8 k: kmkfkkkp 811 + 5-9 b: btmlgzbbdb 812 + 4-7 j: dxlzwsjdbjcqjsnwq 813 + 9-13 p: pppppmfhpptppp 814 + 16-17 v: vvvvvvvvvvvvvvvxn 815 + 1-7 m: mmmmmmtmm 816 + 1-8 v: vvvvvvvbv 817 + 9-15 t: tttttttttttttttt 818 + 15-17 r: rwrqrrhdrtvrfszrj 819 + 4-9 m: mfddknmcmqhglr 820 + 7-10 k: kkkkkkkkpkklkk 821 + 18-19 c: hpqwwkgtqbrcjxptwnc 822 + 2-3 p: xwppdp 823 + 5-11 r: vnrhrmknrrr 824 + 10-15 f: ffmfffffcfftfdfff 825 + 10-13 m: mmtsmmmmmmmmhmm 826 + 4-16 j: pjlplfvtgrjhvcdjjdmb 827 + 8-14 v: kxrjvdbbmxvrzdp 828 + 6-7 w: wwwwwwgwww 829 + 9-16 f: hhkvlfrvfvpvlzvcfsg 830 + 1-3 k: kkbk 831 + 9-12 d: ddddddddtdddd 832 + 13-16 w: wwwgwwwwwwwxwwwwwww 833 + 4-5 t: swtttpkkpwdt 834 + 5-7 z: zzfzzzp 835 + 1-5 g: grghg 836 + 3-4 n: wjsnnnwsxrx 837 + 8-10 x: xxxxxxpqxc 838 + 4-13 t: tttbtttttttttttt 839 + 1-3 w: wswwn 840 + 1-6 d: dddtddddd 841 + 12-13 x: xxflxxpxxxxxwgrxxx 842 + 1-2 m: mxghmm 843 + 6-11 j: jjjjjjjjjjxj 844 + 1-3 n: nnfnnnnnnnn 845 + 7-11 w: wxwwwwpwwwww 846 + 1-2 q: nqmqfxql 847 + 9-12 m: mmmmvmnmfmmp 848 + 5-7 m: mmmmmmms 849 + 3-4 s: ssqsssssssj 850 + 6-9 c: ccvcmnccccl 851 + 1-17 b: gbbbbbbbbbbbbbbbqbb 852 + 7-10 q: vqqqqxqqql 853 + 9-12 v: vzvvnvtblzrq 854 + 7-8 q: qqqqqqqs 855 + 4-8 q: qtzqcgbqwq 856 + 7-9 c: ccncdmxsccchcxxj 857 + 3-6 q: qqqjlqqxcqdkzqqj 858 + 3-4 k: qckk 859 + 10-12 c: cccccccccccc 860 + 10-18 g: gggggggggggggbgkggn 861 + 2-3 w: wwww 862 + 1-4 k: kkglkqkgzbn 863 + 6-7 l: lklksztlzllllp 864 + 8-10 x: xxxxltxwxnxdvcg 865 + 1-5 w: tvmjw 866 + 3-9 z: hvqqhmpzz 867 + 6-8 x: qzxxdxnxmlgp 868 + 13-17 s: ssssqsssssssjssssxs 869 + 2-8 f: qfhnhfzc 870 + 3-4 v: vvbv 871 + 4-6 j: jjjmjj 872 + 3-4 q: lqqd 873 + 12-14 j: jjjjmjjjjjjcjjjj 874 + 6-9 c: whjbsclch 875 + 14-15 j: jgjjcjkljjmfpjqjjjk 876 + 2-3 z: jbzt 877 + 12-13 b: bbbbbbbbbbbqj 878 + 3-9 s: jhcsgnsscs 879 + 6-8 h: hhhlhlhf 880 + 3-4 j: jmjjcwjpj 881 + 10-11 c: cccccccccdcccccc 882 + 11-12 w: wswwwwwwvwww 883 + 17-18 k: rmzbkcsxrmdwkksstk 884 + 7-8 h: hhhhhthh 885 + 1-2 n: nnqcqlxdsc 886 + 4-11 l: llllllllldlql 887 + 14-20 h: hhhhhhhhhhhhhhhhhhhh 888 + 4-8 r: bhwrrrrrrgrwcmr 889 + 5-16 m: lmdbtwhnzszltgjmhfcb 890 + 4-12 m: mmmvmmmmmmmmm 891 + 1-5 t: qtwnztcftsqjh 892 + 4-12 s: ssdszsssssvslx 893 + 16-18 w: wwwwwwwwwwwwwwwrwq 894 + 7-8 t: ttttttttt 895 + 8-10 r: mxrrrrrrrc 896 + 10-12 g: gggggtpghggsgvcdpjlg 897 + 7-13 q: qlqqpqdqqqqqnqqqq 898 + 7-9 z: zzzzzgzzd 899 + 13-16 c: ccccccccccccxccb 900 + 4-9 l: jbsssqpjl 901 + 7-12 s: sslsssdksnsssqmrsc 902 + 9-14 w: cwqsssmkbgwmqzrw 903 + 1-5 v: vljdvzqvgjhcgbn 904 + 4-7 w: nxqxgww 905 + 7-9 w: wwwtwlwqxwww 906 + 14-18 q: qwncqqqjmmlzqqqqnq 907 + 2-8 g: ggggggggg 908 + 5-6 g: ggpgkgg 909 + 12-13 r: rrrrrrrrrrrph 910 + 14-15 c: cswccccccvccmcs 911 + 11-15 p: jppxbqzcdzppxjv 912 + 6-9 f: fffnfffdcc 913 + 7-10 x: xnrdxxtwxx 914 + 2-6 s: gdshsbcsssss 915 + 5-9 d: dwtcdddffsdzdzcvbdd 916 + 2-3 l: kqlfjqj 917 + 7-9 s: tmsklsfsp 918 + 2-4 c: lkbck 919 + 2-9 x: jtxslmdpxpkqfjjb 920 + 18-19 v: vvvvvvvvvvvvvvvvvmd 921 + 9-10 x: zgxdjvxqxgxkcm 922 + 11-12 d: dddqddddddvdddd 923 + 1-4 d: ddlvd 924 + 2-4 t: tztfwtjwt 925 + 5-6 j: gjjsfjgvjjcwzjm 926 + 8-11 g: kvsqgmqgdmgxdpg 927 + 6-11 b: bpjbfrrpbvb 928 + 1-10 j: tmjjjjjjbjcjjjjjj 929 + 14-18 t: tttttttttttttttttttt 930 + 11-12 r: rjjvggmpwvrhn 931 + 10-12 t: tttttttttctttt 932 + 1-8 s: lbssjsssgsss 933 + 4-12 h: pchchhtthdhhch 934 + 7-8 m: mhrpkbmdmj 935 + 5-6 f: sffdsf 936 + 4-7 z: zzzkzzkzzzz 937 + 1-5 c: nccjw 938 + 1-2 l: wsgllckll 939 + 1-9 k: mwvhwgvfkvmpwnntjbk 940 + 1-6 v: vvvvvvvvvvv 941 + 2-8 m: ttzhlrrmbt 942 + 3-4 x: xqklgxxx 943 + 12-13 v: rvvvvvvvfvvmvv 944 + 6-13 n: nnnnnnnnnnnnnn 945 + 5-6 s: bpnsssj 946 + 3-9 q: xtddtwfcstjrqbslmjsz 947 + 8-9 g: xxkxxgzgg 948 + 1-12 w: gwwwwwwwwwwtw 949 + 4-5 p: pppppp 950 + 1-2 x: jpxvxxxxxnmkx 951 + 3-4 n: ddnn 952 + 5-6 t: ztkmttmb 953 + 2-5 j: rrcjj 954 + 2-5 s: lccgw 955 + 5-6 f: fffflfff 956 + 3-4 h: ptbh 957 + 2-3 s: sssgm 958 + 6-8 g: gggggpggg 959 + 3-4 d: qrll 960 + 8-15 b: zbxpbbbbbbhbbbpbp 961 + 2-3 r: rrrr 962 + 13-15 c: cdccqkcvckcccvc 963 + 10-15 z: hxctzzvzzzzbfzz 964 + 3-4 q: qwtqqncqcdxq 965 + 1-6 l: jlllsl 966 + 5-6 g: ggggbxggggrggggg 967 + 4-6 m: mmmsmdmpmmmm 968 + 5-9 d: ddddddqdgddd 969 + 2-19 d: dxdddddddddddddddddd 970 + 8-9 z: zzzzztzpzqzzdh 971 + 7-12 j: jjfjsmsxjwjjvtcbjb 972 + 2-10 l: dxkrwjbvlsgpzcmk 973 + 13-14 h: hhhhrqlhhhhhhhh 974 + 2-8 v: jvvvvvvjv 975 + 13-14 q: qqjqqqfjqqqqqz 976 + 5-12 d: pllddwcgctfbkfx 977 + 17-18 f: ffffffffffffffffmjff 978 + 7-17 w: sqmbczwtwpwkhngtw 979 + 15-17 l: lllllllllllzllplllll 980 + 5-8 c: cccqfccccccc 981 + 8-14 k: xnjcftlkvhkmkr 982 + 4-5 q: qqqqqj 983 + 8-11 m: wzxcmwgmmvmgq 984 + 11-15 h: hnhtnhnhhkghhzhh 985 + 11-13 g: rgdgqgvmqjggg 986 + 8-13 v: mtjkbnvvvhvvv 987 + 4-5 v: vcvhv 988 + 5-12 w: fqvwnzcwlntwpcwf 989 + 1-15 j: jjjjjjjzjjjjspwj 990 + 2-4 x: jmrxxkpncwdcftw 991 + 1-2 b: gbbqbf 992 + 8-11 k: kxkkkkzpkkzkkm 993 + 1-4 v: mpqp 994 + 6-7 p: lxdptfp 995 + 3-4 s: sxss 996 + 16-18 d: gxzglqmddffqxqvppr 997 + 4-6 f: fffmfff 998 + 13-16 m: zfmcnzxfvmcmqmhcctv 999 + 1-8 n: nnnnnnnm 1000 + 8-9 v: vvvvvvvvvg
+37
2020/2/solution.exs
··· 1 + defmodule Solution do 2 + def read(path) do 3 + path 4 + |> File.stream!() 5 + |> Enum.map(&String.trim/1) 6 + |> Enum.map(&parse/1) 7 + end 8 + 9 + defp parse(input) do 10 + [spec, pass] = String.split(input, ": ", parts: 2) 11 + [range, <<char>>] = String.split(spec, " ", parts: 2) 12 + [min, max] = 13 + range 14 + |> String.split("-", parts: 2) 15 + |> Enum.map(&String.to_integer/1) 16 + 17 + {min..max, char, pass} 18 + end 19 + 20 + def validate_1({range, char, pass}) do 21 + count = for <<^char <- pass>>, reduce: 0, do: (n -> n + 1) 22 + 23 + count in range 24 + end 25 + 26 + def validate_2({a..b, char, pass}) do 27 + <<char_1>> = binary_part(pass, a - 1, 1) 28 + <<char_2>> = binary_part(pass, b - 1, 1) 29 + 30 + char_1 != char_2 and char in [char_1, char_2] 31 + end 32 + end 33 + 34 + data = Solution.read("2/input.txt") 35 + 36 + IO.inspect(Enum.count(data, &Solution.validate_1/1), label: "task 1") 37 + IO.inspect(Enum.count(data, &Solution.validate_2/1), label: "task 2")
+38 -11
2021/day01.livemd
··· 4 4 5 5 # Day 1 6 6 7 + ```elixir 8 + Mix.install([ 9 + {:kino_aoc, ">= 0.0.0"} 10 + ]) 11 + ``` 12 + 7 13 ## Load input 8 14 15 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"1","session_secret":"ADVENT_OF_CODE_SESSION","year":"2021"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 16 + 17 + ```elixir 18 + {:ok, puzzle_input} = 19 + KinoAOC.download_puzzle("2021", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 20 + ``` 21 + 22 + <!-- livebook:{"output":true} --> 23 + 24 + ``` 25 + {:ok, 26 + "173\n178\n179\n187\n196\n199\n200\n201\n210\n209\n210\n211\n221\n223\n235\n236\n237\n238\n242\n249\n247\n246\n256\n257\n258\n257\n258\n265\n293\n303\n304\n317\n322\n330\n336\n337\n340\n339\n350\n351\n352\n353\n349\n353\n342\n339\n341\n342\n348\n349\n350\n355\n362\n392\n388\n393\n404\n402\n401\n402\n405\n410\n411\n424\n425\n432\n434\n433\n435\n441\n420\n439\n461\n463\n464\n468\n469\n473\n485\n494\n493\n489\n490\n491\n497\n490\n491\n493\n519\n520\n553\n554\n560\n565\n574\n586\n599\n600\n601\n604\n578\n574\n578\n597\n598\n597\n607\n606\n608\n616\n613\n615\n618\n617\n619\n626\n638\n639\n650\n682\n686\n693\n696\n709\n715\n745\n747\n750\n751\n753\n760\n763\n764\n772\n776\n779\n791\n794\n795\n800\n799\n808\n814\n825\n826\n831\n830\n837\n853\n854\n863\n872\n873\n881\n885\n895\n896\n897\n895\n905\n909\n912\n916\n921\n919\n927\n929\n935\n936\n937\n948\n947\n948\n922\n926\n932\n931\n938\n958\n975\n977\n982\n985\n986\n987\n988\n1007\n1005\n1007\n1008\n1010\n1013\n1015\n1016\n1019\n1025\n1026\n1027\n1029\n1039\n1047\n1054\n1055\n1063\n1066\n1087\n1095\n1096\n1097\n1093\n1114\n1123\n1131\n1137\n1142\n1140\n1154\n1157\n1158\n1159\n1160\n1170\n1174\n1182\n1184\n1191\n1200\n1211\n1214\n1231\n1241\n1250\n1246\n1260\n1287\n1311\n1313\n1318\n1327\n1325\n1324\n1325\n1326\n1339\n1350\n1355\n1358\n1368\n1380\n1422\n1423\n1442\n1466\n1450\n1451\n1457\n1464\n1474\n1490\n1494\n1507\n1508\n1509\n1511\n1524\n1521\n1528\n1529\n1533\n1538\n1542\n1544\n1543\n1560\n1579\n1585\n1589\n1591\n1598\n1599\n1600\n1610\n1614\n1615\n1629\n1624\n1629\n1632\n1627\n1641\n1638\n1639\n1641\n1644\n1645\n1646\n1647\n1659\n1661\n1658\n1661\n1664\n1665\n1669\n1671\n1673\n1674\n1675\n1672\n1677\n1687\n1688\n1696\n1697\n1711\n1715\n1720\n1721\n1724\n1725\n1726\n1731\n1740\n1737\n1746\n1745\n1758\n1760\n1758\n1771\n1777\n1773\n1777\n1778\n1788\n1794\n1804\n1809\n1814\n1837\n1839\n1838\n1837\n1842\n1851\n1857\n1843\n1844\n1845\n1860\n1863\n1888\n1887\n1888\n1889\n1897\n1895\n1903\n1906\n1907\n1913\n1917\n1916\n1917\n1926\n1927\n1935\n1933\n1934\n1939\n1940\n1942\n1944\n1941\n1946\n1967\n1969\n1975\n1976\n1979\n1981\n1982\n1987\n1981\n1982\n1981\n1982\n1992\n2027\n2028\n2029\n2036\n2037\n2038\n2042\n2044\n2048\n2047\n2054\n2055\n2062\n2065\n2066\n2091\n2103\n2093\n2094\n2089\n2091\n2093\n2098\n2108\n2086\n2087\n2118\n2123\n2127\n2132\n2148\n2149\n2147\n2148\n2149\n2150\n2152\n2151\n2152\n2149\n2156\n2167\n2177\n2179\n2180\n2159\n2167\n2158\n2156\n2174\n2169\n2170\n2180\n2183\n2187\n2191\n2192\n2200\n2202\n2206\n2240\n2251\n2247\n2259\n2273\n2274\n2276\n2255\n2256\n2263\n2265\n2269\n2270\n2272\n2273\n2275\n2276\n2281\n2290\n2292\n2293\n2287\n2291\n2289\n2287\n2290\n2306\n2307\n2310\n2315\n2329\n2337\n2370\n2375\n2373\n2376\n2362\n2397\n2400\n2401\n2419\n2429\n2435\n2438\n2450\n2451\n2481\n2482\n2487\n2491\n2492\n2496\n2501\n2502\n2499\n2501\n2467\n2469\n2468\n2470\n2473\n2480\n2481\n2488\n2500\n2506\n2509\n2512\n2513\n2515\n2516\n2512\n2506\n2511\n2513\n2514\n2519\n2547\n2580\n2584\n2585\n2582\n2599\n2600\n2599\n2600\n2599\n2600\n2613\n2612\n2610\n2612\n2608\n2615\n2622\n2610\n2613\n2608\n2619\n2640\n2620\n2612\n2608\n2609\n2625\n2626\n2634\n2638\n2670\n2674\n2675\n2674\n2678\n2685\n2686\n2678\n2692\n2693\n2716\n2718\n2705\n2709\n2713\n2714\n2715\n2722\n2712\n2714\n2719\n2720\n2740\n2741\n2734\n2738\n2764\n2765\n2768\n2773\n2777\n2810\n2789\n2808\n2807\n2813\n2828\n2841\n2853\n2854\n2842\n2843\n2846\n2848\n2860\n2861\n2862\n2864\n2865\n2866\n2880\n2851\n2853\n2858\n2865\n2866\n2873\n2885\n2886\n2887\n2893\n2914\n2916\n2924\n2925\n2927\n2929\n2949\n2967\n2968\n2976\n2965\n2983\n2985\n2984\n2991\n2993\n3007\n3005\n3012\n3015\n3019\n3025\n3030\n3034\n3043\n3044\n3085\n3094\n3124\n3139\n3146\n3147\n3176\n3196\n3199\n3200\n3246\n3251\n3254\n3286\n3280\n3287\n3289\n3288\n3290\n3294\n3306\n3307\n3309\n3312\n3327\n3325\n3334\n3333\n3335\n3357\n3374\n3380\n3392\n3393\n3406\n3416\n3417\n3431\n3418\n3439\n3452\n3468\n3469\n3474\n3490\n3489\n3490\n3491\n3513\n3512\n3513\n3514\n3515\n3516\n3517\n3513\n3514\n3508\n3520\n3522\n3521\n3520\n3531\n3533\n3545\n3546\n3554\n3558\n3559\n3560\n3565\n3578\n3570\n3573\n3574\n3580\n3592\n3593\n3594\n3595\n3596\n3617\n3625\n3624\n3626\n3629\n3635\n3634\n3640\n3661\n3668\n3671\n3674\n3675\n3679\n3688\n3692\n3698\n3700\n3696\n3697\n3701\n3707\n3697\n3699\n3703\n3702\n3700\n3711\n3714\n3715\n3716\n3722\n3741\n3751\n3752\n3759\n3782\n3785\n3786\n3787\n3799\n3807\n3810\n3809\n3816\n3794\n3796\n3800\n3804\n3810\n3812\n3813\n3821\n3822\n3840\n3851\n3866\n3867\n3875\n3895\n3913\n3905\n3917\n3918\n3913\n3921\n3927\n3931\n3936\n3957\n3956\n3958\n3959\n3980\n3979\n3986\n3997\n3988\n3989\n3990\n3994\n3995\n3999\n3993\n4024\n4022\n4018\n4019\n4031\n4032\n4033\n4043\n4045\n4047\n4048\n4058\n4067\n4077\n4069\n4070\n4080\n4087\n4113\n4118\n4123\n4128\n4132\n4144\n4149\n4152\n4131\n4160\n4175\n4176\n4177\n4176\n4179\n4191\n4196\n4201\n4202\n4205\n4214\n4216\n4217\n4210\n4212\n4216\n4217\n4220\n4219\n4220\n42" <> ...} 27 + ``` 28 + 9 29 ```elixir 10 30 stream = 11 - File.stream!("day1.txt") 31 + puzzle_input 32 + |> String.split() 12 33 |> Stream.map(&String.to_integer(String.trim(&1))) 13 34 ``` 14 35 15 - ```output 36 + <!-- livebook:{"output":true} --> 37 + 38 + ``` 16 39 #Stream<[ 17 - enum: %File.Stream{ 18 - line_or_bytes: :line, 19 - modes: [:raw, :read_ahead, :binary], 20 - path: "day1.txt", 21 - raw: true 22 - }, 23 - funs: [#Function<47.58486609/1 in Stream.map/2>] 40 + enum: ["173", "178", "179", "187", "196", "199", "200", "201", "210", "209", "210", "211", "221", 41 + "223", "235", "236", "237", "238", "242", "249", "247", "246", "256", "257", "258", "257", "258", 42 + "265", "293", "303", "304", "317", "322", "330", "336", "337", "340", "339", "350", "351", "352", 43 + "353", "349", "353", "342", "339", "341", "342", "348", ...], 44 + funs: [#Function<48.53678557/1 in Stream.map/2>] 24 45 ]> 25 46 ``` 26 47 ··· 34 55 |> Enum.count(fn [a, b] -> a < b end) 35 56 ``` 36 57 37 - ```output 58 + <!-- livebook:{"output":true} --> 59 + 60 + ``` 38 61 1688 39 62 ``` 40 63 ··· 64 87 |> Enum.count(fn [a, _, _, b] -> a < b end) 65 88 ``` 66 89 67 - ```output 90 + <!-- livebook:{"output":true} --> 91 + 92 + ``` 68 93 1728 69 94 ``` 95 + 96 + <!-- livebook:{"offset":6811,"stamp":{"token":"XCP.FvhtdtxXYvRknZpAwd7ATOS4B7IljsyPdpscD9AizNpEm35rzHOr6FxLlc7D5RuBsoDcHmWO_rDJI7khm9nmL4U_ebmCGJuAd_tnVXrljSHKDRHzwzLMZ_v6kJy6nqkgIA","version":2}} -->
+12 -4
2021/day17.livemd
··· 24 24 [a: a, b: b] 25 25 ``` 26 26 27 - ```output 27 + <!-- livebook:{"output":true} --> 28 + 29 + ``` 28 30 target area: x=288..330, y=-96..-50 29 31 ``` 30 32 31 - ```output 33 + <!-- livebook:{"output":true} --> 34 + 35 + ``` 32 36 [a: %{x: 288, y: -96}, b: %{x: 330, y: -50}] 33 37 ``` 34 38 ··· 119 123 {v_y, v_y * (v_y + 1) / 2} 120 124 ``` 121 125 122 - ```output 126 + <!-- livebook:{"output":true} --> 127 + 128 + ``` 123 129 {95, 4560.0} 124 130 ``` 125 131 ··· 180 186 MapSet.size(pairs) 181 187 ``` 182 188 183 - ```output 189 + <!-- livebook:{"output":true} --> 190 + 191 + ``` 184 192 3344 185 193 ```
+15 -5
2021/day18.livemd
··· 12 12 |> Enum.map(&elem(Code.eval_string(&1), 0)) 13 13 ``` 14 14 15 - ```output 15 + <!-- livebook:{"output":true} --> 16 + 17 + ``` 16 18 [ 17 19 [[[6, [8, 3]], [2, 0]], [[[9, 5], [9, 1]], 3]], 18 20 [[[9, [2, 2]], [5, 4]], [[[2, 2], [9, 6]], '\a\a']], ··· 133 135 end 134 136 ``` 135 137 136 - ```output 138 + <!-- livebook:{"output":true} --> 139 + 140 + ``` 137 141 {:module, Day18, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:magnitude, 1}} 138 142 ``` 139 143 ··· 148 152 |> Day18.magnitude() 149 153 ``` 150 154 151 - ```output 155 + <!-- livebook:{"output":true} --> 156 + 157 + ``` 152 158 [[[[7, 7], [7, 8]], [[8, 7], [0, 7]]], [[[6, 6], [6, 7]], 6]] 153 159 ``` 154 160 155 - ```output 161 + <!-- livebook:{"output":true} --> 162 + 163 + ``` 156 164 3411 157 165 ``` 158 166 ··· 169 177 end 170 178 ``` 171 179 172 - ```output 180 + <!-- livebook:{"output":true} --> 181 + 182 + ``` 173 183 4680 174 184 ```
+8 -17
2021/day19.livemd
··· 257 257 end) 258 258 end) 259 259 260 - IO.inspect(time / 1_000_000) 260 + # IO.inspect(time / 1_000_000) 261 261 262 262 current = Day19.pairs(set) 263 263 ··· 272 272 {:halt, {set, scanners}} 273 273 274 274 {joinable, later} -> 275 - IO.inspect({length(joinable), length(later)}, label: i) 275 + # IO.inspect({length(joinable), length(later)}, label: i) 276 276 {:cont, {set, joinable, later, scanners}} 277 277 end 278 278 end ··· 284 284 <!-- livebook:{"output":true} --> 285 285 286 286 ``` 287 - 0.005503 288 - 1: {5, 25} 289 - 0.029354 290 - 2: {5, 20} 291 - 0.067284 292 - 3: {7, 13} 293 - 0.195126 294 - 4: {6, 7} 295 - 0.292686 296 - 5: {5, 2} 297 - 0.374403 298 - 6: {1, 1} 299 - 0.074645 300 - 7: {1, 0} 301 - 0.090199 287 + warning: variable "i" is unused (if the variable is not meant to be used, prefix it with an underscore) 288 + 2021/day19.livemd#cell:w7cczzbdb2mrwtou27usauoozuqydf3v:9 289 + 290 + warning: variable "time" is unused (if the variable is not meant to be used, prefix it with an underscore) 291 + 2021/day19.livemd#cell:w7cczzbdb2mrwtou27usauoozuqydf3v:10 292 + 302 293 ``` 303 294 304 295 <!-- livebook:{"output":true} -->
+9 -3
2021/day20.livemd
··· 128 128 img = Day20.Image.new(board) 129 129 ``` 130 130 131 - ```output 131 + <!-- livebook:{"output":true} --> 132 + 133 + ``` 132 134 #Image<{100x100} 133 135 134 136 █ █ █ ██ ████████ ██ █ █ ███ █ ██ ██ █ ███ █ ██ █ █ █ ██ ███ █ ██ ██ █ ██ █ ··· 244 246 |> Day20.Image.lighted() 245 247 ``` 246 248 247 - ```output 249 + <!-- livebook:{"output":true} --> 250 + 251 + ``` 248 252 5179 249 253 ``` 250 254 ··· 256 260 |> Day20.Image.lighted() 257 261 ``` 258 262 259 - ```output 263 + <!-- livebook:{"output":true} --> 264 + 265 + ``` 260 266 16112 261 267 ```
+12 -4
2021/day21.livemd
··· 17 17 {p1, p2} 18 18 ``` 19 19 20 - ```output 20 + <!-- livebook:{"output":true} --> 21 + 22 + ``` 21 23 {3, 5} 22 24 ``` 23 25 ··· 36 38 rounds * 3 * loser 37 39 ``` 38 40 39 - ```output 41 + <!-- livebook:{"output":true} --> 42 + 43 + ``` 40 44 720750 41 45 ``` 42 46 ··· 84 88 end 85 89 ``` 86 90 87 - ```output 91 + <!-- livebook:{"output":true} --> 92 + 93 + ``` 88 94 {:module, Day21.Task2, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:round, 3}} 89 95 ``` 90 96 ··· 92 98 Day21.Task2.play(p1, p2) 93 99 ``` 94 100 95 - ```output 101 + <!-- livebook:{"output":true} --> 102 + 103 + ``` 96 104 275067741811212 97 105 ```
+12 -4
2021/day22.livemd
··· 21 21 end) 22 22 ``` 23 23 24 - ```output 24 + <!-- livebook:{"output":true} --> 25 + 26 + ``` 25 27 [ 26 28 on: %{x: -40..7, y: -3..49, z: -48..6}, 27 29 on: %{x: -38..10, y: -11..37, z: -30..19}, ··· 133 135 end 134 136 ``` 135 137 136 - ```output 138 + <!-- livebook:{"output":true} --> 139 + 140 + ``` 137 141 {:module, Day22, <<70, 79, 82, 49, 0, 0, 18, ...>>, {:split, 2}} 138 142 ``` 139 143 ··· 150 154 |> Day22.volume() 151 155 ``` 152 156 153 - ```output 157 + <!-- livebook:{"output":true} --> 158 + 159 + ``` 154 160 556501 155 161 ``` 156 162 ··· 162 168 |> Day22.volume() 163 169 ``` 164 170 165 - ```output 171 + <!-- livebook:{"output":true} --> 172 + 173 + ``` 166 174 1217140271559773 167 175 ```
+12 -4
2021/day23.livemd
··· 19 19 |> Map.new() 20 20 ``` 21 21 22 - ```output 22 + <!-- livebook:{"output":true} --> 23 + 24 + ``` 23 25 %{a: [:d, :b], b: [:d, :a], c: [:c, :b], d: [:c, :a]} 24 26 ``` 25 27 ··· 124 126 end 125 127 ``` 126 128 127 - ```output 129 + <!-- livebook:{"output":true} --> 130 + 131 + ``` 128 132 warning: variable "depth" is unused (if the variable is not meant to be used, prefix it with an underscore) 129 133 day23.livemd#cell:58: Day23.room_to_hall/3 130 134 ··· 136 140 137 141 ``` 138 142 139 - ```output 143 + <!-- livebook:{"output":true} --> 144 + 145 + ``` 140 146 {:module, Day23, <<70, 79, 82, 49, 0, 0, 23, ...>>, {:cost, 4}} 141 147 ``` 142 148 ··· 144 150 Day23.process(input) 145 151 ``` 146 152 147 - ```output 153 + <!-- livebook:{"output":true} --> 154 + 155 + ``` 148 156 :inf 149 157 ```
+1059 -7
2021/day24.livemd
··· 19 19 end 20 20 end 21 21 22 - def evaluate(ops, input), do: evaluate(ops, Integer.digits(input), %{w: 0, x: 0, y: 0, z: 0}) 22 + def evaluate(ops, input), do: evaluate(ops, to_digits(input), %{w: 0, x: 0, y: 0, z: 0}) 23 23 24 24 defp evaluate([], _, regs), do: regs 25 - 26 - defp evaluate([:nop | rest], input, regs), do: evaluate(rest, input, regs) 27 25 28 26 defp evaluate([{:inp, reg} | rest], [v | input], regs), 29 27 do: evaluate(rest, input, %{regs | reg => v}) ··· 48 46 49 47 defp get(imm, _regs) when is_integer(imm), do: imm 50 48 defp get(reg, regs) when is_atom(reg), do: Map.get(regs, reg, 0) 49 + 50 + defp to_digits(int) when is_integer(int), do: Integer.digits(int) 51 + defp to_digits(digits) when is_list(digits), do: digits 51 52 end 52 53 53 54 input = 54 - File.stream!("day24.txt") 55 + File.stream!("#{__DIR__}/day24.txt") 55 56 |> Stream.map(&String.trim/1) 56 57 |> Enum.map(&Day24.parse/1) 57 58 |> IO.inspect(limit: :infinity) ··· 335 336 ``` 336 337 337 338 ```elixir 338 - IO.inspect(Day24.evaluate(input, 11_111_111_111_161)) 339 + IO.inspect(Day24.evaluate(input, 11_111_111_111_131)) 340 + ``` 341 + 342 + <!-- livebook:{"output":true} --> 343 + 344 + ``` 345 + %{w: 1, x: 1, y: 16, z: 5400141854} 339 346 ``` 340 347 341 348 <!-- livebook:{"output":true} --> 342 349 343 350 ``` 344 - %{w: 1, x: 1, y: 16, z: 207697766} 351 + %{w: 1, x: 1, y: 16, z: 5400141854} 352 + ``` 353 + 354 + ```elixir 355 + range = 9..1//-1 356 + 357 + for d01 <- range, 358 + d02 <- range, 359 + d03 <- range, 360 + d04 <- range, 361 + d05 <- range, 362 + d06 <- range, 363 + d07 <- range, 364 + d08 <- range, 365 + d09 <- range, 366 + d10 <- range, 367 + d11 <- range, 368 + d12 <- range, 369 + d13 <- range, 370 + d14 <- range do 371 + ver = [ 372 + d01, 373 + d02, 374 + d03, 375 + d04, 376 + d05, 377 + d06, 378 + d07, 379 + d08, 380 + d09, 381 + d10, 382 + d11, 383 + d12, 384 + d13, 385 + d14 386 + ] 387 + 388 + result = Day24.evaluate(input, ver) 389 + 390 + IO.inspect(result) 391 + 392 + if result.z == 0 do 393 + throw({:ok, Integer.undigits(ver)}) 394 + else 395 + [] 396 + end 397 + end 345 398 ``` 346 399 347 400 <!-- livebook:{"output":true} --> 348 401 349 402 ``` 350 - %{w: 1, x: 1, y: 16, z: 207697766} 403 + ... 404 + %{w: 4, x: 1, y: 19, z: 7970321105} 405 + %{w: 3, x: 1, y: 18, z: 7970321104} 406 + %{w: 2, x: 1, y: 17, z: 7970321103} 407 + %{w: 1, x: 1, y: 16, z: 7970321102} 408 + %{w: 9, x: 1, y: 24, z: 7970321110} 409 + %{w: 8, x: 1, y: 23, z: 7970321109} 410 + %{w: 7, x: 1, y: 22, z: 7970321108} 411 + %{w: 6, x: 1, y: 21, z: 7970321107} 412 + %{w: 5, x: 1, y: 20, z: 7970321106} 413 + %{w: 4, x: 1, y: 19, z: 7970321105} 414 + %{w: 3, x: 1, y: 18, z: 7970321104} 415 + %{w: 2, x: 1, y: 17, z: 7970321103} 416 + %{w: 1, x: 1, y: 16, z: 7970321102} 417 + %{w: 9, x: 1, y: 24, z: 7970321110} 418 + %{w: 8, x: 1, y: 23, z: 7970321109} 419 + %{w: 7, x: 1, y: 22, z: 7970321108} 420 + %{w: 6, x: 1, y: 21, z: 7970321107} 421 + %{w: 5, x: 1, y: 20, z: 7970321106} 422 + %{w: 4, x: 0, y: 0, z: 306550811} 423 + %{w: 3, x: 1, y: 18, z: 7970321104} 424 + %{w: 2, x: 1, y: 17, z: 7970321103} 425 + %{w: 1, x: 1, y: 16, z: 7970321102} 426 + %{w: 9, x: 1, y: 24, z: 306550814} 427 + %{w: 8, x: 1, y: 23, z: 306550813} 428 + %{w: 7, x: 1, y: 22, z: 306550812} 429 + %{w: 6, x: 1, y: 21, z: 306550811} 430 + %{w: 5, x: 1, y: 20, z: 306550810} 431 + %{w: 4, x: 1, y: 19, z: 306550809} 432 + %{w: 3, x: 1, y: 18, z: 306550808} 433 + %{w: 2, x: 1, y: 17, z: 306550807} 434 + %{w: 1, x: 1, y: 16, z: 306550806} 435 + %{w: 9, x: 1, y: 24, z: 7970321110} 436 + %{w: 8, x: 1, y: 23, z: 7970321109} 437 + %{w: 7, x: 1, y: 22, z: 7970321108} 438 + %{w: 6, x: 1, y: 21, z: 7970321107} 439 + %{w: 5, x: 1, y: 20, z: 7970321106} 440 + %{w: 4, x: 1, y: 19, z: 7970321105} 441 + %{w: 3, x: 1, y: 18, z: 7970321104} 442 + %{w: 2, x: 0, y: 0, z: 306550811} 443 + %{w: 1, x: 1, y: 16, z: 7970321102} 444 + %{w: 9, x: 1, y: 24, z: 7970321110} 445 + %{w: 8, x: 1, y: 23, z: 7970321109} 446 + %{w: 7, x: 1, y: 22, z: 7970321108} 447 + %{w: 6, x: 1, y: 21, z: 7970321107} 448 + %{w: 5, x: 1, y: 20, z: 7970321106} 449 + %{w: 4, x: 1, y: 19, z: 7970321105} 450 + %{w: 3, x: 1, y: 18, z: 7970321104} 451 + %{w: 2, x: 1, y: 17, z: 7970321103} 452 + %{w: 1, x: 0, y: 0, z: 306550811} 453 + %{w: 9, x: 1, y: 24, z: 7970321110} 454 + %{w: 8, x: 1, y: 23, z: 7970321109} 455 + %{w: 7, x: 1, y: 22, z: 7970321108} 456 + %{w: 6, x: 1, y: 21, z: 7970321107} 457 + %{w: 5, x: 1, y: 20, z: 7970321106} 458 + %{w: 4, x: 1, y: 19, z: 7970321105} 459 + %{w: 3, x: 1, y: 18, z: 7970321104} 460 + %{w: 2, x: 1, y: 17, z: 7970321103} 461 + %{w: 1, x: 1, y: 16, z: 7970321102} 462 + %{w: 9, x: 1, y: 24, z: 7970321110} 463 + %{w: 8, x: 1, y: 23, z: 7970321109} 464 + %{w: 7, x: 1, y: 22, z: 7970321108} 465 + %{w: 6, x: 1, y: 21, z: 7970321107} 466 + %{w: 5, x: 1, y: 20, z: 7970321106} 467 + %{w: 4, x: 1, y: 19, z: 7970321105} 468 + %{w: 3, x: 1, y: 18, z: 7970321104} 469 + %{w: 2, x: 1, y: 17, z: 7970321103} 470 + %{w: 1, x: 1, y: 16, z: 7970321102} 471 + %{w: 9, x: 1, y: 24, z: 7970321110} 472 + %{w: 8, x: 1, y: 23, z: 7970321109} 473 + %{w: 7, x: 1, y: 22, z: 7970321108} 474 + %{w: 6, x: 1, y: 21, z: 7970321107} 475 + %{w: 5, x: 1, y: 20, z: 7970321106} 476 + %{w: 4, x: 1, y: 19, z: 7970321105} 477 + %{w: 3, x: 1, y: 18, z: 7970321104} 478 + %{w: 2, x: 1, y: 17, z: 7970321103} 479 + %{w: 1, x: 1, y: 16, z: 7970321102} 480 + %{w: 9, x: 1, y: 24, z: 7970321110} 481 + %{w: 8, x: 1, y: 23, z: 7970321109} 482 + %{w: 7, x: 1, y: 22, z: 7970321108} 483 + %{w: 6, x: 1, y: 21, z: 7970321107} 484 + %{w: 5, x: 1, y: 20, z: 7970321106} 485 + %{w: 4, x: 1, y: 19, z: 7970321105} 486 + %{w: 3, x: 1, y: 18, z: 7970321104} 487 + %{w: 2, x: 1, y: 17, z: 7970321103} 488 + %{w: 1, x: 1, y: 16, z: 7970321102} 489 + %{w: 9, x: 1, y: 24, z: 7970321110} 490 + %{w: 8, x: 1, y: 23, z: 7970321109} 491 + %{w: 7, x: 1, y: 22, z: 7970321108} 492 + %{w: 6, x: 1, y: 21, z: 7970321107} 493 + %{w: 5, x: 1, y: 20, z: 7970321106} 494 + %{w: 4, x: 1, y: 19, z: 7970321105} 495 + %{w: 3, x: 1, y: 18, z: 7970321104} 496 + %{w: 2, x: 1, y: 17, z: 7970321103} 497 + %{w: 1, x: 1, y: 16, z: 7970321102} 498 + %{w: 9, x: 1, y: 24, z: 7970321110} 499 + %{w: 8, x: 1, y: 23, z: 7970321109} 500 + %{w: 7, x: 1, y: 22, z: 7970321108} 501 + %{w: 6, x: 1, y: 21, z: 7970321107} 502 + %{w: 5, x: 1, y: 20, z: 7970321106} 503 + %{w: 4, x: 0, y: 0, z: 306550811} 504 + %{w: 3, x: 1, y: 18, z: 7970321104} 505 + %{w: 2, x: 1, y: 17, z: 7970321103} 506 + %{w: 1, x: 1, y: 16, z: 7970321102} 507 + %{w: 9, x: 1, y: 24, z: 7970321110} 508 + %{w: 8, x: 1, y: 23, z: 7970321109} 509 + %{w: 7, x: 1, y: 22, z: 7970321108} 510 + %{w: 6, x: 1, y: 21, z: 7970321107} 511 + %{w: 5, x: 1, y: 20, z: 7970321106} 512 + %{w: 4, x: 1, y: 19, z: 7970321105} 513 + %{w: 3, x: 0, y: 0, z: 306550811} 514 + %{w: 2, x: 1, y: 17, z: 7970321103} 515 + %{w: 1, x: 1, y: 16, z: 7970321102} 516 + %{w: 9, x: 1, y: 24, z: 306550814} 517 + %{w: 8, x: 1, y: 23, z: 306550813} 518 + %{w: 7, x: 1, y: 22, z: 306550812} 519 + %{w: 6, x: 1, y: 21, z: 306550811} 520 + %{w: 5, x: 1, y: 20, z: 306550810} 521 + %{w: 4, x: 1, y: 19, z: 306550809} 522 + %{w: 3, x: 1, y: 18, z: 306550808} 523 + %{w: 2, x: 1, y: 17, z: 306550807} 524 + %{w: 1, x: 1, y: 16, z: 306550806} 525 + %{w: 9, x: 1, y: 24, z: 7970321110} 526 + %{w: 8, x: 1, y: 23, z: 7970321109} 527 + %{w: 7, x: 1, y: 22, z: 7970321108} 528 + %{w: 6, x: 1, y: 21, z: 7970321107} 529 + %{w: 5, x: 1, y: 20, z: 7970321106} 530 + %{w: 4, x: 1, y: 19, z: 7970321105} 531 + %{w: 3, x: 1, y: 18, z: 7970321104} 532 + %{w: 2, x: 1, y: 17, z: 7970321103} 533 + %{w: 1, x: 0, y: 0, z: 306550811} 534 + %{w: 9, x: 1, y: 24, z: 7970321110} 535 + %{w: 8, x: 1, y: 23, z: 7970321109} 536 + %{w: 7, x: 1, y: 22, z: 7970321108} 537 + %{w: 6, x: 1, y: 21, z: 7970321107} 538 + %{w: 5, x: 1, y: 20, z: 7970321106} 539 + %{w: 4, x: 1, y: 19, z: 7970321105} 540 + %{w: 3, x: 1, y: 18, z: 7970321104} 541 + %{w: 2, x: 1, y: 17, z: 7970321103} 542 + %{w: 1, x: 1, y: 16, z: 7970321102} 543 + %{w: 9, x: 1, y: 24, z: 7970321110} 544 + %{w: 8, x: 1, y: 23, z: 7970321109} 545 + %{w: 7, x: 1, y: 22, z: 7970321108} 546 + %{w: 6, x: 1, y: 21, z: 7970321107} 547 + %{w: 5, x: 1, y: 20, z: 7970321106} 548 + %{w: 4, x: 1, y: 19, z: 7970321105} 549 + %{w: 3, x: 1, y: 18, z: 7970321104} 550 + %{w: 2, x: 1, y: 17, z: 7970321103} 551 + %{w: 1, x: 1, y: 16, z: 7970321102} 552 + %{w: 9, x: 1, y: 24, z: 7970321110} 553 + %{w: 8, x: 1, y: 23, z: 7970321109} 554 + %{w: 7, x: 1, y: 22, z: 7970321108} 555 + %{w: 6, x: 1, y: 21, z: 7970321107} 556 + %{w: 5, x: 1, y: 20, z: 7970321106} 557 + %{w: 4, x: 1, y: 19, z: 7970321105} 558 + %{w: 3, x: 1, y: 18, z: 7970321104} 559 + %{w: 2, x: 1, y: 17, z: 7970321103} 560 + %{w: 1, x: 1, y: 16, z: 7970321102} 561 + %{w: 9, x: 1, y: 24, z: 7970321110} 562 + %{w: 8, x: 1, y: 23, z: 7970321109} 563 + %{w: 7, x: 1, y: 22, z: 7970321108} 564 + %{w: 6, x: 1, y: 21, z: 7970321107} 565 + %{w: 5, x: 1, y: 20, z: 7970321106} 566 + %{w: 4, x: 1, y: 19, z: 7970321105} 567 + %{w: 3, x: 1, y: 18, z: 7970321104} 568 + %{w: 2, x: 1, y: 17, z: 7970321103} 569 + %{w: 1, x: 1, y: 16, z: 7970321102} 570 + %{w: 9, x: 1, y: 24, z: 7970321110} 571 + %{w: 8, x: 1, y: 23, z: 7970321109} 572 + %{w: 7, x: 1, y: 22, z: 7970321108} 573 + %{w: 6, x: 1, y: 21, z: 7970321107} 574 + %{w: 5, x: 1, y: 20, z: 7970321106} 575 + %{w: 4, x: 1, y: 19, z: 7970321105} 576 + %{w: 3, x: 1, y: 18, z: 7970321104} 577 + %{w: 2, x: 1, y: 17, z: 7970321103} 578 + %{w: 1, x: 1, y: 16, z: 7970321102} 579 + %{w: 9, x: 1, y: 24, z: 306550814} 580 + %{w: 8, x: 1, y: 23, z: 306550813} 581 + %{w: 7, x: 1, y: 22, z: 306550812} 582 + %{w: 6, x: 1, y: 21, z: 306550811} 583 + %{w: 5, x: 1, y: 20, z: 306550810} 584 + %{w: 4, x: 0, y: 0, z: 11790415} 585 + %{w: 3, x: 1, y: 18, z: 306550808} 586 + %{w: 2, x: 1, y: 17, z: 306550807} 587 + %{w: 1, x: 1, y: 16, z: 306550806} 588 + %{w: 9, x: 1, y: 24, z: 306550814} 589 + %{w: 8, x: 1, y: 23, z: 306550813} 590 + %{w: 7, x: 1, y: 22, z: 306550812} 591 + %{w: 6, x: 1, y: 21, z: 306550811} 592 + %{w: 5, x: 1, y: 20, z: 306550810} 593 + %{w: 4, x: 1, y: 19, z: 306550809} 594 + %{w: 3, x: 0, y: 0, z: 11790415} 595 + %{w: 2, x: 1, y: 17, z: 306550807} 596 + %{w: 1, x: 1, y: 16, z: 306550806} 597 + %{w: 9, x: 1, y: 24, z: 306550814} 598 + %{w: 8, x: 1, y: 23, z: 306550813} 599 + %{w: 7, x: 1, y: 22, z: 306550812} 600 + %{w: 6, x: 1, y: 21, z: 306550811} 601 + %{w: 5, x: 1, y: 20, z: 306550810} 602 + %{w: 4, x: 1, y: 19, z: 306550809} 603 + %{w: 3, x: 1, y: 18, z: 306550808} 604 + %{w: 2, x: 0, y: 0, z: 11790415} 605 + %{w: 1, x: 1, y: 16, z: 306550806} 606 + %{w: 9, x: 1, y: 24, z: 306550814} 607 + %{w: 8, x: 1, y: 23, z: 306550813} 608 + %{w: 7, x: 1, y: 22, z: 306550812} 609 + %{w: 6, x: 1, y: 21, z: 306550811} 610 + %{w: 5, x: 1, y: 20, z: 306550810} 611 + %{w: 4, x: 1, y: 19, z: 306550809} 612 + %{w: 3, x: 1, y: 18, z: 306550808} 613 + %{w: 2, x: 1, y: 17, z: 306550807} 614 + %{w: 1, x: 0, y: 0, z: 11790415} 615 + %{w: 9, x: 1, y: 24, z: 306550814} 616 + %{w: 8, x: 1, y: 23, z: 306550813} 617 + %{w: 7, x: 1, y: 22, z: 306550812} 618 + %{w: 6, x: 1, y: 21, z: 306550811} 619 + %{w: 5, x: 1, y: 20, z: 306550810} 620 + %{w: 4, x: 1, y: 19, z: 306550809} 621 + %{w: 3, x: 1, y: 18, z: 306550808} 622 + %{w: 2, x: 1, y: 17, z: 306550807} 623 + %{w: 1, x: 1, y: 16, z: 306550806} 624 + %{w: 9, x: 1, y: 24, z: 306550814} 625 + %{w: 8, x: 1, y: 23, z: 306550813} 626 + %{w: 7, x: 1, y: 22, z: 306550812} 627 + %{w: 6, x: 1, y: 21, z: 306550811} 628 + %{w: 5, x: 1, y: 20, z: 306550810} 629 + %{w: 4, x: 1, y: 19, z: 306550809} 630 + %{w: 3, x: 1, y: 18, z: 306550808} 631 + %{w: 2, x: 1, y: 17, z: 306550807} 632 + %{w: 1, x: 1, y: 16, z: 306550806} 633 + %{w: 9, x: 1, y: 24, z: 306550814} 634 + %{w: 8, x: 1, y: 23, z: 306550813} 635 + %{w: 7, x: 1, y: 22, z: 306550812} 636 + %{w: 6, x: 1, y: 21, z: 306550811} 637 + %{w: 5, x: 1, y: 20, z: 306550810} 638 + %{w: 4, x: 1, y: 19, z: 306550809} 639 + %{w: 3, x: 1, y: 18, z: 306550808} 640 + %{w: 2, x: 1, y: 17, z: 306550807} 641 + %{w: 1, x: 1, y: 16, z: 306550806} 642 + %{w: 9, x: 1, y: 24, z: 306550814} 643 + %{w: 8, x: 1, y: 23, z: 306550813} 644 + %{w: 7, x: 1, y: 22, z: 306550812} 645 + %{w: 6, x: 1, y: 21, z: 306550811} 646 + %{w: 5, x: 1, y: 20, z: 306550810} 647 + %{w: 4, x: 1, y: 19, z: 306550809} 648 + %{w: 3, x: 1, y: 18, z: 306550808} 649 + %{w: 2, x: 1, y: 17, z: 306550807} 650 + %{w: 1, x: 1, y: 16, z: 306550806} 651 + %{w: 9, x: 1, y: 24, z: 306550814} 652 + %{w: 8, x: 1, y: 23, z: 306550813} 653 + %{w: 7, x: 1, y: 22, z: 306550812} 654 + %{w: 6, x: 1, y: 21, z: 306550811} 655 + %{w: 5, x: 1, y: 20, z: 306550810} 656 + %{w: 4, x: 1, y: 19, z: 306550809} 657 + %{w: 3, x: 1, y: 18, z: 306550808} 658 + %{w: 2, x: 1, y: 17, z: 306550807} 659 + %{w: 1, x: 1, y: 16, z: 306550806} 660 + %{w: 9, x: 1, y: 24, z: 7970321110} 661 + %{w: 8, x: 1, y: 23, z: 7970321109} 662 + %{w: 7, x: 1, y: 22, z: 7970321108} 663 + %{w: 6, x: 1, y: 21, z: 7970321107} 664 + %{w: 5, x: 1, y: 20, z: 7970321106} 665 + %{w: 4, x: 0, y: 0, z: 306550811} 666 + %{w: 3, x: 1, y: 18, z: 7970321104} 667 + %{w: 2, x: 1, y: 17, z: 7970321103} 668 + %{w: 1, x: 1, y: 16, z: 7970321102} 669 + %{w: 9, x: 1, y: 24, z: 7970321110} 670 + %{w: 8, x: 1, y: 23, z: 7970321109} 671 + %{w: 7, x: 1, y: 22, z: 7970321108} 672 + %{w: 6, x: 1, y: 21, z: 7970321107} 673 + %{w: 5, x: 1, y: 20, z: 7970321106} 674 + %{w: 4, x: 1, y: 19, z: 7970321105} 675 + %{w: 3, x: 0, y: 0, z: 306550811} 676 + %{w: 2, x: 1, y: 17, z: 7970321103} 677 + %{w: 1, x: 1, y: 16, z: 7970321102} 678 + %{w: 9, x: 1, y: 24, z: 7970321110} 679 + %{w: 8, x: 1, y: 23, z: 7970321109} 680 + %{w: 7, x: 1, y: 22, z: 7970321108} 681 + %{w: 6, x: 1, y: 21, z: 7970321107} 682 + %{w: 5, x: 1, y: 20, z: 7970321106} 683 + %{w: 4, x: 1, y: 19, z: 7970321105} 684 + %{w: 3, x: 1, y: 18, z: 7970321104} 685 + %{w: 2, x: 0, y: 0, z: 306550811} 686 + %{w: 1, x: 1, y: 16, z: 7970321102} 687 + %{w: 9, x: 1, y: 24, z: 7970321110} 688 + %{w: 8, x: 1, y: 23, z: 7970321109} 689 + %{w: 7, x: 1, y: 22, z: 7970321108} 690 + %{w: 6, x: 1, y: 21, z: 7970321107} 691 + %{w: 5, x: 1, y: 20, z: 7970321106} 692 + %{w: 4, x: 1, y: 19, z: 7970321105} 693 + %{w: 3, x: 1, y: 18, z: 7970321104} 694 + %{w: 2, x: 1, y: 17, z: 7970321103} 695 + %{w: 1, x: 0, y: 0, z: 306550811} 696 + %{w: 9, x: 1, y: 24, z: 7970321110} 697 + %{w: 8, x: 1, y: 23, z: 7970321109} 698 + %{w: 7, x: 1, y: 22, z: 7970321108} 699 + %{w: 6, x: 1, y: 21, z: 7970321107} 700 + %{w: 5, x: 1, y: 20, z: 7970321106} 701 + %{w: 4, x: 1, y: 19, z: 7970321105} 702 + %{w: 3, x: 1, y: 18, z: 7970321104} 703 + %{w: 2, x: 1, y: 17, z: 7970321103} 704 + %{w: 1, x: 1, y: 16, z: 7970321102} 705 + %{w: 9, x: 1, y: 24, z: 7970321110} 706 + %{w: 8, x: 1, y: 23, z: 7970321109} 707 + %{w: 7, x: 1, y: 22, z: 7970321108} 708 + %{w: 6, x: 1, y: 21, z: 7970321107} 709 + %{w: 5, x: 1, y: 20, z: 7970321106} 710 + %{w: 4, x: 1, y: 19, z: 7970321105} 711 + %{w: 3, x: 1, y: 18, z: 7970321104} 712 + %{w: 2, x: 1, y: 17, z: 7970321103} 713 + %{w: 1, x: 1, y: 16, z: 7970321102} 714 + %{w: 9, x: 1, y: 24, z: 7970321110} 715 + %{w: 8, x: 1, y: 23, z: 7970321109} 716 + %{w: 7, x: 1, y: 22, z: 7970321108} 717 + %{w: 6, x: 1, y: 21, z: 7970321107} 718 + %{w: 5, x: 1, y: 20, z: 7970321106} 719 + %{w: 4, x: 1, y: 19, z: 7970321105} 720 + %{w: 3, x: 1, y: 18, z: 7970321104} 721 + %{w: 2, x: 1, y: 17, z: 7970321103} 722 + %{w: 1, x: 1, y: 16, z: 7970321102} 723 + %{w: 9, x: 1, y: 24, z: 7970321110} 724 + %{w: 8, x: 1, y: 23, z: 7970321109} 725 + %{w: 7, x: 1, y: 22, z: 7970321108} 726 + %{w: 6, x: 1, y: 21, z: 7970321107} 727 + %{w: 5, x: 1, y: 20, z: 7970321106} 728 + %{w: 4, x: 1, y: 19, z: 7970321105} 729 + %{w: 3, x: 1, y: 18, z: 7970321104} 730 + %{w: 2, x: 1, y: 17, z: 7970321103} 731 + %{w: 1, x: 1, y: 16, z: 7970321102} 732 + %{w: 9, x: 1, y: 24, z: 7970321110} 733 + %{w: 8, x: 1, y: 23, z: 7970321109} 734 + %{w: 7, x: 1, y: 22, z: 7970321108} 735 + %{w: 6, x: 1, y: 21, z: 7970321107} 736 + %{w: 5, x: 1, y: 20, z: 7970321106} 737 + %{w: 4, x: 1, y: 19, z: 7970321105} 738 + %{w: 3, x: 1, y: 18, z: 7970321104} 739 + %{w: 2, x: 1, y: 17, z: 7970321103} 740 + %{w: 1, x: 1, y: 16, z: 7970321102} 741 + %{w: 9, x: 1, y: 24, z: 7970321110} 742 + %{w: 8, x: 1, y: 23, z: 7970321109} 743 + %{w: 7, x: 1, y: 22, z: 7970321108} 744 + %{w: 6, x: 1, y: 21, z: 7970321107} 745 + %{w: 5, x: 1, y: 20, z: 7970321106} 746 + %{w: 4, x: 0, y: 0, z: 306550811} 747 + %{w: 3, x: 1, y: 18, z: 7970321104} 748 + %{w: 2, x: 1, y: 17, z: 7970321103} 749 + %{w: 1, x: 1, y: 16, z: 7970321102} 750 + %{w: 9, x: 1, y: 24, z: 7970321110} 751 + %{w: 8, x: 1, y: 23, z: 7970321109} 752 + %{w: 7, x: 1, y: 22, z: 7970321108} 753 + %{w: 6, x: 1, y: 21, z: 7970321107} 754 + %{w: 5, x: 1, y: 20, z: 7970321106} 755 + %{w: 4, x: 1, y: 19, z: 7970321105} 756 + %{w: 3, x: 0, y: 0, z: 306550811} 757 + %{w: 2, x: 1, y: 17, z: 7970321103} 758 + %{w: 1, x: 1, y: 16, z: 7970321102} 759 + %{w: 9, x: 1, y: 24, z: 7970321110} 760 + %{w: 8, x: 1, y: 23, z: 7970321109} 761 + %{w: 7, x: 1, y: 22, z: 7970321108} 762 + %{w: 6, x: 1, y: 21, z: 7970321107} 763 + %{w: 5, x: 1, y: 20, z: 7970321106} 764 + %{w: 4, x: 1, y: 19, z: 7970321105} 765 + %{w: 3, x: 1, y: 18, z: 7970321104} 766 + %{w: 2, x: 0, y: 0, z: 306550811} 767 + %{w: 1, x: 1, y: 16, z: 7970321102} 768 + %{w: 9, x: 1, y: 24, z: 7970321110} 769 + %{w: 8, x: 1, y: 23, z: 7970321109} 770 + %{w: 7, x: 1, y: 22, z: 7970321108} 771 + %{w: 6, x: 1, y: 21, z: 7970321107} 772 + %{w: 5, x: 1, y: 20, z: 7970321106} 773 + %{w: 4, x: 1, y: 19, z: 7970321105} 774 + %{w: 3, x: 1, y: 18, z: 7970321104} 775 + %{w: 2, x: 1, y: 17, z: 7970321103} 776 + %{w: 1, x: 0, y: 0, z: 306550811} 777 + %{w: 9, x: 1, y: 24, z: 7970321110} 778 + %{w: 8, x: 1, y: 23, z: 7970321109} 779 + %{w: 7, x: 1, y: 22, z: 7970321108} 780 + %{w: 6, x: 1, y: 21, z: 7970321107} 781 + %{w: 5, x: 1, y: 20, z: 7970321106} 782 + %{w: 4, x: 1, y: 19, z: 7970321105} 783 + %{w: 3, x: 1, y: 18, z: 7970321104} 784 + %{w: 2, x: 1, y: 17, z: 7970321103} 785 + %{w: 1, x: 1, y: 16, z: 7970321102} 786 + %{w: 9, x: 1, y: 24, z: 7970321110} 787 + %{w: 8, x: 1, y: 23, z: 7970321109} 788 + %{w: 7, x: 1, y: 22, z: 7970321108} 789 + %{w: 6, x: 1, y: 21, z: 7970321107} 790 + %{w: 5, x: 1, y: 20, z: 7970321106} 791 + %{w: 4, x: 1, y: 19, z: 7970321105} 792 + %{w: 3, x: 1, y: 18, z: 7970321104} 793 + %{w: 2, x: 1, y: 17, z: 7970321103} 794 + %{w: 1, x: 1, y: 16, z: 7970321102} 795 + %{w: 9, x: 1, y: 24, z: 7970321110} 796 + %{w: 8, x: 1, y: 23, z: 7970321109} 797 + %{w: 7, x: 1, y: 22, z: 7970321108} 798 + %{w: 6, x: 1, y: 21, z: 7970321107} 799 + %{w: 5, x: 1, y: 20, z: 7970321106} 800 + %{w: 4, x: 1, y: 19, z: 7970321105} 801 + %{w: 3, x: 1, y: 18, z: 7970321104} 802 + %{w: 2, x: 1, y: 17, z: 7970321103} 803 + %{w: 1, x: 1, y: 16, z: 7970321102} 804 + %{w: 9, x: 1, y: 24, z: 7970321110} 805 + %{w: 8, x: 1, y: 23, z: 7970321109} 806 + %{w: 7, x: 1, y: 22, z: 7970321108} 807 + %{w: 6, x: 1, y: 21, z: 7970321107} 808 + %{w: 5, x: 1, y: 20, z: 7970321106} 809 + %{w: 4, x: 1, y: 19, z: 7970321105} 810 + %{w: 3, x: 1, y: 18, z: 7970321104} 811 + %{w: 2, x: 1, y: 17, z: 7970321103} 812 + %{w: 1, x: 1, y: 16, z: 7970321102} 813 + %{w: 9, x: 1, y: 24, z: 7970321110} 814 + %{w: 8, x: 1, y: 23, z: 7970321109} 815 + %{w: 7, x: 1, y: 22, z: 7970321108} 816 + %{w: 6, x: 1, y: 21, z: 7970321107} 817 + %{w: 5, x: 1, y: 20, z: 7970321106} 818 + %{w: 4, x: 1, y: 19, z: 7970321105} 819 + %{w: 3, x: 1, y: 18, z: 7970321104} 820 + %{w: 2, x: 1, y: 17, z: 7970321103} 821 + %{w: 1, x: 1, y: 16, z: 7970321102} 822 + %{w: 9, x: 1, y: 24, z: 7970321110} 823 + %{w: 8, x: 1, y: 23, z: 7970321109} 824 + %{w: 7, x: 1, y: 22, z: 7970321108} 825 + %{w: 6, x: 1, y: 21, z: 7970321107} 826 + %{w: 5, x: 1, y: 20, z: 7970321106} 827 + %{w: 4, x: 0, y: 0, z: 306550811} 828 + %{w: 3, x: 1, y: 18, z: 7970321104} 829 + %{w: 2, x: 1, y: 17, z: 7970321103} 830 + %{w: 1, x: 1, y: 16, z: 7970321102} 831 + %{w: 9, x: 1, y: 24, z: 7970321110} 832 + %{w: 8, x: 1, y: 23, z: 7970321109} 833 + %{w: 7, x: 1, y: 22, z: 7970321108} 834 + %{w: 6, x: 1, y: 21, z: 7970321107} 835 + %{w: 5, x: 1, y: 20, z: 7970321106} 836 + %{w: 4, x: 1, y: 19, z: 7970321105} 837 + %{w: 3, x: 0, y: 0, z: 306550811} 838 + %{w: 2, x: 1, y: 17, z: 7970321103} 839 + %{w: 1, x: 1, y: 16, z: 7970321102} 840 + %{w: 9, x: 1, y: 24, z: 7970321110} 841 + %{w: 8, x: 1, y: 23, z: 7970321109} 842 + %{w: 7, x: 1, y: 22, z: 7970321108} 843 + %{w: 6, x: 1, y: 21, z: 7970321107} 844 + %{w: 5, x: 1, y: 20, z: 7970321106} 845 + %{w: 4, x: 1, y: 19, z: 7970321105} 846 + %{w: 3, x: 1, y: 18, z: 7970321104} 847 + %{w: 2, x: 0, y: 0, z: 306550811} 848 + %{w: 1, x: 1, y: 16, z: 7970321102} 849 + %{w: 9, x: 1, y: 24, z: 7970321110} 850 + %{w: 8, x: 1, y: 23, z: 7970321109} 851 + %{w: 7, x: 1, y: 22, z: 7970321108} 852 + %{w: 6, x: 1, y: 21, z: 7970321107} 853 + %{w: 5, x: 1, y: 20, z: 7970321106} 854 + %{w: 4, x: 1, y: 19, z: 7970321105} 855 + %{w: 3, x: 1, y: 18, z: 7970321104} 856 + %{w: 2, x: 1, y: 17, z: 7970321103} 857 + %{w: 1, x: 0, y: 0, z: 306550811} 858 + %{w: 9, x: 1, y: 24, z: 7970321110} 859 + %{w: 8, x: 1, y: 23, z: 7970321109} 860 + %{w: 7, x: 1, y: 22, z: 7970321108} 861 + %{w: 6, x: 1, y: 21, z: 7970321107} 862 + %{w: 5, x: 1, y: 20, z: 7970321106} 863 + %{w: 4, x: 1, y: 19, z: 7970321105} 864 + %{w: 3, x: 1, y: 18, z: 7970321104} 865 + %{w: 2, x: 1, y: 17, z: 7970321103} 866 + %{w: 1, x: 1, y: 16, z: 7970321102} 867 + %{w: 9, x: 1, y: 24, z: 7970321110} 868 + %{w: 8, x: 1, y: 23, z: 7970321109} 869 + %{w: 7, x: 1, y: 22, z: 7970321108} 870 + %{w: 6, x: 1, y: 21, z: 7970321107} 871 + %{w: 5, x: 1, y: 20, z: 7970321106} 872 + %{w: 4, x: 1, y: 19, z: 7970321105} 873 + %{w: 3, x: 1, y: 18, z: 7970321104} 874 + %{w: 2, x: 1, y: 17, z: 7970321103} 875 + %{w: 1, x: 1, y: 16, z: 7970321102} 876 + %{w: 9, x: 1, y: 24, z: 7970321110} 877 + %{w: 8, x: 1, y: 23, z: 7970321109} 878 + %{w: 7, x: 1, y: 22, z: 7970321108} 879 + %{w: 6, x: 1, y: 21, z: 7970321107} 880 + %{w: 5, x: 1, y: 20, z: 7970321106} 881 + %{w: 4, x: 1, y: 19, z: 7970321105} 882 + %{w: 3, x: 1, y: 18, z: 7970321104} 883 + %{w: 2, x: 1, y: 17, z: 7970321103} 884 + %{w: 1, x: 1, y: 16, z: 7970321102} 885 + %{w: 9, x: 1, y: 24, z: 7970321110} 886 + %{w: 8, x: 1, y: 23, z: 7970321109} 887 + %{w: 7, x: 1, y: 22, z: 7970321108} 888 + %{w: 6, x: 1, y: 21, z: 7970321107} 889 + %{w: 5, x: 1, y: 20, z: 7970321106} 890 + %{w: 4, x: 1, y: 19, z: 7970321105} 891 + %{w: 3, x: 1, y: 18, z: 7970321104} 892 + %{w: 2, x: 1, y: 17, z: 7970321103} 893 + %{w: 1, x: 1, y: 16, z: 7970321102} 894 + %{w: 9, x: 1, y: 24, z: 7970321110} 895 + %{w: 8, x: 1, y: 23, z: 7970321109} 896 + %{w: 7, x: 1, y: 22, z: 7970321108} 897 + %{w: 6, x: 1, y: 21, z: 7970321107} 898 + %{w: 5, x: 1, y: 20, z: 7970321106} 899 + %{w: 4, x: 1, y: 19, z: 7970321105} 900 + %{w: 3, x: 1, y: 18, z: 7970321104} 901 + %{w: 2, x: 1, y: 17, z: 7970321103} 902 + %{w: 1, x: 1, y: 16, z: 7970321102} 903 + %{w: 9, x: 1, y: 24, z: 7970321110} 904 + %{w: 8, x: 1, y: 23, z: 7970321109} 905 + %{w: 7, x: 1, y: 22, z: 7970321108} 906 + %{w: 6, x: 1, y: 21, z: 7970321107} 907 + %{w: 5, x: 1, y: 20, z: 7970321106} 908 + %{w: 4, x: 0, y: 0, z: 306550811} 909 + %{w: 3, x: 1, y: 18, z: 7970321104} 910 + %{w: 2, x: 1, y: 17, z: 7970321103} 911 + %{w: 1, x: 1, y: 16, z: 7970321102} 912 + %{w: 9, x: 1, y: 24, z: 7970321110} 913 + %{w: 8, x: 1, y: 23, z: 7970321109} 914 + %{w: 7, x: 1, y: 22, z: 7970321108} 915 + %{w: 6, x: 1, y: 21, z: 7970321107} 916 + %{w: 5, x: 1, y: 20, z: 7970321106} 917 + %{w: 4, x: 1, y: 19, z: 7970321105} 918 + %{w: 3, x: 0, y: 0, z: 306550811} 919 + %{w: 2, x: 1, y: 17, z: 7970321103} 920 + %{w: 1, x: 1, y: 16, z: 7970321102} 921 + %{w: 9, x: 1, y: 24, z: 7970321110} 922 + %{w: 8, x: 1, y: 23, z: 7970321109} 923 + %{w: 7, x: 1, y: 22, z: 7970321108} 924 + %{w: 6, x: 1, y: 21, z: 7970321107} 925 + %{w: 5, x: 1, y: 20, z: 7970321106} 926 + %{w: 4, x: 1, y: 19, z: 7970321105} 927 + %{w: 3, x: 1, y: 18, z: 7970321104} 928 + %{w: 2, x: 0, y: 0, z: 306550811} 929 + %{w: 1, x: 1, y: 16, z: 7970321102} 930 + %{w: 9, x: 1, y: 24, z: 7970321110} 931 + %{w: 8, x: 1, y: 23, z: 7970321109} 932 + %{w: 7, x: 1, y: 22, z: 7970321108} 933 + %{w: 6, x: 1, y: 21, z: 7970321107} 934 + %{w: 5, x: 1, y: 20, z: 7970321106} 935 + %{w: 4, x: 1, y: 19, z: 7970321105} 936 + %{w: 3, x: 1, y: 18, z: 7970321104} 937 + %{w: 2, x: 1, y: 17, z: 7970321103} 938 + %{w: 1, x: 0, y: 0, z: 306550811} 939 + %{w: 9, x: 1, y: 24, z: 7970321110} 940 + %{w: 8, x: 1, y: 23, z: 7970321109} 941 + %{w: 7, x: 1, y: 22, z: 7970321108} 942 + %{w: 6, x: 1, y: 21, z: 7970321107} 943 + %{w: 5, x: 1, y: 20, z: 7970321106} 944 + %{w: 4, x: 1, y: 19, z: 7970321105} 945 + %{w: 3, x: 1, y: 18, z: 7970321104} 946 + %{w: 2, x: 1, y: 17, z: 7970321103} 947 + %{w: 1, x: 1, y: 16, z: 7970321102} 948 + %{w: 9, x: 1, y: 24, z: 7970321110} 949 + %{w: 8, x: 1, y: 23, z: 7970321109} 950 + %{w: 7, x: 1, y: 22, z: 7970321108} 951 + %{w: 6, x: 1, y: 21, z: 7970321107} 952 + %{w: 5, x: 1, y: 20, z: 7970321106} 953 + %{w: 4, x: 1, y: 19, z: 7970321105} 954 + %{w: 3, x: 1, y: 18, z: 7970321104} 955 + %{w: 2, x: 1, y: 17, z: 7970321103} 956 + %{w: 1, x: 1, y: 16, z: 7970321102} 957 + %{w: 9, x: 1, y: 24, z: 7970321110} 958 + %{w: 8, x: 1, y: 23, z: 7970321109} 959 + %{w: 7, x: 1, y: 22, z: 7970321108} 960 + %{w: 6, x: 1, y: 21, z: 7970321107} 961 + %{w: 5, x: 1, y: 20, z: 7970321106} 962 + %{w: 4, x: 1, y: 19, z: 7970321105} 963 + %{w: 3, x: 1, y: 18, z: 7970321104} 964 + %{w: 2, x: 1, y: 17, z: 7970321103} 965 + %{w: 1, x: 1, y: 16, z: 7970321102} 966 + %{w: 9, x: 1, y: 24, z: 7970321110} 967 + %{w: 8, x: 1, y: 23, z: 7970321109} 968 + %{w: 7, x: 1, y: 22, z: 7970321108} 969 + %{w: 6, x: 1, y: 21, z: 7970321107} 970 + %{w: 5, x: 1, y: 20, z: 7970321106} 971 + %{w: 4, x: 1, y: 19, z: 7970321105} 972 + %{w: 3, x: 1, y: 18, z: 7970321104} 973 + %{w: 2, x: 1, y: 17, z: 7970321103} 974 + %{w: 1, x: 1, y: 16, z: 7970321102} 975 + %{w: 9, x: 1, y: 24, z: 7970321110} 976 + %{w: 8, x: 1, y: 23, z: 7970321109} 977 + %{w: 7, x: 1, y: 22, z: 7970321108} 978 + %{w: 6, x: 1, y: 21, z: 7970321107} 979 + %{w: 5, x: 1, y: 20, z: 7970321106} 980 + %{w: 4, x: 1, y: 19, z: 7970321105} 981 + %{w: 3, x: 1, y: 18, z: 7970321104} 982 + %{w: 2, x: 1, y: 17, z: 7970321103} 983 + %{w: 1, x: 1, y: 16, z: 7970321102} 984 + %{w: 9, x: 1, y: 24, z: 7970321110} 985 + %{w: 8, x: 1, y: 23, z: 7970321109} 986 + %{w: 7, x: 1, y: 22, z: 7970321108} 987 + %{w: 6, x: 1, y: 21, z: 7970321107} 988 + %{w: 5, x: 1, y: 20, z: 7970321106} 989 + %{w: 4, x: 0, y: 0, z: 306550811} 990 + %{w: 3, x: 1, y: 18, z: 7970321104} 991 + %{w: 2, x: 1, y: 17, z: 7970321103} 992 + %{w: 1, x: 1, y: 16, z: 7970321102} 993 + %{w: 9, x: 1, y: 24, z: 7970321110} 994 + %{w: 8, x: 1, y: 23, z: 7970321109} 995 + %{w: 7, x: 1, y: 22, z: 7970321108} 996 + %{w: 6, x: 1, y: 21, z: 7970321107} 997 + %{w: 5, x: 1, y: 20, z: 7970321106} 998 + %{w: 4, x: 1, y: 19, z: 7970321105} 999 + %{w: 3, x: 0, y: 0, z: 306550811} 1000 + %{w: 2, x: 1, y: 17, z: 7970321103} 1001 + %{w: 1, x: 1, y: 16, z: 7970321102} 1002 + %{w: 9, x: 1, y: 24, z: 7970321110} 1003 + %{w: 8, x: 1, y: 23, z: 7970321109} 1004 + %{w: 7, x: 1, y: 22, z: 7970321108} 1005 + %{w: 6, x: 1, y: 21, z: 7970321107} 1006 + %{w: 5, x: 1, y: 20, z: 7970321106} 1007 + %{w: 4, x: 1, y: 19, z: 7970321105} 1008 + %{w: 3, x: 1, y: 18, z: 7970321104} 1009 + %{w: 2, x: 0, y: 0, z: 306550811} 1010 + %{w: 1, x: 1, y: 16, z: 7970321102} 1011 + %{w: 9, x: 1, y: 24, z: 7970321110} 1012 + %{w: 8, x: 1, y: 23, z: 7970321109} 1013 + %{w: 7, x: 1, y: 22, z: 7970321108} 1014 + %{w: 6, x: 1, y: 21, z: 7970321107} 1015 + %{w: 5, x: 1, y: 20, z: 7970321106} 1016 + %{w: 4, x: 1, y: 19, z: 7970321105} 1017 + %{w: 3, x: 1, y: 18, z: 7970321104} 1018 + %{w: 2, x: 1, y: 17, z: 7970321103} 1019 + %{w: 1, x: 0, y: 0, z: 306550811} 1020 + %{w: 9, x: 1, y: 24, z: 7970321110} 1021 + %{w: 8, x: 1, y: 23, z: 7970321109} 1022 + %{w: 7, x: 1, y: 22, z: 7970321108} 1023 + %{w: 6, x: 1, y: 21, z: 7970321107} 1024 + %{w: 5, x: 1, y: 20, z: 7970321106} 1025 + %{w: 4, x: 1, y: 19, z: 7970321105} 1026 + %{w: 3, x: 1, y: 18, z: 7970321104} 1027 + %{w: 2, x: 1, y: 17, z: 7970321103} 1028 + %{w: 1, x: 1, y: 16, z: 7970321102} 1029 + %{w: 9, x: 1, y: 24, z: 7970321110} 1030 + %{w: 8, x: 1, y: 23, z: 7970321109} 1031 + %{w: 7, x: 1, y: 22, z: 7970321108} 1032 + %{w: 6, x: 1, y: 21, z: 7970321107} 1033 + %{w: 5, x: 1, y: 20, z: 7970321106} 1034 + %{w: 4, x: 1, y: 19, z: 7970321105} 1035 + %{w: 3, x: 1, y: 18, z: 7970321104} 1036 + %{w: 2, x: 1, y: 17, z: 7970321103} 1037 + %{w: 1, x: 1, y: 16, z: 7970321102} 1038 + %{w: 9, x: 1, y: 24, z: 7970321110} 1039 + %{w: 8, x: 1, y: 23, z: 7970321109} 1040 + %{w: 7, x: 1, y: 22, z: 7970321108} 1041 + %{w: 6, x: 1, y: 21, z: 7970321107} 1042 + %{w: 5, x: 1, y: 20, z: 7970321106} 1043 + %{w: 4, x: 1, y: 19, z: 7970321105} 1044 + %{w: 3, x: 1, y: 18, z: 7970321104} 1045 + %{w: 2, x: 1, y: 17, z: 7970321103} 1046 + %{w: 1, x: 1, y: 16, z: 7970321102} 1047 + %{w: 9, x: 1, y: 24, z: 7970321110} 1048 + %{w: 8, x: 1, y: 23, z: 7970321109} 1049 + %{w: 7, x: 1, y: 22, z: 7970321108} 1050 + %{w: 6, x: 1, y: 21, z: 7970321107} 1051 + %{w: 5, x: 1, y: 20, z: 7970321106} 1052 + %{w: 4, x: 1, y: 19, z: 7970321105} 1053 + %{w: 3, x: 1, y: 18, z: 7970321104} 1054 + %{w: 2, x: 1, y: 17, z: 7970321103} 1055 + %{w: 1, x: 1, y: 16, z: 7970321102} 1056 + %{w: 9, x: 1, y: 24, z: 7970321110} 1057 + %{w: 8, x: 1, y: 23, z: 7970321109} 1058 + %{w: 7, x: 1, y: 22, z: 7970321108} 1059 + %{w: 6, x: 1, y: 21, z: 7970321107} 1060 + %{w: 5, x: 1, y: 20, z: 7970321106} 1061 + %{w: 4, x: 1, y: 19, z: 7970321105} 1062 + %{w: 3, x: 1, y: 18, z: 7970321104} 1063 + %{w: 2, x: 1, y: 17, z: 7970321103} 1064 + %{w: 1, x: 1, y: 16, z: 7970321102} 1065 + %{w: 9, x: 1, y: 24, z: 306550814} 1066 + %{w: 8, x: 1, y: 23, z: 306550813} 1067 + %{w: 7, x: 1, y: 22, z: 306550812} 1068 + %{w: 6, x: 1, y: 21, z: 306550811} 1069 + %{w: 5, x: 1, y: 20, z: 306550810} 1070 + %{w: 4, x: 1, y: 19, z: 306550809} 1071 + %{w: 3, x: 1, y: 18, z: 306550808} 1072 + %{w: 2, x: 1, y: 17, z: 306550807} 1073 + %{w: 1, x: 1, y: 16, z: 306550806} 1074 + %{w: 9, x: 1, y: 24, z: 7970321110} 1075 + %{w: 8, x: 1, y: 23, z: 7970321109} 1076 + %{w: 7, x: 1, y: 22, z: 7970321108} 1077 + %{w: 6, x: 1, y: 21, z: 7970321107} 1078 + %{w: 5, x: 1, y: 20, z: 7970321106} 1079 + %{w: 4, x: 1, y: 19, z: 7970321105} 1080 + %{w: 3, x: 0, y: 0, z: 306550811} 1081 + %{w: 2, x: 1, y: 17, z: 7970321103} 1082 + %{w: 1, x: 1, y: 16, z: 7970321102} 1083 + %{w: 9, x: 1, y: 24, z: 7970321110} 1084 + %{w: 8, x: 1, y: 23, z: 7970321109} 1085 + %{w: 7, x: 1, y: 22, z: 7970321108} 1086 + %{w: 6, x: 1, y: 21, z: 7970321107} 1087 + %{w: 5, x: 1, y: 20, z: 7970321106} 1088 + %{w: 4, x: 1, y: 19, z: 7970321105} 1089 + %{w: 3, x: 1, y: 18, z: 7970321104} 1090 + %{w: 2, x: 0, y: 0, z: 306550811} 1091 + %{w: 1, x: 1, y: 16, z: 7970321102} 1092 + %{w: 9, x: 1, y: 24, z: 7970321110} 1093 + %{w: 8, x: 1, y: 23, z: 7970321109} 1094 + %{w: 7, x: 1, y: 22, z: 7970321108} 1095 + %{w: 6, x: 1, y: 21, z: 7970321107} 1096 + %{w: 5, x: 1, y: 20, z: 7970321106} 1097 + %{w: 4, x: 1, y: 19, z: 7970321105} 1098 + %{w: 3, x: 1, y: 18, z: 7970321104} 1099 + %{w: 2, x: 1, y: 17, z: 7970321103} 1100 + %{w: 1, x: 0, y: 0, z: 306550811} 1101 + %{w: 9, x: 1, y: 24, z: 7970321110} 1102 + %{w: 8, x: 1, y: 23, z: 7970321109} 1103 + %{w: 7, x: 1, y: 22, z: 7970321108} 1104 + %{w: 6, x: 1, y: 21, z: 7970321107} 1105 + %{w: 5, x: 1, y: 20, z: 7970321106} 1106 + %{w: 4, x: 1, y: 19, z: 7970321105} 1107 + %{w: 3, x: 1, y: 18, z: 7970321104} 1108 + %{w: 2, x: 1, y: 17, z: 7970321103} 1109 + %{w: 1, x: 1, y: 16, z: 7970321102} 1110 + %{w: 9, x: 1, y: 24, z: 7970321110} 1111 + %{w: 8, x: 1, y: 23, z: 7970321109} 1112 + %{w: 7, x: 1, y: 22, z: 7970321108} 1113 + %{w: 6, x: 1, y: 21, z: 7970321107} 1114 + %{w: 5, x: 1, y: 20, z: 7970321106} 1115 + %{w: 4, x: 1, y: 19, z: 7970321105} 1116 + %{w: 3, x: 1, y: 18, z: 7970321104} 1117 + %{w: 2, x: 1, y: 17, z: 7970321103} 1118 + %{w: 1, x: 1, y: 16, z: 7970321102} 1119 + %{w: 9, x: 1, y: 24, z: 7970321110} 1120 + %{w: 8, x: 1, y: 23, z: 7970321109} 1121 + %{w: 7, x: 1, y: 22, z: 7970321108} 1122 + %{w: 6, x: 1, y: 21, z: 7970321107} 1123 + %{w: 5, x: 1, y: 20, z: 7970321106} 1124 + %{w: 4, x: 1, y: 19, z: 7970321105} 1125 + %{w: 3, x: 1, y: 18, z: 7970321104} 1126 + %{w: 2, x: 1, y: 17, z: 7970321103} 1127 + %{w: 1, x: 1, y: 16, z: 7970321102} 1128 + %{w: 9, x: 1, y: 24, z: 7970321110} 1129 + %{w: 8, x: 1, y: 23, z: 7970321109} 1130 + %{w: 7, x: 1, y: 22, z: 7970321108} 1131 + %{w: 6, x: 1, y: 21, z: 7970321107} 1132 + %{w: 5, x: 1, y: 20, z: 7970321106} 1133 + %{w: 4, x: 1, y: 19, z: 7970321105} 1134 + %{w: 3, x: 1, y: 18, z: 7970321104} 1135 + %{w: 2, x: 1, y: 17, z: 7970321103} 1136 + %{w: 1, x: 1, y: 16, z: 7970321102} 1137 + %{w: 9, x: 1, y: 24, z: 7970321110} 1138 + %{w: 8, x: 1, y: 23, z: 7970321109} 1139 + %{w: 7, x: 1, y: 22, z: 7970321108} 1140 + %{w: 6, x: 1, y: 21, z: 7970321107} 1141 + %{w: 5, x: 1, y: 20, z: 7970321106} 1142 + %{w: 4, x: 1, y: 19, z: 7970321105} 1143 + %{w: 3, x: 1, y: 18, z: 7970321104} 1144 + %{w: 2, x: 1, y: 17, z: 7970321103} 1145 + %{w: 1, x: 1, y: 16, z: 7970321102} 1146 + %{w: 9, x: 1, y: 24, z: 7970321110} 1147 + %{w: 8, x: 1, y: 23, z: 7970321109} 1148 + %{w: 7, x: 1, y: 22, z: 7970321108} 1149 + %{w: 6, x: 1, y: 21, z: 7970321107} 1150 + %{w: 5, x: 1, y: 20, z: 7970321106} 1151 + %{w: 4, x: 0, y: 0, z: 306550811} 1152 + %{w: 3, x: 1, y: 18, z: 7970321104} 1153 + %{w: 2, x: 1, y: 17, z: 7970321103} 1154 + %{w: 1, x: 1, y: 16, z: 7970321102} 1155 + %{w: 9, x: 1, y: 24, z: 306550814} 1156 + %{w: 8, x: 1, y: 23, z: 306550813} 1157 + %{w: 7, x: 1, y: 22, z: 306550812} 1158 + %{w: 6, x: 1, y: 21, z: 306550811} 1159 + %{w: 5, x: 1, y: 20, z: 306550810} 1160 + %{w: 4, x: 1, y: 19, z: 306550809} 1161 + %{w: 3, x: 1, y: 18, z: 306550808} 1162 + %{w: 2, x: 1, y: 17, z: 306550807} 1163 + %{w: 1, x: 1, y: 16, z: 306550806} 1164 + %{w: 9, x: 1, y: 24, z: 7970321110} 1165 + %{w: 8, x: 1, y: 23, z: 7970321109} 1166 + %{w: 7, x: 1, y: 22, z: 7970321108} 1167 + %{w: 6, x: 1, y: 21, z: 7970321107} 1168 + %{w: 5, x: 1, y: 20, z: 7970321106} 1169 + %{w: 4, x: 1, y: 19, z: 7970321105} 1170 + %{w: 3, x: 1, y: 18, z: 7970321104} 1171 + %{w: 2, x: 0, y: 0, z: 306550811} 1172 + %{w: 1, x: 1, y: 16, z: 7970321102} 1173 + %{w: 9, x: 1, y: 24, z: 7970321110} 1174 + %{w: 8, x: 1, y: 23, z: 7970321109} 1175 + %{w: 7, x: 1, y: 22, z: 7970321108} 1176 + %{w: 6, x: 1, y: 21, z: 7970321107} 1177 + %{w: 5, x: 1, y: 20, z: 7970321106} 1178 + %{w: 4, x: 1, y: 19, z: 7970321105} 1179 + %{w: 3, x: 1, y: 18, z: 7970321104} 1180 + %{w: 2, x: 1, y: 17, z: 7970321103} 1181 + %{w: 1, x: 0, y: 0, z: 306550811} 1182 + %{w: 9, x: 1, y: 24, z: 7970321110} 1183 + %{w: 8, x: 1, y: 23, z: 7970321109} 1184 + %{w: 7, x: 1, y: 22, z: 7970321108} 1185 + %{w: 6, x: 1, y: 21, z: 7970321107} 1186 + %{w: 5, x: 1, y: 20, z: 7970321106} 1187 + %{w: 4, x: 1, y: 19, z: 7970321105} 1188 + %{w: 3, x: 1, y: 18, z: 7970321104} 1189 + %{w: 2, x: 1, y: 17, z: 7970321103} 1190 + %{w: 1, x: 1, y: 16, z: 7970321102} 1191 + %{w: 9, x: 1, y: 24, z: 7970321110} 1192 + %{w: 8, x: 1, y: 23, z: 7970321109} 1193 + %{w: 7, x: 1, y: 22, z: 7970321108} 1194 + %{w: 6, x: 1, y: 21, z: 7970321107} 1195 + %{w: 5, x: 1, y: 20, z: 7970321106} 1196 + %{w: 4, x: 1, y: 19, z: 7970321105} 1197 + %{w: 3, x: 1, y: 18, z: 7970321104} 1198 + %{w: 2, x: 1, y: 17, z: 7970321103} 1199 + %{w: 1, x: 1, y: 16, z: 7970321102} 1200 + %{w: 9, x: 1, y: 24, z: 7970321110} 1201 + %{w: 8, x: 1, y: 23, z: 7970321109} 1202 + %{w: 7, x: 1, y: 22, z: 7970321108} 1203 + %{w: 6, x: 1, y: 21, z: 7970321107} 1204 + %{w: 5, x: 1, y: 20, z: 7970321106} 1205 + %{w: 4, x: 1, y: 19, z: 7970321105} 1206 + %{w: 3, x: 1, y: 18, z: 7970321104} 1207 + %{w: 2, x: 1, y: 17, z: 7970321103} 1208 + %{w: 1, x: 1, y: 16, z: 7970321102} 1209 + %{w: 9, x: 1, y: 24, z: 7970321110} 1210 + %{w: 8, x: 1, y: 23, z: 7970321109} 1211 + %{w: 7, x: 1, y: 22, z: 7970321108} 1212 + %{w: 6, x: 1, y: 21, z: 7970321107} 1213 + %{w: 5, x: 1, y: 20, z: 7970321106} 1214 + %{w: 4, x: 1, y: 19, z: 7970321105} 1215 + %{w: 3, x: 1, y: 18, z: 7970321104} 1216 + %{w: 2, x: 1, y: 17, z: 7970321103} 1217 + %{w: 1, x: 1, y: 16, z: 7970321102} 1218 + %{w: 9, x: 1, y: 24, z: 7970321110} 1219 + %{w: 8, x: 1, y: 23, z: 7970321109} 1220 + %{w: 7, x: 1, y: 22, z: 7970321108} 1221 + %{w: 6, x: 1, y: 21, z: 7970321107} 1222 + %{w: 5, x: 1, y: 20, z: 7970321106} 1223 + %{w: 4, x: 1, y: 19, z: 7970321105} 1224 + %{w: 3, x: 1, y: 18, z: 7970321104} 1225 + %{w: 2, x: 1, y: 17, z: 7970321103} 1226 + %{w: 1, x: 1, y: 16, z: 7970321102} 1227 + %{w: 9, x: 1, y: 24, z: 7970321110} 1228 + %{w: 8, x: 1, y: 23, z: 7970321109} 1229 + %{w: 7, x: 1, y: 22, z: 7970321108} 1230 + %{w: 6, x: 1, y: 21, z: 7970321107} 1231 + %{w: 5, x: 1, y: 20, z: 7970321106} 1232 + %{w: 4, x: 0, y: 0, z: 306550811} 1233 + %{w: 3, x: 1, y: 18, z: 7970321104} 1234 + %{w: 2, x: 1, y: 17, z: 7970321103} 1235 + %{w: 1, x: 1, y: 16, z: 7970321102} 1236 + %{w: 9, x: 1, y: 24, z: 7970321110} 1237 + %{w: 8, x: 1, y: 23, z: 7970321109} 1238 + %{w: 7, x: 1, y: 22, z: 7970321108} 1239 + %{w: 6, x: 1, y: 21, z: 7970321107} 1240 + %{w: 5, x: 1, y: 20, z: 7970321106} 1241 + %{w: 4, x: 1, y: 19, z: 7970321105} 1242 + %{w: 3, x: 0, y: 0, z: 306550811} 1243 + %{w: 2, x: 1, y: 17, z: 7970321103} 1244 + %{w: 1, x: 1, y: 16, z: 7970321102} 1245 + %{w: 9, x: 1, y: 24, z: 306550814} 1246 + %{w: 8, x: 1, y: 23, z: 306550813} 1247 + %{w: 7, x: 1, y: 22, z: 306550812} 1248 + %{w: 6, x: 1, y: 21, z: 306550811} 1249 + %{w: 5, x: 1, y: 20, z: 306550810} 1250 + %{w: 4, x: 1, y: 19, z: 306550809} 1251 + %{w: 3, x: 1, y: 18, z: 306550808} 1252 + %{w: 2, x: 1, y: 17, z: 306550807} 1253 + %{w: 1, x: 1, y: 16, z: 306550806} 1254 + %{w: 9, x: 1, y: 24, z: 7970321110} 1255 + %{w: 8, x: 1, y: 23, z: 7970321109} 1256 + %{w: 7, x: 1, y: 22, z: 7970321108} 1257 + %{w: 6, x: 1, y: 21, z: 7970321107} 1258 + %{w: 5, x: 1, y: 20, z: 7970321106} 1259 + %{w: 4, x: 1, y: 19, z: 7970321105} 1260 + %{w: 3, x: 1, y: 18, z: 7970321104} 1261 + %{w: 2, x: 1, y: 17, z: 7970321103} 1262 + %{w: 1, x: 0, y: 0, z: 306550811} 1263 + %{w: 9, x: 1, y: 24, z: 7970321110} 1264 + %{w: 8, x: 1, y: 23, z: 7970321109} 1265 + %{w: 7, x: 1, y: 22, z: 7970321108} 1266 + %{w: 6, x: 1, y: 21, z: 7970321107} 1267 + %{w: 5, x: 1, y: 20, z: 7970321106} 1268 + %{w: 4, x: 1, y: 19, z: 7970321105} 1269 + %{w: 3, x: 1, y: 18, z: 7970321104} 1270 + %{w: 2, x: 1, y: 17, z: 7970321103} 1271 + %{w: 1, x: 1, y: 16, z: 7970321102} 1272 + %{w: 9, x: 1, y: 24, z: 7970321110} 1273 + %{w: 8, x: 1, y: 23, z: 7970321109} 1274 + %{w: 7, x: 1, y: 22, z: 7970321108} 1275 + %{w: 6, x: 1, y: 21, z: 7970321107} 1276 + %{w: 5, x: 1, y: 20, z: 7970321106} 1277 + %{w: 4, x: 1, y: 19, z: 7970321105} 1278 + %{w: 3, x: 1, y: 18, z: 7970321104} 1279 + %{w: 2, x: 1, y: 17, z: 7970321103} 1280 + %{w: 1, x: 1, y: 16, z: 7970321102} 1281 + %{w: 9, x: 1, y: 24, z: 7970321110} 1282 + %{w: 8, x: 1, y: 23, z: 7970321109} 1283 + %{w: 7, x: 1, y: 22, z: 7970321108} 1284 + %{w: 6, x: 1, y: 21, z: 7970321107} 1285 + %{w: 5, x: 1, y: 20, z: 7970321106} 1286 + %{w: 4, x: 1, y: 19, z: 7970321105} 1287 + %{w: 3, x: 1, y: 18, z: 7970321104} 1288 + %{w: 2, x: 1, y: 17, z: 7970321103} 1289 + %{w: 1, x: 1, y: 16, z: 7970321102} 1290 + %{w: 9, x: 1, y: 24, z: 7970321110} 1291 + %{w: 8, x: 1, y: 23, z: 7970321109} 1292 + %{w: 7, x: 1, y: 22, z: 7970321108} 1293 + %{w: 6, x: 1, y: 21, z: 7970321107} 1294 + %{w: 5, x: 1, y: 20, z: 7970321106} 1295 + %{w: 4, x: 1, y: 19, z: 7970321105} 1296 + %{w: 3, x: 1, y: 18, z: 7970321104} 1297 + %{w: 2, x: 1, y: 17, z: 7970321103} 1298 + %{w: 1, x: 1, y: 16, z: 7970321102} 1299 + %{w: 9, x: 1, y: 24, z: 7970321110} 1300 + %{w: 8, x: 1, y: 23, z: 7970321109} 1301 + %{w: 7, x: 1, y: 22, z: 7970321108} 1302 + %{w: 6, x: 1, y: 21, z: 7970321107} 1303 + %{w: 5, x: 1, y: 20, z: 7970321106} 1304 + %{w: 4, x: 1, y: 19, z: 7970321105} 1305 + %{w: 3, x: 1, y: 18, z: 7970321104} 1306 + %{w: 2, x: 1, y: 17, z: 7970321103} 1307 + %{w: 1, x: 1, y: 16, z: 7970321102} 1308 + %{w: 9, x: 1, y: 24, z: 7970321110} 1309 + %{w: 8, x: 1, y: 23, z: 7970321109} 1310 + %{w: 7, x: 1, y: 22, z: 7970321108} 1311 + %{w: 6, x: 1, y: 21, z: 7970321107} 1312 + %{w: 5, x: 1, y: 20, z: 7970321106} 1313 + %{w: 4, x: 0, y: 0, z: 306550811} 1314 + %{w: 3, x: 1, y: 18, z: 7970321104} 1315 + %{w: 2, x: 1, y: 17, z: 7970321103} 1316 + %{w: 1, x: 1, y: 16, z: 7970321102} 1317 + %{w: 9, x: 1, y: 24, z: 7970321110} 1318 + %{w: 8, x: 1, y: 23, z: 7970321109} 1319 + %{w: 7, x: 1, y: 22, z: 7970321108} 1320 + %{w: 6, x: 1, y: 21, z: 7970321107} 1321 + %{w: 5, x: 1, y: 20, z: 7970321106} 1322 + %{w: 4, x: 1, y: 19, z: 7970321105} 1323 + %{w: 3, x: 0, y: 0, z: 306550811} 1324 + %{w: 2, x: 1, y: 17, z: 7970321103} 1325 + %{w: 1, x: 1, y: 16, z: 7970321102} 1326 + %{w: 9, x: 1, y: 24, z: 7970321110} 1327 + %{w: 8, x: 1, y: 23, z: 7970321109} 1328 + %{w: 7, x: 1, y: 22, z: 7970321108} 1329 + %{w: 6, x: 1, y: 21, z: 7970321107} 1330 + %{w: 5, x: 1, y: 20, z: 7970321106} 1331 + %{w: 4, x: 1, y: 19, z: 7970321105} 1332 + %{w: 3, x: 1, y: 18, z: 7970321104} 1333 + %{w: 2, x: 0, y: 0, z: 306550811} 1334 + %{w: 1, x: 1, y: 16, z: 7970321102} 1335 + %{w: 9, x: 1, y: 24, z: 306550814} 1336 + %{w: 8, x: 1, y: 23, z: 306550813} 1337 + %{w: 7, x: 1, y: 22, z: 306550812} 1338 + %{w: 6, x: 1, y: 21, z: 306550811} 1339 + %{w: 5, x: 1, y: 20, z: 306550810} 1340 + %{w: 4, x: 1, y: 19, z: 306550809} 1341 + %{w: 3, x: 1, y: 18, z: 306550808} 1342 + %{w: 2, x: 1, y: 17, z: 306550807} 1343 + %{w: 1, x: 1, y: 16, z: 306550806} 1344 + %{w: 9, x: 1, y: 24, z: 7970321110} 1345 + %{w: 8, x: 1, y: 23, z: 7970321109} 1346 + %{w: 7, x: 1, y: 22, z: 7970321108} 1347 + %{w: 6, x: 1, y: 21, z: 7970321107} 1348 + %{w: 5, x: 1, y: 20, z: 7970321106} 1349 + %{w: 4, x: 1, y: 19, z: 7970321105} 1350 + %{w: 3, x: 1, y: 18, z: 7970321104} 1351 + %{w: 2, x: 1, y: 17, z: 7970321103} 1352 + %{w: 1, x: 1, y: 16, z: 7970321102} 1353 + %{w: 9, x: 1, y: 24, z: 7970321110} 1354 + %{w: 8, x: 1, y: 23, z: 7970321109} 1355 + %{w: 7, x: 1, y: 22, z: 7970321108} 1356 + %{w: 6, x: 1, y: 21, z: 7970321107} 1357 + %{w: 5, x: 1, y: 20, z: 7970321106} 1358 + %{w: 4, x: 1, y: 19, z: 7970321105} 1359 + %{w: 3, x: 1, y: 18, z: 7970321104} 1360 + %{w: 2, x: 1, y: 17, z: 7970321103} 1361 + %{w: 1, x: 1, y: 16, z: 7970321102} 1362 + %{w: 9, x: 1, y: 24, z: 7970321110} 1363 + %{w: 8, x: 1, y: 23, z: 7970321109} 1364 + %{w: 7, x: 1, y: 22, z: 7970321108} 1365 + %{w: 6, x: 1, y: 21, z: 7970321107} 1366 + %{w: 5, x: 1, y: 20, z: 7970321106} 1367 + %{w: 4, x: 1, y: 19, z: 7970321105} 1368 + %{w: 3, x: 1, y: 18, z: 7970321104} 1369 + %{w: 2, x: 1, y: 17, z: 7970321103} 1370 + %{w: 1, x: 1, y: 16, z: 7970321102} 1371 + %{w: 9, x: 1, y: 24, z: 7970321110} 1372 + %{w: 8, x: 1, y: 23, z: 7970321109} 1373 + %{w: 7, x: 1, y: 22, z: 7970321108} 1374 + %{w: 6, x: 1, y: 21, z: 7970321107} 1375 + %{w: 5, x: 1, y: 20, z: 7970321106} 1376 + %{w: 4, x: 1, y: 19, z: 7970321105} 1377 + %{w: 3, x: 1, y: 18, z: 7970321104} 1378 + %{w: 2, x: 1, y: 17, z: 7970321103} 1379 + %{w: 1, x: 1, y: 16, z: 7970321102} 1380 + %{w: 9, x: 1, y: 24, z: 7970321110} 1381 + %{w: 8, x: 1, y: 23, z: 7970321109} 1382 + %{w: 7, x: 1, y: 22, z: 7970321108} 1383 + %{w: 6, x: 1, y: 21, z: 7970321107} 1384 + %{w: 5, x: 1, y: 20, z: 7970321106} 1385 + %{w: 4, x: 1, y: 19, z: 7970321105} 1386 + %{w: 3, x: 1, y: 18, z: 7970321104} 1387 + %{w: 2, x: 1, y: 17, z: 7970321103} 1388 + %{w: 1, x: 1, y: 16, z: 7970321102} 1389 + %{w: 9, x: 1, y: 24, z: 7970321084} 1390 + %{w: 8, x: 1, y: 23, z: 7970321083} 1391 + %{w: 7, x: 1, y: 22, z: 7970321082} 1392 + %{w: 6, x: 1, y: 21, z: 7970321081} 1393 + %{w: 5, x: 1, y: 20, z: 7970321080} 1394 + %{w: 4, x: 0, y: 0, z: 306550810} 1395 + %{w: 3, x: 1, y: 18, z: 7970321078} 1396 + %{w: 2, x: 1, y: 17, z: 7970321077} 1397 + %{w: 1, x: 1, y: 16, z: 7970321076} 1398 + %{w: 9, x: 1, y: 24, z: 7970321084} 1399 + %{w: 8, x: 1, y: 23, z: 7970321083} 1400 + %{w: 7, x: 1, y: 22, z: 7970321082} 1401 + %{w: 6, x: 1, y: 21, z: 7970321081} 1402 + %{w: 5, x: 1, y: 20, z: 7970321080} 351 1403 ```
+430
2023/day14.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 14 4 + 5 + ```elixir 6 + Mix.install([:kino_aoc]) 7 + ``` 8 + 9 + ## Section 10 + 11 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"14","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 + 13 + ```elixir 14 + {:ok, puzzle_input} = 15 + KinoAOC.download_puzzle("2023", "14", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16 + ``` 17 + 18 + <!-- livebook:{"output":true} --> 19 + 20 + ``` 21 + {:ok, 22 + "####....#..O#O..#.....OO.O#..O.......O.#OO.#...O.O..O..O..OO.##.O#...........#....##O#..O#.O.O......\n....#..#.........O.O#..OO#OO....O.....#O.#.O##..#...OO#OOO.O...#...O..#.O.#....##.....#O............\n...#O..#........#....O...O.......O#.##.O.......O..O#O#.#OO....O..O.......#O.........#O.#.O...#...#..\n#O...O...O.O..O..OO.#...O.O#....##O.##..#.OOO#...OO.#...OOO.#.O.#....#....O..##.....OO....#..O...#O.\n.#.......##.#...#...O............O...#......#..#.OO...O#....O.#..........O..O.OOO#.#O#....OO..#.#O.#\n..#..........#..O.O#.....O.OOO.#.##...##...OO..#..#.O#..OO.O#..#O..#O.O#.O.O#..#.#OOO..#OO.O.##..#..\n#..#....O.#O.O.#...O......O...###O.#...OOO#..#.O..#O.O..O.#OO...O...#..#OOO.....O...O...OO..##....O.\n...##....#..#.O#..#O...#.#......##.OO.O.......O....#O#..OOOO#....O.#OO.#O....#...O#O#..O.#.....O....\n...#O....#.#O........O.O#O....O...#.O....#....#...#O.....O.O.O.#.#.......#.........#O#........O.....\n...O...#.O#....#O#O.....O..O#...#O........O.#.##.....O.#...O..#...##O.#.#O#..O..##......#O.#...O#..#\n#..OO#.#.........O#......#O.##.O#...O..#.#.#.OO........#......#....#..#.......O.#O.##.###.####....O.\nO..O...#O..O..##.O..............#O......OOO#...#.#.#.........OO....OO....O#.#.O#.O.........#.......O\n..O#.#....O..#....#OO..##...#..#...O..##O...##.O..O.OO.#.###...O..#.OO..O#...#......#.....O.#..O..#.\nO..####.O..O.OO##.O...O..O#.#O..O...O..........#O.#..#..O..O#..O##O.O.#O.#..O.OO.O..#...O.#O..O.O.#.\n.......O..........#...OO.O#.#.#OOOO...OO#O..O.#.#......#O.#.#...#.O#......O.O.OO...#.##..#.O.#..O..#\n.#.....#O........#.O...#........O............#O......##.O..O..#.#......O#O..O...O..O.#.O...O.#..OOOO\n.......O#...O...OO#.....#..O.#O..##..#O.#....OO.##.#O#......O#..O....OO..#...#O...O...##O..O###..OOO\n...O...#..O..O..#O.O......#.O...#..O#..#..O.OO...O....O.#O#..###O....O..##OOO.#O.....#...#.....#...O\nO...OO.#...#...O.O..#O.OO..O.#.#.#O#.O.#.O..O#O.....##O..O#.O..O........O...#.......O#.#...#.#..OO..\n..OO..#.#.O#.OOO.....##.O..OOO##O#.O..O.##OOO...O..##.O......#O.##..#O..O....#.##.O###...##..O......\n.......O..OO....##......O..O#O.O.O#....#O.....#....O..O.OO...#.O.#..#....#.O..#O....O......##O.....#\n......O..#...O..O#O.#.O.......#.O#.....O.O#..#.#...O..##......O.O..O#.#.#..#.O.#O.O#.O.#......#.O...\n....O.....O..O.......#.O.OO.....O##....##.#OO..#O..#.#...##..O#O.O...O..OO..##....O#O..O....#...O.#O\n.......O.##O.#O#.........O#.OO....###.OO..O.#..#.....OO.O.O...O......O..O..O....O...#.#....#....#O..\nO..#O......#.O..#O.O.#......O#..#.O##..#.#.O.....#.O...O..OO..####.#...##......#.....#O#......OO.O.#\n...OOO.#O....O#O...O.##OO..#....OO...O.#.....OO.#OOO.#.........#....O....#.#..O.#O#.#...O.O...O.#...\n..O.#.OOO..O.#...#OO.#.O.##OO..O..####.#....#.OO##O..#.O..O#..O#....#..O#..#.O.O..O...O...O.....O.O.\n.#.#O.O..#.O.O##.....O#..#..#..OO##...OOO.#O...#.O#...#O....#OO.OO..#.OO#.OO#O#............O......#.\nO#..#....O...#.#.O....#.OOO.#.OO.....OO###.O..#..#.O..#...#.#....O#.O#....#.#.O.#.....#....O.....O#.\nO..O.#.....#.....OOO..O..OOO.#..#.##.O..O.......#..O.##O#...#.#.......#.#....#.O.O..OO..#.O..#..O#O.\n...O...O#....#O.......#........#.O.O..O.#O#...O...#..O.#..OO#O...#........O...#.....OO.#...#.O...#.#\nO.#.O#...O#....#OO.O.##......O...##..#..O#.#.#O.....OOO..#O....#...O..O#O....#.#....OO.#..#.....OO.#\n...O#..O.#.#..O........O.....#.........#.....O.......O......#..#.#O....#O.O#O.#..##O#....#O...O.O...\n#..O.O...O#..O.O.#O..#...O#....#..#...O..#O...O.....O..OO#OOO#OOO...#.O...#.OO#O.....#O.#.........O.\nO.O...#....O#OO...O.OO..#..OO...#..O..O.O....#...#..O..OOO#.....#..OO.#O....O.#.O.OOO.#OO....##OO..O\n.#O#.#.##...###O..O#...#.O.#.O...O#.O.....O....O..OOO....#...O...OO.....#.#O#O..#O......#.O.....#.#O\nO.#O.OO......##......O..OOO##.OOO.#..O...O.O#..#O.#O.O......#................##..#....#O......#.....\n........#.....##...OO.O......#..#.......#O.....O....O....#O.##..OO...O...O..........#..O.....OO...#.\n#..O.#.......O......O#.O..........#O#.O#.#..#..O..O#.O.O..O.O........O......O..O.O..O.O..#O....O#.#.\n...#...OO#..#..##.O.....O...........O.#O#O...##...O..#..#..O....#..O#O.##..O##......OOO....##..###.#\n.#..#....OOO......O#O...##O..O.OO...O..#.....#.O..##...." <> ...} 23 + ``` 24 + 25 + ```elixir 26 + puzzle_input = 27 + """ 28 + O....#.... 29 + O.OO#....# 30 + .....##... 31 + OO.#O....O 32 + .O.....O#. 33 + O.#..O.#.# 34 + ..O..#O..O 35 + .......O.. 36 + #....###.. 37 + #OO..#.... 38 + """ 39 + ``` 40 + 41 + <!-- livebook:{"output":true} --> 42 + 43 + ``` 44 + "O....#....\nO.OO#....#\n.....##...\nOO.#O....O\n.O.....O#.\nO.#..O.#.#\n..O..#O..O\n.......O..\n#....###..\n#OO..#....\n" 45 + ``` 46 + 47 + ```elixir 48 + map = 49 + puzzle_input 50 + |> String.split("\n", trim: true) 51 + |> Enum.with_index(0) 52 + |> Enum.flat_map(fn {line, y} -> 53 + line 54 + |> String.to_charlist() 55 + |> Enum.with_index() 56 + |> Enum.filter(fn {p, _} -> p != ?. end) 57 + |> Enum.map(fn 58 + {?#, x} -> {{x, y}, :cube} 59 + {?O, x} -> {{x, y}, :round} 60 + end) 61 + end) 62 + |> Map.new() 63 + 64 + {width, height} = Enum.reduce(map, {0, 0}, fn {{x, y}, _}, {w, h} -> {max(x, w), max(y, h)} end) 65 + ``` 66 + 67 + <!-- livebook:{"output":true} --> 68 + 69 + ``` 70 + {9, 9} 71 + ``` 72 + 73 + ## Part 1 74 + 75 + ```elixir 76 + defmodule Day14 do 77 + def weight(map, width, height) do 78 + for(col <- 0..width, do: Day14.column_weight(map, col, height)) 79 + |> Enum.sum() 80 + end 81 + 82 + def column_weight(map, col, height) do 83 + do_column_weight(map, col, height, 0, 0, height) 84 + end 85 + 86 + defp do_column_weight(_map, _col, -1, stack, sum, height) do 87 + sum + sum(height + 1, stack) 88 + end 89 + 90 + defp do_column_weight(map, col, row, stack, sum, height) do 91 + case Map.fetch(map, {col, row}) do 92 + :error -> 93 + do_column_weight(map, col, row - 1, stack, sum, height) 94 + 95 + {:ok, :cube} -> 96 + do_column_weight(map, col, row - 1, 0, sum + sum(height - row, stack), height) 97 + 98 + {:ok, :round} -> 99 + do_column_weight(map, col, row - 1, stack + 1, sum, height) 100 + end 101 + end 102 + 103 + def sum(_, 0), do: 0 104 + def sum(s, n), do: div((2 * s - n + 1) * n, 2) 105 + 106 + def print(map, width, height) do 107 + for y <- 0..height do 108 + row = 109 + for x <- 0..width do 110 + case Map.get(map, {x, y}) do 111 + nil -> " " 112 + :cube -> "#" 113 + :round -> "O" 114 + end 115 + end 116 + 117 + ["#{y}\t", row, "\n"] 118 + end 119 + |> IO.puts() 120 + end 121 + end 122 + ``` 123 + 124 + <!-- livebook:{"output":true} --> 125 + 126 + ``` 127 + {:module, Day14, <<70, 79, 82, 49, 0, 0, 15, ...>>, {:print, 3}} 128 + ``` 129 + 130 + ```elixir 131 + Day14.print(map, width, height) 132 + ``` 133 + 134 + <!-- livebook:{"output":true} --> 135 + 136 + ``` 137 + 0 O    #     138 + 1 O OO#    # 139 + 2      ##    140 + 3 OO #O    O 141 + 4  O     O#  142 + 5 O #  O # # 143 + 6   O  #O  O 144 + 7        O   145 + 8 #    ###   146 + 9 #OO  #     147 + 148 + ``` 149 + 150 + <!-- livebook:{"output":true} --> 151 + 152 + ``` 153 + :ok 154 + ``` 155 + 156 + ```elixir 157 + Day14.weight(map, width, height) 158 + ``` 159 + 160 + <!-- livebook:{"output":true} --> 161 + 162 + ``` 163 + 136 164 + ``` 165 + 166 + ## Part 2 167 + 168 + ```elixir 169 + defmodule Day14.Part2 do 170 + def round(map, width, height) do 171 + map 172 + |> move(width, height) 173 + |> rotate(height) 174 + |> move(height, width) 175 + |> rotate(width) 176 + |> move(width, height) 177 + |> rotate(height) 178 + |> move(height, width) 179 + |> rotate(width) 180 + end 181 + 182 + def move(map, width, height) do 183 + for(x <- 0..width, col = move_column(map, x, height), c <- col, into: %{}, do: c) 184 + end 185 + 186 + def move_column(map, col, height) do 187 + do_move(map, col, height, 0, []) 188 + end 189 + 190 + defp do_move(_map, col, -1, stack, acc) do 191 + expand_stack(0, col, stack) ++ acc 192 + end 193 + 194 + defp do_move(map, col, row, stack, acc) do 195 + case Map.fetch(map, {col, row}) do 196 + :error -> 197 + do_move(map, col, row - 1, stack, acc) 198 + 199 + {:ok, :cube} -> 200 + do_move( 201 + map, 202 + col, 203 + row - 1, 204 + 0, 205 + expand_stack(row + 1, col, stack) ++ [{{col, row}, :cube} | acc] 206 + ) 207 + 208 + {:ok, :round} -> 209 + do_move(map, col, row - 1, stack + 1, acc) 210 + end 211 + end 212 + 213 + defp expand_stack(start, col, len) do 214 + for y <- 0..(len - 1)//1, do: {{col, start + y}, :round} 215 + end 216 + 217 + def rotate(map, height) do 218 + Map.new(map, fn {{x, y}, v} -> 219 + {{height - y, x}, v} 220 + end) 221 + end 222 + 223 + def rounds_with_memoisation(map, width, height) do 224 + Stream.iterate(map, &round(&1, width, height)) 225 + end 226 + end 227 + ``` 228 + 229 + <!-- livebook:{"output":true} --> 230 + 231 + ``` 232 + {:module, Day14.Part2, <<70, 79, 82, 49, 0, 0, 17, ...>>, {:rounds_with_memoisation, 3}} 233 + ``` 234 + 235 + ```elixir 236 + {nmap, _, _} = 237 + Day14.Part2.rounds_with_memoisation(map, width, height) 238 + |> Stream.with_index() 239 + |> Enum.reduce_while(%{}, fn {map, idx}, set -> 240 + case Map.fetch(set, map) do 241 + :error -> {:cont, Map.put(set, map, idx)} 242 + {:ok, prev} -> {:halt, {map, idx, prev}} 243 + end 244 + end) 245 + ``` 246 + 247 + <!-- livebook:{"output":true} --> 248 + 249 + ``` 250 + {%{ 251 + {9, 8} => :round, 252 + {4, 6} => :round, 253 + {9, 9} => :round, 254 + {7, 7} => :round, 255 + {9, 7} => :round, 256 + {1, 5} => :round, 257 + {7, 5} => :cube, 258 + {8, 1} => :round, 259 + {0, 8} => :cube, 260 + {9, 5} => :cube, 261 + {4, 1} => :cube, 262 + {9, 6} => :round, 263 + {5, 9} => :cube, 264 + {8, 7} => :round, 265 + {6, 4} => :round, 266 + {5, 4} => :round, 267 + {9, 1} => :cube, 268 + {5, 6} => :cube, 269 + {5, 2} => :cube, 270 + {4, 9} => :round, 271 + {2, 5} => :cube, 272 + {3, 9} => :round, 273 + {0, 9} => :cube, 274 + {4, 8} => :round, 275 + {6, 2} => :cube, 276 + {7, 8} => :cube, 277 + {6, 5} => :round, 278 + {6, 8} => :cube, 279 + {2, 3} => :round, 280 + {5, 0} => :cube, 281 + {5, 8} => :cube, 282 + {7, 4} => :round, 283 + {3, 3} => :cube, 284 + {8, 4} => :cube, 285 + {2, 9} => :round 286 + }, 10, 3} 287 + ``` 288 + 289 + ```elixir 290 + Day14.Part2.rounds_with_memoisation(map, width, height) 291 + |> Enum.take(11) 292 + |> Stream.each(&Day14.print(&1, width, height)) 293 + |> Enum.map(&Day14.weight(&1, width, height)) 294 + |> IO.inspect(charlists: :as_lists) 295 + ``` 296 + 297 + <!-- livebook:{"output":true} --> 298 + 299 + ``` 300 + 0 O    #     301 + 1 O OO#    # 302 + 2      ##    303 + 3 OO #O    O 304 + 4  O     O#  305 + 5 O #  O # # 306 + 6   O  #O  O 307 + 7        O   308 + 8 #    ###   309 + 9 #OO  #     310 + 311 + 0      #     312 + 1     #   O# 313 + 2    OO##    314 + 3  OO#       315 + 4      OOO#  316 + 5  O#   O# # 317 + 6     O#     318 + 7       OOOO 319 + 8 #   O###   320 + 9 #  OO#     321 + 322 + 0      #     323 + 1     #   O# 324 + 2      ##    325 + 3   O#       326 + 4      OOO#  327 + 5  O#   O# # 328 + 6     O#   O 329 + 7        OOO 330 + 8 #  OO###   331 + 9 # OOO#   O 332 + 333 + 0      #     334 + 1     #   O# 335 + 2      ##    336 + 3   O#       337 + 4      OOO#  338 + 5  O#   O# # 339 + 6     O#   O 340 + 7        OOO 341 + 8 #   O### O 342 + 9 # OOO#   O 343 + 344 + 0      #     345 + 1     #   O# 346 + 2      ##    347 + 3   O#       348 + 4      OOO#  349 + 5  O#   O# # 350 + 6     O#   O 351 + 7        OOO 352 + 8 #   O### O 353 + 9 #  OO#  OO 354 + 355 + 0      #     356 + 1     #   O# 357 + 2      ##    358 + 3    #       359 + 4      OOO#  360 + 5  O#   O# # 361 + 6     O#   O 362 + 7       OOOO 363 + 8 #   O### O 364 + 9 #  OO#  OO 365 + 366 + 0      #     367 + 1     #   O# 368 + 2      ##    369 + 3    #       370 + 4      OOO#  371 + 5  O#   O# # 372 + 6     O#   O 373 + 7       OOOO 374 + 8 #    ### O 375 + 9 # OOO#  OO 376 + 377 + 0      #     378 + 1     #   O# 379 + 2      ##    380 + 3   O#       381 + 4       OO#  382 + 5  O#   O# # 383 + 6     O#   O 384 + 7       OOOO 385 + 8 #    ### O 386 + 9 # OOO#  OO 387 + 388 + 0      #     389 + 1     #   O# 390 + 2      ##    391 + 3   O#       392 + 4       OO#  393 + 5  O#   O# # 394 + 6     O#     395 + 7       OOOO 396 + 8 #   O### O 397 + 9 # OOO#  OO 398 + 399 + 0      #     400 + 1     #   O# 401 + 2      ##    402 + 3   O#       403 + 4      OOO#  404 + 5  O#   O# # 405 + 6     O#     406 + 7       OOOO 407 + 8 #   O### O 408 + 9 # OOO#   O 409 + 410 + 0      #     411 + 1     #   O# 412 + 2      ##    413 + 3   O#       414 + 4      OOO#  415 + 5  O#   O# # 416 + 6     O#   O 417 + 7        OOO 418 + 8 #   O### O 419 + 9 # OOO#   O 420 + 421 + [136, 129, 114, 110, 110, 105, 103, 106, 111, 114, 110] 422 + ``` 423 + 424 + <!-- livebook:{"output":true} --> 425 + 426 + ``` 427 + [136, 129, 114, 110, 110, 105, 103, 106, 111, 114, 110] 428 + ``` 429 + 430 + <!-- livebook:{"offset":13089,"stamp":{"token":"XCP.6NDtt8fJ01JLOq3nTevL25H4mHLTDc6Od4j4bkK8EzYDIEbnkcC_afNOcboznLxeJd_Vr-eQOTfSeVj0rfhlPWRbNSo_OLjTWZxTnB_TdqgAr5J0iWjRjf2BDccO40DsHw","version":2}} -->
+130
2023/day15.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 15 4 + 5 + ```elixir 6 + Mix.install([:kino_aoc]) 7 + ``` 8 + 9 + ## Section 10 + 11 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"15","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 + 13 + ```elixir 14 + {:ok, puzzle_input} = 15 + KinoAOC.download_puzzle("2023", "15", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16 + ``` 17 + 18 + <!-- livebook:{"output":true} --> 19 + 20 + ``` 21 + {:ok, 22 + "kv-,lmv-,zlg=4,hn=2,qp=8,dxd-,pk=3,pxfnc-,jgjch-,dp=3,lffh-,sprsl=1,hns=6,fl=1,hn-,ltgg-,hl-,gx-,sv-,lz-,qqxd-,jxgxjv-,hvlh=2,tnf=8,sprsl=1,tbxjmh=7,cv=3,zl-,tbcz=3,gcknh=6,jqzcc=2,gdx-,kqfg=5,lrc=1,gqq-,ztl-,cct-,ktb=8,vs-,cnpx=4,hsq=3,ht-,nb-,mqv=1,vvhsz-,bhqq=6,tdc=6,zf=6,qxh=6,th-,ltl-,rpk=9,krn=3,mqh=9,zt-,hm=9,tbxjmh=7,rmc-,qvsq=9,gdr-,czq-,jk-,lnrsql=7,fqqz-,kfrtbv-,bmm=7,psxz=3,qkr=7,ckf=5,dl-,psfh-,qqrmbj=5,tnvl-,ffnx-,ttd-,tg-,hhhk-,qx-,ldx=1,gr=6,tvj-,jqzcc=4,gvk=3,nft=2,rc=4,hk=5,tbxjmh=8,mlxs-,lmv=3,ht=7,jgb-,tbxjmh-,gmfc=2,bxg-,tmqp-,gld-,kcvf-,ggdr-,psxz=1,lt-,cm-,pxfnc-,sdmhxq-,brr=6,bjv-,th-,td=1,jsvc-,rkjbzv=1,cbbq-,nqpsc-,cgvvt-,vtm-,vk=3,tjr=9,pbm=7,gjl-,fkrl-,js=2,zjn=2,sprsl=9,rk=7,hpd=8,bgmhj-,czq-,xxcfk=9,qdxb-,ns=1,mx-,dhs-,xf-,ttd=9,tvj=8,kng-,hm-,rpk=5,hrk-,lpbk-,lbzxd=8,vmcj-,mmb-,ks-,ks=6,mx=6,xq=8,mkn-,cnpx-,rx=3,vfpj-,zl-,tgt=4,krn=7,hmr=4,gcknh-,rg=9,nb=3,jc-,qdxb=2,lffh-,ksclkb=6,pxrflz-,kkxp-,tbcz-,zt-,ltn-,rmc=1,cpscb-,zsrpq-,snnd-,kg=6,fbhvr-,kng=9,mck=3,xtz=7,bbsn=9,ht=9,zgq-,bh-,spv=5,rjg=7,tsc=1,dbvmr=3,hk-,nkg-,vzlvs-,bcxgj=1,sqhb=6,tv-,tlt-,vqm=4,vmcj=6,rx=3,hmr-,jzpt-,pmq-,hrk-,jx=2,bq=4,dxn=3,tgsr-,xlkg-,nrj-,lz-,bnlk=2,jxp=1,hfztr=8,gt=2,lgn=7,dpmt-,xj-,pj-,nzx-,jn=8,hpd-,dfgm-,qkr-,qqrmbj=1,tpn=5,rc=8,hnhm=1,vzlvs=6,bt=8,mhzf=2,hrk-,vzlvs-,sfg-,jzpt-,jqzcc=3,vvt-,ffnx=6,btt-,pbm-,hzkpq-,gdr-,mx=6,rn=9,qkr=6,ks-,zf-,nkg=2,ptrtg-,dxn-,xf-,cv-,vf=5,qk=4,zlg=8,sfg=3,sn-,hsq=5,tg=8,dn=2,jn=1,spv=9,hhhk=9,nkc=7,rm=3,hrhmdx-,zdtxcq=3,chb-,jxb-,psfh=9,pn-,jgb=2,clh=9,crg-,vgxg-,kq=3,qfz=6,rq=3,qvz=2,dl-,vtm-,rn-,kng=5,jv-,cgz=7,fff=7,gmfc=6,jgb=4,zf-,bt-,lqkmtd-,xlv=3,pjn=6,bstf-,rn-,kb-,tcp-,bx-,gkj-,vpp-,fznq-,xlg=8,qdq=2,hk=1,gdr=6,qd-,nsc=3,vfpj=7,qjjnq-,sstlb-,zs=6,qhm-,pmq-,gqblq-,pnnd=9,ztl=1,bmmdqk-,fkpd-,mm-,gs-,bnlk-,sstlb-,ct=6,hstx-,khq=9,gjd=3,fbhvr-,qqxd-,hrhmdx-,vnj=3,lrc-,hnhm=7,lsr=4,gqblq-,sprsl=7,gfm-,dg-,fmf=5,tsc=9,sz=1,tpn=6,gld-,rmc=4,spv-,xhs=2,hn-,sfv=8,rhg-,dd-,fzl-,hlq=3,czq=4,nvm-,fhgz=1,jzrz=4,jntz-,jj=2,rpk=8,bjv=3,lgn=7,hzj-,xhd=8,nnx-,gdr-,hzls=9,kdt-,vvt-,bgmhj=1,ldx=7,tcp-,kntk=9,brv-,xd=6,cn-,pdb-,jk-,qh-,vmcj-,jj=6,dn=9,mdzv-,pvk=4,gmfc-,rmj-,sh-,cl=6,pvk=1,mk=7,hx=5,gqq=5,jc-,qf-,tmqp-,srtm-,fqqz=1,rjkvz=4,nff=4,vs=6,zsrpq-,bpkc-,qqxd-,lsbk-,gcknh=9,gmfc-,nxrcnk-,gjl=5,th-,tsc-,pdqkq=6,zk-,zt=6,bp-,hn-,pd=5,jqjdg=6,pjm=7,dh-,mlnc-,psfh-,rm-,nndl=2,tnf=5,gt-,dfm-,rlr=2,pmbfzf-,lt-,vgxg-,xlv-,qr=6,xqst-,pjm-,prj=8,ztgp-,zt-,lrc=2,pln-,bd-,cmnj-,xp=5,cm-,bcqvf=9,gp=8,bd=4,hvlh=4,bpkc=9,ld-,vj-,lnrsql-,vsp-,prj=8,fbhvr-,bd=8,qf=2,zjn-,tbxjmh-,xhs-,kcvf=4,tgsr=4,zk-,sxz-,hmr=4,pj=9,hl-,sgl-,jz-,mbm-,gjl=8,sstlb-,vdd=7,nb=5,snvxq-,fz=3,bh=6,db-,vdd=2,bmmdqk-,qsbf=2,tv=1,prj=5,kqp-,vzlvs-,lplqhd-,tqtqg=5,ddq=4,mmz-,vfdtt=4,vvhsz=8,zq=3,pn=7,lgn-,tzpv-,zqq-,fzc-,rl-,srtm-,tpn-,cl=7,fz=7,tnvl-,dhx-,td-,hzkpq-,kqfg-,xbz=5,rpk-,nbhcs=5,jj-,xp=2,kp=8,rfxck-,vj=8,bvfl-,hft=8,jj=4,qtd-,bcqvf-,dh=3,xt-,mbc-,msd=7,zqq=7,pdqkq-,qr=4,rhg=2,vzlvs=9,dh=2,hrhmdx-,vvt-,zs=8,dxd-,gkxmlj-,tgsr=1,tf=5,qdxb-,kq=7,mlxs-,jjxlh=8,lplqhd-,rjkvz=3,fph=6,lmv-,mdx-,kcvf=5,vtd-,khq-,gqblq-,hzj=1,mkn-,bxg=7,qtd-,bnlk=9,ltn-,vnz=8,mk-,xnrnz=7,skmhp=3,ddq-,rc=5,vnj=6,sz=5,cl=6,qvz=1,vdd=4,hft=6,rmq=9,jntz=5,qs-,zqq-,mqh-,qh-,hh-,dbnrnp-,nrj-,mqv-,rmj-,nqpsc-,tq=5,cnk-,qctz=4,xfdh=9,ptrtg=7,nvm-,xlkg-,psgp=6,ns-,rrxq-,bcxgj-,xhs-,jgmn=6,mcs=9,gs-,kntk-,fp-,xd-,pn=8,tzpv=3,rrxq=4,vdd=1,xhd-,rmj-,mx-,spq=8,qqkv=8,mjpb=5,vgxg=8,sfv-,gld-,qqkv=7,rh-,tj=3,snnd=8,bd-,vgxg=6,kng-,gvk=3,jjxlh=5,jgm=5,qvsq-,nkc-,bqntx-,cfn=6,crg=1,kng-,hvlh-,xtxc=1,qqxd-,fzl=3,hjs=4,nvm-,hzkpq-,rk-,jv-,rjkvz-,cjq-,lkmj-,vtj-,xhp=1,qf=2,cnpx=9,psxz-,mcs-,jx=6,hx-,bt-,nsc=2,qctz-,rx-,kdt-,dbvmr-,ctn=8,lrc-,xmvfk-,xh-,vqm=8,mlnc=4,jgb-,cbbq-,vk-,csg-,jntz-,pcdffj-,xt-,xj-,fp-,bt-,kntk=1,ztl-,qkr-,clh-,bq=8,ztgp-,mk-,xfdh-,ncsm-,zhj-,tlt-,ncsm=1,mbc-,tqtqg-,pb-,bqgs=5,fhgz-,ksb-,lsr-,qvz-,tk=5,hns=5,pbxm=8,ct-,lrc-,flrj-,zd-,pg-,pdqkq=1,gxxk-,ffnx=4,zlg-,ts=5,bgmhj-,jjx=7,vl-,hx=1,jgmn-,lkmj-,rrgf-,qphsv=9,xj=1,cx-,prj=6,jndqj-,dxd=6,mcs-,rhg=2,jk=3,qsn-,jmfhs-,hk-,ts=7,pk=9,vmcj-,nzx-,bt-,mqh-,ctc-,nkg=4,rpk-,pdb=" <> ...} 23 + ``` 24 + 25 + ```elixir 26 + # puzzle_input = "rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7" 27 + ``` 28 + 29 + <!-- livebook:{"output":true} --> 30 + 31 + ``` 32 + nil 33 + ``` 34 + 35 + ```elixir 36 + defmodule Day15 do 37 + def hash(binary) do 38 + for <<c <- binary>>, reduce: 0, do: (acc -> Bitwise.band((c + acc) * 17, 0xFF)) 39 + end 40 + end 41 + ``` 42 + 43 + <!-- livebook:{"output":true} --> 44 + 45 + ``` 46 + {:module, Day15, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:hash, 1}} 47 + ``` 48 + 49 + ```elixir 50 + segments = 51 + puzzle_input 52 + |> String.split(",") 53 + ``` 54 + 55 + <!-- livebook:{"output":true} --> 56 + 57 + ``` 58 + ["kv-", "lmv-", "zlg=4", "hn=2", "qp=8", "dxd-", "pk=3", "pxfnc-", "jgjch-", "dp=3", "lffh-", 59 + "sprsl=1", "hns=6", "fl=1", "hn-", "ltgg-", "hl-", "gx-", "sv-", "lz-", "qqxd-", "jxgxjv-", 60 + "hvlh=2", "tnf=8", "sprsl=1", "tbxjmh=7", "cv=3", "zl-", "tbcz=3", "gcknh=6", "jqzcc=2", "gdx-", 61 + "kqfg=5", "lrc=1", "gqq-", "ztl-", "cct-", "ktb=8", "vs-", "cnpx=4", "hsq=3", "ht-", "nb-", 62 + "mqv=1", "vvhsz-", "bhqq=6", "tdc=6", "zf=6", "qxh=6", "th-", ...] 63 + ``` 64 + 65 + ## Part 1 66 + 67 + ```elixir 68 + segments 69 + |> Enum.map(&Day15.hash/1) 70 + |> Enum.sum() 71 + ``` 72 + 73 + <!-- livebook:{"output":true} --> 74 + 75 + ``` 76 + 506869 77 + ``` 78 + 79 + ## Part 2 80 + 81 + ```elixir 82 + segments 83 + |> Enum.map(fn step -> 84 + [_, label, action] = Regex.run(~r/([a-z]+)(-|=\d+)/, step) 85 + 86 + box = Day15.hash(label) 87 + 88 + case action do 89 + "-" -> {box, label, :rm} 90 + "=" <> rest -> {box, label, {:add, String.to_integer(rest)}} 91 + end 92 + end) 93 + |> Enum.reduce(%{}, fn {box, label, action}, map -> 94 + curr = map[box] || [] 95 + 96 + next = 97 + case action do 98 + {:add, f} -> 99 + if Enum.any?(curr, &(elem(&1, 0) == label)) do 100 + List.keyreplace(curr, label, 0, {label, f}) 101 + else 102 + [{label, f} | curr] 103 + end 104 + 105 + :rm -> 106 + List.keydelete(curr, label, 0) 107 + end 108 + 109 + Map.put(map, box, next) 110 + end) 111 + |> Enum.map(fn {box, lenses} -> 112 + box = box + 1 113 + 114 + lenses 115 + |> Enum.reverse() 116 + |> Enum.with_index(1) 117 + |> Enum.map(fn {{_, f}, id} -> box * id * f end) 118 + |> Enum.sum() 119 + end) 120 + |> Enum.sum() 121 + |> dbg() 122 + ``` 123 + 124 + <!-- livebook:{"output":true} --> 125 + 126 + ``` 127 + 271384 128 + ``` 129 + 130 + <!-- livebook:{"offset":6563,"stamp":{"token":"XCP.ikIQAzWaCpMFzPgSppGb8erUqNQTiTQKVT4Z8-snaHPxRPHLJ4FSFvjZQhOg5ALkY4RVu78B3ZYCWSkqZ0vt8iql9ZvmaUtNNTG10v5VUIi3Jt0IgRmOCL0PL47Vn3f_gQ","version":2}} -->
+178
2023/day16.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 16 4 + 5 + ```elixir 6 + Mix.install([:kino_aoc]) 7 + ``` 8 + 9 + ## Section 10 + 11 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"16","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 + 13 + ```elixir 14 + {:ok, puzzle_input} = 15 + KinoAOC.download_puzzle("2023", "16", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16 + ``` 17 + 18 + <!-- livebook:{"output":true} --> 19 + 20 + ``` 21 + {:ok, 22 + "\\\\.......\\.............../-........|......................-......../..................../......./....|........\n\\.................\\....\\...../........|........|....../.\\....-....-..................|../...|...\\./...........\n../...-.....................\\./-.....-.........................../...........\\|......\\......--............/...\n.......|........\\...\\.........../|...../.........../...../..../...../.................\\.././..................\n...........\\|..........-.................|.|.............|.............|....|..|-...........-..-......./......\n.............................-../.......\\.........\\..........................\\.......|....|.........-.........\n..................../......................-......-...................................../...\\...........|.....\n..|..............................\\......................|....-................................................\n..........\\........./.........................|.................../....-|...../............./.....|.........//\n.-./../.................|....................|................../................\\....|..|..../|.......-./....\n................/........................\\...|.....-.....-...-........\\.............../.......-|-./...........\n.......\\|.........|..-.........................|../...../.\\.../............../.........|.....|../........\\....\n..............-./.............../...........................|....-....-..../......\\....-.......\\........./....\n...............././.-.......|/...................../..-..-..\\...\\.-.-..-................../...................\n..-......../.-.......\\..............................\\/....................................-...................\n.........................................\\....\\.........\\.-......-.|.....\\.......................\\............\n./.........\\.-.-/.............................................|/......|........-\\-............................\n-.....................|.........................|..\\..........|..--....\\..\\........./.........................\n...............\\............../............\\.........................-...............|................/....\\..\n.-.........-...........-|......../...............|.........-...-...|....................-.....................\n.\\./...............|......\\..........-..\\.................-...........................././../.-............/.-\n...-/..............-..|........................|..../.......-..........-/...............\\............../......\n|..........-\\..........\\......../.................\\.|.......-............../.......|.................../......\n.....\\...............|................/........\\.....\\..................-.../........................./.......\n..............................-..\\.../.........-..-........-.......-.............-......................|.../.\n.........../../.|.......-/-.|.|...-...............................\\\\./....|................/.\\................\n.........-..............................|.||......................./........\\..-..../.................|...../.\n.............\\...../\\.............../...-......../.....\\.....................................-/........\\..|..\\\n...............-.-../.-./....|.......\\................/...|................................................|.|\n........-.................-.........................-................\\......|.....\\......-........-...........\n|../.......|......\\............|....../..|.......|../.........................................................\n....................................../..\\....\\\\.............\\...................||/.../.../........\\.........\n............./..../....-...|........../-.............\\......................................\\/........-..-....\n.................\\\\...............|\\\\...........\\.........../......-.......-............\\..............-..-..\\\n...|..../..|../..|........./.../.-..............................\\.........-........................|.\\....||..\n......................./..|....-..............................-........................././../................\n../.\\.............//.\\.|..................-.....\\...........|..././............/...................." <> ...} 23 + ``` 24 + 25 + ```elixir 26 + # puzzle_input = 27 + ~S""" 28 + .|...\.... 29 + |.-.\..... 30 + .....|-... 31 + ........|. 32 + .......... 33 + .........\ 34 + ..../.\\.. 35 + .-.-/..|.. 36 + .|....-|.\ 37 + ..//.|.... 38 + """ 39 + ``` 40 + 41 + <!-- livebook:{"output":true} --> 42 + 43 + ``` 44 + ".|...\\....\n|.-.\\.....\n.....|-...\n........|.\n..........\n.........\\\n..../.\\\\..\n.-.-/..|..\n.|....-|.\\\n..//.|....\n" 45 + ``` 46 + 47 + ```elixir 48 + lines = String.split(puzzle_input, "\n", trim: true) 49 + 50 + map = 51 + for {line, y} <- Enum.with_index(lines), 52 + {char, x} <- line |> String.to_charlist() |> Enum.with_index(), 53 + char not in ~c".", 54 + into: %{}, 55 + do: {{y, x}, <<char>>} 56 + 57 + {height, width} = {byte_size(hd(lines)) - 1, length(lines) - 1} 58 + ``` 59 + 60 + <!-- livebook:{"output":true} --> 61 + 62 + ``` 63 + {109, 109} 64 + ``` 65 + 66 + ```elixir 67 + defmodule Day16 do 68 + defguard in_map(yx, hw) when elem(yx, 0) in 0..elem(hw, 0) and elem(yx, 1) in 0..elem(hw, 1) 69 + 70 + def traverse(map, wh, start \\ {{0, 0}, :right}), 71 + do: do_traverse(map, wh, start, _acc = MapSet.new(), _visited = MapSet.new()) 72 + 73 + defp do_traverse(map, hw, {xy, dir} = pos, acc, visited) when in_map(xy, hw) do 74 + if pos not in visited do 75 + acc = MapSet.put(acc, xy) 76 + 77 + case Map.fetch(map, xy) do 78 + :error -> 79 + do_traverse(map, hw, next(xy, dir), acc, visited) 80 + 81 + {:ok, "|"} when dir in ~w[up down]a -> 82 + do_traverse(map, hw, next(xy, dir), acc, visited) 83 + 84 + {:ok, "-"} when dir in ~w[left right]a -> 85 + do_traverse(map, hw, next(xy, dir), acc, visited) 86 + 87 + {:ok, mirror} when mirror in ~w[/ \\] -> 88 + next = mirror(mirror, dir) 89 + do_traverse(map, hw, next(xy, next), acc, MapSet.put(visited, pos)) 90 + 91 + {:ok, "|"} when dir in ~w[left right]a -> 92 + # Add both sides to visited, as it will result in the same outcome 93 + visited = 94 + visited 95 + |> MapSet.put({xy, :left}) 96 + |> MapSet.put({xy, :right}) 97 + 98 + {acc, visited} = do_traverse(map, hw, next(xy, :up), acc, visited) 99 + do_traverse(map, hw, next(xy, :down), acc, visited) 100 + 101 + {:ok, "-"} when dir in ~w[up down]a -> 102 + # Add both sides to visited, as it will result in the same outcome 103 + visited = 104 + visited 105 + |> MapSet.put({xy, :up}) 106 + |> MapSet.put({xy, :down}) 107 + 108 + {acc, visited} = do_traverse(map, hw, next(xy, :left), acc, visited) 109 + do_traverse(map, hw, next(xy, :right), acc, visited) 110 + end 111 + else 112 + {acc, visited} 113 + end 114 + end 115 + 116 + defp do_traverse(_, _wh, _pos, acc, visited) do 117 + {acc, visited} 118 + end 119 + 120 + defp mirror("/", :up), do: :right 121 + defp mirror("/", :left), do: :down 122 + defp mirror("/", :down), do: :left 123 + defp mirror("/", :right), do: :up 124 + 125 + defp mirror("\\", :up), do: :left 126 + defp mirror("\\", :left), do: :up 127 + defp mirror("\\", :down), do: :right 128 + defp mirror("\\", :right), do: :down 129 + 130 + defp next({y, x}, :up), do: {{y - 1, x}, :up} 131 + defp next({y, x}, :left), do: {{y, x - 1}, :left} 132 + defp next({y, x}, :down), do: {{y + 1, x}, :down} 133 + defp next({y, x}, :right), do: {{y, x + 1}, :right} 134 + end 135 + ``` 136 + 137 + <!-- livebook:{"output":true} --> 138 + 139 + ``` 140 + {:module, Day16, <<70, 79, 82, 49, 0, 0, 28, ...>>, {:next, 2}} 141 + ``` 142 + 143 + ## Part 1 144 + 145 + ```elixir 146 + {path, _} = Day16.traverse(map, {height, width}) 147 + 148 + MapSet.size(path) 149 + ``` 150 + 151 + <!-- livebook:{"output":true} --> 152 + 153 + ``` 154 + 7242 155 + ``` 156 + 157 + ## Part 2 158 + 159 + ```elixir 160 + start_points = 161 + Enum.concat([ 162 + Enum.flat_map(0..height, &[{{&1, 0}, :right}, {{&1, width}, :left}]), 163 + Enum.flat_map(0..width, &[{{0, &1}, :down}, {{height, &1}, :up}]) 164 + ]) 165 + 166 + start_points 167 + |> Task.async_stream(&Day16.traverse(map, {height, width}, &1)) 168 + |> Stream.map(fn {:ok, {path, _}} -> MapSet.size(path) end) 169 + |> Enum.max() 170 + ``` 171 + 172 + <!-- livebook:{"output":true} --> 173 + 174 + ``` 175 + 7572 176 + ``` 177 + 178 + <!-- livebook:{"offset":8394,"stamp":{"token":"XCP.G2qkGI0iiEpXKpxgmF3X_dOzQWYnfJes3P9XQazzqVafzbVljgd42sRxbC_RC5Nc9-rrcx45UodmXf17HwB9X_4sZz6up_iLXNZDUxXQ0eGyvZkk_NcBMt5FRaALMHBiHw","version":2}} -->
+310
2023/day18.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 18 4 + 5 + ```elixir 6 + Mix.install([:kino_aoc]) 7 + ``` 8 + 9 + ## Section 10 + 11 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"18","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 + 13 + ```elixir 14 + {:ok, puzzle_input} = 15 + KinoAOC.download_puzzle("2023", "18", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16 + ``` 17 + 18 + <!-- livebook:{"output":true} --> 19 + 20 + ``` 21 + {:ok, 22 + "L 5 (#0760b2)\nU 4 (#058b53)\nL 3 (#d05a12)\nD 4 (#058b51)\nL 6 (#12ee82)\nU 6 (#63c403)\nL 4 (#065a12)\nU 8 (#a44373)\nL 7 (#7581c2)\nU 7 (#334ec3)\nL 3 (#35e792)\nU 5 (#079963)\nL 3 (#1737b0)\nU 4 (#29a7a3)\nL 2 (#705a02)\nU 5 (#7151e3)\nL 4 (#705a00)\nU 4 (#43f5a3)\nL 5 (#1737b2)\nU 8 (#61a8c3)\nL 5 (#6005d2)\nD 3 (#20f4c1)\nL 3 (#4aa812)\nD 3 (#8163b1)\nL 4 (#80ac22)\nD 4 (#5e64c1)\nL 7 (#cb5430)\nD 5 (#7ac2d1)\nR 7 (#920132)\nD 6 (#a44371)\nL 6 (#944582)\nU 3 (#bc3423)\nL 5 (#71c1b2)\nU 4 (#88e6f3)\nL 4 (#0e35f2)\nU 5 (#11fa31)\nL 8 (#6ab312)\nU 5 (#5c3df1)\nR 8 (#40be22)\nU 3 (#5c3df3)\nR 9 (#42e412)\nU 6 (#11fa33)\nR 5 (#178f02)\nU 10 (#88e6f1)\nL 2 (#cff5f2)\nU 6 (#41fb73)\nL 5 (#247782)\nU 4 (#8d6d73)\nL 5 (#139492)\nU 8 (#6360d3)\nR 4 (#1688c2)\nU 2 (#28eb43)\nR 5 (#7d6230)\nU 6 (#769093)\nR 3 (#7d6232)\nU 5 (#487383)\nL 5 (#4fe4c2)\nU 4 (#784971)\nL 7 (#649a42)\nU 3 (#81c8d1)\nL 6 (#3e8422)\nU 5 (#2e26f3)\nL 5 (#880bd2)\nU 4 (#cbeb53)\nL 6 (#3c3a82)\nU 3 (#990203)\nL 8 (#18ce92)\nU 6 (#3bd723)\nL 10 (#8b17c2)\nU 5 (#931f03)\nR 7 (#56b4b2)\nU 3 (#1c3d03)\nR 2 (#693490)\nU 7 (#a5d813)\nL 4 (#693492)\nU 7 (#454523)\nR 8 (#749e20)\nU 3 (#b6ecd3)\nL 8 (#1e69b0)\nU 6 (#0cd813)\nR 4 (#a286d0)\nU 8 (#8249a3)\nR 6 (#c431e0)\nU 10 (#64b5d3)\nR 3 (#26fee0)\nU 7 (#3a6403)\nR 7 (#44c0a2)\nU 8 (#574291)\nR 2 (#9bf502)\nU 5 (#574293)\nR 5 (#0a7b22)\nU 8 (#12e553)\nR 2 (#67c0e0)\nU 3 (#ab6f63)\nR 7 (#922b60)\nD 6 (#680283)\nR 5 (#637c90)\nD 5 (#b10343)\nR 3 (#954ed0)\nD 8 (#254333)\nL 8 (#3f16a0)\nD 3 (#55f2c3)\nR 4 (#2465e0)\nD 9 (#6b7461)\nR 6 (#8b2b00)\nD 7 (#6b7463)\nR 5 (#7ae9f0)\nD 3 (#584e33)\nR 3 (#4fd2d2)\nD 4 (#30e451)\nR 3 (#682c22)\nD 3 (#30e453)\nR 4 (#727be2)\nD 8 (#85b173)\nL 4 (#3a8c50)\nD 3 (#004a23)\nR 2 (#6eef60)\nD 3 (#92b8d3)\nR 5 (#bdb140)\nU 8 (#8500b3)\nR 5 (#2e42f2)\nD 8 (#531953)\nR 3 (#9358a2)\nD 5 (#14d4b3)\nR 6 (#b19aa2)\nD 8 (#14d4b1)\nR 8 (#3e0d32)\nU 8 (#274023)\nR 3 (#b2d1a2)\nU 3 (#274021)\nR 8 (#206d02)\nU 6 (#2d02d3)\nR 4 (#0bd782)\nU 3 (#483403)\nR 9 (#7d6fc0)\nU 5 (#717513)\nR 9 (#5e63a0)\nU 6 (#614071)\nR 6 (#6df500)\nU 9 (#6f14e1)\nR 5 (#9229d0)\nU 5 (#6f14e3)\nL 5 (#0993b0)\nU 4 (#614073)\nL 3 (#aad3a0)\nU 7 (#2aed13)\nL 7 (#117f30)\nU 8 (#b185d3)\nL 3 (#a39640)\nU 10 (#a408b1)\nL 5 (#1e31b0)\nU 4 (#5af491)\nL 3 (#43ff50)\nU 4 (#125121)\nR 5 (#2321b0)\nU 4 (#4a6de1)\nR 6 (#80c430)\nU 5 (#4a6de3)\nL 5 (#8fe3b0)\nU 4 (#483d91)\nR 8 (#012050)\nU 3 (#3730e1)\nR 5 (#d36d12)\nU 8 (#7d5761)\nR 7 (#d36d10)\nU 7 (#21b1c1)\nR 9 (#8ea5e2)\nU 7 (#602a01)\nR 8 (#aae3f2)\nU 5 (#8d2981)\nR 5 (#263f72)\nU 5 (#2a3471)\nR 7 (#263f70)\nU 2 (#88ea21)\nR 3 (#3f5f62)\nU 6 (#5e1cc1)\nR 5 (#adffb0)\nU 6 (#104941)\nR 5 (#073230)\nU 4 (#25be03)\nL 9 (#1a2fd0)\nU 5 (#3d1233)\nR 9 (#879540)\nU 4 (#5c9671)\nL 2 (#6ad9e0)\nU 8 (#5c9673)\nL 7 (#3bb750)\nU 3 (#3d1231)\nR 11 (#080ca0)\nU 4 (#25be01)\nR 4 (#50a100)\nU 5 (#163541)\nL 5 (#27ff80)\nU 3 (#ab8481)\nR 4 (#549890)\nU 7 (#010511)\nL 4 (#749c72)\nU 4 (#46cfe1)\nL 5 (#a03822)\nD 5 (#594361)\nL 2 (#12a9f0)\nD 9 (#509f91)\nL 3 (#c051f0)\nU 3 (#509f93)\nL 7 (#41d8b0)\nD 3 (#80af51)\nL 3 (#549892)\nD 9 (#29c701)\nL 5 (#58fe00)\nD 5 (#4ef833)\nR 5 (#4ad860)\nD 7 (#aa4b13)\nL 7 (#6d6810)\nD 8 (#774e21)\nL 6 (#631140)\nU 8 (#4c9b31)\nL 4 (#4a8a50)\nD 3 (#61b9d1)\nL 6 (#665fd0)\nD 5 (#4edd51)\nR 6 (#46f5d0)\nD 3 (#109bd1)\nL 6 (#896f50)\nD 5 (#3ab8e1)\nL 3 (#6f6ce0)\nD 4 (#5acd11)\nL 5 (#1d15b2)\nU 4 (#032e23)\nL 10 (#8d6c92)\nU 3 (#032e21)\nR 10 (#4e59f2)\nU 5 (#70a541)\nL 5 (#1102a0)\nU 8 (#8b66f1)\nL 5 (#871710)\nU 10 (#be4e51)\nR 3 (#871712)\nU 11 (#1182c1)\nR 3 (#1102a2)\nD 9 (#493441)\nR 8 (#7a6b80)\nD 4 (#c3daa1)\nR 3 (#8a38d0)\nU 3 (#07ac71)\nR 4 (#131b90)\nU 5 (#34c6e1)\nR 4 (#914cf2)\nU 5 (#0e9af1)\nR 3 (#6c62d2)\nU 3 (#3af801)\nL 6 (#0018c0)\nU 7 (#2b7361)\nL 4 (#55fb20)\nU 5 (#8a33c1)\nR 4 (#a79be0)\nU 4 (#59acf1)\nR 7 (#bb8240)\nD 5 (#77ca71)\nR 7 (#894bd0)\nU 5 (#a12ff1)\nR 3 (#437630)\nD 4 (#1dbba1)\nR 10 (#4c87b0)\nU 6 (#9ea131)\nR 2 (#4c87b2)\nU 4 (#19f7e1)\nL 11 (#85c770)\nU 4 (#220631)\nL 9 (#224540)\nU 5 (#d4ac83)\nL 4 (#421610)\nU 3 (#23ae63)\nL 9 (#8259c0)\nD 4 (#1b4b51)\nR 6 (#b84e80)\nD 11 (#9b8e41)\nL 6 (#29c310)\nD 4 (#9cba93)\nL 6 (#2e33e0)\nU 10 (#1d8b03)\nL 5 (#2578e2)\nU 7 (#0c7911)\nL 2 (#6112e2)\nU 2 (#0c7913)\nL 7 (#621cb2)\nD 8 (#4164f3)\nL 4 (#080dd2)\nU 11 (#574773)\nR 7 (#6ab252)\nU 3 (#4224b3)\nR 3 (#898930)\nU 2 (#c8" <> ...} 23 + ``` 24 + 25 + ```elixir 26 + # puzzle_input = 27 + """ 28 + R 6 (#70c710) 29 + D 5 (#0dc571) 30 + L 2 (#5713f0) 31 + D 2 (#d2c081) 32 + R 2 (#59c680) 33 + D 2 (#411b91) 34 + L 5 (#8ceee2) 35 + U 2 (#caa173) 36 + L 1 (#1b58a2) 37 + U 2 (#caa171) 38 + R 2 (#7807d2) 39 + U 3 (#a77fa3) 40 + L 2 (#015232) 41 + U 2 (#7a21e3) 42 + """ 43 + ``` 44 + 45 + <!-- livebook:{"output":true} --> 46 + 47 + ``` 48 + "R 6 (#70c710)\nD 5 (#0dc571)\nL 2 (#5713f0)\nD 2 (#d2c081)\nR 2 (#59c680)\nD 2 (#411b91)\nL 5 (#8ceee2)\nU 2 (#caa173)\nL 1 (#1b58a2)\nU 2 (#caa171)\nR 2 (#7807d2)\nU 3 (#a77fa3)\nL 2 (#015232)\nU 2 (#7a21e3)\n" 49 + ``` 50 + 51 + ```elixir 52 + commands = 53 + puzzle_input 54 + |> String.split("\n", trim: true) 55 + |> Enum.map(fn <<dir>> <> " " <> rest -> 56 + {len, " (#" <> <<hex::binary-6>> <> ")"} = Integer.parse(rest) 57 + {dir, len, hex} 58 + end) 59 + ``` 60 + 61 + <!-- livebook:{"output":true} --> 62 + 63 + ``` 64 + [ 65 + {76, 5, "0760b2"}, 66 + {85, 4, "058b53"}, 67 + {76, 3, "d05a12"}, 68 + {68, 4, "058b51"}, 69 + {76, 6, "12ee82"}, 70 + {85, 6, "63c403"}, 71 + {76, 4, "065a12"}, 72 + {85, 8, "a44373"}, 73 + {76, 7, "7581c2"}, 74 + {85, 7, "334ec3"}, 75 + {76, 3, "35e792"}, 76 + {85, 5, "079963"}, 77 + {76, 3, "1737b0"}, 78 + {85, 4, "29a7a3"}, 79 + {76, 2, "705a02"}, 80 + {85, 5, "7151e3"}, 81 + {76, 4, "705a00"}, 82 + {85, 4, "43f5a3"}, 83 + {76, 5, "1737b2"}, 84 + {85, 8, "61a8c3"}, 85 + {76, 5, "6005d2"}, 86 + {68, 3, "20f4c1"}, 87 + {76, 3, "4aa812"}, 88 + {68, 3, "8163b1"}, 89 + {76, 4, "80ac22"}, 90 + {68, 4, "5e64c1"}, 91 + {76, 7, "cb5430"}, 92 + {68, 5, "7ac2d1"}, 93 + {82, 7, "920132"}, 94 + {68, 6, "a44371"}, 95 + {76, 6, "944582"}, 96 + {85, 3, "bc3423"}, 97 + {76, 5, "71c1b2"}, 98 + {85, 4, "88e6f3"}, 99 + {76, 4, "0e35f2"}, 100 + {85, 5, "11fa31"}, 101 + {76, 8, "6ab312"}, 102 + {85, 5, "5c3df1"}, 103 + {82, 8, "40be22"}, 104 + {85, 3, "5c3df3"}, 105 + {82, 9, "42e412"}, 106 + {85, 6, "11fa33"}, 107 + {82, 5, "178f02"}, 108 + {85, 10, "88e6f1"}, 109 + {76, 2, "cff5f2"}, 110 + {85, 6, "41fb73"}, 111 + {76, 5, "247782"}, 112 + {85, 4, ...}, 113 + {76, ...}, 114 + {...}, 115 + ... 116 + ] 117 + ``` 118 + 119 + ## Part 1 120 + 121 + ```elixir 122 + dirs = %{ 123 + ?U => {0, -1}, 124 + ?D => {0, 1}, 125 + ?L => {-1, 0}, 126 + ?R => {1, 0} 127 + } 128 + 129 + {points, {_, circ}} = 130 + Enum.map_reduce(commands, {{0, 0}, 0}, fn 131 + {dir, d, _}, {{x, y}, l} -> 132 + {dx, dy} = dirs[dir] 133 + {{x, y}, {{x + dx * d, y + dy * d}, l + d}} 134 + end) 135 + ``` 136 + 137 + <!-- livebook:{"output":true} --> 138 + 139 + ``` 140 + {[ 141 + {0, 0}, 142 + {-5, 0}, 143 + {-5, -4}, 144 + {-8, -4}, 145 + {-8, 0}, 146 + {-14, 0}, 147 + {-14, -6}, 148 + {-18, -6}, 149 + {-18, -14}, 150 + {-25, -14}, 151 + {-25, -21}, 152 + {-28, -21}, 153 + {-28, -26}, 154 + {-31, -26}, 155 + {-31, -30}, 156 + {-33, -30}, 157 + {-33, -35}, 158 + {-37, -35}, 159 + {-37, -39}, 160 + {-42, -39}, 161 + {-42, -47}, 162 + {-47, -47}, 163 + {-47, -44}, 164 + {-50, -44}, 165 + {-50, -41}, 166 + {-54, -41}, 167 + {-54, -37}, 168 + {-61, -37}, 169 + {-61, -32}, 170 + {-54, -32}, 171 + {-54, -26}, 172 + {-60, -26}, 173 + {-60, -29}, 174 + {-65, -29}, 175 + {-65, -33}, 176 + {-69, -33}, 177 + {-69, -38}, 178 + {-77, -38}, 179 + {-77, -43}, 180 + {-69, -43}, 181 + {-69, -46}, 182 + {-60, -46}, 183 + {-60, -52}, 184 + {-55, -52}, 185 + {-55, -62}, 186 + {-57, -62}, 187 + {-57, -68}, 188 + {-62, ...}, 189 + {...}, 190 + ... 191 + ], {{0, 0}, 3518}} 192 + ``` 193 + 194 + ```elixir 195 + area = 196 + points 197 + |> Enum.chunk_every(2, 1, [{0, 0}]) 198 + |> Enum.map(fn [{x1, y1}, {x2, y2}] -> 199 + x1 * y2 - x2 * y1 200 + end) 201 + |> Enum.sum() 202 + |> abs() 203 + |> div(2) 204 + 205 + area + div(circ, 2) + 1 206 + ``` 207 + 208 + <!-- livebook:{"output":true} --> 209 + 210 + ``` 211 + 49897 212 + ``` 213 + 214 + ## Part 2 215 + 216 + ```elixir 217 + dirs = %{ 218 + ?3 => {0, -1}, 219 + ?1 => {0, 1}, 220 + ?2 => {-1, 0}, 221 + ?0 => {1, 0} 222 + } 223 + 224 + {points, {_, circ}} = 225 + Enum.map_reduce(commands, {{0, 0}, 0}, fn 226 + {_, _, <<d::binary-5, dir>>}, {{x, y}, l} -> 227 + {dx, dy} = dirs[dir] 228 + d = String.to_integer(d, 16) 229 + {{x, y}, {{x + dx * d, y + dy * d}, l + d}} 230 + end) 231 + ``` 232 + 233 + <!-- livebook:{"output":true} --> 234 + 235 + ``` 236 + {[ 237 + {0, 0}, 238 + {-30219, 0}, 239 + {-30219, -22709}, 240 + {-883628, -22709}, 241 + {-883628, 0}, 242 + {-961172, 0}, 243 + {-961172, -408640}, 244 + {-987189, -408640}, 245 + {-987189, -1081463}, 246 + {-1468497, -1081463}, 247 + {-1468497, -1291619}, 248 + {-1689290, -1291619}, 249 + {-1689290, -1322745}, 250 + {-1594191, -1322745}, 251 + {-1594191, -1493363}, 252 + {-2054383, -1493363}, 253 + {-2054383, -1957521}, 254 + {-1594191, -1957521}, 255 + {-1594191, -2235883}, 256 + {-1689290, -2235883}, 257 + {-1689290, -2635895}, 258 + {-2082599, -2635895}, 259 + {-2082599, -2500907}, 260 + {-2388392, -2500907}, 261 + {-2388392, -1970928}, 262 + {-2915434, -1970928}, 263 + {-2915434, -1584292}, 264 + {-2082599, -1584292}, 265 + {-2082599, -1081463}, 266 + {-2680634, -1081463}, 267 + {-2680634, -408640}, 268 + {-3287954, -408640}, 269 + {-3287954, -1179522}, 270 + {-3753901, -1179522}, 271 + {-3753901, -1740273}, 272 + {-3812108, -1740273}, 273 + {-3812108, -1666638}, 274 + {-4249149, -1666638}, 275 + {-4249149, -1288815}, 276 + {-4514335, -1288815}, 277 + {-4514335, -1666638}, 278 + {-4788320, -1666638}, 279 + {-4788320, -1740273}, 280 + {-4884816, -1740273}, 281 + {-4884816, -1179522}, 282 + {-5736623, -1179522}, 283 + {-5736623, -1449785}, 284 + {-5885991, ...}, 285 + {...}, 286 + ... 287 + ], {{0, 0}, 237488828}} 288 + ``` 289 + 290 + ```elixir 291 + area = 292 + points 293 + |> Enum.chunk_every(2, 1, [{0, 0}]) 294 + |> Enum.map(fn [{x1, y1}, {x2, y2}] -> 295 + x1 * y2 - x2 * y1 296 + end) 297 + |> Enum.sum() 298 + |> abs() 299 + |> div(2) 300 + 301 + area + div(circ, 2) + 1 302 + ``` 303 + 304 + <!-- livebook:{"output":true} --> 305 + 306 + ``` 307 + 194033958221830 308 + ``` 309 + 310 + <!-- livebook:{"offset":9828,"stamp":{"token":"XCP.PxtVRuGOoJbRBg9li_V5edaJPAIM1giG8b7fnblLM45DtgF15Jzd6NlUMPxbzksg6acUzlzFjYTBEN2LSqNSG1-GyFTIi-SNpma9KQLCo3vK0DZWQEcIQo44tSdMuxRx5A","version":2}} -->
+167
2023/day19.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 19 4 + 5 + ```elixir 6 + Mix.install([:kino_aoc]) 7 + ``` 8 + 9 + ## Section 10 + 11 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"19","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 12 + 13 + ```elixir 14 + {:ok, puzzle_input} = 15 + KinoAOC.download_puzzle("2023", "19", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 16 + ``` 17 + 18 + <!-- livebook:{"output":true} --> 19 + 20 + ``` 21 + {:ok, 22 + "xn{x>3251:R,x>2998:R,kxq}\nfzx{a<1013:A,a>1206:A,s<3847:A,R}\nxjm{a<406:R,A}\nmzl{m<755:R,a>679:R,A}\nfnv{x>2143:sxm,m<2895:A,gh}\nhx{x<2183:A,s>3619:A,A}\nkvr{s>3669:A,a>584:R,m>2806:R,R}\nngd{s<3561:R,a<2595:R,a>3464:kch,hx}\nqvh{s<1945:R,fng}\nsr{s<3808:A,R}\nrbs{m>562:A,a<333:A,A}\npsg{a>561:shp,s>2745:vk,jtr}\ndl{s<2761:hvq,fbg}\nzfh{m<2326:szm,m<2485:A,R}\npt{a<2937:R,s<3935:A,x>3021:R,A}\nrk{x<476:ljz,a<1937:jvg,R}\nps{m<3555:R,s>3909:zrm,R}\nrv{s>795:R,s>480:A,R}\nlnh{a>2617:gz,fm}\nsqb{x>3735:gfv,a<1477:msq,zv}\nmd{x<1096:A,x<1619:A,s<217:R,R}\nztr{x>767:R,R}\nsq{m>1364:A,s>244:A,a<3577:A,R}\nrpc{m<420:A,R}\nhs{x<554:R,R}\nvdl{s<3309:A,a>1384:R,R}\njl{x<1879:mt,A}\nzbc{m>1502:dl,rf}\nljr{a<3187:R,A}\nbvv{x>2910:bpz,s>3676:qzt,x>2015:R,A}\nzfd{m<3356:vgj,a>3007:zzt,gfm}\nzq{a>2708:A,R}\nfh{a>2705:R,jqg}\nmhv{m<813:R,R}\nkq{a>2126:R,A}\nvk{x>2866:A,jxl}\npbs{a<3509:R,sq}\npkx{x>2891:A,A}\ndv{x>326:A,R}\nlgv{m<3070:fh,s<1467:mgh,a<2929:pj,nft}\nhhb{m>3097:qmt,a>2942:bfr,dkx}\npxc{x<3132:R,m<1265:R,R}\ncd{m>3540:A,R}\ncq{s>211:A,s<106:A,A}\nvqv{a>1867:R,x>3706:A,R}\nnb{x>2068:fk,x>1696:svc,R}\nth{x<3593:R,s<2701:cf,vjk}\nsfs{m<252:gfq,a<618:R,m<353:hkq,cvz}\nfzz{a>637:jvq,x<1757:A,x<2008:gxn,nr}\ncxd{x<1726:A,x>1873:A,a>2383:A,R}\ngtz{m>3441:R,A}\nnh{s>2751:A,s<2708:R,s>2735:A,R}\nlq{a>1765:R,R}\nrzv{a<1448:cjn,gg}\ncf{s<2626:R,x<3812:R,A}\nmbf{a>2789:A,a>2651:R,m<1004:R,A}\ncb{m<1452:R,m<3092:R,s<3880:A,R}\npd{x>2406:A,a<2484:R,m>3832:R,A}\nqzt{x>2426:A,a<2554:R,A}\nvf{a>1506:mgn,m<2895:cj,a>506:ps,dtx}\ndzz{m>3559:A,R}\nmr{s<2133:A,s<2292:R,a<2700:A,A}\nrn{s>901:A,m>3204:bb,spv}\ntnf{x>2142:A,x>1748:R,s>3539:A,R}\ncs{s<2710:A,a<3268:R,R}\nqc{x>1358:ftl,a>2473:kk,x>799:xsf,xht}\nqdm{s>341:A,A}\nglr{x<686:dfr,x>1172:vl,R}\ncn{m<3652:cxd,A}\ncm{m<151:R,s>3876:R,s<3842:A,A}\ngfm{x>1439:cn,m<3716:tks,m<3855:jn,jcr}\nbf{m<963:A,A}\nvlh{m<3510:A,x>2910:R,A}\nlpv{s<3981:A,a<1739:R,A}\nvjd{m>3232:A,m>3185:A,R}\ncbx{m>1016:A,R}\nxnc{a>3100:A,R}\nqkg{a>1138:R,x>1239:A,m<725:A,R}\nstl{m>947:bm,s<3931:A,s<3956:A,pkx}\nrf{s>2880:kcz,x>644:xk,zh}\nxpd{x>3710:A,s<3512:R,R}\ndt{x<3732:R,a<2881:A,a<3307:R,A}\njqg{s<1267:A,x>2703:R,R}\nstr{x<2942:vzf,x<3428:gl,a<2665:sqb,vt}\nnl{m>3788:A,s>1087:A,s>683:R,A}\nfc{s<3884:R,x>2689:R,R}\ngxt{m>426:ll,m>178:R,x<1350:tmf,st}\nzvg{a>3345:R,A}\nrkr{a>1171:R,A}\nvjv{s>2771:tv,dtz}\nfvp{a<1356:sfs,s>928:ss,rsf}\nnbf{s<611:R,a<1809:R,A}\njn{a>2068:A,nl}\nfzm{a>2076:bpk,x>876:kdd,m<400:jf,tsv}\nqvv{a<773:A,m>764:A,A}\nhhq{x<921:pks,x>988:cl,qr}\nin{s<2529:ntc,xz}\ndh{s<3515:R,R}\ndc{s>2919:A,R}\nmgh{m<3466:rv,a<2753:R,R}\nnm{m<3214:A,m<3302:qlm,x>3194:A,A}\nspq{m>3854:zvg,x>1467:tfn,s>1060:A,R}\nxh{s>2565:A,s>2547:mm,m>597:xkx,qq}\ncv{s>2058:R,A}\nlfp{m<3165:gdt,xnf}\njv{x>403:R,A}\nbqh{m>2771:A,A}\npb{a<1100:A,A}\njcr{s<1408:A,m>3905:cng,x>1043:A,hns}\nccd{s>790:R,kd}\ndtx{s<3858:sr,x>3627:R,R}\njfn{m<1123:A,s>3574:R,m>1296:R,A}\nrrc{x>2142:R,x>1904:R,R}\njdp{x<3059:R,a>2402:R,A}\npks{s>1682:zpz,R}\nppj{x>304:R,a>1076:A,s<2714:A,R}\njf{x>487:ptd,zvr}\nll{m<826:R,a<714:R,m>1017:A,A}\nlvd{m<1464:R,a<2106:tr,a<2987:fzc,js}\nkk{a>3251:mbb,pp}\nsg{m>2670:R,A}\nssj{m<515:R,x>660:R,A}\nzxr{a<1482:tlg,x>1965:gsl,x>841:zfd,qdl}\nqvl{m<3128:A,m<3608:A,a>1356:A,R}\nbdc{s>3857:R,R}\nvxf{s>3540:xtp,bvr}\nzfk{m>2828:R,R}\nrr{a<901:A,qvl}\nvgj{x>1312:bpj,x>1146:lkq,x>1035:sz,rgc}\nkb{m>2576:lsc,A}\nthg{a>248:hm,s<3241:R,R}\ndj{s<3857:A,R}\nzc{s<1965:ht,x>1083:fzz,s>2211:dmb,gd}\ncng{s<2122:A,m<3953:R,m<3974:A,R}\npg{s>878:R,R}\ngp{a>1793:R,x<2223:R,s>3362:R,A}\nkxq{x<2775:R,x>2923:A,A}\nhsg{s<3226:A,s<3330:A,R}\nqlj{a<1311:mv,A}\npr{x>494:mxk,a<2936:kmm,bht}\ngpv{x<1269:R,x>1381:R,m>2765:R,R}\nvt{m<2555:qst,xtv}\nhfl{x<2629:A,a>3143:A,m<290:R,A}\nzb{s<1697:A,A}\nxrq{s<2864:A,a>2201:A,a>1934:R,A}\nfm{m>3529:A,R}\nxb{s<2818:A,a<3522:A,m>2849:A,dlx}\nbx{a>2926:R,a<2074:R,A}\nqmt{s>2887:ls,x>2904:th,dzz}\nvp{x>2532:A,a>2417:R,R}\nmxk{x<1016:ztr,a<2922:tf,nt}\nvg{a>707:fbh,ndl}\nmf{a<2235:A,a>3265:fc,vm}\nghh{m<945:A,x<2100:R,R}\nmt{x>1602:R,a<2587:A,A}\ndlz{s<2689:A,s<2755:rxh,x>3417:nhr,fv}\nmbb{s>1105:zb,s>554:pg,a<3688:pbs,bn}\nkch{m>2412:R,R}\nrc{a<1071:A,m>1532:A,R}\nhvq{s<2609:zs,A}\ntfn{x>1675:R,R}\nshp{a>885:R,A}\njtr{s>2671:jft,R}\nkdd{a>1297:jzz,x>1193:gxt,fph}\nq" <> ...} 23 + ``` 24 + 25 + ```elixir 26 + defmodule Day19 do 27 + def always, do: fn _ -> true end 28 + 29 + def match(<<field::binary-1, cmp>> <> value) do 30 + value = String.to_integer(value) 31 + 32 + case cmp do 33 + ?> -> fn map -> map[field] > value end 34 + ?< -> fn map -> map[field] < value end 35 + end 36 + end 37 + 38 + def walk("A", value, _), do: value |> Map.values() |> Enum.sum() 39 + def walk("R", _, _), do: 0 40 + 41 + def walk(curr, value, ruleset) do 42 + rules = ruleset[curr] 43 + 44 + Enum.find_value(rules, fn {f, next} -> 45 + if f.(value), do: next 46 + end) 47 + |> walk(value, ruleset) 48 + end 49 + end 50 + ``` 51 + 52 + <!-- livebook:{"output":true} --> 53 + 54 + ``` 55 + {:module, Day19, <<70, 79, 82, 49, 0, 0, 13, ...>>, {:walk, 3}} 56 + ``` 57 + 58 + ```elixir 59 + [rules, inputs] = String.split(puzzle_input, "\n\n") 60 + 61 + ruleset = 62 + rules 63 + |> String.split("\n", trim: true) 64 + |> Map.new(fn line -> 65 + [name, rest] = String.split(line, "{") 66 + 67 + rules = 68 + rest 69 + |> String.trim_trailing("}") 70 + |> String.split(",") 71 + |> Enum.map(fn rule -> 72 + case String.split(rule, ":") do 73 + [next] -> {Day19.always(), next} 74 + [rule, next] -> {Day19.match(rule), next} 75 + end 76 + end) 77 + 78 + {name, rules} 79 + end) 80 + 81 + inputs = 82 + inputs 83 + |> String.split("\n", trim: true) 84 + |> Enum.map(fn "{" <> data -> 85 + data = String.trim_trailing(data, "}") 86 + 87 + data 88 + |> String.split(",") 89 + |> Map.new(fn <<field::binary-1>> <> "=" <> value -> 90 + {field, String.to_integer(value)} 91 + end) 92 + end) 93 + ``` 94 + 95 + <!-- livebook:{"output":true} --> 96 + 97 + ``` 98 + [ 99 + %{"a" => 2402, "m" => 2238, "s" => 929, "x" => 1}, 100 + %{"a" => 205, "m" => 654, "s" => 508, "x" => 1167}, 101 + %{"a" => 35, "m" => 2051, "s" => 1791, "x" => 1057}, 102 + %{"a" => 2726, "m" => 502, "s" => 178, "x" => 633}, 103 + %{"a" => 845, "m" => 2315, "s" => 2005, "x" => 3343}, 104 + %{"a" => 111, "m" => 2081, "s" => 499, "x" => 987}, 105 + %{"a" => 799, "m" => 1999, "s" => 1982, "x" => 464}, 106 + %{"a" => 518, "m" => 3195, "s" => 1247, "x" => 801}, 107 + %{"a" => 285, "m" => 2075, "s" => 1, "x" => 1506}, 108 + %{"a" => 384, "m" => 1366, "s" => 697, "x" => 1075}, 109 + %{"a" => 371, "m" => 1008, "s" => 1901, "x" => 33}, 110 + %{"a" => 115, "m" => 43, "s" => 14, "x" => 426}, 111 + %{"a" => 979, "m" => 2121, "s" => 2493, "x" => 595}, 112 + %{"a" => 3003, "m" => 3576, "s" => 3096, "x" => 557}, 113 + %{"a" => 921, "m" => 1269, "s" => 1983, "x" => 837}, 114 + %{"a" => 3300, "m" => 230, "s" => 909, "x" => 1367}, 115 + %{"a" => 130, "m" => 1878, "s" => 508, "x" => 1713}, 116 + %{"a" => 675, "m" => 1098, "s" => 886, "x" => 531}, 117 + %{"a" => 2121, "m" => 2018, "s" => 1761, "x" => 508}, 118 + %{"a" => 19, "m" => 399, "s" => 226, "x" => 1579}, 119 + %{"a" => 243, "m" => 35, "s" => 1169, "x" => 163}, 120 + %{"a" => 309, "m" => 221, "s" => 1305, "x" => 913}, 121 + %{"a" => 1685, "m" => 164, "s" => 239, "x" => 1780}, 122 + %{"a" => 2727, "m" => 208, "s" => 132, "x" => 86}, 123 + %{"a" => 2300, "m" => 2703, "s" => 386, "x" => 842}, 124 + %{"a" => 57, "m" => 454, "s" => 2120, "x" => 556}, 125 + %{"a" => 875, "m" => 1273, "s" => 1067, "x" => 1711}, 126 + %{"a" => 434, "m" => 939, "s" => 3341, "x" => 862}, 127 + %{"a" => 1666, "m" => 417, "s" => 203, "x" => 842}, 128 + %{"a" => 213, "m" => 1955, "s" => 2849, "x" => 93}, 129 + %{"a" => 62, "m" => 103, "s" => 104, "x" => 636}, 130 + %{"a" => 1917, "m" => 2014, "s" => 3128, "x" => 3715}, 131 + %{"a" => 225, "m" => 477, "s" => 579, "x" => 225}, 132 + %{"a" => 1176, "m" => 2243, "s" => 420, "x" => 556}, 133 + %{"a" => 62, "m" => 1556, "s" => 275, "x" => 10}, 134 + %{"a" => 368, "m" => 2498, "s" => 305, "x" => 1649}, 135 + %{"a" => 1488, "m" => 1148, "s" => 2419, "x" => 437}, 136 + %{"a" => 2488, "m" => 540, "s" => 174, "x" => 2918}, 137 + %{"a" => 1089, "m" => 3207, "s" => 2740, "x" => 3431}, 138 + %{"a" => 441, "m" => 560, "s" => 439, "x" => 661}, 139 + %{"a" => 310, "m" => 59, "s" => 109, "x" => 292}, 140 + %{"a" => 691, "m" => 452, "s" => 2012, "x" => 497}, 141 + %{"a" => 1182, "m" => 1424, "s" => 1228, "x" => 227}, 142 + %{"a" => 159, "m" => 418, "s" => 64, "x" => 225}, 143 + %{"a" => 38, "m" => 216, "s" => 1582, "x" => 1490}, 144 + %{"a" => 840, "m" => 2919, "s" => 973, "x" => 483}, 145 + %{"a" => 183, "m" => 1362, "s" => 589, ...}, 146 + %{"a" => 2028, "m" => 455, ...}, 147 + %{"a" => 2024, ...}, 148 + %{...}, 149 + ... 150 + ] 151 + ``` 152 + 153 + ## Part 1 154 + 155 + ```elixir 156 + inputs 157 + |> Enum.map(&Day19.walk("in", &1, ruleset)) 158 + |> Enum.sum() 159 + ``` 160 + 161 + <!-- livebook:{"output":true} --> 162 + 163 + ``` 164 + 575412 165 + ``` 166 + 167 + <!-- livebook:{"offset":8997,"stamp":{"token":"XCP.3mLPPPAFmjyMyS1G8kuPg81u2xWiHEqMWIEJie5Cub-RqAtUePx4xByO_bbzZmbk0fucCfAAzGCebPJTo1sxtCCZWiS2f_1WHfwLTeKQ-A3TtNs0-62JkPMIEOcsxBwvcw","version":2}} -->
+135
2023/day21.livemd
··· 1 + # Day 21 2 + 3 + ```elixir 4 + Mix.install([:kino_aoc]) 5 + ``` 6 + 7 + ## Section 8 + 9 + <!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"21","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 10 + 11 + ```elixir 12 + {:ok, puzzle_input} = 13 + KinoAOC.download_puzzle("2023", "21", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 14 + ``` 15 + 16 + ```elixir 17 + # puzzle_input = 18 + """ 19 + ........... 20 + .....###.#. 21 + .###.##..#. 22 + ..#.#...#.. 23 + ....#.#.... 24 + .##..S####. 25 + .##..#...#. 26 + .......##.. 27 + .##.#.####. 28 + .##..##.##. 29 + ........... 30 + """ 31 + ``` 32 + 33 + ```elixir 34 + lines = 35 + puzzle_input 36 + |> String.split("\n", trim: true) 37 + 38 + map = 39 + for {line, y} <- Enum.with_index(lines), 40 + {char, x} <- Enum.with_index(to_charlist(line)), 41 + char != ?., 42 + do: {char, {x, y}} 43 + 44 + %{?# => obstacles, ?S => [start]} = Enum.group_by(map, &elem(&1, 0), &elem(&1, 1)) 45 + 46 + height = length(lines) 47 + width = byte_size(hd(lines)) 48 + 49 + obstacles = MapSet.new(obstacles) 50 + {sx, sy} = start 51 + ``` 52 + 53 + ```elixir 54 + defmodule Day21 do 55 + def build_distance_map(width, height, start, obstacles) do 56 + distances = 57 + for x <- 0..width, 58 + y <- 0..height, 59 + {x, y} not in obstacles, 60 + into: %{}, 61 + do: {{x, y}, nil} 62 + 63 + do_build(Map.put(distances, start, 0), neighbours(start, width, height), width, height) 64 + end 65 + 66 + defp do_build(distances, [], _w, _h), do: distances 67 + 68 + defp do_build(distances, [{x, y} | rest], w, h) 69 + when is_nil(:erlang.map_get({x, y}, distances)) do 70 + {min, next} = 71 + Enum.reduce(neighbours({x, y}, w, h), {nil, []}, fn 72 + {nx, ny}, {min, acc} -> 73 + case Map.fetch(distances, {nx, ny}) do 74 + {:ok, nil} -> {min, [{nx, ny} | acc]} 75 + {:ok, val} -> {min(min, val), acc} 76 + :error -> {min, acc} 77 + end 78 + end) 79 + 80 + distances 81 + |> Map.put({x, y}, min + 1) 82 + |> do_build(rest ++ next, w, h) 83 + end 84 + 85 + defp do_build(distances, [_ | rest], w, h), do: do_build(distances, rest, w, h) 86 + 87 + defp neighbours({x, y}, w, h), 88 + do: 89 + Enum.filter( 90 + [ 91 + {x + 1, y}, 92 + {x - 1, y}, 93 + {x, y + 1}, 94 + {x, y - 1} 95 + ], 96 + &in_map?(&1, w, h) 97 + ) 98 + 99 + def in_map?({x, y}, w, h), do: x in 0..w and y in 0..h 100 + end 101 + ``` 102 + 103 + ```elixir 104 + dist = Day21.build_distance_map(width, height, start, obstacles) 105 + ``` 106 + 107 + ## Part 1 108 + 109 + ```elixir 110 + radius = 64 111 + 112 + potential_positions = 113 + for dx <- -radius..radius, 114 + dy <- -radius..radius, 115 + rem(dx + dy, 2) == 0, 116 + p = {sx + dx, sy + dy}, 117 + dist[p] <= radius, 118 + do: {sx + dx, sy + dy} 119 + ``` 120 + 121 + ```elixir 122 + length(potential_positions) 123 + ``` 124 + 125 + ## Part 2 126 + 127 + ```elixir 128 + {width, height} 129 + ``` 130 + 131 + ```elixir 132 + radius = 26_501_365 133 + ``` 134 + 135 + <!-- livebook:{"offset":2664,"stamp":{"token":"XCP.IMvv8hCgLT5Uhw7XM98joJcCpiLODkv-dad_ZINIVpWiR15rOQ16JvnrIbZyWUgwLtcUNcu0O_o0fM9c_SHVKVz5kQtylMQU9zFIW02WoyY4Mif4i-dzdI_vkWqFZENooA","version":2}} -->