diff --git a/7/input.txt b/7/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..8640db88c2e06f4ef1f0cf44dc4bbe383c7c0079 --- /dev/null +++ b/7/input.txt @@ -0,0 +1,1010 @@ +$ cd / +$ ls +dir cmvqf +dir dcgbjvj +57426 gszshjwr.lrs +dir nsgms +124423 rjqns.prb +dir wqvv +$ cd cmvqf +$ ls +6852 cnsb.cmm +319810 cwqbmjb.vpl +dir dcgbjvj +dir ddnclwtd +dir gccnrw +dir qwzphd +dir rvqwnjv +dir ssmf +107040 trttdw.jsn +dir wcn +296426 wqvv +$ cd dcgbjvj +$ ls +dir dcgbjvj +dir rlvcvj +$ cd dcgbjvj +$ ls +214674 gsqcwfmz.hlm +$ cd .. +$ cd rlvcvj +$ ls +151752 cnsb.cmm +256829 sjlwgf.mqn +$ cd .. +$ cd .. +$ cd ddnclwtd +$ ls +177893 fpwznlp.zsf +$ cd .. +$ cd gccnrw +$ ls +dir mbfw +dir rlvcvj +dir wsrdh +dir wvq +dir zgpdl +$ cd mbfw +$ ls +dir dcgbjvj +dir mhnjvrl +271166 ptrv +$ cd dcgbjvj +$ ls +dir npjmq +$ cd npjmq +$ ls +26712 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd mhnjvrl +$ ls +190094 mgrdrbl.lqg +199191 zgczmvng +22082 zgczmvng.rld +$ cd .. +$ cd .. +$ cd rlvcvj +$ ls +244617 mbjprm +264738 wpgglg +$ cd .. +$ cd wsrdh +$ ls +dir mgmp +111558 vnqmnjpb.bnc +$ cd mgmp +$ ls +dir whzjb +$ cd whzjb +$ ls +235442 mgrdrbl.lqg +63642 sphms.tzw +$ cd .. +$ cd .. +$ cd .. +$ cd wvq +$ ls +23240 dcgbjvj.rwc +79015 hcb +155120 jjc +dir wqvv +207559 wqvv.cwp +$ cd wqvv +$ ls +130961 cnsb.cmm +dir fcl +208524 hgbr.snf +dir lzs +14868 mgrdrbl.lqg +dir sqpgtrn +143653 zgczmvng +$ cd fcl +$ ls +dir jfjgnz +$ cd jfjgnz +$ ls +225416 trttdw.jsn +$ cd .. +$ cd .. +$ cd lzs +$ ls +111949 vtcmf +$ cd .. +$ cd sqpgtrn +$ ls +289955 cnsb.cmm +dir crstpjjv +dir dcgbjvj +6334 nwv.blw +dir vpnhcsfr +$ cd crstpjjv +$ ls +144739 jtcndb.wht +16215 qdccst.dsg +$ cd .. +$ cd dcgbjvj +$ ls +dir bnzmws +dir crstpjjv +82495 fjmbgql +248051 hlcwhnf +145452 qwzjc.sth +dir spmr +268967 wqvv +23371 wqvv.vdm +dir zgczmvng +$ cd bnzmws +$ ls +dir dcgbjvj +dir dgbtqdn +119626 pvgrqjf.ftq +204879 tscrpt.szt +$ cd dcgbjvj +$ ls +152171 msf.qhf +$ cd .. +$ cd dgbtqdn +$ ls +64965 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd crstpjjv +$ ls +97804 mgrdrbl.lqg +88837 trttdw.jsn +$ cd .. +$ cd spmr +$ ls +302501 dcgbjvj +$ cd .. +$ cd zgczmvng +$ ls +dir crstpjjv +187957 prznqbn +$ cd crstpjjv +$ ls +218211 jlb.nvs +$ cd .. +$ cd .. +$ cd .. +$ cd vpnhcsfr +$ ls +220411 qtcdjgz +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zgpdl +$ ls +dir llstdpv +dir rtftjm +$ cd llstdpv +$ ls +318556 qqccwwjf.mbw +$ cd .. +$ cd rtftjm +$ ls +117705 fwphh.zrz +$ cd .. +$ cd .. +$ cd .. +$ cd qwzphd +$ ls +dir crstpjjv +dir fvfmlgql +dir ldbts +dir ljtcgz +dir llvhbzpz +dir plcbgmwc +dir pwp +dir qjstb +58078 wmc +$ cd crstpjjv +$ ls +171196 sbf.vcc +320608 trttdw.jsn +$ cd .. +$ cd fvfmlgql +$ ls +dir hfdnml +298497 trttdw.jsn +$ cd hfdnml +$ ls +43441 crstpjjv.vrr +$ cd .. +$ cd .. +$ cd ldbts +$ ls +211746 crstpjjv +224627 rcw.rcl +$ cd .. +$ cd ljtcgz +$ ls +dir dfrnh +179456 fmbpcdbd.vrl +141254 fpwznlp.zsf +86291 pcmqcl.jmz +266763 pzvg.qcg +dir zjjbjn +$ cd dfrnh +$ ls +dir crstpjjv +$ cd crstpjjv +$ ls +220983 wqvv.hhn +$ cd .. +$ cd .. +$ cd zjjbjn +$ ls +215454 nwcbbv.mbb +$ cd .. +$ cd .. +$ cd llvhbzpz +$ ls +206731 cnsb.cmm +$ cd .. +$ cd plcbgmwc +$ ls +223141 fpwznlp.zsf +dir hplrsb +309856 jhdwr.jfc +dir mhmnmd +218364 mmfzhj.zvg +dir nwnj +316432 trttdw.jsn +dir vrgj +$ cd hplrsb +$ ls +dir lbscwd +dir lsffhj +dir mlfp +dir pqfbf +dir tcvjzzhj +dir wqvv +$ cd lbscwd +$ ls +157261 wvblz.hmp +$ cd .. +$ cd lsffhj +$ ls +171621 crstpjjv +$ cd .. +$ cd mlfp +$ ls +80994 vvjzm.pzt +$ cd .. +$ cd pqfbf +$ ls +67861 ltd.zbw +dir nnsg +dir nwcl +107828 rlvcvj +160956 trttdw.jsn +$ cd nnsg +$ ls +18252 tzcrqv.rsr +$ cd .. +$ cd nwcl +$ ls +38378 cnsb.cmm +217283 dqwpwzz +220081 mgrdrbl.lqg +28106 sbf.vcc +$ cd .. +$ cd .. +$ cd tcvjzzhj +$ ls +152965 dhv +316034 gvtdrj.rft +$ cd .. +$ cd wqvv +$ ls +281962 mfzf.nfn +95321 rlvcvj.zwf +$ cd .. +$ cd .. +$ cd mhmnmd +$ ls +213145 cnsb.cmm +dir hnzcz +273060 mnwhg +dir qcwdvq +318596 trttdw.jsn +$ cd hnzcz +$ ls +177795 fpwznlp.zsf +188898 rlvcvj +317234 wqvv.jsv +dir zgczmvng +$ cd zgczmvng +$ ls +dir qzfw +$ cd qzfw +$ ls +134097 rlvcvj +73145 sbf.vcc +$ cd .. +$ cd .. +$ cd .. +$ cd qcwdvq +$ ls +83084 wqvv +$ cd .. +$ cd .. +$ cd nwnj +$ ls +84366 hgpmqh +317603 mgrdrbl.lqg +$ cd .. +$ cd vrgj +$ ls +136595 fpwznlp.zsf +78517 sbf.vcc +dir wqvv +242465 wqvv.cpl +dir zln +$ cd wqvv +$ ls +3191 sbf.vcc +$ cd .. +$ cd zln +$ ls +dir crstpjjv +$ cd crstpjjv +$ ls +86511 btqgw +17597 rcstn.jpj +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd pwp +$ ls +dir crstpjjv +dir jlqdbv +290915 mgrdrbl.lqg +219909 nfgj +207313 sbf.vcc +dir zpjf +$ cd crstpjjv +$ ls +298992 crnfs.fgn +172934 jqh +$ cd .. +$ cd jlqdbv +$ ls +300436 zgczmvng +$ cd .. +$ cd zpjf +$ ls +78904 sbf.vcc +$ cd .. +$ cd .. +$ cd qjstb +$ ls +dir dtb +dir gcd +dir gmcnhh +85552 htm.lzc +219773 mzb.fvt +208419 schz +$ cd dtb +$ ls +167147 crstpjjv.zlb +$ cd .. +$ cd gcd +$ ls +239595 rlvcvj +$ cd .. +$ cd gmcnhh +$ ls +111653 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd .. +$ cd rvqwnjv +$ ls +59215 cnsb.cmm +37164 jtlcr.rlm +dir mnc +$ cd mnc +$ ls +32159 cnsb.cmm +76204 trttdw.jsn +$ cd .. +$ cd .. +$ cd ssmf +$ ls +dir fvcd +127458 hpdzv +dir jcg +288242 jtjp.mjj +dir jzp +268857 mgrdrbl.lqg +223968 nhfmbvc +dir wqvv +235806 wqvv.fnl +$ cd fvcd +$ ls +26479 wcs.bdp +$ cd .. +$ cd jcg +$ ls +dir nsvtrs +dir zgczmvng +$ cd nsvtrs +$ ls +dir dcgbjvj +$ cd dcgbjvj +$ ls +36633 trttdw.jsn +$ cd .. +$ cd .. +$ cd zgczmvng +$ ls +221381 vszcg.jdb +$ cd .. +$ cd .. +$ cd jzp +$ ls +1957 dcgbjvj +$ cd .. +$ cd wqvv +$ ls +9330 wqvv.pvs +46963 ztlh +$ cd .. +$ cd .. +$ cd wcn +$ ls +dir cqdzdnq +dir cszzg +dir fqmcr +123361 pjfdtvzf.rdf +dir rmrg +dir rsfddzs +dir vqrpdwv +dir wpgddhdq +dir wpgv +$ cd cqdzdnq +$ ls +dir dqhpbsg +dir qlq +dir vfwhcpwl +dir wqvv +dir zpbbspcv +$ cd dqhpbsg +$ ls +245289 glbfq.vpw +51357 vsvvzbns.ftf +$ cd .. +$ cd qlq +$ ls +210318 mqgnjht.vqq +$ cd .. +$ cd vfwhcpwl +$ ls +109892 mmpzcjmp.znn +$ cd .. +$ cd wqvv +$ ls +dir chwdzfsg +dir crstpjjv +dir dcgbjvj +dir rllbccjt +dir rlvcvj +$ cd chwdzfsg +$ ls +108951 fpwznlp.zsf +dir vgc +$ cd vgc +$ ls +273011 fpwznlp.zsf +248078 ntc.ghp +77305 thgbb.mfn +73383 trttdw.jsn +$ cd .. +$ cd .. +$ cd crstpjjv +$ ls +dir qmswb +$ cd qmswb +$ ls +68252 trttdw.jsn +$ cd .. +$ cd .. +$ cd dcgbjvj +$ ls +111 qtcs.llc +dir szzthsmj +$ cd szzthsmj +$ ls +dir qhztdv +dir wqvv +dir zmqrftlm +$ cd qhztdv +$ ls +138433 qrdsrrb.chw +dir rlvcvj +$ cd rlvcvj +$ ls +dir jfcm +dir lzf +249984 rlvcvj.nmb +dir twrs +$ cd jfcm +$ ls +117884 dtrc.wsm +237577 rlvcvj.mhd +$ cd .. +$ cd lzf +$ ls +60342 nrc.clh +$ cd .. +$ cd twrs +$ ls +97201 cnsb.cmm +$ cd .. +$ cd .. +$ cd .. +$ cd wqvv +$ ls +73047 gcqzjf.gcb +$ cd .. +$ cd zmqrftlm +$ ls +dir ltd +$ cd ltd +$ ls +120673 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd rllbccjt +$ ls +299611 cnsb.cmm +dir lnfvlqh +36418 qwh +dir rlvcvj +255907 trttdw.jsn +dir zqvzpv +$ cd lnfvlqh +$ ls +195010 fpwznlp.zsf +72496 llrznf.rwc +dir lvgzb +53126 mgrdrbl.lqg +90191 mnrqtn +310156 nthdm.crh +$ cd lvgzb +$ ls +209837 mgrdrbl.lqg +210074 rwhgmd +70338 sbf.vcc +$ cd .. +$ cd .. +$ cd rlvcvj +$ ls +252080 dcgbjvj +$ cd .. +$ cd zqvzpv +$ ls +249229 zpt.lbc +$ cd .. +$ cd .. +$ cd rlvcvj +$ ls +dir dcgbjvj +dir fdz +$ cd dcgbjvj +$ ls +191363 trttdw.jsn +$ cd .. +$ cd fdz +$ ls +291107 bqsdfc.rcn +dir dcgbjvj +64333 fpwznlp.zsf +dir lfb +280608 mgrdrbl.lqg +125554 trttdw.jsn +$ cd dcgbjvj +$ ls +169326 qwjhpdh +$ cd .. +$ cd lfb +$ ls +35299 zqfnjtr.clt +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd zpbbspcv +$ ls +54549 mgrdrbl.lqg +$ cd .. +$ cd .. +$ cd cszzg +$ ls +dir wqvv +$ cd wqvv +$ ls +136042 crstpjjv.jtq +10879 trttdw.jsn +$ cd .. +$ cd .. +$ cd fqmcr +$ ls +188798 bchvt.dvw +276819 fpwznlp.zsf +dir gdr +dir rlvcvj +5623 zgczmvng.fqs +158621 znddbv +$ cd gdr +$ ls +dir btg +213096 cnsb.cmm +dir dhbcmzbz +$ cd btg +$ ls +dir hjm +$ cd hjm +$ ls +144774 zgczmvng.llz +$ cd .. +$ cd .. +$ cd dhbcmzbz +$ ls +148108 rlvcvj +$ cd .. +$ cd .. +$ cd rlvcvj +$ ls +201103 qrdlf.pvg +272776 vnpgw.wts +153826 zgczmvng +290248 zgczmvng.gsv +$ cd .. +$ cd .. +$ cd rmrg +$ ls +dir jzb +dir nsslsw +dir rlvcvj +$ cd jzb +$ ls +273968 trttdw.jsn +$ cd .. +$ cd nsslsw +$ ls +226370 sbf.vcc +$ cd .. +$ cd rlvcvj +$ ls +294706 gsbqswjj +$ cd .. +$ cd .. +$ cd rsfddzs +$ ls +dir cphvtp +205384 crstpjjv +82103 dfrjwrnz.bfl +dir fntvngpm +297145 pqtrvd +237572 sbf.vcc +dir zgczmvng +$ cd cphvtp +$ ls +dir phvc +$ cd phvc +$ ls +52239 dcgbjvj.lbj +$ cd .. +$ cd .. +$ cd fntvngpm +$ ls +18297 mgrdrbl.lqg +$ cd .. +$ cd zgczmvng +$ ls +dir lzcwf +dir pqmc +179956 tzqjcn +dir zgczmvng +$ cd lzcwf +$ ls +284166 cnsb.cmm +157214 jhmmn.qwn +$ cd .. +$ cd pqmc +$ ls +215883 nlvdqw.jmt +dir qjfr +209722 wqvv.fgg +$ cd qjfr +$ ls +53013 mgrdrbl.lqg +191236 sgmnjc +$ cd .. +$ cd .. +$ cd zgczmvng +$ ls +260649 dglqpjs +141213 mgrdrbl.lqg +$ cd .. +$ cd .. +$ cd .. +$ cd vqrpdwv +$ ls +dir ftw +150895 mgrdrbl.lqg +227641 nbrzfl.dpf +dir nwjdnpdd +$ cd ftw +$ ls +99672 dbsgvvbp +dir dnzld +146730 mgrdrbl.lqg +$ cd dnzld +$ ls +37598 bhjbfl.svw +dir qspsslt +$ cd qspsslt +$ ls +dir vhgpwvf +$ cd vhgpwvf +$ ls +146936 ghgl +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd nwjdnpdd +$ ls +46000 trttdw.jsn +$ cd .. +$ cd .. +$ cd wpgddhdq +$ ls +dir rqgf +$ cd rqgf +$ ls +197374 rlvcvj.fmr +$ cd .. +$ cd .. +$ cd wpgv +$ ls +dir fdh +286086 fpwznlp.zsf +dir pljq +258062 wqvv +dir zgczmvng +$ cd fdh +$ ls +76173 fpwznlp.zsf +230947 nczhtpcn +62630 rlvcvj +$ cd .. +$ cd pljq +$ ls +dir mzmm +41117 rjms.dcg +$ cd mzmm +$ ls +144202 zgczmvng.ttl +$ cd .. +$ cd .. +$ cd zgczmvng +$ ls +dir dncr +dir mcdmfdp +dir pgqglmj +dir qldrmn +$ cd dncr +$ ls +198052 dcgbjvj +dir dqdgft +dir hpmwvnsr +2829 rlvcvj.qwg +$ cd dqdgft +$ ls +dir fng +dir nlsmb +$ cd fng +$ ls +198899 zgczmvng +$ cd .. +$ cd nlsmb +$ ls +257121 gmr.vmg +9276 zsmd.bng +$ cd .. +$ cd .. +$ cd hpmwvnsr +$ ls +241101 jjwqbwl.fpl +64151 wqvv +196139 zgczmvng +$ cd .. +$ cd .. +$ cd mcdmfdp +$ ls +276856 lrgbhq +$ cd .. +$ cd pgqglmj +$ ls +36476 fpwznlp.zsf +$ cd .. +$ cd qldrmn +$ ls +295686 trttdw.jsn +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd .. +$ cd dcgbjvj +$ ls +dir brdfvd +dir crstpjjv +dir fzdqcgv +dir fzw +dir mrllpw +dir wnh +119561 zgczmvng.jsm +$ cd brdfvd +$ ls +272932 mhdjc.mng +dir wqvv +91053 zgczmvng.jwg +$ cd wqvv +$ ls +dir bpplph +121367 jhlqfn.sbs +61760 nsgbt +46653 sbf.vcc +16952 trttdw.jsn +$ cd bpplph +$ ls +1288 rlvcvj +$ cd .. +$ cd .. +$ cd .. +$ cd crstpjjv +$ ls +117722 sbf.vcc +$ cd .. +$ cd fzdqcgv +$ ls +289819 fpwznlp.zsf +$ cd .. +$ cd fzw +$ ls +dir dcgbjvj +dir zsfqwdth +dir zswdl +$ cd dcgbjvj +$ ls +272427 cnsb.cmm +$ cd .. +$ cd zsfqwdth +$ ls +dir bdbgtqjj +dir hcgrqbhl +$ cd bdbgtqjj +$ ls +318980 tnqmspdf.cwd +$ cd .. +$ cd hcgrqbhl +$ ls +135307 fpwznlp.zsf +dir wqvv +$ cd wqvv +$ ls +68708 ctz.wms +149578 wlvdrfsw.qcj +$ cd .. +$ cd .. +$ cd .. +$ cd zswdl +$ ls +259754 cnsb.cmm +$ cd .. +$ cd .. +$ cd mrllpw +$ ls +44007 tvsm +$ cd .. +$ cd wnh +$ ls +dir mjnrmb +156515 wpdhq.hvp +$ cd mjnrmb +$ ls +293592 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd .. +$ cd nsgms +$ ls +dir dnhzj +dir ptc +dir tnfrr +dir vjt +32152 zgczmvng.wmt +$ cd dnhzj +$ ls +281195 flqbvrw.gmf +177042 jjsfrmc.drz +$ cd .. +$ cd ptc +$ ls +dir gjvnrcln +290797 pccmrnn +59802 rzl.tjm +dir zgczmvng +$ cd gjvnrcln +$ ls +dir jph +$ cd jph +$ ls +105648 hflqlwr.mph +158151 hmlqsp +$ cd .. +$ cd .. +$ cd zgczmvng +$ ls +3700 bwn.wqq +240004 jbvhs.chq +224969 mvftsj +$ cd .. +$ cd .. +$ cd tnfrr +$ ls +dir hlbrpt +237956 mgrdrbl.lqg +dir wqvv +$ cd hlbrpt +$ ls +34424 crstpjjv.rlw +dir dzs +275267 mwrvw +313095 nwqzrc.tnf +61808 wzhgm.fft +$ cd dzs +$ ls +274302 cbbvq.vvh +234166 dcgbjvj.cbq +253156 fpwznlp.zsf +7239 nzdbr +$ cd .. +$ cd .. +$ cd wqvv +$ ls +120918 hchsfcp.clm +105770 nfhrd.tts +$ cd .. +$ cd .. +$ cd vjt +$ ls +dir crstpjjv +$ cd crstpjjv +$ ls +81225 fpwznlp.zsf +$ cd .. +$ cd .. +$ cd .. +$ cd wqvv +$ ls +72054 bcld.nwh +284293 cvsmmh +32684 ndgnz +130836 rlvcvj +233437 sbf.vcc +dir szwnlv +$ cd szwnlv +$ ls +133507 bnmhmpr.vww diff --git a/7/sample.txt b/7/sample.txt new file mode 100644 index 0000000000000000000000000000000000000000..09a921e5baa09fbcf5fefb1b3990239c46584073 --- /dev/null +++ b/7/sample.txt @@ -0,0 +1,23 @@ +$ cd / +$ ls +dir a +14848514 b.txt +8504156 c.dat +dir d +$ cd a +$ ls +dir e +29116 f +2557 g +62596 h.lst +$ cd e +$ ls +584 i +$ cd .. +$ cd .. +$ cd d +$ ls +4060174 j +8033020 d.log +5626152 d.ext +7214296 k diff --git a/7/solve.hs b/7/solve.hs new file mode 100644 index 0000000000000000000000000000000000000000..e6dacbfee8822da996a44eadd6fde7cab26fca2b --- /dev/null +++ b/7/solve.hs @@ -0,0 +1,56 @@ +-- Day 7 +{-# LANGUAGE MultiWayIf #-} + +import Data.List +import Data.Char + +cleanUpNav :: [String] -> [String] +cleanUpNav = filter (\x -> not $ "$ cd .." `isInfixOf` x) + +getFilesInDir :: [String] -> [(String, [String])] +getFilesInDir [x] = [] +getFilesInDir (x1:_:xs) = if "cd" `isInfixOf` x1 + then (getDirName x1 "$ cd ", getUntilCommand xs) : getFilesInDir xs + else getFilesInDir xs + +getDirName :: String -> String -> String +getDirName x prefix = if prefix `isPrefixOf` x + then last $ words x + else "" + + +getUntilCommand :: [String] -> [String] +getUntilCommand [x] = [] +getUntilCommand (x:xs) = if head x /= '$' + then x:getUntilCommand xs + else [] + +getFileSize :: String -> Int +getFileSize = read . head . words + +nestedDirName :: String -> String +nestedDirName = last . words + +findDir :: String -> [(String, [String])] -> (String, [String]) +findDir n = head . filter (\(x, _) -> x == n) + +unwrapDir :: String -> [(String, [String])] -> [String] +unwrapDir dirName navStack = snd $ findDir dirName navStack + +filesInNestedDir :: String -> [(String, [String])]-> [String] +filesInNestedDir x stack = if isAlpha (head x) + then unwrapDir (getDirName x "dir ") stack + else [x] + +getTotalFilesForDir :: [String] -> [(String, [String])] -> [[String]] +getTotalFilesForDir [x] stack = [filesInNestedDir x stack] +getTotalFilesForDir (x:xs) stack = filesInNestedDir x stack : getTotalFilesForDir xs stack + +test :: [(String, [String])] -> [(String, [[String]])] +test stack = map (\(x, y) -> (x, getTotalFilesForDir y stack)) stack + +parseInput :: IO [(String, [String])] +parseInput = readFile "./sample.txt" >>= return . getFilesInDir . cleanUpNav . lines + +main :: IO () +main = undefined