this repo has no description

Dump load of all uncommited changes

hauleth.dev 13c6e41f dff434f3

verified
+100
2019/1/input.txt
···
+
54172
+
58469
+
92948
+
143402
+
57563
+
54532
+
68042
+
89847
+
70872
+
54069
+
107310
+
146439
+
88851
+
142869
+
71309
+
89613
+
70338
+
87708
+
95305
+
134384
+
128250
+
134991
+
91270
+
127819
+
68650
+
102556
+
129882
+
68688
+
129939
+
137344
+
102624
+
90828
+
86487
+
91712
+
114866
+
75697
+
107599
+
99053
+
87511
+
128128
+
57772
+
69314
+
90771
+
145376
+
100730
+
142675
+
112731
+
83985
+
123565
+
127325
+
86597
+
121772
+
131992
+
148859
+
93348
+
77294
+
119763
+
74636
+
95592
+
79628
+
78861
+
68565
+
88820
+
134291
+
69262
+
128678
+
118216
+
52799
+
92731
+
61600
+
63477
+
64016
+
131872
+
131412
+
146579
+
104400
+
99110
+
63458
+
144393
+
54787
+
148622
+
91323
+
61137
+
106082
+
103644
+
63795
+
126648
+
61489
+
140964
+
110963
+
72696
+
124370
+
110466
+
139317
+
108440
+
148062
+
89992
+
145645
+
70556
+
95739
+19
2019/1/solution.exs
···
+
defmodule Main do
+
def calculate(value), do: max(div(value, 3) - 2, 0)
+
+
def for_fuel(value), do: for_fuel(value, value)
+
+
defp for_fuel(0, total), do: total
+
defp for_fuel(value, total) do
+
current = calculate(value)
+
+
for_fuel(current, total + current)
+
end
+
end
+
+
IO.stream(:stdio, :line)
+
|> Stream.map(&String.to_integer(String.trim(&1)))
+
|> Stream.map(&Main.calculate/1)
+
|> Stream.map(&Main.for_fuel/1)
+
|> Enum.reduce(&+/2)
+
|> IO.inspect()
+1
2019/2/input.txt
···
+
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
···
+
defmodule GravAssist do
+
def calc([op, _, _ | rest], a \\ 12, b \\ 2) do
+
hd(execute([op, a, b | rest]))
+
end
+
+
def execute(bytecode) when is_list(bytecode), do: execute(:array.from_list(bytecode))
+
def execute(bytecode), do: eval(bytecode, 0)
+
+
defp eval(bytecode, ic) do
+
case :array.get(ic, bytecode) do
+
99 -> :array.to_list(bytecode)
+
op when op in 1..2 ->
+
pos_a = :array.get(ic + 1, bytecode)
+
pos_b = :array.get(ic + 2, bytecode)
+
pos_r = :array.get(ic + 3, bytecode)
+
+
result = compute(op, :array.get(pos_a, bytecode), :array.get(pos_b, bytecode))
+
+
new_bc = :array.set(pos_r, result, bytecode)
+
+
eval(new_bc, ic + 4)
+
_ -> :error
+
end
+
end
+
+
defp compute(1, a, b), do: a + b
+
defp compute(2, a, b), do: a * b
+
end
+
+
data =
+
IO.read(:line)
+
|> String.split(",")
+
|> Enum.map(&String.to_integer(String.trim(&1)))
+
+
IO.inspect(GravAssist.calc(data), label: :sol1)
+
+
for(a <- 0..99,
+
b <- 0..99,
+
19690720 == GravAssist.calc(data, a, b),
+
do: {a, b})
+
|> IO.inspect(label: :sol2)
+2
2019/3/input.txt
···
+
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
+
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
···
+
defmodule Wires do
+
@directions %{
+
?U => :up,
+
?D => :down,
+
?R => :right,
+
?L => :left
+
}
+
+
@moves %{
+
up: {0, 1},
+
down: {0, -1},
+
right: {1, 0},
+
left: {-1, 0}
+
}
+
+
def load(list) do
+
list
+
|> Enum.map(&parse/1)
+
|> wire()
+
end
+
+
defp parse(<<c, rest::binary>>) do
+
{Map.fetch!(@directions, c), String.to_integer(rest)}
+
end
+
+
defp wire(steps) do
+
steps
+
|> Enum.reduce({[], {0, 0}}, &into_coordinates/2)
+
|> elem(0)
+
|> MapSet.new()
+
end
+
+
defp into_coordinates({_, 0}, {points, curr}), do: {[curr | points], curr}
+
defp into_coordinates({dir, n}, {points, {x, y}}) do
+
{dx, dy} = Map.fetch!(@moves, dir)
+
next = {x + dx, y + dy}
+
+
into_coordinates({dir, n - 1}, {[next | points], next})
+
end
+
end
+
+
w1 =
+
IO.read(:line)
+
|> String.trim()
+
|> String.split(",")
+
|> Wires.load()
+
w2 =
+
IO.read(:line)
+
|> String.trim()
+
|> String.split(",")
+
|> Wires.load()
+
+
MapSet.intersection(w1, w2)
+
|> MapSet.to_list()
+
|> Enum.map(fn {x, y} -> abs(x) + abs(y) end)
+
|> Enum.min()
+
|> IO.inspect()
+200
2020/1/input.txt
···
+
1706
+
1466
+
1427
+
1744
+
1684
+
1386
+
2001
+
1750
+
1753
+
1770
+
1559
+
1616
+
1408
+
1860
+
1940
+
2002
+
1862
+
1918
+
1456
+
1209
+
1840
+
1462
+
1783
+
1644
+
1901
+
1791
+
1506
+
2005
+
1338
+
1383
+
1420
+
1631
+
1784
+
1897
+
1771
+
1588
+
1955
+
1937
+
1392
+
1396
+
1803
+
1429
+
1407
+
1698
+
1562
+
1913
+
1678
+
1198
+
1398
+
1703
+
1831
+
1489
+
1782
+
1864
+
1708
+
1397
+
1915
+
1953
+
1395
+
1610
+
1549
+
1564
+
1973
+
1931
+
2009
+
1980
+
1800
+
1443
+
1993
+
1900
+
1964
+
1581
+
1904
+
1665
+
1567
+
1057
+
1805
+
1402
+
1878
+
1729
+
1825
+
1682
+
1719
+
1469
+
1004
+
1591
+
1594
+
811
+
1523
+
1424
+
1756
+
373
+
1442
+
1718
+
1411
+
1892
+
1820
+
1977
+
1871
+
1890
+
1653
+
1372
+
1475
+
1476
+
1422
+
2004
+
1755
+
1676
+
639
+
1425
+
1853
+
1712
+
1525
+
1514
+
1455
+
1658
+
1963
+
1579
+
1861
+
1458
+
1474
+
1613
+
1681
+
1586
+
1441
+
1499
+
1865
+
1735
+
1989
+
1952
+
792
+
1669
+
1509
+
1481
+
1893
+
1445
+
1834
+
1779
+
1732
+
1826
+
1595
+
1829
+
449
+
1920
+
1707
+
1780
+
1935
+
1867
+
1769
+
1107
+
919
+
1382
+
1604
+
1875
+
1453
+
1496
+
1946
+
1659
+
1570
+
1692
+
1630
+
1638
+
1922
+
1691
+
1580
+
1880
+
1482
+
1762
+
1775
+
1376
+
1434
+
1856
+
1971
+
1646
+
1951
+
1416
+
1889
+
1773
+
1814
+
1471
+
1488
+
1736
+
1743
+
1459
+
1389
+
1498
+
1663
+
1611
+
1727
+
1699
+
1624
+
1511
+
1767
+
1754
+
1785
+
1491
+
1235
+
1510
+
1500
+
1485
+65
2020/1/solution.exs
···
+
defmodule Solution do
+
def load(path) do
+
path
+
|> File.stream!()
+
|> Stream.map(&String.to_integer(String.trim(&1)))
+
|> Enum.to_list()
+
end
+
+
def run([], _, _), do: nil
+
def run(_, _, sum) when sum < 0, do: nil
+
def run([a | _], 1, a), do: [a]
+
+
def run([a | rest], n, sum) do
+
case run(rest, n - 1, sum - a) do
+
nil -> run(rest, n, sum)
+
nums when is_list(nums) -> [a | nums]
+
end
+
end
+
end
+
+
list = Solution.load("./1/input.txt")
+
+
list
+
|> Solution.run(2, 2020)
+
|> Enum.reduce(&*/2)
+
|> IO.inspect(label: "task 1")
+
+
list
+
|> Solution.run(3, 2020)
+
|> Enum.reduce(&*/2)
+
|> IO.inspect(label: "task 2")
+
+
Benchee.run(%{
+
"first solution" => fn ->
+
try do
+
for x <- list, y <- list, z <- list, x + y + z == 2020 do
+
throw(x * y * z)
+
end
+
+
:error
+
catch
+
num -> {:ok, num}
+
end
+
end,
+
"optimized" => fn ->
+
try do
+
for x <- list,
+
rest = 2020 - x,
+
y <- list,
+
y < rest,
+
rest = 2020 - x - y,
+
z <- list,
+
z <= rest,
+
x + y + z == 2020,
+
do: throw(x * y * z)
+
+
:error
+
catch
+
num -> {:ok, num}
+
end
+
end,
+
"mine" => fn ->
+
Solution.run(list, 3, 2020)
+
end
+
})
+1000
2020/2/input.txt
···
+
5-10 b: bhbjlkbbbbbbb
+
3-4 j: hjvj
+
8-9 p: pmljtsttp
+
3-4 t: hvtttqhdjmmnbqwbgfs
+
4-6 m: mblwtzmvmdjkkmmtsckm
+
6-9 f: ffffftfff
+
1-3 g: xggg
+
3-10 k: rwkhttkxxdpnlkq
+
3-11 w: wwmwwwwwwwww
+
5-7 f: fffffffff
+
1-4 l: lglllbc
+
2-5 n: njnnn
+
6-8 t: tcjtltttttdttjttbt
+
10-20 d: djddddccdbdddddddndd
+
2-5 z: gzppzhrhzdthnpcr
+
13-14 p: plvppptppppzppbkpk
+
11-13 t: jjtjvzfhsrtsmkdhj
+
11-12 r: rtrdvrrxrrxrzr
+
2-6 x: dxsvxgvk
+
7-11 x: hcxxpvxrnmxckkq
+
12-17 s: sssssssssssrssssss
+
2-4 v: vvpvvvjvvjvvqbvv
+
15-18 h: thqhhhgjjqhhnhhznz
+
8-11 j: jbmgbtmjtbb
+
2-4 d: xxdfvp
+
2-7 p: fftlppz
+
9-13 d: dfddddddsdddds
+
5-7 d: ddddddz
+
2-3 h: hfbhhh
+
1-4 k: rmkvkkkk
+
16-17 w: wwwhwwwwwwwwwwwwq
+
5-8 l: gllxllnlqlglrplk
+
1-7 p: mhnpspp
+
5-13 f: qhwffbtfzmdffztfjs
+
2-8 f: fkjhvcbflbwhggtbbcb
+
2-3 m: bcmldxmdh
+
6-7 p: ppcpppw
+
3-10 m: mmmmmmmmmj
+
4-12 s: ssjssssssssmsss
+
2-5 j: rmjnjtjjjj
+
2-3 q: qqdqq
+
10-15 v: vvvvvvvvvvvvvvdvvvvv
+
1-4 w: wwwc
+
4-14 m: mmsmmmvmmmmmqqmmmmm
+
7-10 d: ddcdddzdddddd
+
4-5 h: hhhhh
+
9-17 p: ppppppppqppppppppp
+
6-7 m: mqtmnms
+
4-5 s: pssss
+
2-6 t: tdttttpwttt
+
7-8 l: llsxsllzlwl
+
7-10 f: fflffffkqffffm
+
3-4 f: cdfp
+
3-4 z: zzzz
+
6-7 s: sbssdvs
+
3-4 g: ggdv
+
11-16 l: lllllnbsqlfzwrfljkh
+
3-4 k: tqkxxfk
+
3-17 s: xshmvlmzrjdpnvlssn
+
1-16 l: lzzvllgktckllmlltl
+
5-6 l: qlltvl
+
6-7 p: npvbpcp
+
4-6 g: gmgvgn
+
12-13 r: rrnlrrwrtvrrrrcrrrv
+
11-12 h: hhvxhhhhwjhd
+
13-14 p: pdppcsjtppppppvtwpj
+
10-14 l: hljjkjxlfwzlllclzq
+
18-19 z: zzzzzzzzzzzzzzztzhn
+
11-12 p: hpspwrkqbnpp
+
16-18 h: hhhhhhghhhhhhhhwhbh
+
1-2 p: vpxnqqbgrxprmh
+
13-19 m: mmmmmmmmmmmmqmmmmqm
+
1-2 n: ncndsnl
+
9-10 x: xxxxxxxxxgxxd
+
9-12 w: wwwwwwwwwwzwwdfgwwp
+
3-5 h: nqhvhzb
+
4-5 j: jjjns
+
10-12 f: ffffffffffff
+
7-10 v: mgvrwvvsjw
+
3-5 m: wpmmm
+
3-10 s: ffsbvjdslsnshqs
+
9-10 z: mgzzbjzqsz
+
3-13 d: ddjdddddddddnd
+
2-4 l: tqkfhpwvvmc
+
1-3 z: zzzzzn
+
3-5 l: ctljlckdpnlchrzbc
+
6-7 v: hqvcvvv
+
11-13 v: vvvvcvvvvvvvvvv
+
8-9 t: ztndmlwdb
+
5-6 v: fdxxrvwpw
+
1-4 n: xnkb
+
16-17 v: vvvvvvvvvvvvvvvvnvv
+
12-14 b: bbbbbxbbbdbgbcb
+
1-7 w: wwwwwwrwwjtwk
+
3-10 d: bxnhbhrmgd
+
4-5 k: kkknkk
+
2-4 n: bndln
+
3-10 p: vpkppcppppcplpksp
+
9-10 d: fhbzbdzqsdxlhnbt
+
11-13 z: zzmzzzzwzpzzz
+
12-17 b: hkbcbbhthbrbbdgbl
+
11-13 c: cpccnxccxbjtm
+
5-6 n: nnrmnfnsnn
+
3-8 l: sslkllwljcgl
+
1-9 p: fpppzzpppppphtrhppp
+
4-11 h: kskbvrqhdjph
+
3-9 r: rsrvxnrchtrrrr
+
4-5 n: nwbln
+
3-4 g: gjgv
+
13-14 r: rrrrrrsrtrrrrrrrr
+
10-15 m: mmmmmmmmmtmmgmm
+
5-6 k: wkpkkqk
+
10-11 l: wlbllglkbltblrqlllm
+
6-7 d: ddddsrddd
+
17-18 v: vvvvvvvvvvvfvgvvsvv
+
6-10 n: nngnnnnvnknn
+
7-8 t: qdztnrnt
+
5-11 d: dfbdxqbmsdd
+
1-6 n: znnvqdnx
+
7-9 k: kkkkkkkkl
+
5-6 m: mmmszmtmmks
+
1-5 l: wlllllll
+
13-14 m: mcmmmmmlmmmmjmmm
+
1-7 k: kklkjvckb
+
14-15 d: ddddmddddmddddddd
+
18-19 k: kfkkkkkkkkkkkkkkkpkk
+
3-4 z: czjzc
+
17-18 t: btttttjmltrttxctgt
+
1-4 c: cccscqcccc
+
9-14 k: tcwcstszkvhjfmrqpkp
+
3-8 c: ccccccjcscncp
+
10-11 d: dddddddddmdd
+
3-5 m: rgmfmkmd
+
1-5 k: mfhnk
+
4-5 x: cwnxftlt
+
1-3 n: flnqmnnhnn
+
2-5 f: vwlcnsfd
+
4-8 c: cccccccbc
+
10-12 v: dhfvlvbvspjldzch
+
7-16 f: ffsmffffjffqfpffff
+
10-13 n: njtrrnnqntjtn
+
13-17 f: frffcfffrjffffdfpff
+
5-10 m: mmmmvfmmmmmmmmdm
+
5-6 v: vvvvvzvvvvv
+
6-12 r: dqrrcrhrhjsrrr
+
8-14 z: zzzzzzzlzzzgzsz
+
5-9 q: qkwzsvwdg
+
12-13 d: vzjfvddgctfdrr
+
6-7 f: mgndffb
+
2-5 x: nxxmx
+
7-9 c: cmxsccccf
+
1-7 n: nnnnnnnnnn
+
6-8 g: gggglfgp
+
2-13 v: kvwxcrfmpfcfdrgv
+
5-7 p: tpplpffpccpp
+
8-12 m: mmmmmmmmmmmxm
+
9-10 v: vvvvvvvvvcv
+
4-5 m: mbnmmkknmmwshmkthj
+
8-9 t: cltntrtpqwtcsftttf
+
8-16 f: ffffrffpffffffffff
+
6-8 t: sttcctttdttdwjdndtt
+
5-9 k: ckkkkvdkvkk
+
1-3 f: ffczfpgmf
+
2-4 w: wwlwwd
+
1-9 d: lddbhdddmtfdmdzdrdhd
+
16-17 h: xfqlbhhpbnclvztzzzx
+
2-7 r: rrbntqrrsrkrm
+
1-4 r: qwrr
+
12-14 b: tvbbzjbbbbbbbn
+
5-7 h: hhjvghth
+
2-3 d: dndrcx
+
8-9 c: ccccscccpc
+
5-8 s: srcsszcsp
+
13-15 g: gggggggglggggglggggg
+
11-13 b: bbbbbfrbfbbgbb
+
1-8 b: jbbkqbbbpbbbbbbp
+
11-14 n: nnnnnnnnnnmnnnn
+
1-4 g: qsggg
+
14-15 l: sllslllggllljkdlm
+
1-5 s: pvssbspdsshsssssrs
+
7-10 c: ccccccmcpgcc
+
6-14 m: bcfkpmvmcmmjml
+
1-3 n: ncnnnnn
+
12-14 j: bjfjxjjpjrjjjxjjk
+
10-12 v: vfvvvvvvqjvvvwvwt
+
6-13 d: stddxdnjrddhwgdhrfjf
+
5-6 w: qcwhnwwk
+
2-3 x: mcxfxckptzvw
+
12-20 b: lvgvbxsxxlvbhfcxbtzr
+
1-2 d: ddbdqd
+
5-10 h: mhtnjvhhhs
+
2-6 z: ztzzdxzzzqbvg
+
2-7 t: ttjkqztr
+
3-4 g: bgvggrxrhtlklfj
+
4-5 q: qqqvq
+
1-3 c: ccpc
+
4-6 j: jjrdjj
+
8-11 c: ncvshccccccsb
+
1-2 z: rzzqxczxbkpvgkxfzgvz
+
10-11 f: kffsffffbqf
+
18-19 v: vmvvvvvvvvvvvvvvvql
+
14-15 m: mmmmmmmmmnmmmpmm
+
12-17 z: zzzzzzzzczzdlzzzzz
+
4-6 g: zggggg
+
12-16 h: hhhfhhrnnkhhmhhtqvh
+
3-4 n: hxssbnn
+
6-9 m: mmmmmmmmdmmm
+
5-6 n: nnwtgn
+
6-10 c: lppbvxcmjc
+
7-8 d: dpddzddvdzdddzfddd
+
1-5 z: xlzmzzz
+
6-11 h: hjhhhphhhhf
+
1-9 h: hhdghtsmmjhhnnwz
+
6-9 t: ctldsstttstrz
+
3-4 t: qvktfwnjcjtqtjqtn
+
6-7 w: wwwwwwsww
+
11-12 m: nphmmmpmmmcm
+
8-9 p: ppppdppdp
+
12-13 l: cllzzglllbqlll
+
2-7 s: sslssssgbssbsssnss
+
6-14 j: jvjrxjjrlgvjzmgj
+
7-8 p: hxpnjvzqxm
+
2-10 g: xgzfgvdsxr
+
4-5 t: lttttxdtp
+
3-12 c: kkpckmphqfcc
+
4-7 v: rbsjcpvwgtfjpv
+
2-4 k: swqfkb
+
5-9 n: knfdnnnnn
+
12-14 t: zgwthtdtrxvvftst
+
3-5 v: vlvqtv
+
15-19 t: fqwkwbtjdqncnsmnqxr
+
3-8 c: mxccchksq
+
3-5 v: jtpvr
+
5-7 k: kbkkkshkkkzkkkt
+
8-9 z: zzzzzzzzzzz
+
6-13 k: kkkkkkkkkkkktkkk
+
5-7 c: mccchbwc
+
7-12 x: gxxxxlgmztwsxxxgj
+
3-12 b: ndsbdfdgvxtbmrqcrjhs
+
1-3 d: qxdtdt
+
3-7 b: qbbdbgb
+
12-15 p: ppmplpptppwppppg
+
7-8 r: rjrrrrrz
+
8-10 p: cppppgspsxpvp
+
1-5 w: wwwpwf
+
4-8 p: nhqlknppmpplb
+
1-6 c: cvccccrc
+
7-8 c: cccccctccccccc
+
4-12 x: jxrxtnxrxxvsx
+
9-15 g: jfgxnznpwhccdggnm
+
2-6 h: jphhphlvhgqbwnl
+
8-9 f: dfftbfxsxxqfdvlfs
+
1-12 t: dtttttttttttttt
+
3-7 h: hshhmhh
+
3-4 w: wwwj
+
5-6 z: zzzzzp
+
8-12 m: jmnwmtjmnqvrj
+
4-5 f: ffffvff
+
8-10 l: llllflllxll
+
4-8 x: zcvxtxxkm
+
13-15 p: pppppkppppbpppsp
+
3-6 h: hhhhphlhhghkt
+
2-13 t: tcttttjtttttltttttt
+
9-10 b: bbbbbbbbvb
+
7-8 w: fwbwwwqw
+
6-9 s: jssssssssssssssssw
+
13-17 p: pppppppppppppppppp
+
5-7 q: lqxcqqqqcmgtbqjrqmjg
+
4-17 t: tttpfttttjttttttvt
+
13-14 c: cccccccccccccj
+
1-2 p: pxrpqpmpp
+
3-8 l: rnlxbwwzjdsh
+
2-7 w: kwkghnsfcp
+
9-11 m: mmdrktmzmrzhmgdmg
+
8-11 z: wzxwzzbfznc
+
5-7 t: rtbtntt
+
2-3 v: nqvv
+
2-3 r: krrwb
+
10-11 q: qqqqlqqvqqqqqq
+
3-5 r: drrhh
+
7-9 f: ffffffffhv
+
4-13 m: rkmmbjnsjzjcmwmwk
+
15-17 s: jrrvwtnklssqshzpss
+
12-13 z: fczzpzzzzzzkl
+
10-12 z: jshkxzzzrdzj
+
6-13 k: kkkkkkkkkkfkgkkkkkk
+
14-15 w: wcjjlzkpbspcwcw
+
2-5 n: npnnznk
+
5-15 b: cgqlmxzqmvqzbvb
+
13-15 r: rrrprrrrrrrrlrr
+
5-6 z: pgfzxw
+
4-17 x: xlgxwsxjxdxxhqhtcj
+
11-16 z: zzjhzzlzrzkzwzlzz
+
7-8 b: tltbbrbbbkb
+
2-14 k: pnkkqfxkkqkkmkkdkjkk
+
1-3 f: hjmvjfxvxtgh
+
6-8 w: xgrvwwswwxg
+
16-18 v: vwvvvvvvvvkvvmvvvtv
+
3-10 w: wwwwwwwwwwwww
+
2-4 w: zcwwqwtdwj
+
3-7 r: ttrrnwszwqsp
+
1-7 m: mjjqlgm
+
12-15 x: xxxxxxxxxxxlxxnxx
+
3-6 z: zzzzzjz
+
8-9 s: sssssssvs
+
5-7 w: wlwswwd
+
17-18 z: zzzdzzzzzzzzzzzzzx
+
5-7 j: dchcjfj
+
2-5 k: cqpkn
+
8-10 x: xxxnxxxxxtx
+
1-5 t: tttttttt
+
5-6 k: lkkphk
+
11-13 c: scdtdcghdmcttcc
+
2-5 h: hhhhhh
+
4-6 r: clrrrr
+
2-13 s: szsssssssssssssv
+
3-11 x: krxmwcznvwrlcx
+
7-8 m: cmmttmbm
+
3-4 c: pdwccbxwfvhcgrx
+
5-8 p: ppppvppq
+
12-19 l: llfllrllmwlmlllllll
+
11-15 p: psplppzglptmppp
+
6-14 m: mmvmmgmmmpmmmxm
+
5-6 j: jjctdzj
+
9-10 k: xnkzkkpplpkkkkk
+
10-14 t: crsttgdtzgfqtx
+
6-7 j: jbkpsjjjsrzf
+
1-4 v: vsvvvvm
+
4-5 f: lhbnfgqmbfltqrxzzx
+
12-13 q: qrjkxcwqqkdjmsxfnqmf
+
18-19 q: qqpqqxzqjnqqbhqkqqv
+
16-20 m: nzbmqjwbmmmnhmlmszbf
+
5-9 k: kkkkxskkkkk
+
1-2 x: txhxx
+
9-12 s: sssssssssssr
+
3-4 s: qsssssh
+
19-20 f: mfffmpfhhffwrlkffvff
+
3-15 b: bbpbbbbbbbbbbbbbb
+
8-9 h: fbcjphblh
+
6-9 p: ppppbnpppfppw
+
6-20 n: nsxzcgbcgqvjwfrgtnsr
+
5-7 s: cssdjdssr
+
3-4 g: gggwgg
+
1-6 s: hsspsss
+
2-5 z: zlgzb
+
5-8 l: jsljljtlpqhjl
+
3-10 n: mznwwnvhgbg
+
2-3 c: cckcc
+
1-10 r: rrpcbdrrrr
+
16-17 q: kqjxngwrpqlsqklnq
+
2-4 n: mnmnn
+
8-9 n: nnnnnnnsrnl
+
2-4 r: qrhlrvwpqsvktzcqms
+
6-9 v: vbqlvvvhqvqpv
+
2-8 b: kngrzdbb
+
10-13 d: dddddddddwdddd
+
2-6 z: czkzhzqdffh
+
8-19 n: kngnjnftdsrnhsnmznn
+
8-10 m: rngxfjlmmvtctp
+
16-17 k: dlkkxxkkkczkkkkkvs
+
3-17 n: wllsknnzckmmsjmqnxc
+
11-12 h: csrhwxwdnkhh
+
3-7 g: ggggggngg
+
1-14 s: sssssssssssssssdl
+
8-16 m: mmmmmmmkmmmmmmmpm
+
8-9 b: kdbqtknpncbbffd
+
14-15 z: zjzzszcgnzczszg
+
12-16 g: jdvgrmdczssgtwsq
+
2-6 n: lwlklnfxlhwdkn
+
1-5 c: bnfbdzc
+
14-15 b: bbbbbbbbjbbbbtb
+
2-5 v: vnvvvvv
+
14-17 s: ssssszssssssssshmsss
+
7-9 h: fhmhjkcrhbl
+
11-15 g: fwhjldbbprhngcjg
+
9-15 m: mdcbhmmjlmfmmtmcmm
+
10-13 j: jjjjsjjjjlwjsjjl
+
1-5 s: dsssssssssssssssss
+
5-15 r: rrxprrrrrrrzvhrrrrr
+
5-7 b: svnbkbb
+
2-4 w: kwwqws
+
13-20 q: slgmkqmkvlqqwjfdhqdq
+
8-12 l: llllllljlllkll
+
9-20 c: cccccccccccccccccccc
+
5-6 n: wlcnnh
+
1-4 w: lzwwv
+
8-9 h: hhphhhhhhhdhh
+
8-10 t: mnsnktzgrn
+
11-16 v: bjvcvfrkgkvzvvvxb
+
11-18 v: vvvvvvvvvvvvvvvvvxvv
+
11-14 l: llllkllllrlqll
+
5-11 q: zwlqcqqnnqq
+
5-11 p: pftpphptptphtskqp
+
4-12 p: pvpwpzppppppppdk
+
2-4 h: hhhqhh
+
6-12 l: jznsrcnxkllz
+
13-15 j: vdjkhxjptxzfjjm
+
4-5 t: vzhft
+
7-10 m: bmrmztmwxmms
+
5-7 h: hswmtbhcb
+
13-17 f: vmhffvvfjtffpllftff
+
11-16 w: wqntqwmzcwwvhwwsxwlh
+
2-4 r: wrbb
+
2-10 b: bbbbbbbbbb
+
1-11 m: mmmmmmmmmmmmmmmmmmhm
+
13-14 r: rrrrrrrrrrrrrwrrrr
+
3-6 n: vnsprwznfn
+
3-4 v: vvvz
+
2-11 p: ppxjqmffgtp
+
7-10 s: sslmsssssss
+
10-11 j: jjlsjjjjjfjjj
+
4-7 b: fbbhggbcmr
+
12-13 s: sssssssssssgxs
+
8-10 l: lpllllhlcnlllxl
+
3-4 l: ljxlml
+
2-14 f: ffffffwfffzfcnfffwrf
+
7-10 h: kwdcfptcchhhhhgz
+
2-9 j: jjjjjsmjzjqjjj
+
4-13 w: wwcwwwmrwwwgqwr
+
3-5 t: ttmtttt
+
5-13 d: whpdqwpvkzsxdmgtnz
+
13-14 x: xxtbcxxxwxxxxx
+
1-7 t: ttttttdthtttttttt
+
6-15 x: pxfnxbnmpxgmwzxkv
+
2-11 m: kmcmjlddbwm
+
9-14 d: dddddddddddddldd
+
6-9 x: nxvkxvxxx
+
18-19 x: xsxxxrdxbkjmbdvfrrx
+
12-13 j: jnjjjgjjqrjjs
+
14-16 r: rrrrrmrrrrqrrxrvrvr
+
5-9 h: hhvvhmzjn
+
5-6 w: wwgfzt
+
10-13 v: vvvvvsvvvtvvxvvrvvv
+
2-4 h: hwhh
+
4-8 s: ssssssshss
+
5-12 n: nnnnnnnnnnncn
+
2-3 x: bxxmxcdzlj
+
14-16 x: chpxcprsxhxvkxzc
+
7-9 b: bbbbbbbbbb
+
10-11 x: xxskpxtfhxd
+
5-7 w: zwwwrww
+
1-8 l: splxkhxw
+
8-9 q: llcbqltqh
+
2-3 k: kkcckxm
+
6-11 c: ccccsccccccccccccccc
+
6-14 k: xkbbnkknkttqpb
+
12-16 d: dcddddrddnddvprsd
+
1-3 p: bpplj
+
4-6 n: nntbnpn
+
14-15 k: nwcckxptkgrrbkd
+
12-14 d: dddddddddddddxd
+
1-11 v: vvvvjvvvvvvvvv
+
4-6 g: gtgbfg
+
5-8 h: hhhhdhhhhhhh
+
13-15 n: nwnnpnftnbnknqn
+
3-4 m: mpfqmj
+
3-6 t: ttmtct
+
2-4 s: sssss
+
10-16 v: vvszvvgvvvvvvvvcv
+
11-13 t: stvdjtwjzftrtprpb
+
5-6 p: pppptp
+
12-15 d: ddtdjdddxdhxzdcd
+
12-16 b: bbbbbbbbbbbxbbbbb
+
12-14 n: qnnnnnnnnzlnnnn
+
9-11 v: sqkrmzjqvvv
+
2-5 d: cdpfdtjdkn
+
7-8 p: pppptppppp
+
2-4 s: ssszsss
+
13-15 d: cpdwdbvqxcffdrd
+
4-5 j: hbjjpppm
+
5-8 g: gvgmgjgrzz
+
6-7 s: sssssqn
+
1-11 p: tpstkbpmtbpg
+
17-18 m: zmmmsrsrgfpggmmmlgk
+
2-3 f: ffkhf
+
2-5 f: ftfff
+
2-10 m: gqxlmphwcmfc
+
6-8 v: bvgwwbvlvvvlrvv
+
13-14 n: nnnnnnnnnnnnnxn
+
2-7 f: ffffffff
+
9-10 x: xxxxxxxxxd
+
1-7 s: mssssdsksssdsssz
+
11-15 t: jtttttltmttgttthz
+
5-12 j: jqjjjjfndzjdjjjjjjjn
+
9-13 r: rrrrrrrrrrrrj
+
5-9 x: xxjxpcqxxcxznn
+
2-9 c: psdddswdcpd
+
4-10 f: fsffxffffmr
+
7-12 j: jxvjjjrjjhjfc
+
4-5 q: bqqhj
+
1-4 f: fwbclqb
+
1-2 k: skqk
+
9-11 b: bbbzbkbbhbb
+
1-2 g: nggv
+
3-7 m: mmfmmmpm
+
2-3 m: vpmr
+
7-10 d: ddddddjddm
+
2-15 t: hgvsftrbzglvmpwhsmp
+
1-5 t: qtttt
+
11-13 p: pppppppppppphp
+
4-5 p: cvqpzvpppfh
+
2-3 f: bbftxfnmb
+
2-3 r: rlrr
+
1-4 m: mvms
+
3-14 m: gfmprfxpvzhmhm
+
2-8 j: jdsjjlfl
+
8-12 k: kkkkskkvkkkkk
+
1-7 p: hpfpmpwp
+
5-8 x: xxxxxxxhxxxxxx
+
3-10 p: mmctgfppppxplpplppj
+
3-4 p: zfmpjbhwppk
+
13-16 z: zzzzzzzzzzzzvzzzz
+
1-3 d: djddd
+
2-7 p: nmplwdp
+
7-9 l: lglllllll
+
7-8 p: ptvsnpcp
+
9-10 m: rjnmxthbmg
+
5-6 j: jjccjv
+
6-8 t: tvcztdttxzkp
+
8-12 p: kmrpqdnppskj
+
6-8 j: lsjkhjjhbgj
+
11-12 x: hxxxlxmxxxtrxxxxk
+
3-6 p: pppppcgtpxpppplp
+
8-10 s: nphsvswsrssxmdh
+
10-11 p: pppcpptppkp
+
14-15 z: zzzzzzzzzzzzzcz
+
14-18 f: mffngzbffffznctfff
+
6-7 t: tttthhtttq
+
12-19 l: shqlqnkzwpplqjrwjcv
+
1-4 k: khkx
+
9-11 d: ddddddddpdrdddd
+
3-4 s: mvsssc
+
6-7 h: hhhhhhphh
+
8-14 v: vvrvsvwrwmpvlv
+
2-6 z: zxjvsn
+
9-12 f: ffffffffpfftf
+
2-5 s: lssmjh
+
11-14 k: kkwkkfkbpnjkbkk
+
4-15 x: ppcxmjmxvbrkxlqcthx
+
1-2 g: bpggz
+
3-5 x: vxjxxxnztm
+
7-8 r: rrrrrrrhr
+
8-13 n: nnblnxnnrmnnq
+
1-4 w: wwtxwwwjwwwwdwl
+
1-10 d: cddddddwfhdrdddqnd
+
1-8 j: jxmjjjrv
+
4-7 x: xfxxxxn
+
16-18 v: vvvvvvvvvvvvvvvvvvv
+
3-5 h: hhhhhh
+
9-11 z: zzztvzzhgzr
+
3-5 w: fcjwwjwwv
+
6-7 z: hszgzsl
+
3-9 l: fldswlflrll
+
10-11 n: fqbxpfncbln
+
7-14 m: jftmkxqhrmmcqmk
+
8-9 h: hhqqhkhmh
+
3-5 l: lnlqlhdjtd
+
4-11 x: lqjxqzlfsfhzjqqnttp
+
4-6 c: fccctcc
+
8-11 c: cccccccccckcr
+
2-3 k: jkxtkjhnkksksrrzhfkk
+
7-9 m: nmmmmmmkmrmmdjjms
+
5-12 m: mmmmprmsmbmmmm
+
1-2 l: lllll
+
3-7 m: gmmtchm
+
11-16 t: vddbsztmpttvsktp
+
9-13 f: ffffffffffffffffff
+
3-8 j: hjhldbcznnsx
+
5-7 v: vrfpvswbmbvvzv
+
6-15 z: bhlvbzvnlntzzzz
+
4-6 x: xzjrxcx
+
3-4 q: qqsw
+
5-6 r: rrrlrrrrrr
+
1-7 b: qbbbbbxbbb
+
6-7 b: bfbbjdd
+
4-11 f: lfrffpfgzqs
+
3-5 c: qccncmjgrczzmcz
+
9-15 x: vxxxxxnxxxxxxxxrxxxj
+
1-2 s: ssnls
+
5-9 z: zzpzzzzzszzzzzz
+
5-16 z: pzgzxgpwqmzwwlzz
+
6-7 c: ccqxccn
+
5-6 b: ngmbbs
+
2-19 d: cdmnqfjfxgtdwlrnhcd
+
9-12 p: thcvkgpcxptpxpp
+
3-6 g: sbstjvnhfgdr
+
1-18 f: fsffffffffffffffffff
+
2-16 f: rfxzxrjpbvfzcftf
+
13-14 v: rvxvvnsfcvvvrvvvqg
+
4-10 d: tqlddkdpdv
+
12-13 r: rrrrrrrrhrwrjdrlnr
+
5-6 x: xxvxgnxxxx
+
3-4 d: sddd
+
5-11 p: jphgprgjjpp
+
1-7 f: fjgfdvb
+
3-8 x: rpxvndgxx
+
1-17 b: jbbrxbbbtxjbrpbbb
+
7-10 h: bhhbzmdrkhhvhjx
+
1-5 v: fzdgv
+
5-7 f: vfdffftffffhflw
+
2-20 c: mcbhcvvxwxfvxqlgxpdc
+
5-8 w: vwktjwdsccgj
+
3-4 d: nntd
+
1-7 n: nnncmhnkgqn
+
2-6 r: bdvvbrr
+
1-15 b: bbbzwbbbbkbgkbp
+
3-8 f: slfvsmvftsstff
+
3-4 z: pvzzggdnhwzjzgp
+
8-9 n: nnnnvnnfn
+
4-10 n: nnnlnngnncnn
+
8-10 l: vktfwjrmslbh
+
3-6 n: nflmqn
+
4-5 s: svggkxz
+
3-4 w: wwjt
+
5-6 t: nbbbdt
+
3-8 d: jrjkdghxqwq
+
7-8 q: qqqqqqgq
+
7-8 k: qxgnkvckpkchqnmxb
+
1-5 v: vvvvvv
+
6-16 s: stmjwhvrrkfgrsxs
+
3-4 s: sdrswqnsjrnhrlds
+
12-15 r: rgdrrrrrrrrrrrgtg
+
12-14 g: gggggggggggjgggggggg
+
1-7 h: phhhhhdnhj
+
3-4 v: tknvv
+
10-11 j: jjbvjjxjjjjj
+
2-5 c: bcbff
+
7-11 r: rrrrrrxrrrdrrrrr
+
13-16 p: ppppppppppppdppr
+
14-16 t: tttttttvtttttttwttt
+
3-6 c: hclhccxhmxtjcbmjc
+
1-2 x: gxxxxx
+
2-3 w: wrwcqt
+
2-6 g: gmblggxgg
+
1-4 l: lllxpkml
+
1-2 d: mdddddd
+
4-8 q: qqqxqqqqq
+
3-4 v: mwvfvlqvv
+
3-6 w: wswwgc
+
2-4 d: bdfd
+
17-19 l: llllsldlbllllnlllzr
+
10-18 j: tjhgvshtbqjtcfcvlr
+
4-9 t: ttttttttttfttttttt
+
8-9 g: ngsggnbgqgtgglnjgcg
+
9-10 d: dddhdddvgbdbd
+
8-9 g: gtggvpgmq
+
11-15 j: jjqkjsmjkgfvjns
+
6-9 t: tqthttvtnttttttg
+
1-7 j: sjjjjjjjjjjjjjj
+
15-16 g: gggggggzgghgggqd
+
10-16 n: nnnnnjnnngnnnnnnnn
+
1-6 p: pppppppp
+
1-2 k: kdkk
+
1-2 b: bjvzqrgbhmgm
+
2-4 x: xvxxx
+
1-5 j: zjjjjjjj
+
2-5 f: lfnpwfz
+
1-12 j: hjjjjjjjjjjj
+
7-10 l: lllllqhlllllmmlpllll
+
11-12 m: mmmnmnmmmmmmmm
+
6-8 z: dzzzzfzzpz
+
14-15 c: cshjrbzhmmpckcwf
+
3-5 q: qqqqz
+
11-12 z: zzzzdzczzkprvztzfrdd
+
4-5 t: ttstbt
+
14-15 k: kkkkkkqkkkkkksr
+
1-12 j: jjjjjjjjjjjwgcjzj
+
2-3 k: rhkhkkg
+
1-16 z: zrzzzzkkhzzflzzzlzzq
+
12-13 h: hhhhhhhhhthgjhh
+
1-5 j: qqjjczwttz
+
11-12 h: hhhhhhhhhhmk
+
1-3 p: qpspbpjfq
+
1-3 f: ffzf
+
11-16 f: qdfmgnfnfvffflfhff
+
12-14 b: btwsgnvvljknbbdf
+
7-15 b: wdrgltbgdqscbhh
+
3-13 j: vwjpjjwjtcpjk
+
2-4 l: clxdsfqfdvkfhcgdswl
+
9-13 m: mmmmmmgmmpnmmmzmmk
+
4-5 x: hxxxx
+
1-4 b: bbbb
+
4-5 r: rrrrwfrv
+
6-9 n: nnnnnnnnsn
+
4-7 m: mvmmmmdmm
+
4-12 t: ttttttjtttttjttttt
+
1-3 c: bccc
+
2-3 m: mmcxbw
+
1-4 r: rrrrrr
+
8-10 l: lllllllplllllllll
+
18-19 h: hbhjdhhnnhfshkhhhgh
+
6-8 h: hfhwhwph
+
1-4 z: cfmz
+
2-3 m: vtmmznmvmrs
+
7-8 l: llhlwzlmjll
+
1-2 m: mmskncxdc
+
1-4 d: ndddd
+
1-3 m: mmgmmm
+
14-15 r: nzrgmcrrgmrxlbr
+
2-13 h: htkhhhhhhqhhlhhhkh
+
2-4 w: wkwsw
+
3-4 w: wmwr
+
2-9 v: kdzkhvnkv
+
8-9 t: wltttttkbktftk
+
9-14 n: vnhdtndfnsncpnf
+
3-10 n: jfnwcngtdz
+
13-15 j: nqzdlvnvvgnmhjj
+
1-12 q: qqqqqqqqqqqqq
+
10-12 c: cccdcmscbhcqccc
+
1-3 w: bzwwgg
+
2-14 d: pdkrpmxxzgcvqkzvvzqd
+
6-11 t: tfqvhtbmdztsnwnt
+
5-9 l: xllmllvjdds
+
6-14 h: pkhthnhxhhhjnscb
+
5-7 m: mmmmrmmm
+
8-10 x: xxxxxxxwxkxxx
+
4-5 k: lmkkkkkskg
+
1-2 d: dtdd
+
5-7 f: frfwsfr
+
4-5 w: rclww
+
4-5 g: gkkmtnlhbkgb
+
4-6 q: qqqfqqq
+
3-4 d: ddjb
+
11-13 n: nnnnnnnnnnnnnnnn
+
4-6 f: jvkxcffdgd
+
3-4 g: ktsgxzn
+
14-15 g: gggggggggggggggg
+
2-3 n: nqnnn
+
2-12 k: kbkpppkrkkjkkkk
+
5-7 c: ccccbcccc
+
9-10 l: plmrklsclx
+
4-11 m: mmmtmmmmmmqlm
+
6-7 b: bbbbbbq
+
7-9 g: kcgggklzg
+
3-6 p: ptxpppppppppppp
+
2-4 s: swsss
+
7-10 c: cccccccccpcc
+
5-7 d: dbddlddddcsdd
+
6-7 k: kkkkkkk
+
2-4 h: hwnvcj
+
1-9 g: nggggggggg
+
9-19 b: dzzpzvgwbdbmthmzfbhb
+
1-6 v: vrclmqxpvkhbvrfdmc
+
4-7 k: sgwktwtttmktrfjzn
+
13-16 x: whxxxxxxxxxxxxxsxx
+
4-9 z: zzzpzzzzzz
+
7-9 t: mwvtbhtxt
+
2-3 j: jfjdj
+
3-9 t: nrkffvgmtdstkkhtfpn
+
3-4 g: ggggxxdjsgrbf
+
4-10 x: kgbxbqnqmc
+
7-10 t: ztndqctmtttthxkwtlm
+
8-12 h: fbvccdshdvhhh
+
9-12 f: ffffsfffffjd
+
1-3 q: qkqqrvmmkh
+
13-14 r: rrrqrrrrrrrrrrrrrrr
+
2-3 g: bmdgkz
+
6-7 k: kkkkkkjk
+
4-9 q: qgzrflqqqd
+
12-13 s: brsswsfsvsfssps
+
5-9 q: drjcqnmwqbncmqqvcjgh
+
7-9 x: xxpxxgzxxxnx
+
2-13 s: ssdsssssjshsjsjswn
+
1-11 m: fmmmmmmmmsmmmh
+
3-8 f: zffrqqhflhvl
+
4-11 l: lqfwlxlllnl
+
12-16 k: kkkkkkkkkkkdkkkgkkkk
+
1-5 s: sssslss
+
3-13 n: ntnnnnpnnlndsnn
+
13-16 f: nzpfvhfrxpxjfmcfff
+
2-3 f: ffbf
+
3-7 r: nxrrrqrqnrrlbj
+
1-10 p: mppptppppcpppppppd
+
9-11 l: ftmflbbljjf
+
6-8 r: rrrrrlrrrr
+
10-16 k: zqknmwppdtckmpgk
+
10-13 t: dpqxttttttttb
+
2-4 f: ftff
+
9-14 k: krkkkqkkkkdkkrn
+
12-17 b: mbxbczbbbbdbbbbbpbnb
+
8-9 j: bjjjjjjjqjvxjfjjjjjj
+
1-3 s: lspsh
+
2-7 p: zpqlvwpmdp
+
6-8 q: qqqqqqqtqq
+
15-16 z: cxzmdcdzckrhzxzz
+
13-17 v: vvvvvvvvvvvvvvvvzv
+
6-8 c: ctcccccc
+
6-7 v: xjzvvfvjmnrvtvncjmdv
+
3-8 m: sqmfbqlm
+
3-9 p: bpqpxpfpzqpjjgv
+
8-10 n: clxnnnxvnnxnnnnnn
+
8-9 m: mmmmmmmmm
+
2-6 s: scssss
+
9-10 t: xtttttttftttt
+
3-5 c: rksck
+
16-17 h: ldhchxlhphlnmhvhh
+
3-6 b: bnbvlb
+
4-5 j: mjjjx
+
2-4 j: sklkmtrjpgprqdn
+
3-8 l: nllnlnll
+
1-6 g: jgbgpt
+
14-17 d: cqddcfsjddddxlcdd
+
4-6 h: qcqhwc
+
6-14 j: fzrkcjrqjssjdjjjjj
+
3-4 j: jdfj
+
1-3 k: fkpkkkck
+
11-12 w: wwwwbwwwwwfg
+
6-7 g: wngnhsg
+
4-13 d: bddjdddddddddpdddddd
+
7-8 k: kmkfkkkp
+
5-9 b: btmlgzbbdb
+
4-7 j: dxlzwsjdbjcqjsnwq
+
9-13 p: pppppmfhpptppp
+
16-17 v: vvvvvvvvvvvvvvvxn
+
1-7 m: mmmmmmtmm
+
1-8 v: vvvvvvvbv
+
9-15 t: tttttttttttttttt
+
15-17 r: rwrqrrhdrtvrfszrj
+
4-9 m: mfddknmcmqhglr
+
7-10 k: kkkkkkkkpkklkk
+
18-19 c: hpqwwkgtqbrcjxptwnc
+
2-3 p: xwppdp
+
5-11 r: vnrhrmknrrr
+
10-15 f: ffmfffffcfftfdfff
+
10-13 m: mmtsmmmmmmmmhmm
+
4-16 j: pjlplfvtgrjhvcdjjdmb
+
8-14 v: kxrjvdbbmxvrzdp
+
6-7 w: wwwwwwgwww
+
9-16 f: hhkvlfrvfvpvlzvcfsg
+
1-3 k: kkbk
+
9-12 d: ddddddddtdddd
+
13-16 w: wwwgwwwwwwwxwwwwwww
+
4-5 t: swtttpkkpwdt
+
5-7 z: zzfzzzp
+
1-5 g: grghg
+
3-4 n: wjsnnnwsxrx
+
8-10 x: xxxxxxpqxc
+
4-13 t: tttbtttttttttttt
+
1-3 w: wswwn
+
1-6 d: dddtddddd
+
12-13 x: xxflxxpxxxxxwgrxxx
+
1-2 m: mxghmm
+
6-11 j: jjjjjjjjjjxj
+
1-3 n: nnfnnnnnnnn
+
7-11 w: wxwwwwpwwwww
+
1-2 q: nqmqfxql
+
9-12 m: mmmmvmnmfmmp
+
5-7 m: mmmmmmms
+
3-4 s: ssqsssssssj
+
6-9 c: ccvcmnccccl
+
1-17 b: gbbbbbbbbbbbbbbbqbb
+
7-10 q: vqqqqxqqql
+
9-12 v: vzvvnvtblzrq
+
7-8 q: qqqqqqqs
+
4-8 q: qtzqcgbqwq
+
7-9 c: ccncdmxsccchcxxj
+
3-6 q: qqqjlqqxcqdkzqqj
+
3-4 k: qckk
+
10-12 c: cccccccccccc
+
10-18 g: gggggggggggggbgkggn
+
2-3 w: wwww
+
1-4 k: kkglkqkgzbn
+
6-7 l: lklksztlzllllp
+
8-10 x: xxxxltxwxnxdvcg
+
1-5 w: tvmjw
+
3-9 z: hvqqhmpzz
+
6-8 x: qzxxdxnxmlgp
+
13-17 s: ssssqsssssssjssssxs
+
2-8 f: qfhnhfzc
+
3-4 v: vvbv
+
4-6 j: jjjmjj
+
3-4 q: lqqd
+
12-14 j: jjjjmjjjjjjcjjjj
+
6-9 c: whjbsclch
+
14-15 j: jgjjcjkljjmfpjqjjjk
+
2-3 z: jbzt
+
12-13 b: bbbbbbbbbbbqj
+
3-9 s: jhcsgnsscs
+
6-8 h: hhhlhlhf
+
3-4 j: jmjjcwjpj
+
10-11 c: cccccccccdcccccc
+
11-12 w: wswwwwwwvwww
+
17-18 k: rmzbkcsxrmdwkksstk
+
7-8 h: hhhhhthh
+
1-2 n: nnqcqlxdsc
+
4-11 l: llllllllldlql
+
14-20 h: hhhhhhhhhhhhhhhhhhhh
+
4-8 r: bhwrrrrrrgrwcmr
+
5-16 m: lmdbtwhnzszltgjmhfcb
+
4-12 m: mmmvmmmmmmmmm
+
1-5 t: qtwnztcftsqjh
+
4-12 s: ssdszsssssvslx
+
16-18 w: wwwwwwwwwwwwwwwrwq
+
7-8 t: ttttttttt
+
8-10 r: mxrrrrrrrc
+
10-12 g: gggggtpghggsgvcdpjlg
+
7-13 q: qlqqpqdqqqqqnqqqq
+
7-9 z: zzzzzgzzd
+
13-16 c: ccccccccccccxccb
+
4-9 l: jbsssqpjl
+
7-12 s: sslsssdksnsssqmrsc
+
9-14 w: cwqsssmkbgwmqzrw
+
1-5 v: vljdvzqvgjhcgbn
+
4-7 w: nxqxgww
+
7-9 w: wwwtwlwqxwww
+
14-18 q: qwncqqqjmmlzqqqqnq
+
2-8 g: ggggggggg
+
5-6 g: ggpgkgg
+
12-13 r: rrrrrrrrrrrph
+
14-15 c: cswccccccvccmcs
+
11-15 p: jppxbqzcdzppxjv
+
6-9 f: fffnfffdcc
+
7-10 x: xnrdxxtwxx
+
2-6 s: gdshsbcsssss
+
5-9 d: dwtcdddffsdzdzcvbdd
+
2-3 l: kqlfjqj
+
7-9 s: tmsklsfsp
+
2-4 c: lkbck
+
2-9 x: jtxslmdpxpkqfjjb
+
18-19 v: vvvvvvvvvvvvvvvvvmd
+
9-10 x: zgxdjvxqxgxkcm
+
11-12 d: dddqddddddvdddd
+
1-4 d: ddlvd
+
2-4 t: tztfwtjwt
+
5-6 j: gjjsfjgvjjcwzjm
+
8-11 g: kvsqgmqgdmgxdpg
+
6-11 b: bpjbfrrpbvb
+
1-10 j: tmjjjjjjbjcjjjjjj
+
14-18 t: tttttttttttttttttttt
+
11-12 r: rjjvggmpwvrhn
+
10-12 t: tttttttttctttt
+
1-8 s: lbssjsssgsss
+
4-12 h: pchchhtthdhhch
+
7-8 m: mhrpkbmdmj
+
5-6 f: sffdsf
+
4-7 z: zzzkzzkzzzz
+
1-5 c: nccjw
+
1-2 l: wsgllckll
+
1-9 k: mwvhwgvfkvmpwnntjbk
+
1-6 v: vvvvvvvvvvv
+
2-8 m: ttzhlrrmbt
+
3-4 x: xqklgxxx
+
12-13 v: rvvvvvvvfvvmvv
+
6-13 n: nnnnnnnnnnnnnn
+
5-6 s: bpnsssj
+
3-9 q: xtddtwfcstjrqbslmjsz
+
8-9 g: xxkxxgzgg
+
1-12 w: gwwwwwwwwwwtw
+
4-5 p: pppppp
+
1-2 x: jpxvxxxxxnmkx
+
3-4 n: ddnn
+
5-6 t: ztkmttmb
+
2-5 j: rrcjj
+
2-5 s: lccgw
+
5-6 f: fffflfff
+
3-4 h: ptbh
+
2-3 s: sssgm
+
6-8 g: gggggpggg
+
3-4 d: qrll
+
8-15 b: zbxpbbbbbbhbbbpbp
+
2-3 r: rrrr
+
13-15 c: cdccqkcvckcccvc
+
10-15 z: hxctzzvzzzzbfzz
+
3-4 q: qwtqqncqcdxq
+
1-6 l: jlllsl
+
5-6 g: ggggbxggggrggggg
+
4-6 m: mmmsmdmpmmmm
+
5-9 d: ddddddqdgddd
+
2-19 d: dxdddddddddddddddddd
+
8-9 z: zzzzztzpzqzzdh
+
7-12 j: jjfjsmsxjwjjvtcbjb
+
2-10 l: dxkrwjbvlsgpzcmk
+
13-14 h: hhhhrqlhhhhhhhh
+
2-8 v: jvvvvvvjv
+
13-14 q: qqjqqqfjqqqqqz
+
5-12 d: pllddwcgctfbkfx
+
17-18 f: ffffffffffffffffmjff
+
7-17 w: sqmbczwtwpwkhngtw
+
15-17 l: lllllllllllzllplllll
+
5-8 c: cccqfccccccc
+
8-14 k: xnjcftlkvhkmkr
+
4-5 q: qqqqqj
+
8-11 m: wzxcmwgmmvmgq
+
11-15 h: hnhtnhnhhkghhzhh
+
11-13 g: rgdgqgvmqjggg
+
8-13 v: mtjkbnvvvhvvv
+
4-5 v: vcvhv
+
5-12 w: fqvwnzcwlntwpcwf
+
1-15 j: jjjjjjjzjjjjspwj
+
2-4 x: jmrxxkpncwdcftw
+
1-2 b: gbbqbf
+
8-11 k: kxkkkkzpkkzkkm
+
1-4 v: mpqp
+
6-7 p: lxdptfp
+
3-4 s: sxss
+
16-18 d: gxzglqmddffqxqvppr
+
4-6 f: fffmfff
+
13-16 m: zfmcnzxfvmcmqmhcctv
+
1-8 n: nnnnnnnm
+
8-9 v: vvvvvvvvvg
+37
2020/2/solution.exs
···
+
defmodule Solution do
+
def read(path) do
+
path
+
|> File.stream!()
+
|> Enum.map(&String.trim/1)
+
|> Enum.map(&parse/1)
+
end
+
+
defp parse(input) do
+
[spec, pass] = String.split(input, ": ", parts: 2)
+
[range, <<char>>] = String.split(spec, " ", parts: 2)
+
[min, max] =
+
range
+
|> String.split("-", parts: 2)
+
|> Enum.map(&String.to_integer/1)
+
+
{min..max, char, pass}
+
end
+
+
def validate_1({range, char, pass}) do
+
count = for <<^char <- pass>>, reduce: 0, do: (n -> n + 1)
+
+
count in range
+
end
+
+
def validate_2({a..b, char, pass}) do
+
<<char_1>> = binary_part(pass, a - 1, 1)
+
<<char_2>> = binary_part(pass, b - 1, 1)
+
+
char_1 != char_2 and char in [char_1, char_2]
+
end
+
end
+
+
data = Solution.read("2/input.txt")
+
+
IO.inspect(Enum.count(data, &Solution.validate_1/1), label: "task 1")
+
IO.inspect(Enum.count(data, &Solution.validate_2/1), label: "task 2")
+38 -11
2021/day01.livemd
···
# Day 1
+
```elixir
+
Mix.install([
+
{:kino_aoc, ">= 0.0.0"}
+
])
+
```
+
## Load input
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2021", "1", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"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" <> ...}
+
```
+
```elixir
stream =
-
File.stream!("day1.txt")
+
puzzle_input
+
|> String.split()
|> Stream.map(&String.to_integer(String.trim(&1)))
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
#Stream<[
-
enum: %File.Stream{
-
line_or_bytes: :line,
-
modes: [:raw, :read_ahead, :binary],
-
path: "day1.txt",
-
raw: true
-
},
-
funs: [#Function<47.58486609/1 in Stream.map/2>]
+
enum: ["173", "178", "179", "187", "196", "199", "200", "201", "210", "209", "210", "211", "221",
+
"223", "235", "236", "237", "238", "242", "249", "247", "246", "256", "257", "258", "257", "258",
+
"265", "293", "303", "304", "317", "322", "330", "336", "337", "340", "339", "350", "351", "352",
+
"353", "349", "353", "342", "339", "341", "342", "348", ...],
+
funs: [#Function<48.53678557/1 in Stream.map/2>]
]>
```
···
|> Enum.count(fn [a, b] -> a < b end)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
1688
```
···
|> Enum.count(fn [a, _, _, b] -> a < b end)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
1728
```
+
+
<!-- livebook:{"offset":6811,"stamp":{"token":"XCP.FvhtdtxXYvRknZpAwd7ATOS4B7IljsyPdpscD9AizNpEm35rzHOr6FxLlc7D5RuBsoDcHmWO_rDJI7khm9nmL4U_ebmCGJuAd_tnVXrljSHKDRHzwzLMZ_v6kJy6nqkgIA","version":2}} -->
+12 -4
2021/day17.livemd
···
[a: a, b: b]
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
target area: x=288..330, y=-96..-50
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
[a: %{x: 288, y: -96}, b: %{x: 330, y: -50}]
```
···
{v_y, v_y * (v_y + 1) / 2}
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{95, 4560.0}
```
···
MapSet.size(pairs)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
3344
```
+15 -5
2021/day18.livemd
···
|> Enum.map(&elem(Code.eval_string(&1), 0))
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
[
[[[6, [8, 3]], [2, 0]], [[[9, 5], [9, 1]], 3]],
[[[9, [2, 2]], [5, 4]], [[[2, 2], [9, 6]], '\a\a']],
···
end
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{:module, Day18, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:magnitude, 1}}
```
···
|> Day18.magnitude()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
[[[[7, 7], [7, 8]], [[8, 7], [0, 7]]], [[[6, 6], [6, 7]], 6]]
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
3411
```
···
end
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
4680
```
+8 -17
2021/day19.livemd
···
end)
end)
-
IO.inspect(time / 1_000_000)
+
# IO.inspect(time / 1_000_000)
current = Day19.pairs(set)
···
{:halt, {set, scanners}}
{joinable, later} ->
-
IO.inspect({length(joinable), length(later)}, label: i)
+
# IO.inspect({length(joinable), length(later)}, label: i)
{:cont, {set, joinable, later, scanners}}
end
end
···
<!-- livebook:{"output":true} -->
```
-
0.005503
-
1: {5, 25}
-
0.029354
-
2: {5, 20}
-
0.067284
-
3: {7, 13}
-
0.195126
-
4: {6, 7}
-
0.292686
-
5: {5, 2}
-
0.374403
-
6: {1, 1}
-
0.074645
-
7: {1, 0}
-
0.090199
+
warning: variable "i" is unused (if the variable is not meant to be used, prefix it with an underscore)
+
2021/day19.livemd#cell:w7cczzbdb2mrwtou27usauoozuqydf3v:9
+
+
warning: variable "time" is unused (if the variable is not meant to be used, prefix it with an underscore)
+
2021/day19.livemd#cell:w7cczzbdb2mrwtou27usauoozuqydf3v:10
+
```
<!-- livebook:{"output":true} -->
+9 -3
2021/day20.livemd
···
img = Day20.Image.new(board)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
#Image<{100x100}
█ █ █ ██ ████████ ██ █ █ ███ █ ██ ██ █ ███ █ ██ █ █ █ ██ ███ █ ██ ██ █ ██ █
···
|> Day20.Image.lighted()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
5179
```
···
|> Day20.Image.lighted()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
16112
```
+12 -4
2021/day21.livemd
···
{p1, p2}
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{3, 5}
```
···
rounds * 3 * loser
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
720750
```
···
end
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{:module, Day21.Task2, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:round, 3}}
```
···
Day21.Task2.play(p1, p2)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
275067741811212
```
+12 -4
2021/day22.livemd
···
end)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
[
on: %{x: -40..7, y: -3..49, z: -48..6},
on: %{x: -38..10, y: -11..37, z: -30..19},
···
end
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{:module, Day22, <<70, 79, 82, 49, 0, 0, 18, ...>>, {:split, 2}}
```
···
|> Day22.volume()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
556501
```
···
|> Day22.volume()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
1217140271559773
```
+12 -4
2021/day23.livemd
···
|> Map.new()
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
%{a: [:d, :b], b: [:d, :a], c: [:c, :b], d: [:c, :a]}
```
···
end
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
warning: variable "depth" is unused (if the variable is not meant to be used, prefix it with an underscore)
day23.livemd#cell:58: Day23.room_to_hall/3
···
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
{:module, Day23, <<70, 79, 82, 49, 0, 0, 23, ...>>, {:cost, 4}}
```
···
Day23.process(input)
```
-
```output
+
<!-- livebook:{"output":true} -->
+
+
```
:inf
```
+1059 -7
2021/day24.livemd
···
end
end
-
def evaluate(ops, input), do: evaluate(ops, Integer.digits(input), %{w: 0, x: 0, y: 0, z: 0})
+
def evaluate(ops, input), do: evaluate(ops, to_digits(input), %{w: 0, x: 0, y: 0, z: 0})
defp evaluate([], _, regs), do: regs
-
-
defp evaluate([:nop | rest], input, regs), do: evaluate(rest, input, regs)
defp evaluate([{:inp, reg} | rest], [v | input], regs),
do: evaluate(rest, input, %{regs | reg => v})
···
defp get(imm, _regs) when is_integer(imm), do: imm
defp get(reg, regs) when is_atom(reg), do: Map.get(regs, reg, 0)
+
+
defp to_digits(int) when is_integer(int), do: Integer.digits(int)
+
defp to_digits(digits) when is_list(digits), do: digits
end
input =
-
File.stream!("day24.txt")
+
File.stream!("#{__DIR__}/day24.txt")
|> Stream.map(&String.trim/1)
|> Enum.map(&Day24.parse/1)
|> IO.inspect(limit: :infinity)
···
```
```elixir
-
IO.inspect(Day24.evaluate(input, 11_111_111_111_161))
+
IO.inspect(Day24.evaluate(input, 11_111_111_111_131))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
%{w: 1, x: 1, y: 16, z: 5400141854}
```
<!-- livebook:{"output":true} -->
```
-
%{w: 1, x: 1, y: 16, z: 207697766}
+
%{w: 1, x: 1, y: 16, z: 5400141854}
+
```
+
+
```elixir
+
range = 9..1//-1
+
+
for d01 <- range,
+
d02 <- range,
+
d03 <- range,
+
d04 <- range,
+
d05 <- range,
+
d06 <- range,
+
d07 <- range,
+
d08 <- range,
+
d09 <- range,
+
d10 <- range,
+
d11 <- range,
+
d12 <- range,
+
d13 <- range,
+
d14 <- range do
+
ver = [
+
d01,
+
d02,
+
d03,
+
d04,
+
d05,
+
d06,
+
d07,
+
d08,
+
d09,
+
d10,
+
d11,
+
d12,
+
d13,
+
d14
+
]
+
+
result = Day24.evaluate(input, ver)
+
+
IO.inspect(result)
+
+
if result.z == 0 do
+
throw({:ok, Integer.undigits(ver)})
+
else
+
[]
+
end
+
end
```
<!-- livebook:{"output":true} -->
```
-
%{w: 1, x: 1, y: 16, z: 207697766}
+
...
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 0, y: 0, z: 11790415}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 0, y: 0, z: 11790415}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 0, y: 0, z: 11790415}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 0, y: 0, z: 11790415}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 0, y: 0, z: 306550811}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 0, y: 0, z: 306550811}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 0, y: 0, z: 306550811}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 0, y: 0, z: 306550811}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 306550814}
+
%{w: 8, x: 1, y: 23, z: 306550813}
+
%{w: 7, x: 1, y: 22, z: 306550812}
+
%{w: 6, x: 1, y: 21, z: 306550811}
+
%{w: 5, x: 1, y: 20, z: 306550810}
+
%{w: 4, x: 1, y: 19, z: 306550809}
+
%{w: 3, x: 1, y: 18, z: 306550808}
+
%{w: 2, x: 1, y: 17, z: 306550807}
+
%{w: 1, x: 1, y: 16, z: 306550806}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321110}
+
%{w: 8, x: 1, y: 23, z: 7970321109}
+
%{w: 7, x: 1, y: 22, z: 7970321108}
+
%{w: 6, x: 1, y: 21, z: 7970321107}
+
%{w: 5, x: 1, y: 20, z: 7970321106}
+
%{w: 4, x: 1, y: 19, z: 7970321105}
+
%{w: 3, x: 1, y: 18, z: 7970321104}
+
%{w: 2, x: 1, y: 17, z: 7970321103}
+
%{w: 1, x: 1, y: 16, z: 7970321102}
+
%{w: 9, x: 1, y: 24, z: 7970321084}
+
%{w: 8, x: 1, y: 23, z: 7970321083}
+
%{w: 7, x: 1, y: 22, z: 7970321082}
+
%{w: 6, x: 1, y: 21, z: 7970321081}
+
%{w: 5, x: 1, y: 20, z: 7970321080}
+
%{w: 4, x: 0, y: 0, z: 306550810}
+
%{w: 3, x: 1, y: 18, z: 7970321078}
+
%{w: 2, x: 1, y: 17, z: 7970321077}
+
%{w: 1, x: 1, y: 16, z: 7970321076}
+
%{w: 9, x: 1, y: 24, z: 7970321084}
+
%{w: 8, x: 1, y: 23, z: 7970321083}
+
%{w: 7, x: 1, y: 22, z: 7970321082}
+
%{w: 6, x: 1, y: 21, z: 7970321081}
+
%{w: 5, x: 1, y: 20, z: 7970321080}
```
+430
2023/day14.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 14
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "14", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"####....#..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..##...." <> ...}
+
```
+
+
```elixir
+
puzzle_input =
+
"""
+
O....#....
+
O.OO#....#
+
.....##...
+
OO.#O....O
+
.O.....O#.
+
O.#..O.#.#
+
..O..#O..O
+
.......O..
+
#....###..
+
#OO..#....
+
"""
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
"O....#....\nO.OO#....#\n.....##...\nOO.#O....O\n.O.....O#.\nO.#..O.#.#\n..O..#O..O\n.......O..\n#....###..\n#OO..#....\n"
+
```
+
+
```elixir
+
map =
+
puzzle_input
+
|> String.split("\n", trim: true)
+
|> Enum.with_index(0)
+
|> Enum.flat_map(fn {line, y} ->
+
line
+
|> String.to_charlist()
+
|> Enum.with_index()
+
|> Enum.filter(fn {p, _} -> p != ?. end)
+
|> Enum.map(fn
+
{?#, x} -> {{x, y}, :cube}
+
{?O, x} -> {{x, y}, :round}
+
end)
+
end)
+
|> Map.new()
+
+
{width, height} = Enum.reduce(map, {0, 0}, fn {{x, y}, _}, {w, h} -> {max(x, w), max(y, h)} end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{9, 9}
+
```
+
+
## Part 1
+
+
```elixir
+
defmodule Day14 do
+
def weight(map, width, height) do
+
for(col <- 0..width, do: Day14.column_weight(map, col, height))
+
|> Enum.sum()
+
end
+
+
def column_weight(map, col, height) do
+
do_column_weight(map, col, height, 0, 0, height)
+
end
+
+
defp do_column_weight(_map, _col, -1, stack, sum, height) do
+
sum + sum(height + 1, stack)
+
end
+
+
defp do_column_weight(map, col, row, stack, sum, height) do
+
case Map.fetch(map, {col, row}) do
+
:error ->
+
do_column_weight(map, col, row - 1, stack, sum, height)
+
+
{:ok, :cube} ->
+
do_column_weight(map, col, row - 1, 0, sum + sum(height - row, stack), height)
+
+
{:ok, :round} ->
+
do_column_weight(map, col, row - 1, stack + 1, sum, height)
+
end
+
end
+
+
def sum(_, 0), do: 0
+
def sum(s, n), do: div((2 * s - n + 1) * n, 2)
+
+
def print(map, width, height) do
+
for y <- 0..height do
+
row =
+
for x <- 0..width do
+
case Map.get(map, {x, y}) do
+
nil -> " "
+
:cube -> "#"
+
:round -> "O"
+
end
+
end
+
+
["#{y}\t", row, "\n"]
+
end
+
|> IO.puts()
+
end
+
end
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:module, Day14, <<70, 79, 82, 49, 0, 0, 15, ...>>, {:print, 3}}
+
```
+
+
```elixir
+
Day14.print(map, width, height)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
0 O    #    
+
1 O OO#    #
+
2      ##   
+
3 OO #O    O
+
4  O     O# 
+
5 O #  O # #
+
6   O  #O  O
+
7        O  
+
8 #    ###  
+
9 #OO  #    
+
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
:ok
+
```
+
+
```elixir
+
Day14.weight(map, width, height)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
136
+
```
+
+
## Part 2
+
+
```elixir
+
defmodule Day14.Part2 do
+
def round(map, width, height) do
+
map
+
|> move(width, height)
+
|> rotate(height)
+
|> move(height, width)
+
|> rotate(width)
+
|> move(width, height)
+
|> rotate(height)
+
|> move(height, width)
+
|> rotate(width)
+
end
+
+
def move(map, width, height) do
+
for(x <- 0..width, col = move_column(map, x, height), c <- col, into: %{}, do: c)
+
end
+
+
def move_column(map, col, height) do
+
do_move(map, col, height, 0, [])
+
end
+
+
defp do_move(_map, col, -1, stack, acc) do
+
expand_stack(0, col, stack) ++ acc
+
end
+
+
defp do_move(map, col, row, stack, acc) do
+
case Map.fetch(map, {col, row}) do
+
:error ->
+
do_move(map, col, row - 1, stack, acc)
+
+
{:ok, :cube} ->
+
do_move(
+
map,
+
col,
+
row - 1,
+
0,
+
expand_stack(row + 1, col, stack) ++ [{{col, row}, :cube} | acc]
+
)
+
+
{:ok, :round} ->
+
do_move(map, col, row - 1, stack + 1, acc)
+
end
+
end
+
+
defp expand_stack(start, col, len) do
+
for y <- 0..(len - 1)//1, do: {{col, start + y}, :round}
+
end
+
+
def rotate(map, height) do
+
Map.new(map, fn {{x, y}, v} ->
+
{{height - y, x}, v}
+
end)
+
end
+
+
def rounds_with_memoisation(map, width, height) do
+
Stream.iterate(map, &round(&1, width, height))
+
end
+
end
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:module, Day14.Part2, <<70, 79, 82, 49, 0, 0, 17, ...>>, {:rounds_with_memoisation, 3}}
+
```
+
+
```elixir
+
{nmap, _, _} =
+
Day14.Part2.rounds_with_memoisation(map, width, height)
+
|> Stream.with_index()
+
|> Enum.reduce_while(%{}, fn {map, idx}, set ->
+
case Map.fetch(set, map) do
+
:error -> {:cont, Map.put(set, map, idx)}
+
{:ok, prev} -> {:halt, {map, idx, prev}}
+
end
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{%{
+
{9, 8} => :round,
+
{4, 6} => :round,
+
{9, 9} => :round,
+
{7, 7} => :round,
+
{9, 7} => :round,
+
{1, 5} => :round,
+
{7, 5} => :cube,
+
{8, 1} => :round,
+
{0, 8} => :cube,
+
{9, 5} => :cube,
+
{4, 1} => :cube,
+
{9, 6} => :round,
+
{5, 9} => :cube,
+
{8, 7} => :round,
+
{6, 4} => :round,
+
{5, 4} => :round,
+
{9, 1} => :cube,
+
{5, 6} => :cube,
+
{5, 2} => :cube,
+
{4, 9} => :round,
+
{2, 5} => :cube,
+
{3, 9} => :round,
+
{0, 9} => :cube,
+
{4, 8} => :round,
+
{6, 2} => :cube,
+
{7, 8} => :cube,
+
{6, 5} => :round,
+
{6, 8} => :cube,
+
{2, 3} => :round,
+
{5, 0} => :cube,
+
{5, 8} => :cube,
+
{7, 4} => :round,
+
{3, 3} => :cube,
+
{8, 4} => :cube,
+
{2, 9} => :round
+
}, 10, 3}
+
```
+
+
```elixir
+
Day14.Part2.rounds_with_memoisation(map, width, height)
+
|> Enum.take(11)
+
|> Stream.each(&Day14.print(&1, width, height))
+
|> Enum.map(&Day14.weight(&1, width, height))
+
|> IO.inspect(charlists: :as_lists)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
0 O    #    
+
1 O OO#    #
+
2      ##   
+
3 OO #O    O
+
4  O     O# 
+
5 O #  O # #
+
6   O  #O  O
+
7        O  
+
8 #    ###  
+
9 #OO  #    
+
+
0      #    
+
1     #   O#
+
2    OO##   
+
3  OO#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#    
+
7       OOOO
+
8 #   O###  
+
9 #  OO#    
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7        OOO
+
8 #  OO###  
+
9 # OOO#   O
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7        OOO
+
8 #   O### O
+
9 # OOO#   O
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7        OOO
+
8 #   O### O
+
9 #  OO#  OO
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3    #      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7       OOOO
+
8 #   O### O
+
9 #  OO#  OO
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3    #      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7       OOOO
+
8 #    ### O
+
9 # OOO#  OO
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4       OO# 
+
5  O#   O# #
+
6     O#   O
+
7       OOOO
+
8 #    ### O
+
9 # OOO#  OO
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4       OO# 
+
5  O#   O# #
+
6     O#    
+
7       OOOO
+
8 #   O### O
+
9 # OOO#  OO
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#    
+
7       OOOO
+
8 #   O### O
+
9 # OOO#   O
+
+
0      #    
+
1     #   O#
+
2      ##   
+
3   O#      
+
4      OOO# 
+
5  O#   O# #
+
6     O#   O
+
7        OOO
+
8 #   O### O
+
9 # OOO#   O
+
+
[136, 129, 114, 110, 110, 105, 103, 106, 111, 114, 110]
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
[136, 129, 114, 110, 110, 105, 103, 106, 111, 114, 110]
+
```
+
+
<!-- livebook:{"offset":13089,"stamp":{"token":"XCP.6NDtt8fJ01JLOq3nTevL25H4mHLTDc6Od4j4bkK8EzYDIEbnkcC_afNOcboznLxeJd_Vr-eQOTfSeVj0rfhlPWRbNSo_OLjTWZxTnB_TdqgAr5J0iWjRjf2BDccO40DsHw","version":2}} -->
+130
2023/day15.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 15
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "15", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"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=" <> ...}
+
```
+
+
```elixir
+
# puzzle_input = "rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7"
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
nil
+
```
+
+
```elixir
+
defmodule Day15 do
+
def hash(binary) do
+
for <<c <- binary>>, reduce: 0, do: (acc -> Bitwise.band((c + acc) * 17, 0xFF))
+
end
+
end
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:module, Day15, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:hash, 1}}
+
```
+
+
```elixir
+
segments =
+
puzzle_input
+
|> String.split(",")
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
["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-", ...]
+
```
+
+
## Part 1
+
+
```elixir
+
segments
+
|> Enum.map(&Day15.hash/1)
+
|> Enum.sum()
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
506869
+
```
+
+
## Part 2
+
+
```elixir
+
segments
+
|> Enum.map(fn step ->
+
[_, label, action] = Regex.run(~r/([a-z]+)(-|=\d+)/, step)
+
+
box = Day15.hash(label)
+
+
case action do
+
"-" -> {box, label, :rm}
+
"=" <> rest -> {box, label, {:add, String.to_integer(rest)}}
+
end
+
end)
+
|> Enum.reduce(%{}, fn {box, label, action}, map ->
+
curr = map[box] || []
+
+
next =
+
case action do
+
{:add, f} ->
+
if Enum.any?(curr, &(elem(&1, 0) == label)) do
+
List.keyreplace(curr, label, 0, {label, f})
+
else
+
[{label, f} | curr]
+
end
+
+
:rm ->
+
List.keydelete(curr, label, 0)
+
end
+
+
Map.put(map, box, next)
+
end)
+
|> Enum.map(fn {box, lenses} ->
+
box = box + 1
+
+
lenses
+
|> Enum.reverse()
+
|> Enum.with_index(1)
+
|> Enum.map(fn {{_, f}, id} -> box * id * f end)
+
|> Enum.sum()
+
end)
+
|> Enum.sum()
+
|> dbg()
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
271384
+
```
+
+
<!-- livebook:{"offset":6563,"stamp":{"token":"XCP.ikIQAzWaCpMFzPgSppGb8erUqNQTiTQKVT4Z8-snaHPxRPHLJ4FSFvjZQhOg5ALkY4RVu78B3ZYCWSkqZ0vt8iql9ZvmaUtNNTG10v5VUIi3Jt0IgRmOCL0PL47Vn3f_gQ","version":2}} -->
+178
2023/day16.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 16
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "16", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"\\\\.......\\.............../-........|......................-......../..................../......./....|........\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../.\\.............//.\\.|..................-.....\\...........|..././............/...................." <> ...}
+
```
+
+
```elixir
+
# puzzle_input =
+
~S"""
+
.|...\....
+
|.-.\.....
+
.....|-...
+
........|.
+
..........
+
.........\
+
..../.\\..
+
.-.-/..|..
+
.|....-|.\
+
..//.|....
+
"""
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
".|...\\....\n|.-.\\.....\n.....|-...\n........|.\n..........\n.........\\\n..../.\\\\..\n.-.-/..|..\n.|....-|.\\\n..//.|....\n"
+
```
+
+
```elixir
+
lines = String.split(puzzle_input, "\n", trim: true)
+
+
map =
+
for {line, y} <- Enum.with_index(lines),
+
{char, x} <- line |> String.to_charlist() |> Enum.with_index(),
+
char not in ~c".",
+
into: %{},
+
do: {{y, x}, <<char>>}
+
+
{height, width} = {byte_size(hd(lines)) - 1, length(lines) - 1}
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{109, 109}
+
```
+
+
```elixir
+
defmodule Day16 do
+
defguard in_map(yx, hw) when elem(yx, 0) in 0..elem(hw, 0) and elem(yx, 1) in 0..elem(hw, 1)
+
+
def traverse(map, wh, start \\ {{0, 0}, :right}),
+
do: do_traverse(map, wh, start, _acc = MapSet.new(), _visited = MapSet.new())
+
+
defp do_traverse(map, hw, {xy, dir} = pos, acc, visited) when in_map(xy, hw) do
+
if pos not in visited do
+
acc = MapSet.put(acc, xy)
+
+
case Map.fetch(map, xy) do
+
:error ->
+
do_traverse(map, hw, next(xy, dir), acc, visited)
+
+
{:ok, "|"} when dir in ~w[up down]a ->
+
do_traverse(map, hw, next(xy, dir), acc, visited)
+
+
{:ok, "-"} when dir in ~w[left right]a ->
+
do_traverse(map, hw, next(xy, dir), acc, visited)
+
+
{:ok, mirror} when mirror in ~w[/ \\] ->
+
next = mirror(mirror, dir)
+
do_traverse(map, hw, next(xy, next), acc, MapSet.put(visited, pos))
+
+
{:ok, "|"} when dir in ~w[left right]a ->
+
# Add both sides to visited, as it will result in the same outcome
+
visited =
+
visited
+
|> MapSet.put({xy, :left})
+
|> MapSet.put({xy, :right})
+
+
{acc, visited} = do_traverse(map, hw, next(xy, :up), acc, visited)
+
do_traverse(map, hw, next(xy, :down), acc, visited)
+
+
{:ok, "-"} when dir in ~w[up down]a ->
+
# Add both sides to visited, as it will result in the same outcome
+
visited =
+
visited
+
|> MapSet.put({xy, :up})
+
|> MapSet.put({xy, :down})
+
+
{acc, visited} = do_traverse(map, hw, next(xy, :left), acc, visited)
+
do_traverse(map, hw, next(xy, :right), acc, visited)
+
end
+
else
+
{acc, visited}
+
end
+
end
+
+
defp do_traverse(_, _wh, _pos, acc, visited) do
+
{acc, visited}
+
end
+
+
defp mirror("/", :up), do: :right
+
defp mirror("/", :left), do: :down
+
defp mirror("/", :down), do: :left
+
defp mirror("/", :right), do: :up
+
+
defp mirror("\\", :up), do: :left
+
defp mirror("\\", :left), do: :up
+
defp mirror("\\", :down), do: :right
+
defp mirror("\\", :right), do: :down
+
+
defp next({y, x}, :up), do: {{y - 1, x}, :up}
+
defp next({y, x}, :left), do: {{y, x - 1}, :left}
+
defp next({y, x}, :down), do: {{y + 1, x}, :down}
+
defp next({y, x}, :right), do: {{y, x + 1}, :right}
+
end
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:module, Day16, <<70, 79, 82, 49, 0, 0, 28, ...>>, {:next, 2}}
+
```
+
+
## Part 1
+
+
```elixir
+
{path, _} = Day16.traverse(map, {height, width})
+
+
MapSet.size(path)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
7242
+
```
+
+
## Part 2
+
+
```elixir
+
start_points =
+
Enum.concat([
+
Enum.flat_map(0..height, &[{{&1, 0}, :right}, {{&1, width}, :left}]),
+
Enum.flat_map(0..width, &[{{0, &1}, :down}, {{height, &1}, :up}])
+
])
+
+
start_points
+
|> Task.async_stream(&Day16.traverse(map, {height, width}, &1))
+
|> Stream.map(fn {:ok, {path, _}} -> MapSet.size(path) end)
+
|> Enum.max()
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
7572
+
```
+
+
<!-- livebook:{"offset":8394,"stamp":{"token":"XCP.G2qkGI0iiEpXKpxgmF3X_dOzQWYnfJes3P9XQazzqVafzbVljgd42sRxbC_RC5Nc9-rrcx45UodmXf17HwB9X_4sZz6up_iLXNZDUxXQ0eGyvZkk_NcBMt5FRaALMHBiHw","version":2}} -->
+310
2023/day18.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 18
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "18", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"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" <> ...}
+
```
+
+
```elixir
+
# puzzle_input =
+
"""
+
R 6 (#70c710)
+
D 5 (#0dc571)
+
L 2 (#5713f0)
+
D 2 (#d2c081)
+
R 2 (#59c680)
+
D 2 (#411b91)
+
L 5 (#8ceee2)
+
U 2 (#caa173)
+
L 1 (#1b58a2)
+
U 2 (#caa171)
+
R 2 (#7807d2)
+
U 3 (#a77fa3)
+
L 2 (#015232)
+
U 2 (#7a21e3)
+
"""
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
"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"
+
```
+
+
```elixir
+
commands =
+
puzzle_input
+
|> String.split("\n", trim: true)
+
|> Enum.map(fn <<dir>> <> " " <> rest ->
+
{len, " (#" <> <<hex::binary-6>> <> ")"} = Integer.parse(rest)
+
{dir, len, hex}
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
[
+
{76, 5, "0760b2"},
+
{85, 4, "058b53"},
+
{76, 3, "d05a12"},
+
{68, 4, "058b51"},
+
{76, 6, "12ee82"},
+
{85, 6, "63c403"},
+
{76, 4, "065a12"},
+
{85, 8, "a44373"},
+
{76, 7, "7581c2"},
+
{85, 7, "334ec3"},
+
{76, 3, "35e792"},
+
{85, 5, "079963"},
+
{76, 3, "1737b0"},
+
{85, 4, "29a7a3"},
+
{76, 2, "705a02"},
+
{85, 5, "7151e3"},
+
{76, 4, "705a00"},
+
{85, 4, "43f5a3"},
+
{76, 5, "1737b2"},
+
{85, 8, "61a8c3"},
+
{76, 5, "6005d2"},
+
{68, 3, "20f4c1"},
+
{76, 3, "4aa812"},
+
{68, 3, "8163b1"},
+
{76, 4, "80ac22"},
+
{68, 4, "5e64c1"},
+
{76, 7, "cb5430"},
+
{68, 5, "7ac2d1"},
+
{82, 7, "920132"},
+
{68, 6, "a44371"},
+
{76, 6, "944582"},
+
{85, 3, "bc3423"},
+
{76, 5, "71c1b2"},
+
{85, 4, "88e6f3"},
+
{76, 4, "0e35f2"},
+
{85, 5, "11fa31"},
+
{76, 8, "6ab312"},
+
{85, 5, "5c3df1"},
+
{82, 8, "40be22"},
+
{85, 3, "5c3df3"},
+
{82, 9, "42e412"},
+
{85, 6, "11fa33"},
+
{82, 5, "178f02"},
+
{85, 10, "88e6f1"},
+
{76, 2, "cff5f2"},
+
{85, 6, "41fb73"},
+
{76, 5, "247782"},
+
{85, 4, ...},
+
{76, ...},
+
{...},
+
...
+
]
+
```
+
+
## Part 1
+
+
```elixir
+
dirs = %{
+
?U => {0, -1},
+
?D => {0, 1},
+
?L => {-1, 0},
+
?R => {1, 0}
+
}
+
+
{points, {_, circ}} =
+
Enum.map_reduce(commands, {{0, 0}, 0}, fn
+
{dir, d, _}, {{x, y}, l} ->
+
{dx, dy} = dirs[dir]
+
{{x, y}, {{x + dx * d, y + dy * d}, l + d}}
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{[
+
{0, 0},
+
{-5, 0},
+
{-5, -4},
+
{-8, -4},
+
{-8, 0},
+
{-14, 0},
+
{-14, -6},
+
{-18, -6},
+
{-18, -14},
+
{-25, -14},
+
{-25, -21},
+
{-28, -21},
+
{-28, -26},
+
{-31, -26},
+
{-31, -30},
+
{-33, -30},
+
{-33, -35},
+
{-37, -35},
+
{-37, -39},
+
{-42, -39},
+
{-42, -47},
+
{-47, -47},
+
{-47, -44},
+
{-50, -44},
+
{-50, -41},
+
{-54, -41},
+
{-54, -37},
+
{-61, -37},
+
{-61, -32},
+
{-54, -32},
+
{-54, -26},
+
{-60, -26},
+
{-60, -29},
+
{-65, -29},
+
{-65, -33},
+
{-69, -33},
+
{-69, -38},
+
{-77, -38},
+
{-77, -43},
+
{-69, -43},
+
{-69, -46},
+
{-60, -46},
+
{-60, -52},
+
{-55, -52},
+
{-55, -62},
+
{-57, -62},
+
{-57, -68},
+
{-62, ...},
+
{...},
+
...
+
], {{0, 0}, 3518}}
+
```
+
+
```elixir
+
area =
+
points
+
|> Enum.chunk_every(2, 1, [{0, 0}])
+
|> Enum.map(fn [{x1, y1}, {x2, y2}] ->
+
x1 * y2 - x2 * y1
+
end)
+
|> Enum.sum()
+
|> abs()
+
|> div(2)
+
+
area + div(circ, 2) + 1
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
49897
+
```
+
+
## Part 2
+
+
```elixir
+
dirs = %{
+
?3 => {0, -1},
+
?1 => {0, 1},
+
?2 => {-1, 0},
+
?0 => {1, 0}
+
}
+
+
{points, {_, circ}} =
+
Enum.map_reduce(commands, {{0, 0}, 0}, fn
+
{_, _, <<d::binary-5, dir>>}, {{x, y}, l} ->
+
{dx, dy} = dirs[dir]
+
d = String.to_integer(d, 16)
+
{{x, y}, {{x + dx * d, y + dy * d}, l + d}}
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{[
+
{0, 0},
+
{-30219, 0},
+
{-30219, -22709},
+
{-883628, -22709},
+
{-883628, 0},
+
{-961172, 0},
+
{-961172, -408640},
+
{-987189, -408640},
+
{-987189, -1081463},
+
{-1468497, -1081463},
+
{-1468497, -1291619},
+
{-1689290, -1291619},
+
{-1689290, -1322745},
+
{-1594191, -1322745},
+
{-1594191, -1493363},
+
{-2054383, -1493363},
+
{-2054383, -1957521},
+
{-1594191, -1957521},
+
{-1594191, -2235883},
+
{-1689290, -2235883},
+
{-1689290, -2635895},
+
{-2082599, -2635895},
+
{-2082599, -2500907},
+
{-2388392, -2500907},
+
{-2388392, -1970928},
+
{-2915434, -1970928},
+
{-2915434, -1584292},
+
{-2082599, -1584292},
+
{-2082599, -1081463},
+
{-2680634, -1081463},
+
{-2680634, -408640},
+
{-3287954, -408640},
+
{-3287954, -1179522},
+
{-3753901, -1179522},
+
{-3753901, -1740273},
+
{-3812108, -1740273},
+
{-3812108, -1666638},
+
{-4249149, -1666638},
+
{-4249149, -1288815},
+
{-4514335, -1288815},
+
{-4514335, -1666638},
+
{-4788320, -1666638},
+
{-4788320, -1740273},
+
{-4884816, -1740273},
+
{-4884816, -1179522},
+
{-5736623, -1179522},
+
{-5736623, -1449785},
+
{-5885991, ...},
+
{...},
+
...
+
], {{0, 0}, 237488828}}
+
```
+
+
```elixir
+
area =
+
points
+
|> Enum.chunk_every(2, 1, [{0, 0}])
+
|> Enum.map(fn [{x1, y1}, {x2, y2}] ->
+
x1 * y2 - x2 * y1
+
end)
+
|> Enum.sum()
+
|> abs()
+
|> div(2)
+
+
area + div(circ, 2) + 1
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
194033958221830
+
```
+
+
<!-- livebook:{"offset":9828,"stamp":{"token":"XCP.PxtVRuGOoJbRBg9li_V5edaJPAIM1giG8b7fnblLM45DtgF15Jzd6NlUMPxbzksg6acUzlzFjYTBEN2LSqNSG1-GyFTIi-SNpma9KQLCo3vK0DZWQEcIQo44tSdMuxRx5A","version":2}} -->
+167
2023/day19.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 19
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "19", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"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" <> ...}
+
```
+
+
```elixir
+
defmodule Day19 do
+
def always, do: fn _ -> true end
+
+
def match(<<field::binary-1, cmp>> <> value) do
+
value = String.to_integer(value)
+
+
case cmp do
+
?> -> fn map -> map[field] > value end
+
?< -> fn map -> map[field] < value end
+
end
+
end
+
+
def walk("A", value, _), do: value |> Map.values() |> Enum.sum()
+
def walk("R", _, _), do: 0
+
+
def walk(curr, value, ruleset) do
+
rules = ruleset[curr]
+
+
Enum.find_value(rules, fn {f, next} ->
+
if f.(value), do: next
+
end)
+
|> walk(value, ruleset)
+
end
+
end
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:module, Day19, <<70, 79, 82, 49, 0, 0, 13, ...>>, {:walk, 3}}
+
```
+
+
```elixir
+
[rules, inputs] = String.split(puzzle_input, "\n\n")
+
+
ruleset =
+
rules
+
|> String.split("\n", trim: true)
+
|> Map.new(fn line ->
+
[name, rest] = String.split(line, "{")
+
+
rules =
+
rest
+
|> String.trim_trailing("}")
+
|> String.split(",")
+
|> Enum.map(fn rule ->
+
case String.split(rule, ":") do
+
[next] -> {Day19.always(), next}
+
[rule, next] -> {Day19.match(rule), next}
+
end
+
end)
+
+
{name, rules}
+
end)
+
+
inputs =
+
inputs
+
|> String.split("\n", trim: true)
+
|> Enum.map(fn "{" <> data ->
+
data = String.trim_trailing(data, "}")
+
+
data
+
|> String.split(",")
+
|> Map.new(fn <<field::binary-1>> <> "=" <> value ->
+
{field, String.to_integer(value)}
+
end)
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
[
+
%{"a" => 2402, "m" => 2238, "s" => 929, "x" => 1},
+
%{"a" => 205, "m" => 654, "s" => 508, "x" => 1167},
+
%{"a" => 35, "m" => 2051, "s" => 1791, "x" => 1057},
+
%{"a" => 2726, "m" => 502, "s" => 178, "x" => 633},
+
%{"a" => 845, "m" => 2315, "s" => 2005, "x" => 3343},
+
%{"a" => 111, "m" => 2081, "s" => 499, "x" => 987},
+
%{"a" => 799, "m" => 1999, "s" => 1982, "x" => 464},
+
%{"a" => 518, "m" => 3195, "s" => 1247, "x" => 801},
+
%{"a" => 285, "m" => 2075, "s" => 1, "x" => 1506},
+
%{"a" => 384, "m" => 1366, "s" => 697, "x" => 1075},
+
%{"a" => 371, "m" => 1008, "s" => 1901, "x" => 33},
+
%{"a" => 115, "m" => 43, "s" => 14, "x" => 426},
+
%{"a" => 979, "m" => 2121, "s" => 2493, "x" => 595},
+
%{"a" => 3003, "m" => 3576, "s" => 3096, "x" => 557},
+
%{"a" => 921, "m" => 1269, "s" => 1983, "x" => 837},
+
%{"a" => 3300, "m" => 230, "s" => 909, "x" => 1367},
+
%{"a" => 130, "m" => 1878, "s" => 508, "x" => 1713},
+
%{"a" => 675, "m" => 1098, "s" => 886, "x" => 531},
+
%{"a" => 2121, "m" => 2018, "s" => 1761, "x" => 508},
+
%{"a" => 19, "m" => 399, "s" => 226, "x" => 1579},
+
%{"a" => 243, "m" => 35, "s" => 1169, "x" => 163},
+
%{"a" => 309, "m" => 221, "s" => 1305, "x" => 913},
+
%{"a" => 1685, "m" => 164, "s" => 239, "x" => 1780},
+
%{"a" => 2727, "m" => 208, "s" => 132, "x" => 86},
+
%{"a" => 2300, "m" => 2703, "s" => 386, "x" => 842},
+
%{"a" => 57, "m" => 454, "s" => 2120, "x" => 556},
+
%{"a" => 875, "m" => 1273, "s" => 1067, "x" => 1711},
+
%{"a" => 434, "m" => 939, "s" => 3341, "x" => 862},
+
%{"a" => 1666, "m" => 417, "s" => 203, "x" => 842},
+
%{"a" => 213, "m" => 1955, "s" => 2849, "x" => 93},
+
%{"a" => 62, "m" => 103, "s" => 104, "x" => 636},
+
%{"a" => 1917, "m" => 2014, "s" => 3128, "x" => 3715},
+
%{"a" => 225, "m" => 477, "s" => 579, "x" => 225},
+
%{"a" => 1176, "m" => 2243, "s" => 420, "x" => 556},
+
%{"a" => 62, "m" => 1556, "s" => 275, "x" => 10},
+
%{"a" => 368, "m" => 2498, "s" => 305, "x" => 1649},
+
%{"a" => 1488, "m" => 1148, "s" => 2419, "x" => 437},
+
%{"a" => 2488, "m" => 540, "s" => 174, "x" => 2918},
+
%{"a" => 1089, "m" => 3207, "s" => 2740, "x" => 3431},
+
%{"a" => 441, "m" => 560, "s" => 439, "x" => 661},
+
%{"a" => 310, "m" => 59, "s" => 109, "x" => 292},
+
%{"a" => 691, "m" => 452, "s" => 2012, "x" => 497},
+
%{"a" => 1182, "m" => 1424, "s" => 1228, "x" => 227},
+
%{"a" => 159, "m" => 418, "s" => 64, "x" => 225},
+
%{"a" => 38, "m" => 216, "s" => 1582, "x" => 1490},
+
%{"a" => 840, "m" => 2919, "s" => 973, "x" => 483},
+
%{"a" => 183, "m" => 1362, "s" => 589, ...},
+
%{"a" => 2028, "m" => 455, ...},
+
%{"a" => 2024, ...},
+
%{...},
+
...
+
]
+
```
+
+
## Part 1
+
+
```elixir
+
inputs
+
|> Enum.map(&Day19.walk("in", &1, ruleset))
+
|> Enum.sum()
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
575412
+
```
+
+
<!-- livebook:{"offset":8997,"stamp":{"token":"XCP.3mLPPPAFmjyMyS1G8kuPg81u2xWiHEqMWIEJie5Cub-RqAtUePx4xByO_bbzZmbk0fucCfAAzGCebPJTo1sxtCCZWiS2f_1WHfwLTeKQ-A3TtNs0-62JkPMIEOcsxBwvcw","version":2}} -->
+135
2023/day21.livemd
···
+
# Day 21
+
+
```elixir
+
Mix.install([:kino_aoc])
+
```
+
+
## Section
+
+
<!-- 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"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2023", "21", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
```elixir
+
# puzzle_input =
+
"""
+
...........
+
.....###.#.
+
.###.##..#.
+
..#.#...#..
+
....#.#....
+
.##..S####.
+
.##..#...#.
+
.......##..
+
.##.#.####.
+
.##..##.##.
+
...........
+
"""
+
```
+
+
```elixir
+
lines =
+
puzzle_input
+
|> String.split("\n", trim: true)
+
+
map =
+
for {line, y} <- Enum.with_index(lines),
+
{char, x} <- Enum.with_index(to_charlist(line)),
+
char != ?.,
+
do: {char, {x, y}}
+
+
%{?# => obstacles, ?S => [start]} = Enum.group_by(map, &elem(&1, 0), &elem(&1, 1))
+
+
height = length(lines)
+
width = byte_size(hd(lines))
+
+
obstacles = MapSet.new(obstacles)
+
{sx, sy} = start
+
```
+
+
```elixir
+
defmodule Day21 do
+
def build_distance_map(width, height, start, obstacles) do
+
distances =
+
for x <- 0..width,
+
y <- 0..height,
+
{x, y} not in obstacles,
+
into: %{},
+
do: {{x, y}, nil}
+
+
do_build(Map.put(distances, start, 0), neighbours(start, width, height), width, height)
+
end
+
+
defp do_build(distances, [], _w, _h), do: distances
+
+
defp do_build(distances, [{x, y} | rest], w, h)
+
when is_nil(:erlang.map_get({x, y}, distances)) do
+
{min, next} =
+
Enum.reduce(neighbours({x, y}, w, h), {nil, []}, fn
+
{nx, ny}, {min, acc} ->
+
case Map.fetch(distances, {nx, ny}) do
+
{:ok, nil} -> {min, [{nx, ny} | acc]}
+
{:ok, val} -> {min(min, val), acc}
+
:error -> {min, acc}
+
end
+
end)
+
+
distances
+
|> Map.put({x, y}, min + 1)
+
|> do_build(rest ++ next, w, h)
+
end
+
+
defp do_build(distances, [_ | rest], w, h), do: do_build(distances, rest, w, h)
+
+
defp neighbours({x, y}, w, h),
+
do:
+
Enum.filter(
+
[
+
{x + 1, y},
+
{x - 1, y},
+
{x, y + 1},
+
{x, y - 1}
+
],
+
&in_map?(&1, w, h)
+
)
+
+
def in_map?({x, y}, w, h), do: x in 0..w and y in 0..h
+
end
+
```
+
+
```elixir
+
dist = Day21.build_distance_map(width, height, start, obstacles)
+
```
+
+
## Part 1
+
+
```elixir
+
radius = 64
+
+
potential_positions =
+
for dx <- -radius..radius,
+
dy <- -radius..radius,
+
rem(dx + dy, 2) == 0,
+
p = {sx + dx, sy + dy},
+
dist[p] <= radius,
+
do: {sx + dx, sy + dy}
+
```
+
+
```elixir
+
length(potential_positions)
+
```
+
+
## Part 2
+
+
```elixir
+
{width, height}
+
```
+
+
```elixir
+
radius = 26_501_365
+
```
+
+
<!-- livebook:{"offset":2664,"stamp":{"token":"XCP.IMvv8hCgLT5Uhw7XM98joJcCpiLODkv-dad_ZINIVpWiR15rOQ16JvnrIbZyWUgwLtcUNcu0O_o0fM9c_SHVKVz5kQtylMQU9zFIW02WoyY4Mif4i-dzdI_vkWqFZENooA","version":2}} -->