diff --git a/rust/day7/input b/rust/day7/input index e69de29..9bade1b 100644 --- a/rust/day7/input +++ b/rust/day7/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 \ No newline at end of file diff --git a/rust/day7/src/main.rs b/rust/day7/src/main.rs index 9d3940a..7982e71 100644 --- a/rust/day7/src/main.rs +++ b/rust/day7/src/main.rs @@ -1,27 +1,28 @@ use std::fs::read_to_string; mod system; +use system::Disk; -fn decode(cmd: Vec<&str>) -> system::Disk { - let mut index = 1; // ignoring the first cd / - let mut disk = system::Disk::new(); +fn decode(cmd: Vec<&str>) -> Disk { + let mut index = 1; // ignoring the first cd / + let mut disk = Disk::new(); while index < cmd.len() { - if cmd[index].contains("ls") { - index +=1; - while (index < cmd.len()) && !(cmd[index].contains("ls") || cmd[index].contains("cd")) { - let info : Vec<&str> = cmd[index].split(' ').collect(); + let mut info: Vec<&str> = cmd[index].split(' ').collect(); + if info[1] == "ls" { + index += 1; + while (index < cmd.len()) && (!(cmd[index].as_bytes()[0] == ('$' as u8))) { + info = cmd[index].split(' ').collect(); match info[0] { "dir" => disk.create_directory(info[1]), - &_ => disk.create_file(info[0].parse::().unwrap(),info[1]) + &_ => disk.create_file(info[0].parse::().unwrap(), info[1]), } - index +=1; + index += 1; } - } else if cmd[index].contains("cd") { - let info : Vec<&str> = cmd[index].split(' ').collect(); + } else if info[1] == "cd" { match info[2] { ".." => disk.goto_parent(), - &_ => disk.change_directory(info[2]) + &_ => disk.change_directory(info[2]), } - index +=1; + index += 1; } else { index += 1; } @@ -29,8 +30,26 @@ fn decode(cmd: Vec<&str>) -> system::Disk { disk } +fn list_dirs(disk: &Disk, max: u64) -> u64 { + let mut sum = 0; + for iter in disk + .get_directories() + .iter() + .filter(|dir| disk.get_size(dir) <= max) + { + println!( + "dir: {} with size: {}", + disk.get_path(iter), + disk.get_size(iter) + ); + sum += disk.get_size(iter); + } + sum +} + fn main() { - let file_content = read_to_string("exemple").unwrap(); + let file_content = read_to_string("input").unwrap(); let final_disk = decode(file_content.split("\n").collect()); final_disk.print(); + println!("Total sum: {}", list_dirs(&final_disk, 100000)); } diff --git a/rust/day7/src/system.rs b/rust/day7/src/system.rs index c04ecdf..26b2772 100644 --- a/rust/day7/src/system.rs +++ b/rust/day7/src/system.rs @@ -1,10 +1,10 @@ -#[derive(Debug)] +#[derive(Clone)] pub struct File { size: u64, name: String, } -#[derive(Debug)] +#[derive(Clone)] pub struct Directory { name: String, index: usize, @@ -14,6 +14,7 @@ pub struct Directory { sublevel: u64, } +#[derive(Clone)] pub struct Disk { dir_list: Vec, selected_dir: usize, @@ -37,6 +38,10 @@ impl Directory { name: name.to_string(), }); } + + pub fn get_name(&self) -> &str { + &self.name + } } impl Disk { @@ -65,18 +70,23 @@ impl Disk { } pub fn change_directory(&mut self, name: &str) { - let found_index: usize; - match self.dir_list.iter_mut().find(|dir| dir.name == name) { - None => { - println!("There is no such folder '{}' in the disk.", name); - return; - } - Some(found_dir) => found_index = found_dir.index, + let mut found_indexes: Vec = Vec::new(); + let found: Vec<&mut Directory> = self + .dir_list + .iter_mut() + .filter(|dir| dir.name == name) + .collect(); + if found.is_empty() { + println!("There is no such folder '{}' in the disk.", name); + return; + } + for dir in found.iter() { + found_indexes.push(dir.index) } match self.dir_list[self.selected_dir] .child .iter() - .find(|&&index| index == found_index) + .find(|&index| found_indexes.contains(index)) { None => println!( "There is no such folder '{}' in the directory '{}'", @@ -108,4 +118,34 @@ impl Disk { println!("{}\tFile: {}, size: {}", space, f.name, f.size); } } + + pub fn get_path(&self, dir: &Directory) -> String { + let mut path = dir.name.to_string()+"/"; + let mut index = dir.parent; + while index != 0 { + path += &(self.dir_list[index].name); + path += "/"; + index = self.dir_list[index].parent; + } + path.chars().rev().collect() + } + + pub fn get_directories(&self) -> Vec<&Directory> { + let mut dirvec: Vec<&Directory> = Vec::new(); + for dir in self.dir_list.iter() { + dirvec.push(dir); + } + dirvec + } + + pub fn get_size(&self, dir: &Directory) -> u64 { + let mut size = 0; + for f in &dir.files { + size += f.size; + } + for index in &dir.child { + size += self.get_size(&self.dir_list[*index]); + } + size + } }