tangled
alpha
login
or
join now
hauleth.dev
/
advent-of-code
3
fork
atom
this repo has no description
3
fork
atom
overview
issues
pulls
pipelines
ft: add day 06.2022 and day 07.2022
hauleth.dev
3 years ago
6d248335
5f17e2a6
+374
2 changed files
expand all
collapse all
unified
split
2022
day06.livemd
day07.livemd
+67
2022/day06.livemd
···
1
1
+
<!-- livebook:{"persist_outputs":true} -->
2
2
+
3
3
+
# Day 06
4
4
+
5
5
+
```elixir
6
6
+
Mix.install([
7
7
+
{:kino_aoc, git: "https://github.com/ljgago/kino_aoc"}
8
8
+
])
9
9
+
```
10
10
+
11
11
+
<!-- livebook:{"output":true} -->
12
12
+
13
13
+
```
14
14
+
:ok
15
15
+
```
16
16
+
17
17
+
## Section
18
18
+
19
19
+
<!-- livebook:{"attrs":{"day":"6","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
20
20
+
21
21
+
```elixir
22
22
+
{:ok, puzzle_input} =
23
23
+
KinoAOC.download_puzzle("2022", "6", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
24
24
+
```
25
25
+
26
26
+
<!-- livebook:{"output":true} -->
27
27
+
28
28
+
```
29
29
+
{:ok,
30
30
+
"pnnfhnhshrhmhwwmwzmznmnwmwfmfhfjfcjjtgtbggpdgdjjbjrjsjpjrrmddmgmpmddrhddnfnfzfpfvpfpprhhlffmtffqhhdtdcdsswsdwswmmfvvpdprrnnhhhtffnfbbznbznnvdnnbffjrfrbfrbrgbrrntnggrqqwtqwwgjgsswgwqwtwwsvwvbwvwrwlrlppzfzwfzzpmzzhqqzqlzlglzzmrmwrmwwvmwvvnppjfjttlffhjjjsccbggnffqgfgjjnccmdmzmllvnlnznttlvlttvnvgnvvqvmvqqzrqqcgglzzwtztwwmjmzjjnddsffqrqlrrvsvdvldvvlgvlvccdzczcqcpphggtnthhhtbhtttcjtjcjgcjcbbrhbbfrffgjgdgzddcttczzsccbpcpddcpcggmjgjddtcccthccfrccmdmhmddnwddfldffntnptnpttcptcptpfphhmfmwfwmmlblgbgvbvlltqltldttfcfcclgcllmplmlbbjnjzjnzzttnvvgddshddsqddggsqgqddsggdhghjgjhhgchhdmdjmjddgdhghrrphrrpnnqhhjwwqrrcmmslmmszzpgzpzzrmzmznzllnjnnlnbbdvdsdffbpffcmmnznqqcbbzvvjnjvvwqwgqqpnnzwnzwnzwwwlpwpzzfqzfqqwnqnbnfnqnbqqbggqnqdndrrzzlffbbgqgfgrfrqqsddnqnqjjgssqwqwcqcpcrrqppwpjjfnfpffhphwwmcwwznwznnplptlplnlsnlsldslslsffwtwftwtbtdbbjsjcczwwfllwtlwtlwlvwlwrwppsggvcvrrqcrqqvmqvmmbrrsbsfspspjpnnmpmqmcczgzffqmfmtmpppwzppzrpzrzsrrpqrpqpmpvmpvpttbqtqmtmjttqdqgggcppclcjcpcsppctpplpdpcppcmmdzmzddvhvhnhrrldllcwwbnwnssshlhrhthggtmggbjbjwwbvbttjllvrrfggngvngnmmvzzrrmddmcddztztctfccqpcpcqqvqppqcqdcdhhvhssgfgzgwwzmmnssvwwbqbhbnhnphpqqjcqcddfwfttqjtqtlttglljgjbgjgnnsqqvrvffqvqfqbffljjpffssqdsqstqqqldqqmhmsmsqqwtqwqdqgdgjjfbjffgbbrhhqghgppqgpgmpmmfzfhhfrhffgmfggpzgpzzhtzhhlbhhqbbzvvnvqnntptmmbhbdhdwwmjjcnnmsscqcbbtjtvjvwjvvmsmjmtmpmgghttcztzggpddbfbfgbbdsdrsrrqfqjjqfjjhzhtzzmdzzcgzgdzzmvmmfmjmgjmggmppbdppmzpppvfppzhhfsfwfhhpjpmmrjjpssdccjpjpwjppvdpphcpcjcfjfwjfwfjwfjjqcqcwqqqsmmmbbgdgwwpcwwdfdlflrltlgtthfhfjhhlthtddlgdggsjsrrdpdcppgttphpgpwppmpzmmrjmmvjvgvgfglfgllbqlqhllszzlwwhzzdfdcdtctptwtztfzzmjzjtjtrjrcrnrjjmwmnnbddgvgtgsstjsszmpqdmzgqflrbrspjmtzjcrmlzltmhgblghnwqvwwqwzbpnfrpdpblpjgshfccfbjfsnwvvhnjftsdnsgtzzjtzpmtfdvzrhtqpblhwgmqtgpbfvbdmsnrrrvvbstpsznvbbwgjfqjrhdvwvgptpglpfddhddmtglmjlpwlvfpbtbmgbplbzrlpdlvqzcwhbscpszgfstjpfdvfpmljlngrbgrdnnblzqrfpzsdvblpwbtnhdjclldvwvbwcwzfzbdspgwpfqjfbdbrqcshtlvcrdstnzggbwqnzbrfzbpnrtmvpbvdhcvdsdshgtvhfgdzljflppqbwclnvbhbczvrscjhlbgbfvwdjhnjsgmvwhpfgwbbmnndpnglfrmtfdzvqgfjdqfhgrhvpbqndmqnqccgwswwdsqjnbjtjbjdbqgjnmfbdvlnfwbnrdqgvgzzhmmbbdzfdvvpwhpbwbnzdcdpchrwlhfsjnhhjggvplmqggwjdsvjtpnpnqgldjjdcscrdltssjdrpcrfbgbcjfplhzgwbprfcslhpcngtszrghmwhzdqscbfrhzdwcffzvmjrmcjcstfvhplvrsglgsjnjtrpddsdfqjsndjnfmvdhfgdbzzflqhsrrwmrnlpqzmcddqbqvvzgtlztpgjnddtcnbmqsjlhmcszrmcjvwzpptlfqsmpvgnzvrjdwzpdwqgbmdgdtvjlmfczthjbcgfhbqpnmlbmrwwhfptzlbmfdhssznjcvjbmnjtnvzjhzczlrrdnttmmcbnzhqpplzqwgttwrnwfvmnptgqlfrnzvqpjfgrzwmlcwvtptvcvrlsrdwdgqfvffspmdbnnrqjttpqvhvdpbcrvzptwnhhfsqzchmncvttcdgdnlppcfzpmjpvbvqhlvplwvrmmbbggbwttwmvsqjlllsftprsmtmnzjcqfzblrllzgshfljchrjwjlpvhpbrtrsschzltrblgjnbgdnmwdggjhqggntblnhsvfgsbcblhmctbqzqwmhqnjhpzjfqpjdgwpzhczcftfcpdhvzhzccmwmrfrbqshzmtpqgpbbvfqqbjbmvnlnlwjtzrpmhdlffccrqcfgsjfszbrzrfztntchtmgmbhjgmlsqzcbtqqjzzlghtzzqmlnnvsgsvbbjfgqsqbqmqrdzwpwdgbggpdvhvnlzshhntprjdwhnwfvdjzpqgflwrvwgtmfdmfdztcbtfnjdrvgdwwczdgphnvdgrbdchprqldfjrvcsflcmlcmzqvqgsgnzcgmrhccgcmptcdzhbcdgdtppwztfstzqqzqrdzlnzthggjmpcflmbcmdrrjnnpbpqfmjbzqbtsjjgdlmgncbmgspqqvbrvzrdjscpzjsdtcdvsdwqlmwrngttswnrsbqctvhgfnnwblpcqzdmzpfchplslspmghvgcqntmlrfhgpcbpspvfhnvqvglsqzsnsdzddqpbsjhlclslngbwvvgjhwfcncqsmqwbptzvpzlzslsjjjldjpwpfrdlfbjphqcjtsgqdsdfdjhqgdhcppndwmhmmldvvmblcqcqfqhltbcbvrnghjfmtgqwtwljtczvqlnmgscjhqdhnzwhzvzzqnlsrhqvljqpgpwghfqlhjjrrhvnmnnrbnlhdcjctwtlhmhhmhjvcgzdrzmdjrvqzgnsttjdwglgwlcmbcdnjprgfsbbdzzngbqdrvwwwhbtlnnmzqdjttsrrpvlfdqnfhhtdtvmpcjgdwtbnqmwmtszdqfmbhjsjpqqddzfggwjhbtlnqfgcwbjzdtcpcpzgnrmnvwlpgmwfjlpgppdfrfvvjwsfcdqdnpcpjbqsvhttssgptqjghctrbgntlfjzdrfjccsprsjlrrwrzsmnjsqslmpdtrvhlqbnmgpjthpqdqmnvrtzlhhzzfzbrcclpmpcszhbttgrtcpgcpjwpdbfpfvgspsgtvglwthqcmcvmrfmclwlvjlsptfgmtlrnsvjrnfwzhdcsmgztpzfcvzwdztpppvqpvqfpdrsfnlhrbqwrsqjtwjmhnpwmqmpdgdhbtbpfwnmswffdqffdggrdrpmngvpzplmmwlddnhcvjjzqqfsbbtfmzdwnpvbjrshmllczhgvwwcbcbtfrfnplqjwmjlvpwwgfrtffwddwppsgtnlmpvfnhfzcsgjbqbjmbvpnqppsrvwnlzvcmjqgtbzrdsnrgwbfmrvnflgccrssfvcwgllqqbbcthzmbtnsmbzbcczhtzcvmthttpltrtdmgspctvtpvqbhmnnpnjwmhpqclmjsdrbjwvjbtzcjlqbjsvbgdwqzflnwzcfjwtrhjgfshfmwbjfwpnhjsmtpgbpwlfjjnmdlrhchmnfmgmgcrftmwbzshdwbhndgwtjbrrvbwprqppfmgfmfllpcjgrwdmtzddthsjlgjljv\n"}
31
31
+
```
32
32
+
33
33
+
## Task 1
34
34
+
35
35
+
```elixir
36
36
+
index =
37
37
+
puzzle_input
38
38
+
|> to_charlist()
39
39
+
|> Enum.chunk_every(4, 1)
40
40
+
|> Enum.find_index(fn chunk -> MapSet.size(MapSet.new(chunk)) == 4 end)
41
41
+
42
42
+
index + 4
43
43
+
```
44
44
+
45
45
+
<!-- livebook:{"output":true} -->
46
46
+
47
47
+
```
48
48
+
1623
49
49
+
```
50
50
+
51
51
+
## Task 2
52
52
+
53
53
+
```elixir
54
54
+
index =
55
55
+
puzzle_input
56
56
+
|> to_charlist()
57
57
+
|> Enum.chunk_every(14, 1)
58
58
+
|> Enum.find_index(fn chunk -> MapSet.size(MapSet.new(chunk)) == 14 end)
59
59
+
60
60
+
index + 14
61
61
+
```
62
62
+
63
63
+
<!-- livebook:{"output":true} -->
64
64
+
65
65
+
```
66
66
+
3774
67
67
+
```
+307
2022/day07.livemd
···
1
1
+
<!-- livebook:{"persist_outputs":true} -->
2
2
+
3
3
+
# Day 07
4
4
+
5
5
+
```elixir
6
6
+
Mix.install([
7
7
+
{:kino_aoc, git: "https://github.com/ljgago/kino_aoc"}
8
8
+
])
9
9
+
```
10
10
+
11
11
+
<!-- livebook:{"output":true} -->
12
12
+
13
13
+
```
14
14
+
:ok
15
15
+
```
16
16
+
17
17
+
## Section
18
18
+
19
19
+
<!-- livebook:{"attrs":{"day":"7","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
20
20
+
21
21
+
```elixir
22
22
+
{:ok, puzzle_input} =
23
23
+
KinoAOC.download_puzzle("2022", "7", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
24
24
+
```
25
25
+
26
26
+
<!-- livebook:{"output":true} -->
27
27
+
28
28
+
```
29
29
+
{:ok,
30
30
+
"$ cd /\n$ ls\ndir fts\ndir jnwr\ndir lrvl\ndir nzgprvw\ndir snwqjgj\n16394 tllvcdr.sjl\n195891 zbdp.gqb\ndir zddrb\n$ cd fts\n$ ls\ndir dlqtffw\ndir rbfmmjvd\n254713 wvwhrb.dhh\n$ cd dlqtffw\n$ ls\n73533 nqbvg.fgd\n$ cd ..\n$ cd rbfmmjvd\n$ ls\n290697 zcgrgff.fnf\n$ cd ..\n$ cd ..\n$ cd jnwr\n$ ls\n323577 ghmtnzr\n57588 tdcbdpnr\ndir wbv\ndir zzbvdcf\n$ cd wbv\n$ ls\ndir nmdwbnnr\n253584 slzdbm.ncn\n$ cd nmdwbnnr\n$ ls\n208370 scbcsb.pjg\n$ cd ..\n$ cd ..\n$ cd zzbvdcf\n$ ls\n8052 ssssrhwz\n$ cd ..\n$ cd ..\n$ cd lrvl\n$ ls\ndir bqqltcg\n189288 cwpwh\n90813 jhnddzml.lww\ndir pwc\ndir rjl\ndir rzvqvv\ndir slzdbm\ndir tcbjmq\n140665 zbdp.gqb\ndir zhbpqlnd\n$ cd bqqltcg\n$ ls\ndir dlbjblbf\ndir fdlw\ndir jnwr\ndir slzdbm\ndir zcgrgff\n$ cd dlbjblbf\n$ ls\n11732 rnsrrf.rtv\n$ cd ..\n$ cd fdlw\n$ ls\ndir hlvpfw\n228436 mzsfcvgv.pqw\n$ cd hlvpfw\n$ ls\ndir dhwq\n$ cd dhwq\n$ ls\n127459 cgdpqh.tct\n58310 jnwr.nqt\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd jnwr\n$ ls\n305998 ssssrhwz\n129135 vrt.qdt\n86204 wnvm.bld\n$ cd ..\n$ cd slzdbm\n$ ls\n40915 zbdp.gqb\n120991 zsvffwlt.rbp\n$ cd ..\n$ cd zcgrgff\n$ ls\n94614 jnwr.mqm\n191626 zbdp.gqb\ndir ztrslh\n$ cd ztrslh\n$ ls\ndir bhzn\n201167 dvcjtzvs.rvd\ndir slzdbm\ndir szrth\ndir zcp\n$ cd bhzn\n$ ls\n119164 qbgmrqw\n102090 zbdp.gqb\n$ cd ..\n$ cd slzdbm\n$ ls\n124928 gtdq\n$ cd ..\n$ cd szrth\n$ ls\ndir hpbbsq\ndir vlwlsdjp\ndir zcgrgff\n$ cd hpbbsq\n$ ls\n151717 qsdhff.jsv\n$ cd ..\n$ cd vlwlsdjp\n$ ls\n15049 glpdjtq.mwm\n302526 jnwr.tds\n9550 lhwtbh\n22857 ssssrhwz\n$ cd ..\n$ cd zcgrgff\n$ ls\n73640 mpq.cdn\ndir zcgrgff\n$ cd zcgrgff\n$ ls\n115955 rssmrfbq.trs\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd zcp\n$ ls\ndir qdjtmwrr\ndir wpdjttm\n$ cd qdjtmwrr\n$ ls\n138185 jnwr\n$ cd ..\n$ cd wpdjttm\n$ ls\n207755 vvwtghjb\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd pwc\n$ ls\n15911 fqw\n$ cd ..\n$ cd rjl\n$ ls\n119274 ssssrhwz\n$ cd ..\n$ cd rzvqvv\n$ ls\n273935 ssssrhwz\n$ cd ..\n$ cd slzdbm\n$ ls\ndir hlvpfw\n290414 lgzbzjvd.glj\ndir ljpmphn\n316440 slzdbm.tsj\n$ cd hlvpfw\n$ ls\ndir mhvmszgh\n107004 slzdbm\n$ cd mhvmszgh\n$ ls\ndir tftstdp\n$ cd tftstdp\n$ ls\n176794 mpq.cdn\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd ljpmphn\n$ ls\n37528 slfdb.bqt\n$ cd ..\n$ cd ..\n$ cd tcbjmq\n$ ls\n96506 lrz.nhb\n$ cd ..\n$ cd zhbpqlnd\n$ ls\n14027 ccswrthv.pfd\ndir clnqtjz\ndir fdsqmnn\ndir fwdt\ndir nljb\ndir npmsdrgp\n57812 slfdb.bqt\n184299 wmlmg\n241025 zcgrgff.wbh\ndir zggqfj\n$ cd clnqtjz\n$ ls\n62391 cbhw.wgr\n309318 jlm.lfq\ndir mzsfcvgv\ndir rrn\n307583 ssssrhwz\n$ cd mzsfcvgv\n$ ls\n1356 hrbh.wpz\ndir vnwqstw\n$ cd vnwqstw\n$ ls\n184434 hnhzdshl.lrl\n150624 wsrnprdb.pjf\n$ cd ..\n$ cd ..\n$ cd rrn\n$ ls\n105792 dzprqqc.rbh\n107482 ffdjdbc\ndir hnr\ndir rdmgtf\ndir rgrwp\n325147 shqr.pdj\n43186 slfdb.bqt\n236667 zcgrgff\n$ cd hnr\n$ ls\ndir gljrlhjm\n250526 mzsfcvgv.nsb\n43164 ssssrhwz\n$ cd gljrlhjm\n$ ls\ndir wjwqrnj\n$ cd wjwqrnj\n$ ls\n142366 gshl.qfc\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd rdmgtf\n$ ls\n193562 gdrdnc.vml\n123723 hmqfdht\ndir lzfntb\ndir mjfwsmgd\n208819 nqbgcn.qfq\ndir tqh\n$ cd lzfntb\n$ ls\ndir gwnpsvw\ndir rsgwzhp\n103487 scvllbjh.pnw\n$ cd gwnpsvw\n$ ls\ndir lqnz\n81937 zbdp.gqb\n$ cd lqnz\n$ ls\n27250 zcgrgff\n$ cd ..\n$ cd ..\n$ cd rsgwzhp\n$ ls\ndir hhz\n$ cd hhz\n$ ls\n46435 djvfz\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd mjfwsmgd\n$ ls\n25726 clcvm\n170085 zbdp.gqb\n$ cd ..\n$ cd tqh\n$ ls\n111272 gdq.llg\n3215 hdghs\ndir lpdcdr\ndir vhfr\n$ cd lpdcdr\n$ ls\n203902 hmqfdht\n$ cd ..\n$ cd vhfr\n$ ls\n91584 hmqfdht\ndir stmvj\n$ cd stmvj\n$ ls\n315660 wwpq.ffq\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd ..\n$ cd rgrwp\n$ ls\ndir dhwtfld\n187439 hmqfdht\ndir jnwr\ndir npr\ndir sdsppq\n228581 twd.nnc\n42349 wbf.cwb\n194162 zbdp.gqb\n224441 zcgrgff.qpg\n$ cd dhwtfld\n$ ls\n152381 dqdrd\n$ cd ..\n$ cd jnwr\n$ ls\n229758 hmvw.gdz\n92710 mzsfcvgv.cdd\n79954 stjtn.gft\n89831 zbdp.gqb\n$ cd ..\n$ cd npr\n$ ls\n52767 hlvpfw.rqb\ndir nrbjzvgq\n270579 pbsq.msg\n240181 slfdb.bqt\ndir znbwnh\n$ cd nrbjzvgq\n$ ls\n295237 bwqqvn\n229608 dhrjnvtt.lvm\n55391 nlvn\ndir zcgrgff\n$ cd zcgrgff\n$ ls\n124604 hlvpfw.mlw\n$ cd ..\n$ cd ..\n$ cd znbwnh\n$ ls\n228293 zcgrgff\n$ cd ..\n$ cd ..\n$ cd sdsppq\n$ ls\n235741 bcsdzpfj.lvd\ndir jnwr\ndir njtrhrfm\ndir tvq\ndir wshgn\n$ cd jnwr\n$ ls\n273541 brcps\ndir gjt\ndir hlvpfw\ndir nbsdvpnj\ndir zcgrgff\n$ cd gjt\n$ ls\n184707 zbdp.gqb\n$ cd ..\n$ cd hlvpfw\n$ ls\n242810 zcgrgff\n$ cd ..\n$ cd nbsdvpnj\n$ ls\n181797 hlvpfw.gsd\n294284 hmqfdht\n2150" <> ...}
31
31
+
```
32
32
+
33
33
+
```elixir
34
34
+
defmodule FS do
35
35
+
def cd("/", _), do: []
36
36
+
def cd("..", [_ | path]), do: path
37
37
+
def cd(dir, path), do: [dir | path]
38
38
+
39
39
+
def file("dir " <> name, path, fs) do
40
40
+
put_in(fs, Enum.reverse([name | path]), %{})
41
41
+
end
42
42
+
43
43
+
def file(entry, path, fs) do
44
44
+
[size, name] = String.split(entry, " ", parts: 2)
45
45
+
46
46
+
put_in(fs, Enum.reverse([name | path]), String.to_integer(size))
47
47
+
end
48
48
+
49
49
+
def squash(fs) do
50
50
+
fs
51
51
+
|> Map.values()
52
52
+
|> Enum.reduce({0, []}, fn
53
53
+
fsize, {size, subdirs} when is_integer(fsize) ->
54
54
+
{size + fsize, subdirs}
55
55
+
56
56
+
subdir, {size, subdirs} ->
57
57
+
{dsize, _} = subdir = squash(subdir)
58
58
+
59
59
+
{size + dsize, [subdir | subdirs]}
60
60
+
end)
61
61
+
end
62
62
+
end
63
63
+
```
64
64
+
65
65
+
<!-- livebook:{"output":true} -->
66
66
+
67
67
+
```
68
68
+
{:module, FS, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:squash, 1}}
69
69
+
```
70
70
+
71
71
+
```elixir
72
72
+
fs =
73
73
+
puzzle_input
74
74
+
|> String.split("\n", trim: true)
75
75
+
|> Enum.reduce({[], %{}}, fn
76
76
+
"$ cd " <> path, {cwd, fs} -> {FS.cd(path, cwd), fs}
77
77
+
"$ ls", acc -> acc
78
78
+
entry, {cwd, fs} -> {cwd, FS.file(entry, cwd, fs)}
79
79
+
end)
80
80
+
|> elem(1)
81
81
+
|> FS.squash()
82
82
+
```
83
83
+
84
84
+
<!-- livebook:{"output":true} -->
85
85
+
86
86
+
```
87
87
+
{46592386,
88
88
+
[
89
89
+
{18070237,
90
90
+
[
91
91
+
{5362031,
92
92
+
[
93
93
+
{619773, [{295762, []}]},
94
94
+
{4327113,
95
95
+
[
96
96
+
{3365961,
97
97
+
[
98
98
+
{584534, []},
99
99
+
{464942, []},
100
100
+
{2036798,
101
101
+
[
102
102
+
{1075736, [{20405, [{20405, []}]}]},
103
103
+
{47204, []},
104
104
+
{820238, [{481556, [{60750, []}]}, {6432, []}, {14084, []}]},
105
105
+
{44434, []},
106
106
+
{49186, []}
107
107
+
]}
108
108
+
]},
109
109
+
{512340, [{64408, []}, {398645, [{31665, []}]}, {49287, []}]},
110
110
+
{448812, []}
111
111
+
]},
112
112
+
{415145, []}
113
113
+
]},
114
114
+
{4095947,
115
115
+
[
116
116
+
{1171420, [{388084, []}]},
117
117
+
{1871858,
118
118
+
[
119
119
+
{241851, []},
120
120
+
{314621, []},
121
121
+
{90357, []},
122
122
+
{454015, []},
123
123
+
{240747, []},
124
124
+
{121723, []},
125
125
+
{408544, [{408544, []}]}
126
126
+
]},
127
127
+
{37106, []},
128
128
+
{821426, [{181282, []}, {349919, []}]}
129
129
+
]},
130
130
+
{7756031,
131
131
+
[
132
132
+
{6999588,
133
133
+
[
134
134
+
{603629, [{244001, []}]},
135
135
+
{1919401,
136
136
+
[{159354, []}, {779158, [{68393, []}, {432671, []}]}, {284951, [{284951, []}]}]},
137
137
+
{1015127, [{744818, [{744818, []}]}, {270309, []}]},
138
138
+
{3461431,
139
139
+
[
140
140
+
{101738, [{101738, [{101738, []}]}]},
141
141
+
{1781861,
142
142
+
[{198197, []}, {808768, []}, {774896, [{293633, []}, {188389, []}, {292874, []}]}]},
143
143
+
{915750, [{316131, []}, {306743, []}, {71772, [{71772, []}]}]}
144
144
+
]}
145
145
+
]},
146
146
+
{452018, [{358208, [{183686, []}]}]},
147
147
+
{150157, []}
148
148
+
]}
149
149
+
]},
150
150
+
{3078860,
151
151
+
[
152
152
+
{2260158,
153
153
+
[
154
154
+
{324522, [{324522, []}]},
155
155
+
{205684, []},
156
156
+
{213872, []},
157
157
+
{466588, [{51223, []}, {397589, []}, {17776, []}]}
158
158
+
]},
159
159
+
{621970, [{277366, [{277366, []}]}, {69149, []}]},
160
160
+
{196732, []}
161
161
+
]},
162
162
+
{1738868, [{473075, [{186613, []}, {47133, []}, {44509, []}]}, {278273, []}, {426097, []}]},
163
163
+
{22022022,
164
164
+
[
165
165
+
{17187447,
166
166
+
[
167
167
+
{2018419, [{861586, [{140610, []}]}, {449012, [{127216, []}]}, {521137, [{521137, []}]}]},
168
168
+
{1863430, [{1374035, [{438736, []}, {75020, []}, {105747, []}, {58981, []}]}, {4624, []}]},
169
169
+
{105380, []},
170
170
+
{1941889, [{146536, [{71403, []}]}, {720197, []}, {367058, [{63205, []}, {303853, []}]}]},
171
171
+
{868116, [{247470, []}, {28438, []}, {324132, []}]},
172
172
+
{9893050,
173
173
+
[
174
174
+
{8877344,
175
175
+
[
176
176
+
{5916357,
177
177
+
[
178
178
+
{2898091,
179
179
+
[
180
180
+
{454565, [{245558, []}]},
181
181
+
{448698, []},
182
182
+
{178036, [{178036, []}]},
183
183
+
{1581051, [{188814, []}, {691179, []}, {242810, []}, {184707, []}]}
184
184
+
]},
185
185
+
{1496660, [{228293, []}, {704840, [{124604, []}]}]},
186
186
+
{492253, []},
187
187
+
{152381, []}
188
188
+
]},
189
189
+
{1706657,
190
190
+
[
191
191
+
{725633, [{407244, [{315660, []}]}, {203902, []}]},
192
192
+
{195811, []},
193
193
+
{259109, [{46435, [{46435, []}]}, {109187, [{27250, []}]}]}
194
194
+
]},
195
195
+
{436056, [{142366, [{142366, []}]}]}
196
196
+
]},
197
197
+
{336414, [{335058, []}]}
198
198
+
]}
199
199
+
]},
200
200
+
{96506, []},
201
201
+
{928180, [{37528, []}, {283798, [{176794, [{176794, []}]}]}]},
202
202
+
{273935, []},
203
203
+
{119274, []},
204
204
+
{15911, []},
205
205
+
{2980003,
206
206
+
[
207
207
+
{1870823,
208
208
+
[
209
209
+
{1584583,
210
210
+
[
211
211
+
{345940, [{207755, []}, {138185, []}]},
212
212
+
{691294, [{189595, [{115955, []}]}, {349982, []}, {151717, []}]},
213
213
+
{124928, []},
214
214
+
{221254, []}
215
215
+
]}
216
216
+
]},
217
217
+
{161906, []},
218
218
+
{521337, []},
219
219
+
{414205, [{185769, [{185769, []}]}]},
220
220
+
{11732, []}
221
221
+
]}
222
222
+
]},
223
223
+
{851171, [{8052, []}, {461954, [{208370, []}]}]},
224
224
+
{618943, [{290697, []}, {73533, []}]}
225
225
+
]}
226
226
+
```
227
227
+
228
228
+
## Task 1
229
229
+
230
230
+
```elixir
231
231
+
defmodule DFS do
232
232
+
def size({size, subs}, total \\ 0) do
233
233
+
total =
234
234
+
if size < 100_000 do
235
235
+
total + size
236
236
+
else
237
237
+
total
238
238
+
end
239
239
+
240
240
+
Enum.reduce(subs, total, &size/2)
241
241
+
end
242
242
+
end
243
243
+
```
244
244
+
245
245
+
<!-- livebook:{"output":true} -->
246
246
+
247
247
+
```
248
248
+
{:module, DFS, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:size, 2}}
249
249
+
```
250
250
+
251
251
+
```elixir
252
252
+
DFS.size(fs)
253
253
+
```
254
254
+
255
255
+
<!-- livebook:{"output":true} -->
256
256
+
257
257
+
```
258
258
+
1642503
259
259
+
```
260
260
+
261
261
+
## Task 2
262
262
+
263
263
+
```elixir
264
264
+
defmodule DFS2 do
265
265
+
def dirs({size, subs}, needed) do
266
266
+
dirs({size, subs}, needed, size)
267
267
+
end
268
268
+
269
269
+
defp dirs({size, subs}, needed, curr) do
270
270
+
if size >= needed do
271
271
+
Enum.reduce(subs, min(curr, size), &dirs(&1, needed, &2))
272
272
+
else
273
273
+
curr
274
274
+
end
275
275
+
end
276
276
+
end
277
277
+
```
278
278
+
279
279
+
<!-- livebook:{"output":true} -->
280
280
+
281
281
+
```
282
282
+
{:module, DFS2, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:dirs, 3}}
283
283
+
```
284
284
+
285
285
+
```elixir
286
286
+
max = 70_000_000
287
287
+
current = 46_592_386
288
288
+
needed = 30_000_000
289
289
+
290
290
+
left =
291
291
+
(max - current)
292
292
+
|> IO.inspect(label: :left)
293
293
+
294
294
+
DFS2.dirs(fs, needed - left)
295
295
+
```
296
296
+
297
297
+
<!-- livebook:{"output":true} -->
298
298
+
299
299
+
```
300
300
+
left: 23407614
301
301
+
```
302
302
+
303
303
+
<!-- livebook:{"output":true} -->
304
304
+
305
305
+
```
306
306
+
6999588
307
307
+
```