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