diff --git a/2022/07/Makefile b/2022/07/Makefile new file mode 100644 index 0000000..9535499 --- /dev/null +++ b/2022/07/Makefile @@ -0,0 +1,16 @@ +CXX ?= c++ +CXXFLAGS ?= -std=c++17 -Wall -Wextra -pedantic -O2 +PROJECT = unix + +all: ${PROJECT} + +${PROJECT}: main.cpp + ${CXX} ${CXXFLAGS} -o $@ $^ + +test: ${PROJECT} + ./${PROJECT} + +clean: + ${RM} *.o ${PROJECT} + +.PHONY: all clean test diff --git a/2022/07/input b/2022/07/input new file mode 100644 index 0000000..bb97661 --- /dev/null +++ b/2022/07/input @@ -0,0 +1,1015 @@ +$ cd / +$ ls +dir dpllhlcv +284723 hznrlfhh.tnz +dir mgjdlmrz +dir njstc +dir nzwbc +dir qzzfvdh +dir smvhphf +$ cd dpllhlcv +$ ls +11223 bplz.rdp +dir gpmlznd +dir pgcctrb +dir wmsl +$ cd gpmlznd +$ ls +dir lwzcss +83678 nzwbc.rgv +dir rhdllvm +94635 wpglzlrf.htl +$ cd lwzcss +$ ls +dir bttplh +$ cd bttplh +$ ls +dir rzj +$ cd rzj +$ ls +59866 nzwbc.psj +$ cd .. +$ cd .. +$ cd .. +$ cd rhdllvm +$ ls +dir mvqfrq +$ cd mvqfrq +$ ls +41266 prvl +$ cd .. +$ cd .. +$ cd .. +$ cd pgcctrb +$ ls +dir dgpfcftj +$ cd dgpfcftj +$ ls +101757 tzjthwc +$ cd .. +$ cd .. +$ cd wmsl +$ ls +215238 bvlvn.pgf +dir hhtztpm +197563 hznrlfhh.tnz +dir tzjthwc +$ cd hhtztpm +$ ls +196378 djfbm.djl +203856 ltnwbvg.rqz +266242 mjrlm +dir ngjd +dir wmsl +$ cd ngjd +$ ls +289546 mjrlm +$ cd .. +$ cd wmsl +$ ls +153439 qqb.qmd +25326 tzjthwc +$ cd .. +$ cd .. +$ cd tzjthwc +$ ls +dir lhccf +235335 nzwbc +dir wgnhhl +dir wmsl +$ cd lhccf +$ ls +dir nzwbc +100347 rrrj.wzl +dir zfwffjn +$ cd nzwbc +$ ls +dir wmsl +$ cd wmsl +$ ls +102053 nzwbc.qbd +$ cd .. +$ cd .. +$ cd zfwffjn +$ ls +dir mrd +23992 rrrj.jcz +dir vnwpddtf +$ cd mrd +$ ls +139407 qqwlrbsw.zfn +$ cd .. +$ cd vnwpddtf +$ ls +287771 dgpfcftj.wpm +59212 qqb.qmd +$ cd .. +$ cd .. +$ cd .. +$ cd wgnhhl +$ ls +120460 rrrj +$ cd .. +$ cd wmsl +$ ls +17612 rlsswjw.wbr +132954 ttbswbhs.ffs +dir zpldfrj +$ cd zpldfrj +$ ls +180679 qljrrlm.clw +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mgjdlmrz +$ ls +79173 dng.qrc +dir fnfw +dir hwb +dir nfqzjs +dir qdgplmrt +dir znrnj +$ cd fnfw +$ ls +dir bhjm +263282 bplz.rdp +dir dhsvtfc +dir hlh +dir nzwbc +177780 ttbswbhs.ffs +28452 tzjthwc.wlq +19548 wmsl.rmd +$ cd bhjm +$ ls +dir bpl +57561 dgpfcftj +dir glplnd +170692 hwsjhwvf.rmv +dir rrrj +dir tlltjd +dir tzjthwc +dir wmsl +$ cd bpl +$ ls +dir btpglc +275227 fmbpzn +9798 mjztf.nlg +190388 nzwbc +dir tzjthwc +$ cd btpglc +$ ls +276105 rrrj.rhl +$ cd .. +$ cd tzjthwc +$ ls +dir hqmw +280196 hznrlfhh.tnz +51545 mjrlm +228230 wmsl +$ cd hqmw +$ ls +163168 mchnt.pls +$ cd .. +$ cd .. +$ cd .. +$ cd glplnd +$ ls +147261 bplz.rdp +267191 hznrlfhh.tnz +$ cd .. +$ cd rrrj +$ ls +dir dgpfcftj +dir fwdw +277548 hnz +164103 nvcsdq.tpj +265477 qzwsg.ccl +dir tnpjsgnq +dir tpvttzv +209300 wmsl.wtq +$ cd dgpfcftj +$ ls +dir dqtbltwp +$ cd dqtbltwp +$ ls +27856 tzjthwc.gnr +$ cd .. +$ cd .. +$ cd fwdw +$ ls +166347 fgtfj.pnc +140486 mspn.wcw +26602 nzwbc.dhb +81490 qqb.qmd +$ cd .. +$ cd tnpjsgnq +$ ls +dir gbddb +dir gpqssnq +$ cd gbddb +$ ls +1587 qqb.qmd +$ cd .. +$ cd gpqssnq +$ ls +33979 fmjpw.mtp +$ cd .. +$ cd .. +$ cd tpvttzv +$ ls +dir bqvzmb +$ cd bqvzmb +$ ls +79211 fdhjztlv +72991 wgvqvdp.pzp +$ cd .. +$ cd .. +$ cd .. +$ cd tlltjd +$ ls +58096 swqcsnw +$ cd .. +$ cd tzjthwc +$ ls +66628 pzrdpc.fpc +$ cd .. +$ cd wmsl +$ ls +43111 hznrlfhh.tnz +114356 rrrj.rlf +169873 zpwhgzvc.wql +$ cd .. +$ cd .. +$ cd dhsvtfc +$ ls +dir cwbq +201361 dgpfcftj +291508 jjjjwcw +445 pfdvf.pmj +135732 qpc.gsw +115597 wlgrtn.mjb +dir wmsl +$ cd cwbq +$ ls +dir ccgdn +dir gcfbqh +173860 hznrlfhh.tnz +97790 mjrlm +dir qtfhz +dir tpgj +dir tph +$ cd ccgdn +$ ls +dir blnzrjm +46502 fgmntg.crb +dir fwdpw +dir nbldsrfq +11175 nwj.fht +208129 qqb.qmd +dir wpj +$ cd blnzrjm +$ ls +121398 gvs +201215 pdppzscr.vph +dir pwj +3861 smwrnw.hqp +dir tzjthwc +220659 wzccnw.lsc +$ cd pwj +$ ls +279141 bwj.ntc +15325 jvqwhwmh.brq +$ cd .. +$ cd tzjthwc +$ ls +25191 jdgphj +70354 rrrj.szq +256692 wmsl +$ cd .. +$ cd .. +$ cd fwdpw +$ ls +28780 prhjf +$ cd .. +$ cd nbldsrfq +$ ls +57352 dcrhr +$ cd .. +$ cd wpj +$ ls +51243 jmdn.bzh +$ cd .. +$ cd .. +$ cd gcfbqh +$ ls +92250 crmpsc.rbf +284234 tzjthwc +$ cd .. +$ cd qtfhz +$ ls +164311 hznrlfhh.tnz +137031 mjrlm +$ cd .. +$ cd tpgj +$ ls +210570 jdpv.fpw +$ cd .. +$ cd tph +$ ls +dir hptp +dir rrrj +$ cd hptp +$ ls +272964 qqb.qmd +147435 svrcpb +$ cd .. +$ cd rrrj +$ ls +145269 btzl.vcs +156500 tzjthwc.ddw +236073 vsrghnhl.wdc +$ cd .. +$ cd .. +$ cd .. +$ cd wmsl +$ ls +62697 mjrlm +dir psndpb +33688 tzjthwc.hjc +100902 tzjthwc.rnm +$ cd psndpb +$ ls +dir dbm +dir fbmfpndf +dir fstgbcrc +272771 lszgqt +136189 mjrlm +166606 qqb.qmd +dir vptjzdt +$ cd dbm +$ ls +dir nzwbc +dir tzjthwc +$ cd nzwbc +$ ls +dir ffmrngmj +$ cd ffmrngmj +$ ls +299742 nrwrptz.cmp +$ cd .. +$ cd .. +$ cd tzjthwc +$ ls +268152 pln +$ cd .. +$ cd .. +$ cd fbmfpndf +$ ls +186758 bplz.rdp +$ cd .. +$ cd fstgbcrc +$ ls +4975 hznrlfhh.tnz +59093 mjrlm +dir nzwbc +279246 qqb.qmd +$ cd nzwbc +$ ls +152443 nzwbc +$ cd .. +$ cd .. +$ cd vptjzdt +$ ls +117403 ttbswbhs.ffs +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd hlh +$ ls +96676 rrrj.mfv +$ cd .. +$ cd nzwbc +$ ls +192533 njwsbs.srq +$ cd .. +$ cd .. +$ cd hwb +$ ls +44576 dshmsgj.cnd +70710 tdcgvdv.phs +$ cd .. +$ cd nfqzjs +$ ls +18103 tfwmgdj +$ cd .. +$ cd qdgplmrt +$ ls +163549 mjrlm +$ cd .. +$ cd znrnj +$ ls +dir dgpfcftj +53146 mzbpjgd.lmp +202250 vmtdc +$ cd dgpfcftj +$ ls +dir cdgrjlz +238240 fmtclb.vfq +$ cd cdgrjlz +$ ls +89863 dpnzsq.dbd +259686 mjrlm +50165 qqb.qmd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd njstc +$ ls +70592 bplz.rdp +100122 ccdp.lpw +dir jnffc +dir jnrrwt +21922 lcr.mqp +dir mdts +9581 rwdnfc.zqq +dir zchc +$ cd jnffc +$ ls +54279 vbvpzw.rst +147514 vzshqq.qpb +$ cd .. +$ cd jnrrwt +$ ls +51615 bplz.rdp +dir fvmgmn +dir wjrqnlr +$ cd fvmgmn +$ ls +159538 sntlcs.vms +$ cd .. +$ cd wjrqnlr +$ ls +dir dvcqnv +dir jnjzlhhw +135325 mjrlm +94135 qqb.qmd +$ cd dvcqnv +$ ls +66408 mjrlm +$ cd .. +$ cd jnjzlhhw +$ ls +89668 bplz.rdp +dir btcjthr +$ cd btcjthr +$ ls +dir sbcwwvj +dir tzjthwc +280405 zjf.fqt +$ cd sbcwwvj +$ ls +dir wmsl +$ cd wmsl +$ ls +31258 vfwqsw +$ cd .. +$ cd .. +$ cd tzjthwc +$ ls +dir dgpfcftj +$ cd dgpfcftj +$ ls +281485 lhnnjrcq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mdts +$ ls +191614 ttbswbhs.ffs +$ cd .. +$ cd zchc +$ ls +dir rrrj +$ cd rrrj +$ ls +102230 ttbswbhs.ffs +$ cd .. +$ cd .. +$ cd .. +$ cd nzwbc +$ ls +30185 bplz.rdp +dir dgpfcftj +238614 hfg.tsw +215453 lzvmwg.crp +dir mfbhtb +dir nbdn +dir nzw +77355 qqb.qmd +114201 wmsl +dir zcv +$ cd dgpfcftj +$ ls +258786 dhdmsqfs.jhs +dir ltrg +dir nzwbc +18568 qqb.qmd +$ cd ltrg +$ ls +dir nzwbc +dir wmsl +$ cd nzwbc +$ ls +72334 fhd +$ cd .. +$ cd wmsl +$ ls +dir rvt +$ cd rvt +$ ls +232235 nzwbc +$ cd .. +$ cd .. +$ cd .. +$ cd nzwbc +$ ls +29531 rnl +$ cd .. +$ cd .. +$ cd mfbhtb +$ ls +21538 sjrwtjcq +$ cd .. +$ cd nbdn +$ ls +120432 bplz.rdp +180737 hjsv +295982 mjrlm +dir rscwnwt +13218 vzjtg.hhp +1332 zjwf.spw +$ cd rscwnwt +$ ls +268727 fnvfrbzg.wmw +155540 jgfvpmp +242598 rrrj +47339 vqqqmg.dss +$ cd .. +$ cd .. +$ cd nzw +$ ls +135129 hfbptj.rsq +dir nhzg +dir qshfn +$ cd nhzg +$ ls +219375 tzjthwc.gsl +$ cd .. +$ cd qshfn +$ ls +dir pnjhczqg +dir tzjthwc +279385 whsdfns +141044 wmsl.tpl +$ cd pnjhczqg +$ ls +141321 rlgtn.jvh +dir wrh +$ cd wrh +$ ls +143304 sfvrld.nsz +$ cd .. +$ cd .. +$ cd tzjthwc +$ ls +dir lnhmfb +168870 qqb.qmd +178464 rrrj.qml +201521 rwdwv.gnn +21171 vznflldw.zrf +$ cd lnhmfb +$ ls +dir dzzdvmtl +dir ttnm +$ cd dzzdvmtl +$ ls +dir mrg +$ cd mrg +$ ls +174378 rrrj.lnh +$ cd .. +$ cd .. +$ cd ttnm +$ ls +272667 hznrlfhh.tnz +251551 wmsl.ggr +97289 wmsl.phl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zcv +$ ls +dir cwsqwt +dir dgpfcftj +256838 dntqvr.snf +dir nbq +dir nzbdsvt +293181 rrrj.lvd +$ cd cwsqwt +$ ls +141770 bbrgtfh.zmf +100359 mjrlm +96547 qqb.qmd +176620 ttbswbhs.ffs +$ cd .. +$ cd dgpfcftj +$ ls +82245 pqjjnjrw +295247 rrrj.lfw +$ cd .. +$ cd nbq +$ ls +132140 bwdvjv.gwq +dir gbjtzhj +dir mfsr +dir nzwbc +248867 rrrj +226784 sjtsjgrb +94475 tjh.vft +dir tzjthwc +149501 tzjthwc.rgb +$ cd gbjtzhj +$ ls +43689 rrrj.msh +$ cd .. +$ cd mfsr +$ ls +30068 sntz.lqw +dir tch +dir zzgtsqvh +$ cd tch +$ ls +dir tzjthwc +$ cd tzjthwc +$ ls +289238 sjwjdmd +$ cd .. +$ cd .. +$ cd zzgtsqvh +$ ls +289069 tzjthwc.mql +$ cd .. +$ cd .. +$ cd nzwbc +$ ls +138407 hgtr.hst +$ cd .. +$ cd tzjthwc +$ ls +173287 tclm.zqt +$ cd .. +$ cd .. +$ cd nzbdsvt +$ ls +89301 ttbswbhs.ffs +$ cd .. +$ cd .. +$ cd .. +$ cd qzzfvdh +$ ls +102585 dgpfcftj.fbr +dir nzwbc +dir rrrj +dir tzjthwc +dir vgnlftjr +dir vjqzf +dir zhmgmmv +$ cd nzwbc +$ ls +252665 ffq.sjv +87232 hznrlfhh.tnz +dir lfpltbmd +dir lmnvgrm +223794 mjrlm +dir qnfp +dir wdn +$ cd lfpltbmd +$ ls +dir dgpfcftj +59516 frtspbh +$ cd dgpfcftj +$ ls +264780 bplz.rdp +169819 nmwvbqlr.dpd +9212 whtcbl.zzb +$ cd .. +$ cd .. +$ cd lmnvgrm +$ ls +12367 nwc.qbd +dir rrrj +dir wmsl +$ cd rrrj +$ ls +269510 tctgzc +$ cd .. +$ cd wmsl +$ ls +138765 bdgpp.fwd +298221 fljmgctv +90883 hwmwtln +2731 jnhrtbqs +$ cd .. +$ cd .. +$ cd qnfp +$ ls +78470 ddbcjwg.wqc +dir ldq +dir ljv +dir nzwbc +254734 qrwct.rvp +dir wmsl +95613 wmsl.wgv +$ cd ldq +$ ls +268677 ttbswbhs.ffs +dir wmsl +$ cd wmsl +$ ls +dir wfqbv +$ cd wfqbv +$ ls +268503 tgrlfscv.vbn +222733 vwlcnm.wqq +$ cd .. +$ cd .. +$ cd .. +$ cd ljv +$ ls +184758 gjddvvbs.zjq +278919 mjrlm +241428 nzwbc.fsf +dir wdfwp +$ cd wdfwp +$ ls +100960 jnhpmp +204739 sfhjbnq.jpr +110857 twrzzn.tpm +$ cd .. +$ cd .. +$ cd nzwbc +$ ls +171647 glrd +$ cd .. +$ cd wmsl +$ ls +39475 frptpcd.cbf +dir mnd +258387 tzjthwc +$ cd mnd +$ ls +dir wmsl +$ cd wmsl +$ ls +dir rrrj +$ cd rrrj +$ ls +124041 rmrqhf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wdn +$ ls +220196 gpp.qdd +71184 jsjcvvmd.mdc +228140 rrrj.cqm +$ cd .. +$ cd .. +$ cd rrrj +$ ls +165549 qgd.pgt +206913 rrrj.whw +56087 ttbswbhs.ffs +$ cd .. +$ cd tzjthwc +$ ls +dir cjrtl +dir cmqzqrc +dir dgpfcftj +dir gmlgztg +16349 hgjnnw.nwp +dir qflmtrgh +dir snjv +118210 ttbswbhs.ffs +dir vsq +211036 zsflzpg +$ cd cjrtl +$ ls +157605 frfb.flq +182254 gqtprzlg +dir lldcwcf +86395 ttbswbhs.ffs +dir wmsl +$ cd lldcwcf +$ ls +279487 bplz.rdp +229071 djzs +$ cd .. +$ cd wmsl +$ ls +dir dnfztwvj +$ cd dnfztwvj +$ ls +211224 hznrlfhh.tnz +$ cd .. +$ cd .. +$ cd .. +$ cd cmqzqrc +$ ls +dir bsfqcv +dir dgpfcftj +dir nzwbc +$ cd bsfqcv +$ ls +62520 ltzblpc +$ cd .. +$ cd dgpfcftj +$ ls +144915 bdv.snn +170427 rrrj.qfg +287416 tzjthwc +$ cd .. +$ cd nzwbc +$ ls +223973 zvssq.lch +$ cd .. +$ cd .. +$ cd dgpfcftj +$ ls +dir pzfnlzbj +$ cd pzfnlzbj +$ ls +190720 dgpfcftj.ffm +$ cd .. +$ cd .. +$ cd gmlgztg +$ ls +234781 bplz.rdp +29314 nzwbc.mgl +86928 qqb.qmd +262374 rrrj.qlm +$ cd .. +$ cd qflmtrgh +$ ls +dir rrrj +dir wrm +$ cd rrrj +$ ls +dir wftzbw +$ cd wftzbw +$ ls +dir chzs +$ cd chzs +$ ls +dir dfhzcft +$ cd dfhzcft +$ ls +93504 mjrlm +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd wrm +$ ls +13708 jzgqvthh +138652 mlwflb +145161 szfzs.clj +297793 ttbswbhs.ffs +$ cd .. +$ cd .. +$ cd snjv +$ ls +dir grq +92025 nzwbc +dir rrrj +dir wmsl +$ cd grq +$ ls +189188 jzccjh.lsl +dir nzwbc +97611 pngngj +dir tzjthwc +dir wjcjqc +$ cd nzwbc +$ ls +12818 vzc +$ cd .. +$ cd tzjthwc +$ ls +dir cfwvmwr +54762 dgpfcftj +179432 gbt.whg +dir njsfv +220002 whr.jqn +$ cd cfwvmwr +$ ls +227691 pfgmbsjd +$ cd .. +$ cd njsfv +$ ls +39114 fpjqqcsp.czm +289813 mjrlm +279549 qqb.qmd +$ cd .. +$ cd .. +$ cd wjcjqc +$ ls +258155 ttbswbhs.ffs +$ cd .. +$ cd .. +$ cd rrrj +$ ls +277036 bdgws +dir dgpfcftj +269322 dgpfcftj.zgt +dir fsqdnl +33872 qqb.qmd +$ cd dgpfcftj +$ ls +172038 mzjmmddr.fnl +$ cd .. +$ cd fsqdnl +$ ls +250732 zczcgq.lbb +$ cd .. +$ cd .. +$ cd wmsl +$ ls +84076 nzwbc.pmp +196119 rrrj.gph +104986 ttbswbhs.ffs +dir zmvrrdps +$ cd zmvrrdps +$ ls +170723 wmsl.mpg +$ cd .. +$ cd .. +$ cd .. +$ cd vsq +$ ls +136431 hznrlfhh.tnz +195767 mrrc.tst +$ cd .. +$ cd .. +$ cd vgnlftjr +$ ls +29769 mjrlm +53024 wmsl.nhr +123863 wps.hhq +$ cd .. +$ cd vjqzf +$ ls +dir dgpfcftj +dir gnnstzc +45701 lgrst.fhc +265249 spdrmtbd.pnd +182349 ttbswbhs.ffs +$ cd dgpfcftj +$ ls +47874 mvlb.gbn +$ cd .. +$ cd gnnstzc +$ ls +105525 lbqh.pst +13456 rrrj.hlm +62170 vll.cft +$ cd .. +$ cd .. +$ cd zhmgmmv +$ ls +dir fvwm +165656 qtjnmzrd.grm +$ cd fvwm +$ ls +dir dgpfcftj +$ cd dgpfcftj +$ ls +214069 qqb.qmd +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd smvhphf +$ ls +202817 dvtblw.wsr diff --git a/2022/07/main.cpp b/2022/07/main.cpp new file mode 100644 index 0000000..f0c2b79 --- /dev/null +++ b/2022/07/main.cpp @@ -0,0 +1,135 @@ +#include +#include +#include +#include +#include +#include + +enum FileType { + DIR, + ENTRY, +}; + +class File { +public: + File(FileType type, size_t size, const std::string &name): _type(type), _size(size), _name(std::move(name)) {} + void setParent(std::shared_ptr parent) { + _parent = parent; + } + void addChild(std::shared_ptr file, std::shared_ptr parent) { + _children[file->getName()] = file; + _children[file->getName()]->setParent(parent); + } + size_t getTotalSize() const { + size_t size = 0; + for(auto &child : _children) { + size += child.second->getTotalSize(); + } + size += _size; + return size; + } + FileType getType() const { + return _type; + } + const std::string &getName() const { + return _name; + } + std::shared_ptr getParent() const { + return _parent; + } + std::shared_ptr getChild(const std::string &name) const { + if(_children.find(name) != _children.end()) { + return _children.find(name)->second; + } + return nullptr; + } + const std::unordered_map> &getChildren() const { + return _children; + } +private: + FileType _type; + size_t _size; + std::string _name; + std::unordered_map> _children; + std::shared_ptr _parent = nullptr; +}; + +std::shared_ptr getFileSystem( std::ifstream &file ) { + std::shared_ptr root = std::make_shared(DIR, 0, "/"); + std::string str; + std::getline( file, str ); // cd / + std::shared_ptr parent = root; + while ( std::getline( file, str ) ) { + if(str[0] != '$') { + std::stringstream ss( str ); + + FileType type = DIR; + size_t size = 0; + std::string name = ""; + if(str[0] == 'd') { + ss >> name; + ss >> name; + } else { + type = ENTRY; + ss >> size; + ss >> name; + } +// std::cout << "Added (" << (type == DIR ? "DIR" : "FILE") << ", " << size << ", " << name << ") TO PARENT " << parent->getName() << std::endl; + parent->addChild(std::make_shared(type, size, name), parent); + } else if (str[2] == 'c') { + std::string target = str.substr(5); + if(target[0] == '.') { + parent = parent->getParent(); + } else { + parent = parent->getChild(target); + } +// std::cout << "Switching to parent " << parent->getName() << std::endl; + } + } + return root; +} + +size_t part1(std::shared_ptr filesystem) { + std::vector> directories = {filesystem}; + size_t result = 0; + for(size_t i = 0; i < directories.size(); i++) { + auto total_size = directories[i]->getTotalSize(); + if(total_size <= 100000) { + result += total_size; + } + for(const auto &child : directories[i]->getChildren()) { + if(child.second->getType() == DIR) { + directories.push_back(child.second); + } + } + } + return result; +} + +size_t part2(std::shared_ptr filesystem) { + size_t required_free = 30000000 - (70000000 - filesystem->getTotalSize()); + + std::vector> directories = {filesystem}; + size_t min_valid = filesystem->getTotalSize(); + for(size_t i = 0; i < directories.size(); i++) { + auto total_size = directories[i]->getTotalSize(); + if(total_size >= required_free && total_size < min_valid) { + min_valid = total_size; + } + for(const auto &child : directories[i]->getChildren()) { + if(child.second->getType() == DIR) { + directories.push_back(child.second); + } + } + } + return min_valid; +} + +int main() { + std::ifstream input_file( "input" ); + auto filesystem = getFileSystem( input_file ); + std::cout << "Total sum of directories that are smaller than 100000 is \033[91;1m" << part1(filesystem) + << "\033[0m." << std::endl; + std::cout << "The smallest directory required to delete has size \033[91;1m" << part2(filesystem) + << "\033[0m." << std::endl; +}