this repo has no description

ft: add day 06.2022 and day 07.2022

+374
+67
2022/day06.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 06 4 + 5 + ```elixir 6 + Mix.install([ 7 + {:kino_aoc, git: "https://github.com/ljgago/kino_aoc"} 8 + ]) 9 + ``` 10 + 11 + <!-- livebook:{"output":true} --> 12 + 13 + ``` 14 + :ok 15 + ``` 16 + 17 + ## Section 18 + 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 + 21 + ```elixir 22 + {:ok, puzzle_input} = 23 + KinoAOC.download_puzzle("2022", "6", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 24 + ``` 25 + 26 + <!-- livebook:{"output":true} --> 27 + 28 + ``` 29 + {:ok, 30 + "pnnfhnhshrhmhwwmwzmznmnwmwfmfhfjfcjjtgtbggpdgdjjbjrjsjpjrrmddmgmpmddrhddnfnfzfpfvpfpprhhlffmtffqhhdtdcdsswsdwswmmfvvpdprrnnhhhtffnfbbznbznnvdnnbffjrfrbfrbrgbrrntnggrqqwtqwwgjgsswgwqwtwwsvwvbwvwrwlrlppzfzwfzzpmzzhqqzqlzlglzzmrmwrmwwvmwvvnppjfjttlffhjjjsccbggnffqgfgjjnccmdmzmllvnlnznttlvlttvnvgnvvqvmvqqzrqqcgglzzwtztwwmjmzjjnddsffqrqlrrvsvdvldvvlgvlvccdzczcqcpphggtnthhhtbhtttcjtjcjgcjcbbrhbbfrffgjgdgzddcttczzsccbpcpddcpcggmjgjddtcccthccfrccmdmhmddnwddfldffntnptnpttcptcptpfphhmfmwfwmmlblgbgvbvlltqltldttfcfcclgcllmplmlbbjnjzjnzzttnvvgddshddsqddggsqgqddsggdhghjgjhhgchhdmdjmjddgdhghrrphrrpnnqhhjwwqrrcmmslmmszzpgzpzzrmzmznzllnjnnlnbbdvdsdffbpffcmmnznqqcbbzvvjnjvvwqwgqqpnnzwnzwnzwwwlpwpzzfqzfqqwnqnbnfnqnbqqbggqnqdndrrzzlffbbgqgfgrfrqqsddnqnqjjgssqwqwcqcpcrrqppwpjjfnfpffhphwwmcwwznwznnplptlplnlsnlsldslslsffwtwftwtbtdbbjsjcczwwfllwtlwtlwlvwlwrwppsggvcvrrqcrqqvmqvmmbrrsbsfspspjpnnmpmqmcczgzffqmfmtmpppwzppzrpzrzsrrpqrpqpmpvmpvpttbqtqmtmjttqdqgggcppclcjcpcsppctpplpdpcppcmmdzmzddvhvhnhrrldllcwwbnwnssshlhrhthggtmggbjbjwwbvbttjllvrrfggngvngnmmvzzrrmddmcddztztctfccqpcpcqqvqppqcqdcdhhvhssgfgzgwwzmmnssvwwbqbhbnhnphpqqjcqcddfwfttqjtqtlttglljgjbgjgnnsqqvrvffqvqfqbffljjpffssqdsqstqqqldqqmhmsmsqqwtqwqdqgdgjjfbjffgbbrhhqghgppqgpgmpmmfzfhhfrhffgmfggpzgpzzhtzhhlbhhqbbzvvnvqnntptmmbhbdhdwwmjjcnnmsscqcbbtjtvjvwjvvmsmjmtmpmgghttcztzggpddbfbfgbbdsdrsrrqfqjjqfjjhzhtzzmdzzcgzgdzzmvmmfmjmgjmggmppbdppmzpppvfppzhhfsfwfhhpjpmmrjjpssdccjpjpwjppvdpphcpcjcfjfwjfwfjwfjjqcqcwqqqsmmmbbgdgwwpcwwdfdlflrltlgtthfhfjhhlthtddlgdggsjsrrdpdcppgttphpgpwppmpzmmrjmmvjvgvgfglfgllbqlqhllszzlwwhzzdfdcdtctptwtztfzzmjzjtjtrjrcrnrjjmwmnnbddgvgtgsstjsszmpqdmzgqflrbrspjmtzjcrmlzltmhgblghnwqvwwqwzbpnfrpdpblpjgshfccfbjfsnwvvhnjftsdnsgtzzjtzpmtfdvzrhtqpblhwgmqtgpbfvbdmsnrrrvvbstpsznvbbwgjfqjrhdvwvgptpglpfddhddmtglmjlpwlvfpbtbmgbplbzrlpdlvqzcwhbscpszgfstjpfdvfpmljlngrbgrdnnblzqrfpzsdvblpwbtnhdjclldvwvbwcwzfzbdspgwpfqjfbdbrqcshtlvcrdstnzggbwqnzbrfzbpnrtmvpbvdhcvdsdshgtvhfgdzljflppqbwclnvbhbczvrscjhlbgbfvwdjhnjsgmvwhpfgwbbmnndpnglfrmtfdzvqgfjdqfhgrhvpbqndmqnqccgwswwdsqjnbjtjbjdbqgjnmfbdvlnfwbnrdqgvgzzhmmbbdzfdvvpwhpbwbnzdcdpchrwlhfsjnhhjggvplmqggwjdsvjtpnpnqgldjjdcscrdltssjdrpcrfbgbcjfplhzgwbprfcslhpcngtszrghmwhzdqscbfrhzdwcffzvmjrmcjcstfvhplvrsglgsjnjtrpddsdfqjsndjnfmvdhfgdbzzflqhsrrwmrnlpqzmcddqbqvvzgtlztpgjnddtcnbmqsjlhmcszrmcjvwzpptlfqsmpvgnzvrjdwzpdwqgbmdgdtvjlmfczthjbcgfhbqpnmlbmrwwhfptzlbmfdhssznjcvjbmnjtnvzjhzczlrrdnttmmcbnzhqpplzqwgttwrnwfvmnptgqlfrnzvqpjfgrzwmlcwvtptvcvrlsrdwdgqfvffspmdbnnrqjttpqvhvdpbcrvzptwnhhfsqzchmncvttcdgdnlppcfzpmjpvbvqhlvplwvrmmbbggbwttwmvsqjlllsftprsmtmnzjcqfzblrllzgshfljchrjwjlpvhpbrtrsschzltrblgjnbgdnmwdggjhqggntblnhsvfgsbcblhmctbqzqwmhqnjhpzjfqpjdgwpzhczcftfcpdhvzhzccmwmrfrbqshzmtpqgpbbvfqqbjbmvnlnlwjtzrpmhdlffccrqcfgsjfszbrzrfztntchtmgmbhjgmlsqzcbtqqjzzlghtzzqmlnnvsgsvbbjfgqsqbqmqrdzwpwdgbggpdvhvnlzshhntprjdwhnwfvdjzpqgflwrvwgtmfdmfdztcbtfnjdrvgdwwczdgphnvdgrbdchprqldfjrvcsflcmlcmzqvqgsgnzcgmrhccgcmptcdzhbcdgdtppwztfstzqqzqrdzlnzthggjmpcflmbcmdrrjnnpbpqfmjbzqbtsjjgdlmgncbmgspqqvbrvzrdjscpzjsdtcdvsdwqlmwrngttswnrsbqctvhgfnnwblpcqzdmzpfchplslspmghvgcqntmlrfhgpcbpspvfhnvqvglsqzsnsdzddqpbsjhlclslngbwvvgjhwfcncqsmqwbptzvpzlzslsjjjldjpwpfrdlfbjphqcjtsgqdsdfdjhqgdhcppndwmhmmldvvmblcqcqfqhltbcbvrnghjfmtgqwtwljtczvqlnmgscjhqdhnzwhzvzzqnlsrhqvljqpgpwghfqlhjjrrhvnmnnrbnlhdcjctwtlhmhhmhjvcgzdrzmdjrvqzgnsttjdwglgwlcmbcdnjprgfsbbdzzngbqdrvwwwhbtlnnmzqdjttsrrpvlfdqnfhhtdtvmpcjgdwtbnqmwmtszdqfmbhjsjpqqddzfggwjhbtlnqfgcwbjzdtcpcpzgnrmnvwlpgmwfjlpgppdfrfvvjwsfcdqdnpcpjbqsvhttssgptqjghctrbgntlfjzdrfjccsprsjlrrwrzsmnjsqslmpdtrvhlqbnmgpjthpqdqmnvrtzlhhzzfzbrcclpmpcszhbttgrtcpgcpjwpdbfpfvgspsgtvglwthqcmcvmrfmclwlvjlsptfgmtlrnsvjrnfwzhdcsmgztpzfcvzwdztpppvqpvqfpdrsfnlhrbqwrsqjtwjmhnpwmqmpdgdhbtbpfwnmswffdqffdggrdrpmngvpzplmmwlddnhcvjjzqqfsbbtfmzdwnpvbjrshmllczhgvwwcbcbtfrfnplqjwmjlvpwwgfrtffwddwppsgtnlmpvfnhfzcsgjbqbjmbvpnqppsrvwnlzvcmjqgtbzrdsnrgwbfmrvnflgccrssfvcwgllqqbbcthzmbtnsmbzbcczhtzcvmthttpltrtdmgspctvtpvqbhmnnpnjwmhpqclmjsdrbjwvjbtzcjlqbjsvbgdwqzflnwzcfjwtrhjgfshfmwbjfwpnhjsmtpgbpwlfjjnmdlrhchmnfmgmgcrftmwbzshdwbhndgwtjbrrvbwprqppfmgfmfllpcjgrwdmtzddthsjlgjljv\n"} 31 + ``` 32 + 33 + ## Task 1 34 + 35 + ```elixir 36 + index = 37 + puzzle_input 38 + |> to_charlist() 39 + |> Enum.chunk_every(4, 1) 40 + |> Enum.find_index(fn chunk -> MapSet.size(MapSet.new(chunk)) == 4 end) 41 + 42 + index + 4 43 + ``` 44 + 45 + <!-- livebook:{"output":true} --> 46 + 47 + ``` 48 + 1623 49 + ``` 50 + 51 + ## Task 2 52 + 53 + ```elixir 54 + index = 55 + puzzle_input 56 + |> to_charlist() 57 + |> Enum.chunk_every(14, 1) 58 + |> Enum.find_index(fn chunk -> MapSet.size(MapSet.new(chunk)) == 14 end) 59 + 60 + index + 14 61 + ``` 62 + 63 + <!-- livebook:{"output":true} --> 64 + 65 + ``` 66 + 3774 67 + ```
+307
2022/day07.livemd
··· 1 + <!-- livebook:{"persist_outputs":true} --> 2 + 3 + # Day 07 4 + 5 + ```elixir 6 + Mix.install([ 7 + {:kino_aoc, git: "https://github.com/ljgago/kino_aoc"} 8 + ]) 9 + ``` 10 + 11 + <!-- livebook:{"output":true} --> 12 + 13 + ``` 14 + :ok 15 + ``` 16 + 17 + ## Section 18 + 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 + 21 + ```elixir 22 + {:ok, puzzle_input} = 23 + KinoAOC.download_puzzle("2022", "7", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 24 + ``` 25 + 26 + <!-- livebook:{"output":true} --> 27 + 28 + ``` 29 + {:ok, 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 + ``` 32 + 33 + ```elixir 34 + defmodule FS do 35 + def cd("/", _), do: [] 36 + def cd("..", [_ | path]), do: path 37 + def cd(dir, path), do: [dir | path] 38 + 39 + def file("dir " <> name, path, fs) do 40 + put_in(fs, Enum.reverse([name | path]), %{}) 41 + end 42 + 43 + def file(entry, path, fs) do 44 + [size, name] = String.split(entry, " ", parts: 2) 45 + 46 + put_in(fs, Enum.reverse([name | path]), String.to_integer(size)) 47 + end 48 + 49 + def squash(fs) do 50 + fs 51 + |> Map.values() 52 + |> Enum.reduce({0, []}, fn 53 + fsize, {size, subdirs} when is_integer(fsize) -> 54 + {size + fsize, subdirs} 55 + 56 + subdir, {size, subdirs} -> 57 + {dsize, _} = subdir = squash(subdir) 58 + 59 + {size + dsize, [subdir | subdirs]} 60 + end) 61 + end 62 + end 63 + ``` 64 + 65 + <!-- livebook:{"output":true} --> 66 + 67 + ``` 68 + {:module, FS, <<70, 79, 82, 49, 0, 0, 12, ...>>, {:squash, 1}} 69 + ``` 70 + 71 + ```elixir 72 + fs = 73 + puzzle_input 74 + |> String.split("\n", trim: true) 75 + |> Enum.reduce({[], %{}}, fn 76 + "$ cd " <> path, {cwd, fs} -> {FS.cd(path, cwd), fs} 77 + "$ ls", acc -> acc 78 + entry, {cwd, fs} -> {cwd, FS.file(entry, cwd, fs)} 79 + end) 80 + |> elem(1) 81 + |> FS.squash() 82 + ``` 83 + 84 + <!-- livebook:{"output":true} --> 85 + 86 + ``` 87 + {46592386, 88 + [ 89 + {18070237, 90 + [ 91 + {5362031, 92 + [ 93 + {619773, [{295762, []}]}, 94 + {4327113, 95 + [ 96 + {3365961, 97 + [ 98 + {584534, []}, 99 + {464942, []}, 100 + {2036798, 101 + [ 102 + {1075736, [{20405, [{20405, []}]}]}, 103 + {47204, []}, 104 + {820238, [{481556, [{60750, []}]}, {6432, []}, {14084, []}]}, 105 + {44434, []}, 106 + {49186, []} 107 + ]} 108 + ]}, 109 + {512340, [{64408, []}, {398645, [{31665, []}]}, {49287, []}]}, 110 + {448812, []} 111 + ]}, 112 + {415145, []} 113 + ]}, 114 + {4095947, 115 + [ 116 + {1171420, [{388084, []}]}, 117 + {1871858, 118 + [ 119 + {241851, []}, 120 + {314621, []}, 121 + {90357, []}, 122 + {454015, []}, 123 + {240747, []}, 124 + {121723, []}, 125 + {408544, [{408544, []}]} 126 + ]}, 127 + {37106, []}, 128 + {821426, [{181282, []}, {349919, []}]} 129 + ]}, 130 + {7756031, 131 + [ 132 + {6999588, 133 + [ 134 + {603629, [{244001, []}]}, 135 + {1919401, 136 + [{159354, []}, {779158, [{68393, []}, {432671, []}]}, {284951, [{284951, []}]}]}, 137 + {1015127, [{744818, [{744818, []}]}, {270309, []}]}, 138 + {3461431, 139 + [ 140 + {101738, [{101738, [{101738, []}]}]}, 141 + {1781861, 142 + [{198197, []}, {808768, []}, {774896, [{293633, []}, {188389, []}, {292874, []}]}]}, 143 + {915750, [{316131, []}, {306743, []}, {71772, [{71772, []}]}]} 144 + ]} 145 + ]}, 146 + {452018, [{358208, [{183686, []}]}]}, 147 + {150157, []} 148 + ]} 149 + ]}, 150 + {3078860, 151 + [ 152 + {2260158, 153 + [ 154 + {324522, [{324522, []}]}, 155 + {205684, []}, 156 + {213872, []}, 157 + {466588, [{51223, []}, {397589, []}, {17776, []}]} 158 + ]}, 159 + {621970, [{277366, [{277366, []}]}, {69149, []}]}, 160 + {196732, []} 161 + ]}, 162 + {1738868, [{473075, [{186613, []}, {47133, []}, {44509, []}]}, {278273, []}, {426097, []}]}, 163 + {22022022, 164 + [ 165 + {17187447, 166 + [ 167 + {2018419, [{861586, [{140610, []}]}, {449012, [{127216, []}]}, {521137, [{521137, []}]}]}, 168 + {1863430, [{1374035, [{438736, []}, {75020, []}, {105747, []}, {58981, []}]}, {4624, []}]}, 169 + {105380, []}, 170 + {1941889, [{146536, [{71403, []}]}, {720197, []}, {367058, [{63205, []}, {303853, []}]}]}, 171 + {868116, [{247470, []}, {28438, []}, {324132, []}]}, 172 + {9893050, 173 + [ 174 + {8877344, 175 + [ 176 + {5916357, 177 + [ 178 + {2898091, 179 + [ 180 + {454565, [{245558, []}]}, 181 + {448698, []}, 182 + {178036, [{178036, []}]}, 183 + {1581051, [{188814, []}, {691179, []}, {242810, []}, {184707, []}]} 184 + ]}, 185 + {1496660, [{228293, []}, {704840, [{124604, []}]}]}, 186 + {492253, []}, 187 + {152381, []} 188 + ]}, 189 + {1706657, 190 + [ 191 + {725633, [{407244, [{315660, []}]}, {203902, []}]}, 192 + {195811, []}, 193 + {259109, [{46435, [{46435, []}]}, {109187, [{27250, []}]}]} 194 + ]}, 195 + {436056, [{142366, [{142366, []}]}]} 196 + ]}, 197 + {336414, [{335058, []}]} 198 + ]} 199 + ]}, 200 + {96506, []}, 201 + {928180, [{37528, []}, {283798, [{176794, [{176794, []}]}]}]}, 202 + {273935, []}, 203 + {119274, []}, 204 + {15911, []}, 205 + {2980003, 206 + [ 207 + {1870823, 208 + [ 209 + {1584583, 210 + [ 211 + {345940, [{207755, []}, {138185, []}]}, 212 + {691294, [{189595, [{115955, []}]}, {349982, []}, {151717, []}]}, 213 + {124928, []}, 214 + {221254, []} 215 + ]} 216 + ]}, 217 + {161906, []}, 218 + {521337, []}, 219 + {414205, [{185769, [{185769, []}]}]}, 220 + {11732, []} 221 + ]} 222 + ]}, 223 + {851171, [{8052, []}, {461954, [{208370, []}]}]}, 224 + {618943, [{290697, []}, {73533, []}]} 225 + ]} 226 + ``` 227 + 228 + ## Task 1 229 + 230 + ```elixir 231 + defmodule DFS do 232 + def size({size, subs}, total \\ 0) do 233 + total = 234 + if size < 100_000 do 235 + total + size 236 + else 237 + total 238 + end 239 + 240 + Enum.reduce(subs, total, &size/2) 241 + end 242 + end 243 + ``` 244 + 245 + <!-- livebook:{"output":true} --> 246 + 247 + ``` 248 + {:module, DFS, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:size, 2}} 249 + ``` 250 + 251 + ```elixir 252 + DFS.size(fs) 253 + ``` 254 + 255 + <!-- livebook:{"output":true} --> 256 + 257 + ``` 258 + 1642503 259 + ``` 260 + 261 + ## Task 2 262 + 263 + ```elixir 264 + defmodule DFS2 do 265 + def dirs({size, subs}, needed) do 266 + dirs({size, subs}, needed, size) 267 + end 268 + 269 + defp dirs({size, subs}, needed, curr) do 270 + if size >= needed do 271 + Enum.reduce(subs, min(curr, size), &dirs(&1, needed, &2)) 272 + else 273 + curr 274 + end 275 + end 276 + end 277 + ``` 278 + 279 + <!-- livebook:{"output":true} --> 280 + 281 + ``` 282 + {:module, DFS2, <<70, 79, 82, 49, 0, 0, 8, ...>>, {:dirs, 3}} 283 + ``` 284 + 285 + ```elixir 286 + max = 70_000_000 287 + current = 46_592_386 288 + needed = 30_000_000 289 + 290 + left = 291 + (max - current) 292 + |> IO.inspect(label: :left) 293 + 294 + DFS2.dirs(fs, needed - left) 295 + ``` 296 + 297 + <!-- livebook:{"output":true} --> 298 + 299 + ``` 300 + left: 23407614 301 + ``` 302 + 303 + <!-- livebook:{"output":true} --> 304 + 305 + ``` 306 + 6999588 307 + ```