From 6228313f044117385bd486482ef35418374cb687 Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Thu, 8 Dec 2022 13:48:00 +0100 Subject: [PATCH] aoc2022 day08 --- README.md | 6 + src/aoc2022/day07/input.txt | 987 ++++++++++++++++++++++++++++++++++++ src/aoc2022/day07/mod.rs | 168 ++++++ src/aoc2022/mod.rs | 1 + src/main.rs | 3 + 5 files changed, 1165 insertions(+) create mode 100644 src/aoc2022/day07/input.txt create mode 100644 src/aoc2022/day07/mod.rs diff --git a/README.md b/README.md index a326bb2..685691e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # Advent of Code My attempt to these festival coding challenges. Written in Rust. + +Website: https://adventofcode.com/ + +## Useful Ressources +- [The Rust Programming Lanuage](https://doc.rust-lang.org/stable/book/) +- [Programming Rust, 2nd Edition (Book)](https://www.oreilly.com/library/view/programming-rust-2nd/9781492052586/) diff --git a/src/aoc2022/day07/input.txt b/src/aoc2022/day07/input.txt new file mode 100644 index 0000000..5203bf3 --- /dev/null +++ b/src/aoc2022/day07/input.txt @@ -0,0 +1,987 @@ +$ cd / +$ ls +dir bnl +dir dmpsnhdh +272080 dncdssn.hdr +dir fcnqg +6067 hjpmqrq +dir jvwtm +dir ldztz +dir lmmw +dir wthvqw +dir zpdnprb +$ cd bnl +$ ls +dir dhw +dir dmpsnhdh +dir lmw +dir vgbqbrst +$ cd dhw +$ ls +237421 vccwmhl +$ cd .. +$ cd dmpsnhdh +$ ls +dir chf +dir mjpbhjm +dir zwhpwp +$ cd chf +$ ls +4679 lmw.wmp +217367 wwnfv.qqr +dir zfgznbz +$ cd zfgznbz +$ ls +179409 cnj.gdn +171574 vglqg +$ cd .. +$ cd .. +$ cd mjpbhjm +$ ls +dir crf +dir hqnj +dir lmw +18783 lmw.rwr +302608 twpq +166891 vqczlg +$ cd crf +$ ls +32183 dltmqht +240428 frqqdsr.hbf +224910 sgtnrvrt +$ cd .. +$ cd hqnj +$ ls +261723 cgstb +77979 dmpsnhdh.cmd +$ cd .. +$ cd lmw +$ ls +50307 fcqrwd +$ cd .. +$ cd .. +$ cd zwhpwp +$ ls +141133 gdngm.mps +$ cd .. +$ cd .. +$ cd lmw +$ ls +dir dvv +267473 jmqgrh.dlz +295139 rrqjwpm +$ cd dvv +$ ls +114536 gmlmbrrw.wdm +102061 lmw +$ cd .. +$ cd .. +$ cd vgbqbrst +$ ls +105102 dmpsnhdh.bgl +269054 gmwgjf.fzz +dir jbdtpnw +245266 jzsjvgl +216220 lmw.gtb +dir rflp +dir twpq +$ cd jbdtpnw +$ ls +27543 cjvvmzp +$ cd .. +$ cd rflp +$ ls +137601 frqqdsr.hbf +83444 rrqjwpm +$ cd .. +$ cd twpq +$ ls +dir rlbsdj +36846 tnrqzjdd +$ cd rlbsdj +$ ls +56078 bvndq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd dmpsnhdh +$ ls +dir fnpwwhtj +dir lmw +9090 mgjpsvl.jlh +186374 pbb.zln +$ cd fnpwwhtj +$ ls +dir cgp +$ cd cgp +$ ls +81938 hjpmqrq +281971 jvszf +151057 wmr.bnf +$ cd .. +$ cd .. +$ cd lmw +$ ls +dir bfbv +56929 pbb.zln +dir rrqjwpm +dir sngm +$ cd bfbv +$ ls +92667 qrrttb.jgp +$ cd .. +$ cd rrqjwpm +$ ls +25739 cqljn.zqw +91325 dncdssn.hdr +$ cd .. +$ cd sngm +$ ls +282163 jgrj +dir lmw +237524 lmw.dff +153497 lmw.ntg +dir lqd +dir szn +143535 tvpvc.qpr +98326 vbfgh +$ cd lmw +$ ls +32484 dncdssn.hdr +dir glwr +$ cd glwr +$ ls +144719 frqqdsr.hbf +$ cd .. +$ cd .. +$ cd lqd +$ ls +231401 dncdssn.hdr +dir jnjqmvg +dir lmw +199704 rrqjwpm +$ cd jnjqmvg +$ ls +104947 trpsrfjz.brg +$ cd .. +$ cd lmw +$ ls +230298 rrqjwpm.nnv +158947 wfv.qrb +$ cd .. +$ cd .. +$ cd szn +$ ls +197974 frqqdsr.hbf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd fcnqg +$ ls +251609 dncdssn.hdr +289497 jdjmftqs +228459 qbmthcq +$ cd .. +$ cd jvwtm +$ ls +dir dmpsnhdh +47959 pbb.zln +dir tlr +dir twpq +dir wbgcsw +dir zjmldjdh +$ cd dmpsnhdh +$ ls +247567 bnl +102471 bnl.wdm +80054 fhqvp.hfm +dir llhp +dir mnsbh +dir mpplsfjp +20844 mtvl.lmp +$ cd llhp +$ ls +180255 dmpsnhdh +$ cd .. +$ cd mnsbh +$ ls +267627 dmpsnhdh +$ cd .. +$ cd mpplsfjp +$ ls +dir bnl +233742 tcnpvqc.tdr +$ cd bnl +$ ls +243223 fcqrwd +$ cd .. +$ cd .. +$ cd .. +$ cd tlr +$ ls +dir vcsngm +dir wndmt +$ cd vcsngm +$ ls +36434 czs.dnv +$ cd .. +$ cd wndmt +$ ls +dir fvmtfcqd +dir nvdb +dir nwqqgl +dir sbspgnpm +$ cd fvmtfcqd +$ ls +237025 nzttjt.rzh +$ cd .. +$ cd nvdb +$ ls +235328 dnrqwqtp.vfc +51984 rhblt.mfz +51332 rjhvhw +$ cd .. +$ cd nwqqgl +$ ls +203534 cjghw +dir cljbrh +$ cd cljbrh +$ ls +133820 lmw.dnd +$ cd .. +$ cd .. +$ cd sbspgnpm +$ ls +270010 hjpmqrq +$ cd .. +$ cd .. +$ cd .. +$ cd twpq +$ ls +dir dmpsnhdh +dir hbchdjjp +247649 hjpmqrq +29891 rrqjwpm +72407 twpq.crb +$ cd dmpsnhdh +$ ls +251490 dncdssn.hdr +222231 hjpmqrq +102058 pbb.zln +$ cd .. +$ cd hbchdjjp +$ ls +70058 dprrmd.qcd +230958 tsdbl.bnq +$ cd .. +$ cd .. +$ cd wbgcsw +$ ls +292028 bhtfcf +dir bnl +dir bqq +dir ctnlpgt +247888 hblhfvwj +dir hbqm +277949 pbb.zln +106225 rrqjwpm +125927 ssqpmlfb.gwm +dir zqmjwsgz +dir zwwphs +$ cd bnl +$ ls +dir fbbr +240500 frqqdsr.hbf +dir mzfrdl +25137 srqlww.mcj +dir tqgrdz +dir ztrnq +$ cd fbbr +$ ls +84414 mjbw.dhs +$ cd .. +$ cd mzfrdl +$ ls +135647 bccwgn +dir cjdptqgh +dir hwdnrqns +dir prq +$ cd cjdptqgh +$ ls +147946 mdgl.drz +11972 pbb.zln +$ cd .. +$ cd hwdnrqns +$ ls +dir dmpsnhdh +$ cd dmpsnhdh +$ ls +254432 phthmn +$ cd .. +$ cd .. +$ cd prq +$ ls +75827 dmpsnhdh.rtl +$ cd .. +$ cd .. +$ cd tqgrdz +$ ls +251475 bjwnll.rlw +$ cd .. +$ cd ztrnq +$ ls +208497 bnl.dtr +179376 gqnbswcj.hht +$ cd .. +$ cd .. +$ cd bqq +$ ls +202201 bnl.lbm +$ cd .. +$ cd ctnlpgt +$ ls +269484 vsfvzrpr +$ cd .. +$ cd hbqm +$ ls +74455 bvnfz +42748 pbb.zln +$ cd .. +$ cd zqmjwsgz +$ ls +146194 pbb.zln +$ cd .. +$ cd zwwphs +$ ls +209587 mtbzd.nwb +$ cd .. +$ cd .. +$ cd zjmldjdh +$ ls +dir cdq +dir mdclfbs +dir tfc +132043 wrm +$ cd cdq +$ ls +289173 twpq.mrn +$ cd .. +$ cd mdclfbs +$ ls +64639 bnl.jwf +dir hpdgt +72868 hznfj.nmj +159467 lmw.bfz +$ cd hpdgt +$ ls +52760 fcqrwd +54661 tzgt.hvh +$ cd .. +$ cd .. +$ cd tfc +$ ls +185481 bwntlh +18925 fcqrwd +$ cd .. +$ cd .. +$ cd .. +$ cd ldztz +$ ls +128430 bwz.fcz +dir dmpsnhdh +dir lbqgz +dir znrnj +$ cd dmpsnhdh +$ ls +238193 dncdssn.hdr +285939 hwfngq.dpw +$ cd .. +$ cd lbqgz +$ ls +171931 vgrp +$ cd .. +$ cd znrnj +$ ls +153738 vmwwbjqd +$ cd .. +$ cd .. +$ cd lmmw +$ ls +dir bqqnsfdj +163303 fcqrwd +43453 frqqdsr.hbf +33319 hjpmqrq +dir rlpcqtzg +$ cd bqqnsfdj +$ ls +dir bnl +2251 hjpmqrq +14707 rrqjwpm +dir tlnbvhdl +$ cd bnl +$ ls +33357 bnl.fqp +151237 bnl.vbs +40294 dmpsnhdh.hwz +76455 dncdssn.hdr +290341 hjpmqrq +dir lmw +dir nqw +$ cd lmw +$ ls +dir sfj +$ cd sfj +$ ls +156532 fcqrwd +$ cd .. +$ cd .. +$ cd nqw +$ ls +59928 dncdssn.hdr +$ cd .. +$ cd .. +$ cd tlnbvhdl +$ ls +183301 hjpmqrq +$ cd .. +$ cd .. +$ cd rlpcqtzg +$ ls +258638 dqt.mlc +$ cd .. +$ cd .. +$ cd wthvqw +$ ls +224501 pbb.zln +$ cd .. +$ cd zpdnprb +$ ls +dir bnl +dir ffg +dir jljlwpsv +212081 lrzc.lhj +dir rrqjwpm +dir twpq +dir vlgsrtm +$ cd bnl +$ ls +124009 hjgjf +74860 hjpmqrq +84996 lrdl.swf +dir pnzmp +$ cd pnzmp +$ ls +dir btbtlrs +128636 nfzf +$ cd btbtlrs +$ ls +107651 hhzbwd.wzj +$ cd .. +$ cd .. +$ cd .. +$ cd ffg +$ ls +57918 jwzbs.tnt +$ cd .. +$ cd jljlwpsv +$ ls +188175 dmpsnhdh.nnb +46693 fcqrwd +111557 pbb.zln +$ cd .. +$ cd rrqjwpm +$ ls +dir bftw +dir ccsfws +87225 mccw +290654 pbb.zln +147394 twzqc.pbz +52983 wsvgf +dir wwfgbzqh +$ cd bftw +$ ls +dir brl +167154 crs +dir lmw +dir rrqjwpm +dir twpq +174963 twpq.wjl +dir vnfhb +dir wcldzp +$ cd brl +$ ls +297937 wspcnp +$ cd .. +$ cd lmw +$ ls +166695 mcjql.jrv +$ cd .. +$ cd rrqjwpm +$ ls +198762 mwn +$ cd .. +$ cd twpq +$ ls +141835 jlwf.hcd +$ cd .. +$ cd vnfhb +$ ls +128626 tvmwhq.wfn +$ cd .. +$ cd wcldzp +$ ls +dir ncq +dir twpq +$ cd ncq +$ ls +dir wrtw +$ cd wrtw +$ ls +133331 fcqrwd +$ cd .. +$ cd .. +$ cd twpq +$ ls +151811 fcqrwd +$ cd .. +$ cd .. +$ cd .. +$ cd ccsfws +$ ls +100548 twpq.ppm +$ cd .. +$ cd wwfgbzqh +$ ls +dir lmw +dir mfms +dir pjbjgbcl +204154 qtflzwm +226500 vdmjj.htj +dir wzqbwr +$ cd lmw +$ ls +dir bgl +95150 dncdssn.hdr +119653 frqqdsr.hbf +97941 hjpmqrq +dir jqthwzj +$ cd bgl +$ ls +dir lmw +dir rrqjwpm +$ cd lmw +$ ls +233655 wmdldvbz +$ cd .. +$ cd rrqjwpm +$ ls +242918 frqqdsr.hbf +227581 hjpmqrq +dir hsvnmlp +dir nsch +25524 pbb.zln +dir qlgg +dir twpq +67453 twpq.fms +$ cd hsvnmlp +$ ls +264517 pbb.zln +$ cd .. +$ cd nsch +$ ls +7898 cmsdzh +233270 dmpsnhdh.bsq +101256 frl +133902 jzvh.vdv +dir lmw +dir sgjsg +130245 wcftvft +$ cd lmw +$ ls +69572 bnjnc.csp +$ cd .. +$ cd sgjsg +$ ls +38856 tnzpz.tbq +$ cd .. +$ cd .. +$ cd qlgg +$ ls +276013 frbstg.pzb +$ cd .. +$ cd twpq +$ ls +136454 fhwz.bqb +94099 rglp +114026 tsrt.cbd +26252 zhclpzm.rqf +$ cd .. +$ cd .. +$ cd .. +$ cd jqthwzj +$ ls +128200 lmw.btl +$ cd .. +$ cd .. +$ cd mfms +$ ls +274935 dmpsnhdh +76547 lchwq.dsd +215701 pbb.zln +dir rmwtvjt +$ cd rmwtvjt +$ ls +74490 hjpmqrq +$ cd .. +$ cd .. +$ cd pjbjgbcl +$ ls +231757 cjcpwwc.wbf +dir cswvftzs +dir jtvtg +dir lmw +dir tnctbjr +dir tqsrfhdr +$ cd cswvftzs +$ ls +dir dchqnbns +dir smf +$ cd dchqnbns +$ ls +94111 szl.hqs +$ cd .. +$ cd smf +$ ls +dir dlnsgvl +dir zglt +$ cd dlnsgvl +$ ls +dir dsz +$ cd dsz +$ ls +156473 hjpmqrq +$ cd .. +$ cd .. +$ cd zglt +$ ls +295383 frgg.sdp +$ cd .. +$ cd .. +$ cd .. +$ cd jtvtg +$ ls +202254 bftv.rqb +58419 lmw +$ cd .. +$ cd lmw +$ ls +8097 fcqrwd +$ cd .. +$ cd tnctbjr +$ ls +250830 frqqdsr.hbf +dir gzrcqr +$ cd gzrcqr +$ ls +dir fnzgsnv +$ cd fnzgsnv +$ ls +117215 hjpmqrq +$ cd .. +$ cd .. +$ cd .. +$ cd tqsrfhdr +$ ls +96381 lmw +$ cd .. +$ cd .. +$ cd wzqbwr +$ ls +149066 dmpsnhdh.vnd +dir dpbcgfdr +dir swp +14495 twpq.gsb +dir zhj +$ cd dpbcgfdr +$ ls +12909 dmpsnhdh +dir jvn +173491 mnhpr.lpr +222018 rfqfjmd.jqq +205077 wbbdrpr.hzj +dir wzpbbbhm +$ cd jvn +$ ls +117656 vqddrqlq.nfd +233109 vqqvh.swz +$ cd .. +$ cd wzpbbbhm +$ ls +143534 pbb.zln +$ cd .. +$ cd .. +$ cd swp +$ ls +131295 pbb.zln +$ cd .. +$ cd zhj +$ ls +166268 pbb.zln +33734 rrqjwpm.blg +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd twpq +$ ls +dir bppvlwqs +dir bvh +dir rmcdr +dir tdn +2230 whb.lfb +dir wwtwnvh +$ cd bppvlwqs +$ ls +195026 hvlhgsw +279259 rrqjwpm +$ cd .. +$ cd bvh +$ ls +dir lmw +$ cd lmw +$ ls +66958 pdqnd +$ cd .. +$ cd .. +$ cd rmcdr +$ ls +dir dmpsnhdh +182930 grj +dir pmrdhrth +119725 qpcqclqh +77890 sjgfjz +142855 twpq +dir zbmcrvbh +$ cd dmpsnhdh +$ ls +dir rrqjwpm +188474 zgjzpbl.vgv +$ cd rrqjwpm +$ ls +dir bnl +dir lmw +7598 vsntvs.pdv +$ cd bnl +$ ls +245600 lmw.mgf +$ cd .. +$ cd lmw +$ ls +73396 hjpmqrq +$ cd .. +$ cd .. +$ cd .. +$ cd pmrdhrth +$ ls +173155 rrqjwpm.pjw +178530 smgpzs.qtj +$ cd .. +$ cd zbmcrvbh +$ ls +124201 fcqrwd +135578 hjpmqrq +54356 hnztplsp.qlh +dir lmw +58350 pbb.zln +dir qfrvdm +dir rcg +15267 rwbzjpt.djn +$ cd lmw +$ ls +dir bbbll +28362 bfgfwlf.wvg +229637 dmpndms.fln +146121 dncdssn.hdr +131039 frqqdsr.hbf +152805 hjpmqrq +dir mlz +$ cd bbbll +$ ls +169940 dncdssn.hdr +216888 pbb.zln +248369 tjpmlr.vmf +$ cd .. +$ cd mlz +$ ls +115167 bhfv.fts +$ cd .. +$ cd .. +$ cd qfrvdm +$ ls +284564 pbb.zln +$ cd .. +$ cd rcg +$ ls +dir sqzjz +$ cd sqzjz +$ ls +116435 jrstpcpl.zsq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd tdn +$ ls +143971 cmg +133317 fcqrwd +dir pstpclp +133161 tddv +$ cd pstpclp +$ ls +267351 hjpmqrq +86930 rrqjwpm.dvl +$ cd .. +$ cd .. +$ cd wwtwnvh +$ ls +256584 frqqdsr.hbf +114564 twpq.wrd +$ cd .. +$ cd .. +$ cd vlgsrtm +$ ls +148089 bnl.jzj +119796 cjfphsfw.hnd +197668 cpw +dir dmpsnhdh +dir fjsglr +dir lmw +dir lqgrft +9231 pltdltrs +dir rmdp +109777 rncfff.fll +dir vgjzqjpq +dir ztnqnfnq +$ cd dmpsnhdh +$ ls +dir lltnrdtv +dir scthsg +$ cd lltnrdtv +$ ls +179511 pcvmpz +90913 tbr +$ cd .. +$ cd scthsg +$ ls +dir rrqjwpm +$ cd rrqjwpm +$ ls +188629 fcqrwd +$ cd .. +$ cd .. +$ cd .. +$ cd fjsglr +$ ls +139754 fcqrwd +dir pnsjwfzc +$ cd pnsjwfzc +$ ls +113848 lmw +$ cd .. +$ cd .. +$ cd lmw +$ ls +54999 dmpsnhdh +dir ffhcf +251476 frqqdsr.hbf +dir jpgqspqw +198972 nhfclq.pbh +180380 nqmjnvc.fvr +dir pfsjwmbc +213768 rcvccgcd +$ cd ffhcf +$ ls +40478 svmwstq.sjj +$ cd .. +$ cd jpgqspqw +$ ls +22181 hjpmqrq +$ cd .. +$ cd pfsjwmbc +$ ls +dir bcvchw +$ cd bcvchw +$ ls +225892 bnl.nwc +$ cd .. +$ cd .. +$ cd .. +$ cd lqgrft +$ ls +dir rrqjwpm +dir twpq +$ cd rrqjwpm +$ ls +54786 fcqrwd +3053 tthhqjm.ntd +$ cd .. +$ cd twpq +$ ls +109355 bnl +dir lmw +dir mhgqt +301291 rrqjwpm.lrm +271233 twpq.srp +$ cd lmw +$ ls +dir lmw +dir lngbszqm +$ cd lmw +$ ls +139640 pbb.zln +$ cd .. +$ cd lngbszqm +$ ls +98279 mqvq.gsj +283599 rvjd.dvt +$ cd .. +$ cd .. +$ cd mhgqt +$ ls +208165 fcqrwd +$ cd .. +$ cd .. +$ cd .. +$ cd rmdp +$ ls +dir bqn +170956 fcqrwd +90954 snnttp.gld +$ cd bqn +$ ls +75628 hdrgbrpc +$ cd .. +$ cd .. +$ cd vgjzqjpq +$ ls +dir bnl +dir wpfw +$ cd bnl +$ ls +25911 pbb.zln +$ cd .. +$ cd wpfw +$ ls +247784 bzll.ltc +$ cd .. +$ cd .. +$ cd ztnqnfnq +$ ls +dir dtpzsrfc +214055 srgzhp.nlr +$ cd dtpzsrfc +$ ls +142652 bhgwj + diff --git a/src/aoc2022/day07/mod.rs b/src/aoc2022/day07/mod.rs new file mode 100644 index 0000000..10f95db --- /dev/null +++ b/src/aoc2022/day07/mod.rs @@ -0,0 +1,168 @@ +use std::{ + cell::RefCell, + rc::{Rc, Weak}, +}; + +#[derive(Debug)] +enum NodeType { + File(usize), + Dir(RefCell>>), +} + +#[derive(Debug)] +struct Node { + name: String, + typ: NodeType, + parent: Weak, +} + +impl Node { + fn get_size(&self) -> usize { + let mut size = 0; + + match &self.typ { + NodeType::File(filesize) => size = *filesize, + NodeType::Dir(dir_nodes) => { + for node in dir_nodes.borrow().iter() { + size += node.get_size() + } + } + } + + size + } +} + +fn parse_input(input: &str) -> Rc { + let root_node: Rc = Rc::new(Node { + name: String::from("/"), + typ: NodeType::Dir(RefCell::new(Vec::new())), + parent: Weak::new(), + }); + + let mut current_dir: Rc = root_node.clone(); + + for line in input.lines() { + if line.is_empty() { + continue; + } + + let mut split = line.split_whitespace(); + let first = split.next().unwrap(); + let second = split.next().unwrap(); + + match (first, second) { + ("$", "cd") => { + let next = split.next().unwrap(); + if next != "/" { + match next { + ".." => { + let bla = current_dir.parent.upgrade().unwrap(); + current_dir = bla; + } + dir => { + let mut new_dir = current_dir.clone(); + if let NodeType::Dir(nodes) = ¤t_dir.typ { + new_dir = nodes + .borrow() + .iter() + .find(|n| n.name == dir) + .unwrap() + .clone(); + } + current_dir = new_dir; + } + } + } + } + ("$", "ls") => (), + (typ_size, name) => { + if let Ok(size) = typ_size.parse::() { + let new_node = Node { + name: name.to_string(), + typ: NodeType::File(size), + parent: Rc::downgrade(¤t_dir), + }; + + if let NodeType::Dir(nodes) = ¤t_dir.typ { + nodes.borrow_mut().push(Rc::new(new_node)); + } + } else { + let new_node = Node { + name: name.to_string(), + typ: NodeType::Dir(RefCell::new(Vec::new())), + parent: Rc::downgrade(¤t_dir), + }; + + if let NodeType::Dir(nodes) = ¤t_dir.typ { + nodes.borrow_mut().push(Rc::new(new_node)); + } + } + } + } + } + + root_node +} + +fn find(node: Rc, max_size: usize) -> usize { + let mut total_size = 0; + + if let NodeType::Dir(nodes) = &node.typ { + for node in nodes.borrow().iter() { + if let NodeType::Dir(_) = &node.typ { + let size = node.get_size(); + if size < max_size { + total_size += size; + } + total_size += find(node.clone(), max_size); + } + } + } + + total_size +} + +fn find_best_fit(node: Rc, size: usize) -> usize { + let mut actual_size = usize::MAX; + + if let NodeType::Dir(nodes) = &node.typ { + for node in nodes.borrow().iter() { + if let NodeType::Dir(_) = &node.typ { + let node_size = node.get_size(); + if node_size >= size { + if actual_size > node_size { + actual_size = node_size; + } + let deeper = find_best_fit(node.clone(), size); + + if actual_size > deeper { + actual_size = deeper; + } + } + } + } + } + + actual_size +} + +pub fn task_one(input: &str) -> String { + let root = parse_input(&input); + + // if let NodeType::Dir(nodes) = &root.typ { + // println!("{:?}", nodes.borrow()) + // } + + find(root, 100_000).to_string() +} + +pub fn task_two(input: &str) -> String { + const TOTAL_SPACE: usize = 70_000_000; + const REQUIRED_FREE_SPACE: usize = 30_000_000; + + let root = parse_input(&input); + let required_space = REQUIRED_FREE_SPACE - (TOTAL_SPACE - root.get_size()); + + find_best_fit(root, required_space).to_string() +} diff --git a/src/aoc2022/mod.rs b/src/aoc2022/mod.rs index d945a75..58e7837 100644 --- a/src/aoc2022/mod.rs +++ b/src/aoc2022/mod.rs @@ -4,3 +4,4 @@ pub mod day03; pub mod day04; pub mod day05; pub mod day06; +pub mod day07; diff --git a/src/main.rs b/src/main.rs index 58ea6f7..aeb79cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -54,4 +54,7 @@ fn main() { puzzle = Puzzle { day: 6, year: 2022, task_one: aoc2022::day06::task_one, task_two: aoc2022::day06::task_two }; puzzle.solve_and_print(); + + puzzle = Puzzle { day: 7, year: 2022, task_one: aoc2022::day07::task_one, task_two: aoc2022::day07::task_two }; + puzzle.solve_and_print(); }