This commit is contained in:
JonOfUs 2022-12-07 13:41:53 +01:00
parent 82ede0ec38
commit b1c5d05eb8
3 changed files with 1049 additions and 1 deletions

988
res/07/input.txt Normal file
View file

@ -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

60
src/days/d07.rs Normal file
View file

@ -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::<Vec<&str>>();
// Hashmap containing all folders and their sizes
let mut paths = HashMap::<String, i32>::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::<Vec<&str>>();
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::<i32>().unwrap();
for i in 0..path.len() {
let current_path = path[0..i+1].join("/");
if paths.contains_key(&current_path) {
*paths.get_mut(&current_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::<i32>();
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)
}

View file

@ -1,5 +1,5 @@
pub mod days; pub mod days;
fn main() { fn main() {
days::d06::solve(); days::d07::solve();
} }