From b1c5d05eb8e291bde948d4e2fa174e87f2b03964 Mon Sep 17 00:00:00 2001 From: JonOfUs Date: Wed, 7 Dec 2022 13:41:53 +0100 Subject: [PATCH] Day 7 --- res/07/input.txt | 988 +++++++++++++++++++++++++++++++++++++++++++++++ src/days/d07.rs | 60 +++ src/main.rs | 2 +- 3 files changed, 1049 insertions(+), 1 deletion(-) create mode 100644 res/07/input.txt create mode 100644 src/days/d07.rs diff --git a/res/07/input.txt b/res/07/input.txt new file mode 100644 index 0000000..bb6e5f3 --- /dev/null +++ b/res/07/input.txt @@ -0,0 +1,988 @@ +$ cd / +$ ls +dir bqc +dir mwmlf +dir ngn +143562 nrwjb +78449 qqvdcclf +dir qrnm +dir smfzmmhc +116085 tvrms +dir vrdrsj +$ cd bqc +$ ls +5693 qqvdcclf +$ cd .. +$ cd mwmlf +$ ls +dir cmfphpc +dir lqqshq +dir mwmlf +dir rlf +dir smfzmmhc +$ cd cmfphpc +$ ls +235620 tprth.gjn +82743 vrdrsj.fbl +$ cd .. +$ cd lqqshq +$ ls +94188 crswqlvd.nsj +dir dttthls +60078 lbsfsspm +dir lqp +74624 nrwjb +247709 tjhcqw.wrq +267693 tvrms +dir zshrcgfn +$ cd dttthls +$ ls +109072 nrwjb +31512 qqvdcclf +$ cd .. +$ cd lqp +$ ls +237917 nrwjb +45489 vrdrsj.ntw +$ cd .. +$ cd zshrcgfn +$ ls +185533 smfzmmhc.zzd +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +dir bbvhpmsj +dir mwmlf +83589 qqvdcclf +$ cd bbvhpmsj +$ ls +232123 hrvlgmjb.wrv +137190 rlf +21785 tghvbj.mfr +25344 vrdrsj.swp +$ cd .. +$ cd mwmlf +$ ls +dir wnn +$ cd wnn +$ ls +dir thd +$ cd thd +$ ls +36125 lgt +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlf +$ ls +dir fps +128272 lggpfj.gnr +146745 lrdq.zgm +dir mwmlf +266383 mwmlf.wnp +dir ncrlvggp +dir qpgmrj +$ cd fps +$ ls +dir rqjt +dir wpqvmn +$ cd rqjt +$ ls +175784 pcdtdblc.znj +185424 wmstvdt.lhn +$ cd .. +$ cd wpqvmn +$ ls +141743 ljslzhjl +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +169015 rlf +$ cd .. +$ cd ncrlvggp +$ ls +81450 fqtrpm.mqr +146399 jtbr +dir nnqgqqj +288302 qqvdcclf +$ cd nnqgqqj +$ ls +dir fvbhh +$ cd fvbhh +$ ls +121112 zmn.fjz +$ cd .. +$ cd .. +$ cd .. +$ cd qpgmrj +$ ls +dir hrvlgmjb +dir pbc +$ cd hrvlgmjb +$ ls +7858 czvpvwz +$ cd .. +$ cd pbc +$ ls +150816 tprth.gjn +$ cd .. +$ cd .. +$ cd .. +$ cd smfzmmhc +$ ls +dir jwvw +184385 spbjrlv.spt +dir trpdgl +201578 zzhz +$ cd jwvw +$ ls +47747 nrwjb +$ cd .. +$ cd trpdgl +$ ls +136682 mwmlf +$ cd .. +$ cd .. +$ cd .. +$ cd ngn +$ ls +dir fqbph +282363 lscdth.lbj +dir mwmlf +273281 qbpmcqs +7547 qdffbp +223960 tprth.gjn +$ cd fqbph +$ ls +dir bgtbmzj +dir lzjf +12361 nrwjb +dir pdsdttz +150218 pfvtwr.pbf +dir rlf +158227 sfhsszcq.tzv +183244 smfzmmhc.drh +$ cd bgtbmzj +$ ls +dir gvqhtfg +dir jmvzv +194008 ldpfs.qhr +dir mtztr +11099 nfqmvqcm.ftd +dir szp +153379 zrtsd.jwg +$ cd gvqhtfg +$ ls +dir ntq +dir rlf +62076 rlf.nlc +$ cd ntq +$ ls +dir wdtzhz +$ cd wdtzhz +$ ls +dir tlqcbp +$ cd tlqcbp +$ ls +102930 smfzmmhc +$ cd .. +$ cd .. +$ cd .. +$ cd rlf +$ ls +185079 tjhcqw.wrq +$ cd .. +$ cd .. +$ cd jmvzv +$ ls +dir hfmtzbhf +61556 jzbvmc +dir scjpjp +237487 sgh +dir smfzmmhc +$ cd hfmtzbhf +$ ls +dir ldt +136126 tvrms +$ cd ldt +$ ls +dir smfzmmhc +dir wrhpzrfm +dir zbcfv +$ cd smfzmmhc +$ ls +86537 tjhcqw.wrq +$ cd .. +$ cd wrhpzrfm +$ ls +263122 smfzmmhc.shv +73772 tvrms +$ cd .. +$ cd zbcfv +$ ls +dir vrdrsj +$ cd vrdrsj +$ ls +220800 zwdbh +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd scjpjp +$ ls +38282 rlf +93306 rlf.blz +$ cd .. +$ cd smfzmmhc +$ ls +dir gqms +dir mwmlf +21587 nrwjb +184621 zvq.lvr +$ cd gqms +$ ls +dir frbs +dir rlf +$ cd frbs +$ ls +dir mpdll +82901 zdmnm.wlc +$ cd mpdll +$ ls +dir mgqd +dir mrljj +$ cd mgqd +$ ls +75558 vrdrsj.zwc +$ cd .. +$ cd mrljj +$ ls +dir qmsgj +128171 qqvdcclf +245942 rlf.hgt +dir zzvbt +$ cd qmsgj +$ ls +7382 mwmlf +$ cd .. +$ cd zzvbt +$ ls +285714 zltjmn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rlf +$ ls +43731 gttgwfgf.cpd +dir hvtn +112018 jdhb.ssj +195239 rlf.gvd +200476 spsstb +$ cd hvtn +$ ls +dir zzsfgzc +$ cd zzsfgzc +$ ls +116544 vrdrsj +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +dir hmpvn +dir shlnfcpz +$ cd hmpvn +$ ls +55892 qqvdcclf +$ cd .. +$ cd shlnfcpz +$ ls +144766 fnrhmbbm.rnp +2622 tjhcqw.wrq +219884 tprth.gjn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd mtztr +$ ls +dir plngmzl +dir qbwzhr +$ cd plngmzl +$ ls +153434 dhjv.pfn +$ cd .. +$ cd qbwzhr +$ ls +26553 mcb.djg +$ cd .. +$ cd .. +$ cd szp +$ ls +37741 qqvdcclf +dir vrdrsj +$ cd vrdrsj +$ ls +dir hznmsclb +13218 mwmlf.vhs +102602 rggt +228549 rlnf.qrt +$ cd hznmsclb +$ ls +17957 mwmlf.lsv +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd lzjf +$ ls +40821 lfgh.jwg +dir rplfgb +$ cd rplfgb +$ ls +301639 zmrpm.pqn +$ cd .. +$ cd .. +$ cd pdsdttz +$ ls +294779 tprth.gjn +$ cd .. +$ cd rlf +$ ls +37853 qst.zgc +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +dir dqvhgnj +dir fvjtnl +dir jfsgp +230725 tjhcqw.wrq +2872 tvrms +dir zszcsbl +$ cd dqvhgnj +$ ls +214328 bph +138045 tjhcqw.wrq +$ cd .. +$ cd fvjtnl +$ ls +62568 sllvfsf +286839 tjhcqw.wrq +241004 zvqrg.bsg +$ cd .. +$ cd jfsgp +$ ls +116677 tprth.gjn +151347 vtbt +$ cd .. +$ cd zszcsbl +$ ls +97786 hrvlgmjb.wzz +$ cd .. +$ cd .. +$ cd .. +$ cd qrnm +$ ls +70534 nrwjb +292701 qqvdcclf +153174 sjqvgh.nvt +$ cd .. +$ cd smfzmmhc +$ ls +dir gjrqmcjl +63451 hrvlgmjb +dir mwmlf +dir ncgjsjj +246754 nrwjb +dir pvnbj +dir sjqwr +dir vrdrsj +dir vwfnglr +$ cd gjrqmcjl +$ ls +283020 gwcrpgc +36180 ltmzzz +dir tpsr +$ cd tpsr +$ ls +51208 nscwcztf.wlh +121548 smfzmmhc +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +263186 mwmlf.fqd +$ cd .. +$ cd ncgjsjj +$ ls +204801 nrwjb +116293 rdrmctwg.nqc +36548 tjhcqw.wrq +$ cd .. +$ cd pvnbj +$ ls +dir cfmn +dir cnhmcjp +231615 ctllrm +dir czmw +dir drfzgwtz +135330 jsm +dir jtjzwjh +dir nfg +279734 qqvdcclf +220762 tvrms +35964 vrdrsj.jqj +$ cd cfmn +$ ls +300636 frn.ccd +dir qmtc +dir sfvd +$ cd qmtc +$ ls +267669 jwvjslwp.vsp +180586 tvrms +$ cd .. +$ cd sfvd +$ ls +169064 cgzmwg.rgr +dir hsz +270729 qgmmc.sqq +dir qpzbffd +92811 shcpdlm.nwz +dir sstdzdf +dir thrzw +dir wscsr +$ cd hsz +$ ls +301584 qqvdcclf +$ cd .. +$ cd qpzbffd +$ ls +264911 mwmlf.rvg +dir rlf +32109 svhwhw.fdp +155713 tjhcqw.wrq +dir vrdrsj +$ cd rlf +$ ls +32357 tvrms +$ cd .. +$ cd vrdrsj +$ ls +93501 nrwjb +$ cd .. +$ cd .. +$ cd sstdzdf +$ ls +241812 mgrvcbjc.rqb +dir mwmlf +273819 nvrssljz +156873 tvrms +$ cd mwmlf +$ ls +133649 wdfvctwp +$ cd .. +$ cd .. +$ cd thrzw +$ ls +67552 smfzmmhc +$ cd .. +$ cd wscsr +$ ls +132663 dnbvw.zwd +dir ffthd +293463 hrvlgmjb.fwh +dir lhjvfdh +194357 nrwjb +dir smj +56668 tprth.gjn +303099 tvrms +dir vrdrsj +$ cd ffthd +$ ls +84952 nrwjb +192566 rlf +dir slbg +78478 srzz +250044 tprth.gjn +97100 tvrms +$ cd slbg +$ ls +203375 nrwjb +39137 qqvdcclf +$ cd .. +$ cd .. +$ cd lhjvfdh +$ ls +1747 rtphln.pgc +163505 tjhcqw.wrq +76891 tprth.gjn +$ cd .. +$ cd smj +$ ls +6853 hhtdhzgn +158303 pmsflvrn.hnh +$ cd .. +$ cd vrdrsj +$ ls +dir jdlc +263568 vrdrsj +dir vvtl +$ cd jdlc +$ ls +12435 hqggp.lrq +292141 ntbcht.zbw +$ cd .. +$ cd vvtl +$ ls +118913 qqvdcclf +291087 tjhcqw.wrq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd cnhmcjp +$ ls +263233 tjhcqw.wrq +$ cd .. +$ cd czmw +$ ls +dir gdsgw +dir gfd +3390 mwmlf.zss +$ cd gdsgw +$ ls +298839 dbwsmwnb.svt +170672 tprth.gjn +$ cd .. +$ cd gfd +$ ls +193212 tld +$ cd .. +$ cd .. +$ cd drfzgwtz +$ ls +257122 tprth.gjn +$ cd .. +$ cd jtjzwjh +$ ls +dir jhpp +274740 lnrwrpjj +35217 ptzmfsmr.pwc +67549 qpdj.pfc +$ cd jhpp +$ ls +40279 jgstzhw.cbq +$ cd .. +$ cd .. +$ cd nfg +$ ls +126237 mqfl.flt +$ cd .. +$ cd .. +$ cd sjqwr +$ ls +53423 bngqncqn +dir lblv +178935 nrwjb +188826 tprth.gjn +dir vrdrsj +286449 vrdrsj.svn +$ cd lblv +$ ls +dir bptgd +215281 jjvcgb.nwc +dir rlf +300004 tvrms +$ cd bptgd +$ ls +19667 mwmlf +$ cd .. +$ cd rlf +$ ls +dir mwmlf +263985 rbhz.plr +$ cd mwmlf +$ ls +254206 smfzmmhc +$ cd .. +$ cd .. +$ cd .. +$ cd vrdrsj +$ ls +dir vrdrsj +$ cd vrdrsj +$ ls +250310 hrvlgmjb.bbf +130543 mwmlf.lbq +$ cd .. +$ cd .. +$ cd .. +$ cd vrdrsj +$ ls +dir mwwr +dir rlf +$ cd mwwr +$ ls +dir lhz +$ cd lhz +$ ls +dir ssz +dir vrdrsj +$ cd ssz +$ ls +107472 hcnsgjhj +$ cd .. +$ cd vrdrsj +$ ls +303694 rlf +$ cd .. +$ cd .. +$ cd .. +$ cd rlf +$ ls +299875 nrwjb +$ cd .. +$ cd .. +$ cd vwfnglr +$ ls +dir mtvgvvcr +114118 mzhgbj.zvv +273343 tprth.gjn +28259 wgrp +$ cd mtvgvvcr +$ ls +218927 bvlv.npm +64283 hrf.czg +dir mnmqqqgh +103691 qtb.fnb +dir smfzmmhc +252712 zjlgc.sfg +$ cd mnmqqqgh +$ ls +231583 hrvlgmjb.mtq +$ cd .. +$ cd smfzmmhc +$ ls +dir dzjfd +dir jjslqwn +264128 nrwjb +257359 tvrms +$ cd dzjfd +$ ls +dir smfzmmhc +237116 zzgr +$ cd smfzmmhc +$ ls +230613 qqvdcclf +91615 smfzmmhc +$ cd .. +$ cd .. +$ cd jjslqwn +$ ls +98708 mwmlf.qtq +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd vrdrsj +$ ls +dir bfgbvlcd +131293 fgh.djg +125876 lcwjtdf.sbl +dir pnds +263022 tvrms +$ cd bfgbvlcd +$ ls +276134 vrdrsj +$ cd .. +$ cd pnds +$ ls +dir bffz +dir jwcjpt +dir pvnbz +$ cd bffz +$ ls +194315 dndbj.gww +115061 lspnmhml.fdb +239758 tjhcqw.wrq +124732 wjcbcvfd +$ cd .. +$ cd jwcjpt +$ ls +dir dcmcgc +dir llt +dir rfh +dir scljqqq +127542 tvrms +$ cd dcmcgc +$ ls +dir fhdvgvtz +dir hrvlgmjb +dir rlf +dir smfzmmhc +$ cd fhdvgvtz +$ ls +33684 lcl +dir lrsjg +203352 npvgs.qdw +6985 tvrms +102991 wmnrjw.chn +162852 wrcjmll.rlb +$ cd lrsjg +$ ls +dir jgfpvdc +84338 mwmlf.vdw +147349 nrwjb +dir sblp +dir vrdrsj +$ cd jgfpvdc +$ ls +265563 chlgpdsp.hrv +dir dsc +dir gvrg +dir mwmlf +dir qrqvl +100762 rlf +300872 sjvgwmdg.qhg +164004 tzqmh +300736 zhgmdcl.bfq +$ cd dsc +$ ls +284520 rtt.qps +263890 smfzmmhc +$ cd .. +$ cd gvrg +$ ls +dir hzclphlb +dir vcnlmdp +$ cd hzclphlb +$ ls +295429 mcdjsms.zss +$ cd .. +$ cd vcnlmdp +$ ls +dir wrlhqh +$ cd wrlhqh +$ ls +41526 tmf.ctw +$ cd .. +$ cd .. +$ cd .. +$ cd mwmlf +$ ls +dir cwsrt +dir grqng +$ cd cwsrt +$ ls +dir ztmtjwj +$ cd ztmtjwj +$ ls +17063 svdm +$ cd .. +$ cd .. +$ cd grqng +$ ls +216391 tvrms +$ cd .. +$ cd .. +$ cd qrqvl +$ ls +1835 hrvlgmjb +43155 mwmlf.sng +238089 ngjg.zmc +$ cd .. +$ cd .. +$ cd sblp +$ ls +178768 bgfnqf +$ cd .. +$ cd vrdrsj +$ ls +255854 qrrc.bbc +178991 smfzmmhc +$ cd .. +$ cd .. +$ cd .. +$ cd hrvlgmjb +$ ls +dir fjnp +70585 hrvlgmjb +dir qsrgzrdf +43606 rmjzzgrs +dir vds +dir vrdrsj +35098 wthtcg.wgd +$ cd fjnp +$ ls +19740 qqvdcclf +dir smfzmmhc +$ cd smfzmmhc +$ ls +dir nnbc +$ cd nnbc +$ ls +100360 mwmlf +$ cd .. +$ cd .. +$ cd .. +$ cd qsrgzrdf +$ ls +279143 fgthp.qmg +$ cd .. +$ cd vds +$ ls +247595 gnclhrw.mwt +303125 pcdnbq.zbs +38092 tprth.gjn +dir vrdrsj +$ cd vrdrsj +$ ls +dir tnjg +$ cd tnjg +$ ls +37395 brcbr +$ cd .. +$ cd .. +$ cd .. +$ cd vrdrsj +$ ls +94639 tjhcqw.wrq +$ cd .. +$ cd .. +$ cd rlf +$ ls +dir btqjc +108141 dnplntn.mwr +31100 lmfsgd +263849 lpbdq.vdp +109813 smfzmmhc.wsr +dir vrdrsj +$ cd btqjc +$ ls +31933 nwszgpm.qqr +106249 rjqvhccg +16766 vgzqz +$ cd .. +$ cd vrdrsj +$ ls +dir bfv +dir jtnqr +19593 mwmlf +220657 rggqjp.pnt +$ cd bfv +$ ls +48210 tdgd.ppw +232603 tjhcqw.wrq +$ cd .. +$ cd jtnqr +$ ls +dir bct +202702 grstm.ltj +dir mwmlf +258253 tvrms +$ cd bct +$ ls +131860 fwfzsc.pls +42452 thp +$ cd .. +$ cd mwmlf +$ ls +284648 vdjh.dct +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd smfzmmhc +$ ls +dir fvtlvtlq +108335 jdbdb +dir vrdrsj +$ cd fvtlvtlq +$ ls +237419 ctwllbmc +36570 qqvdcclf +dir rlf +92173 smfzmmhc +$ cd rlf +$ ls +89469 dtg.bvl +88361 mqrr +$ cd .. +$ cd .. +$ cd vrdrsj +$ ls +47472 fftpd +53118 qqvdcclf +$ cd .. +$ cd .. +$ cd .. +$ cd llt +$ ls +98255 hnvqtbcn +$ cd .. +$ cd rfh +$ ls +29828 hgwh.tnl +dir rchll +dir smfzmmhc +$ cd rchll +$ ls +240042 rdj.wrv +$ cd .. +$ cd smfzmmhc +$ ls +45192 clnbddrh.lbq +105827 ndzjnttr +140925 nmnr.lct +dir rlf +238998 tprth.gjn +dir vrdrsj +$ cd rlf +$ ls +115973 mnnr.smj +75630 zld.hzv +$ cd .. +$ cd vrdrsj +$ ls +302512 phmvhpvb.fwh +dir tjrpwhc +$ cd tjrpwhc +$ ls +13802 hrvlgmjb +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd scljqqq +$ ls +228515 hrvlgmjb.nhn +246019 mwmlf +9535 mwmlf.nvm +$ cd .. +$ cd .. +$ cd pvnbz +$ ls +dir hrvlgmjb +279877 mwmlf +dir zdqprndl +278221 zwwtflb +$ cd hrvlgmjb +$ ls +dir vggpr +$ cd vggpr +$ ls +270197 cpzj +$ cd .. +$ cd .. +$ cd zdqprndl +$ ls +197398 tprth.gjn diff --git a/src/days/d07.rs b/src/days/d07.rs new file mode 100644 index 0000000..c45a109 --- /dev/null +++ b/src/days/d07.rs @@ -0,0 +1,60 @@ +use std::{fs, collections::HashMap}; + +pub fn solve() { + let path = "res/07/input.txt"; + + let contents = fs::read_to_string(path).expect("I/O error, wrong path?"); + + let cont_arr = contents.split("\n").collect::>(); + + // Hashmap containing all folders and their sizes + let mut paths = HashMap::::new(); + // Vec containing the current path only + let mut path = Vec::<&str>::new(); + + // Put all paths into the HashMap, add sizes to all parent paths as well + cont_arr.iter() + .filter(|line| **line != "") // remove last line + .for_each(|line| { + let words = line.split(" ").collect::>(); + if line.starts_with("dir ") { } // ignore + else if line.starts_with("$ ls") { } // ignore + else if line.starts_with("$ cd ..") { // go folder up by deleting deepest folder + path.pop(); + } + else if line.starts_with("$ cd") { // add new folder to path + path.push(words[2]) + } + else { // file, add filesize to current and all parent paths + let size = words[0].parse::().unwrap(); + for i in 0..path.len() { + let current_path = path[0..i+1].join("/"); + if paths.contains_key(¤t_path) { + *paths.get_mut(¤t_path).unwrap() += size; + } else { + paths.insert(current_path, size); + } + } + } + }); + + // Sum of all paths lower than 100000 is result + let res = paths.iter() + .map(|pair| *pair.1) + .filter(|size| *size <= 100000) + .sum::(); + + println!("Result 1: {}", res); + + // Need to calc how much space needs to be freed + let space_occupied = paths.get("/").unwrap(); + let min_to_delete = 30000000 - (70000000 - space_occupied); + + // Find min folder size higher-or-equal to min_to_delete + let res = paths.iter() + .map(|pair| *pair.1) + .filter(|size| *size >= min_to_delete) + .min().unwrap(); + + println!("Result 2: {}", res) +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index edd2a55..59580e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ pub mod days; fn main() { - days::d06::solve(); + days::d07::solve(); }