6YQWUCPSTE6VUORJBASWKRROOFY3WP37QTXYQNAIDYDTA43FJUKAC $ cd /$ lsdir lhrfs193233 mvsjmrtndir nwhdir pjsddir qfrrtb31987 zzdfcs$ cd lhrfs$ ls197903 hzl.jdj42249 wsbpzmbq.hws$ cd ..$ cd nwh$ ls63077 bgrccm.tqh69961 dznccwl.bnwdir pmdj187013 rsbvj.jtd$ cd pmdj$ ls292527 rlgfd.rrd68737 tbj.grn153072 wsbpzmbq.hws$ cd ..$ cd ..$ cd pjsd$ lsdir czzcslmdir dgwpldir fqgdir lszhdjrdir mmpfdir wtwhzzwz149748 zzdfcs$ cd czzcslm$ ls249237 bvrnzhd.vzp16960 ssvqllt.ccv$ cd ..$ cd dgwpl$ ls23547 brsbfqbm.hlsdir ljzrwpv$ cd ljzrwpv$ lsdir btnzjtlrdir czr$ cd btnzjtlr$ ls191998 tbj.mwg$ cd ..$ cd czr$ lsdir fqg$ cd fqg$ ls276766 llhzr.pjh$ cd ..$ cd ..$ cd ..$ cd ..$ cd fqg$ ls275942 bhcgdir fqgdir gghdbzzdir hswgvpt75273 hzldir lfpblmwtdir sdcwndir wmrwd$ cd fqg$ lsdir bpbtnq267620 btnzjtlr.mgr174395 fqg.vpwdir tfbfgzwdir twhvbbr$ cd bpbtnq$ ls194542 mtztnd.hdb$ cd ..$ cd tfbfgzw$ lsdir cgdlflbt10814 fqg.cqp40235 fztb.jzrdir hzl$ cd cgdlflbt$ ls176005 wsbpzmbq.hws$ cd ..$ cd hzl$ lsdir ccpdpdir hgwpjvndir hzl203730 pbn.rzl88179 tbj295466 zdbmfmzs.jjh$ cd ccpdp$ ls172836 btnzjtlr$ cd ..$ cd hgwpjvn$ ls122725 hnsrdnl.ctv261470 tmgpjbj$ cd ..$ cd hzl$ ls59843 lffmd.fwr$ cd ..$ cd ..$ cd ..$ cd twhvbbr$ ls134874 hnsrdnl.ctv$ cd ..$ cd ..$ cd gghdbzz$ lsdir fqg$ cd fqg$ ls233336 ssvqllt.ccv$ cd ..$ cd ..$ cd hswgvpt$ lsdir fwfhnbcdir hcp221595 hnsrdnl.ctv230875 hzl257695 jbfnlc.qqn126050 tbj.qlcdir wdlh$ cd fwfhnbc$ ls293848 zhz.mff$ cd ..$ cd hcp$ ls288118 gdndr.gwn$ cd ..$ cd wdlh$ ls227328 btnzjtlr.msqdir hzl94325 hzl.wjp272466 zzdfcs$ cd hzl$ ls184779 ssvqllt.ccv$ cd ..$ cd ..$ cd ..$ cd lfpblmwt$ ls151071 ssvqllt.ccv$ cd ..$ cd sdcwn$ ls61632 hzl.mvpdir tbjdir tdwcdir tnjcfdir tstqdt$ cd tbj$ lsdir btnzjtlrdir cwsv1318 tbj293645 wnv$ cd btnzjtlr$ ls2441 hnsrdnl.ctv$ cd ..$ cd cwsv$ ls238930 gwr236116 tlzqtch$ cd ..$ cd ..$ cd tdwc$ lsdir btnzjtlrdir fqgdir zgjpfj$ cd btnzjtlr$ ls177427 tbj.hgf$ cd ..$ cd fqg$ ls241003 dbnwzbn.flv$ cd ..$ cd zgjpfj$ ls249565 fqg238012 tbj.csq$ cd ..$ cd ..$ cd tnjcf$ ls188504 lljwfglp.wnb35384 wsbpzmbq.hws$ cd ..$ cd tstqdt$ lsdir lszhdjr$ cd lszhdjr$ ls252181 ssvqllt.ccv$ cd ..$ cd ..$ cd ..$ cd wmrwd$ ls117914 btnzjtlr224916 hnsrdnl.ctvdir lszhdjr112511 trjm.mrw20365 trn$ cd lszhdjr$ ls183834 sdnlhh.ntt$ cd ..$ cd ..$ cd ..$ cd lszhdjr$ lsdir gjlmsdir hrwjmrwfdir vblznslv$ cd gjlms$ ls301712 bbs.fhqdir btnzjtlr148329 cnvlrpbs.tqvdir hzl107466 hzl.zpsdir jgflpb9865 trjm.mrw$ cd btnzjtlr$ ls60204 nhmc$ cd ..$ cd hzl$ ls99518 lszhdjr.stz$ cd ..$ cd jgflpb$ ls251545 hzl.ncm$ cd ..$ cd ..$ cd hrwjmrwf$ ls65264 btnzjtlr.qgg123207 pqsn30133 zzdfcs$ cd ..$ cd vblznslv$ ls19460 hzl$ cd ..$ cd ..$ cd mmpf$ ls200340 dnsq109756 snl$ cd ..$ cd wtwhzzwz$ lsdir bpwjhpgrdir btnzjtlrdir dgqljsbqdir fqgdir mbbtzgmfdir vvmzhhtvdir wglhbpdir zcwmf$ cd bpwjhpgr$ ls1514 mjczjz$ cd ..$ cd btnzjtlr$ ls209165 lszhdjr$ cd ..$ cd dgqljsbq$ ls160750 btnzjtlrdir fqgdir hrncl5964 hzvr.ftpdir jldnlddj267082 qdc.grf205213 sjpdjt.ngtdir vws175214 wzwwqq.stp$ cd fqg$ lsdir ghsdjhj$ cd ghsdjhj$ ls166720 jqcjngn.fmf298171 zzdfcs$ cd ..$ cd ..$ cd hrncl$ lsdir hzl82355 trjm.mrwdir vrqbf261260 wsbpzmbq.hws18593 wtmlmprg.whh$ cd hzl$ ls344 drndgmgz.flz241877 zzdfcs$ cd ..$ cd vrqbf$ lsdir blfdir pzrfwdir tbj$ cd blf$ ls68629 wdhfbtj.ncc$ cd ..$ cd pzrfw$ lsdir hzldir mdhdir tbj$ cd hzl$ ls12677 gvdh.ltp$ cd ..$ cd mdh$ ls222003 qbvfdv$ cd ..$ cd tbj$ lsdir wtmcqwgp$ cd wtmcqwgp$ lsdir stcgrs$ cd stcgrs$ ls285843 tbj$ cd ..$ cd ..$ cd ..$ cd ..$ cd tbj$ ls173380 mcgzmthd.mdg$ cd ..$ cd ..$ cd ..$ cd jldnlddj$ ls57836 brdtwc.pwsdir fqgdir hzl140902 lbndir qhrcmdir ssrc169907 wsbpzmbq.hws$ cd fqg$ ls273621 pwjr.gwt$ cd ..$ cd hzl$ lsdir fqgdir tbj$ cd fqg$ ls290882 hcf.sqw62759 hlntl.zqg115593 ntgm.wjn64481 qwtv$ cd ..$ cd tbj$ ls199421 gsvpcdm200467 hnsrdnl.ctv9980 lgqgdvwz.zdpdir lqlml19593 pgn51598 tqqbwd$ cd lqlml$ ls92416 fdwgg.rdp279285 zzdfcs$ cd ..$ cd ..$ cd ..$ cd qhrcm$ ls278543 trjm.mrw279502 zzdfcs$ cd ..$ cd ssrc$ ls238789 zfvwwnhl$ cd ..$ cd ..$ cd vws$ ls249170 bgfrhdir ndtnt$ cd ndtnt$ ls5224 qwdnzdq.rfz$ cd ..$ cd ..$ cd ..$ cd fqg$ ls171994 trjm.mrw$ cd ..$ cd mbbtzgmf$ lsdir cfqzlgm57211 ssvqllt.ccvdir tbj$ cd cfqzlgm$ lsdir tlbgq$ cd tlbgq$ ls232962 ssvqllt.ccv$ cd ..$ cd ..$ cd tbj$ ls23083 lszhdjr.lzt$ cd ..$ cd ..$ cd vvmzhhtv$ ls150567 fcpv.vws$ cd ..$ cd wglhbp$ lsdir cjmdir gjhzwdir lmzzlp123986 lszhdjr.hcj275863 lwbz121332 snnhqgp.tdjdir stngvdir wdzvcfmdir wjqztbjdir wzhsq$ cd cjm$ ls300643 jhtjsn.hzm$ cd ..$ cd gjhzw$ lsdir hwljdir tbj$ cd hwlj$ ls280279 ssvqllt.ccv$ cd ..$ cd tbj$ ls88746 ssvqllt.ccv139206 tbj$ cd ..$ cd ..$ cd lmzzlp$ ls9261 btnzjtlrdir fqg128118 fqg.fsf165323 hnsrdnl.ctvdir prvmm$ cd fqg$ ls35303 dcglqd.zrj71812 mvzh32361 ssvqllt.ccv69305 zzdfcs$ cd ..$ cd prvmm$ ls296946 zzdfcs$ cd ..$ cd ..$ cd stngv$ lsdir hgj46259 vlb.ztz25946 zstwl.wgs106712 zzdfcs$ cd hgj$ ls289819 dhwr.mvc85418 dvpvhhgj.fmw108543 fqg.frj229544 pwhwmctv$ cd ..$ cd ..$ cd wdzvcfm$ lsdir sdphr$ cd sdphr$ ls84638 hnsrdnl.ctv$ cd ..$ cd ..$ cd wjqztbj$ ls240174 btnzjtlr.ldw125567 lszhdjr265718 lszhdjr.mmz242407 wzjcc$ cd ..$ cd wzhsq$ lsdir hzl22176 hzl.cpv122990 ldtwhvc.vcv$ cd hzl$ ls309519 plnn.pdn$ cd ..$ cd ..$ cd ..$ cd zcwmf$ lsdir hwq268508 mztd$ cd hwq$ ls189618 trjm.mrw120145 wsbpzmbq.hws$ cd ..$ cd ..$ cd ..$ cd ..$ cd qfrrtb$ lsdir dmntrdir fqgdir gpcvsbpldir hzldir mqbhsdir pgvngjdir pnrdwlqndir qlnwhq$ cd dmntr$ lsdir btnzjtlr141598 fqg.wcw223036 hnsrdnl.ctv96925 qhwmj257697 ssvqllt.ccv184839 vmbfhldv.zgm$ cd btnzjtlr$ ls153689 jnbthqwpdir tcp$ cd tcp$ ls90378 mczzfwsz.hwf$ cd ..$ cd ..$ cd ..$ cd fqg$ lsdir btq51590 fqg176455 gnqsnpj.vshdir mthwtstdir trhzdir zbpjvb$ cd btq$ lsdir bdncdir ttpjdir vftshfd$ cd bdnc$ ls263358 trjm.mrw$ cd ..$ cd ttpj$ ls185501 fqg.dvq151107 ltmmsr.lqddir mbtqmqh231236 sdzp.qhb16601 vfflgw.vrr75487 zbvllh.gqb$ cd mbtqmqh$ lsdir lszhdjr184660 pmwswf.lrmdir tbjdir zqbss262042 zzdfcs$ cd lszhdjr$ lsdir dmc$ cd dmc$ ls173189 mzmr.nrj$ cd ..$ cd ..$ cd tbj$ ls59531 fjqfbq$ cd ..$ cd zqbss$ lsdir btnzjtlrdir lszhdjr14365 sqdj$ cd btnzjtlr$ ls113619 trjm.mrw$ cd ..$ cd lszhdjr$ ls87142 hnsrdnl.ctvdir lszhdjr$ cd lszhdjr$ lsdir jsdrvbhc$ cd jsdrvbhc$ ls210295 hzl$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd ..$ cd vftshfd$ lsdir jjwsdir mvdcjgpdir qflcrlrm$ cd jjws$ ls82848 trjm.mrw$ cd ..$ cd mvdcjgp$ ls231865 lzzl$ cd ..$ cd qflcrlrm$ ls150667 btnzjtlr$ cd ..$ cd ..$ cd ..$ cd mthwtst$ ls26308 lszhdjr.dbb$ cd ..$ cd trhz$ ls16138 swtdz.hdt$ cd ..$ cd zbpjvb$ ls69598 hnsrdnl.ctv96314 tbj.gpj$ cd ..$ cd ..$ cd gpcvsbpl$ lsdir dbssfzqtdir pgndir zfgvldv$ cd dbssfzqt$ ls156599 jcv68192 zzdfcs$ cd ..$ cd pgn$ ls124613 fqg139219 gmnqvlbb.nnf177527 hnsrdnl.ctv116238 hzl.qwmdir tbj69576 zzdfcs$ cd tbj$ ls78863 hnsrdnl.ctvdir lszhdjr$ cd lszhdjr$ ls76043 qjwjw.dbn$ cd ..$ cd ..$ cd ..$ cd zfgvldv$ lsdir tbj$ cd tbj$ ls308796 gqcw.fsm$ cd ..$ cd ..$ cd ..$ cd hzl$ ls50784 btnzjtlr19755 gjbcgphh.rbw169847 lncnj.bct46359 mbrtgldir nlnt269695 wfg.cdn$ cd nlnt$ lsdir cqfzqwrdir dghdqldir fnd159573 hnsrdnl.ctvdir lszhdjr16814 tsm59202 wsbpzmbq.hws22244 zlbj$ cd cqfzqwr$ ls213009 trjm.mrw$ cd ..$ cd dghdql$ ls61202 hnsrdnl.ctv$ cd ..$ cd fnd$ ls237330 hnsrdnl.ctv$ cd ..$ cd lszhdjr$ ls222813 ssvqllt.ccv$ cd ..$ cd ..$ cd ..$ cd mqbhs$ lsdir fqg$ cd fqg$ ls121590 lcwsbvw.jlj13769 zzdfcs$ cd ..$ cd ..$ cd pgvngj$ ls29079 lnfsw.mvddir tbj$ cd tbj$ ls303514 ssvqllt.ccv81789 wsbpzmbq.hws$ cd ..$ cd ..$ cd pnrdwlqn$ ls145498 btnzjtlr.hdq209811 fqgdir gscsq39287 jbln.grcdir lszhdjrdir zcj$ cd gscsq$ lsdir btnzjtlr257666 cmflqncq.csp146453 lszhdjr.jvl21252 ssvqllt.ccvdir vjpgs29627 zjgswm.zmw$ cd btnzjtlr$ ls52870 fqg.bcq131279 hnsrdnl.ctvdir hts180154 plgqz.lfz118677 ssvqllt.ccv143055 zzdfcs$ cd hts$ ls295829 hnsrdnl.ctv$ cd ..$ cd ..$ cd vjpgs$ ls247444 fqg.rjwdir hzl113248 tbj$ cd hzl$ ls91966 ppff.qhn$ cd ..$ cd ..$ cd ..$ cd lszhdjr$ ls290399 grzs.btl11125 gswg110268 mhdfszz.pdhdir mwbjshbdir ndtllttm126485 wsbpzmbq.hws152691 zzdfcs$ cd mwbjshb$ ls119607 rpgml$ cd ..$ cd ndtllttm$ ls5107 qsqqfpc.mzf$ cd ..$ cd ..$ cd zcj$ lsdir gftzs131397 ssvqllt.ccvdir vpqvpmvdir wdqw34540 wsbpzmbq.hws$ cd gftzs$ ls115531 fbjj.vrn$ cd ..$ cd vpqvpmv$ lsdir bfqpwgdc67619 ffbllvdir tzr$ cd bfqpwgdc$ ls144904 fqg.djqdir gbndir jzzdir vtp$ cd gbn$ lsdir btnzjtlr$ cd btnzjtlr$ lsdir dzsbcqjd253792 fqg.fcw209245 fqtqsdrt.pqd303280 nqvqm271246 vchvvq.cft$ cd dzsbcqjd$ ls13953 tbj$ cd ..$ cd ..$ cd ..$ cd jzz$ ls234810 ssvqllt.ccv$ cd ..$ cd vtp$ ls287225 rzqfq.pvj$ cd ..$ cd ..$ cd tzr$ ls135596 bbzlnjtc.fftdir bqfzdir dztgr306047 hnsrdnl.ctv248180 jzdzfdir lszhdjrdir mdsdir nmdcdir qpmt126445 wsbpzmbq.hws191907 zzdfcs$ cd bqfz$ ls137988 fqg122217 lszhdjr.bwc232293 ssvqllt.ccv168937 twrtmwh.ddc$ cd ..$ cd dztgr$ ls23653 qhrp.ljh$ cd ..$ cd lszhdjr$ lsdir ghqljdir qjjvfvdir qsjrnq$ cd ghqlj$ ls184316 ghshmzt.srl258282 nbqndwjdir ndddir tqqlnw68843 trjm.mrw92593 wllcqzfr.mbd$ cd ndd$ ls152924 gvclc77856 llztchwp.jjd$ cd ..$ cd tqqlnw$ ls4090 flvdsc.zsv219378 vgwfn.zjh$ cd ..$ cd ..$ cd qjjvfv$ ls230606 trjm.mrw$ cd ..$ cd qsjrnq$ ls252853 fnnbmt.dtm279660 lszhdjr.rjc$ cd ..$ cd ..$ cd mds$ ls10903 jzwjv$ cd ..$ cd nmdc$ ls114234 hnsrdnl.ctv$ cd ..$ cd qpmt$ ls171542 bvrzgp129238 hnsrdnl.ctv137570 tbj54929 vtcfq.npn44117 zzdfcs$ cd ..$ cd ..$ cd ..$ cd wdqw$ lsdir jmvsdlvdir mjgpdcbl$ cd jmvsdlv$ lsdir flnnqz$ cd flnnqz$ ls224693 flqpwqp.fwn$ cd ..$ cd ..$ cd mjgpdcbl$ ls140928 btnzjtlr.prd$ cd ..$ cd ..$ cd ..$ cd ..$ cd qlnwhq$ lsdir btnzjtlrdir cbhrdir cnbsswdir dwvvdir lszhdjrdir rnhnbsdir sdhqp$ cd btnzjtlr$ ls225671 ssrcp.chb268250 tbj.cfd$ cd ..$ cd cbhr$ ls68468 qdqlml.qrj$ cd ..$ cd cnbssw$ lsdir tbj187921 zscs$ cd tbj$ ls307230 hzldir jbcnnvq228268 lssvr.gfn$ cd jbcnnvq$ ls277047 nztsr$ cd ..$ cd ..$ cd ..$ cd dwvv$ ls267743 btnzjtlrdir fqg68364 qznpsjpdir wdr230595 wsbpzmbq.hws206 wtwwd.jnb$ cd fqg$ ls260003 btnzjtlr.hjn103775 btnzjtlr.ndh200945 trjm.mrwdir twpplmhh$ cd twpplmhh$ lsdir tvrq$ cd tvrq$ ls298383 ssvqllt.ccv$ cd ..$ cd ..$ cd ..$ cd wdr$ ls248357 tbj$ cd ..$ cd ..$ cd lszhdjr$ ls259605 lszhdjr.mvw$ cd ..$ cd rnhnbs$ ls297597 hnsrdnl.ctv$ cd ..$ cd sdhqp$ ls95362 wsbpzmbq.hws
$ cd /$ lsdir a14848514 b.txt8504156 c.datdir d$ cd a$ lsdir e29116 f2557 g62596 h.lst$ cd e$ ls584 i$ cd ..$ cd ..$ cd d$ ls4060174 j8033020 d.log5626152 d.ext7214296 k
module Main whereimport Data.Bifunctor (bimap, first, second)import Data.Functionimport Data.Listimport Data.Charimport Data.Maybeimport Data.Functor.Identityimport qualified Data.Map as Mimport Control.Monad.Stateimport Control.Applicative ((<|>))import Text.ParserCombinators.ReadP hiding (get)import Aocmain :: IO ()main = docontent <- input 7let run = Aoc.run contentrun 1243729 strategyrun 4443914 $ \s -> dolet fstats = filemap slet smallestDir = used fstats >>= return . calculation >>= return . (\x -> M.filter(>=x) fstats) >>= return . snd . minimumBy (compare `on` snd) . M.toAscListfromJust smallestDirwhereneeded = 30000000total = 70000000calculation x = needed - (total - x)used = M.lookup "/"strategy = sum . map snd . M.toAscList . M.filter (<= 100000) . filemapfilemap = snd . snd . runIdentity . statestate = flip runStateT ([], M.empty) . commandscommands = sequence_ . concatMap (map fst) . parseparse = map (readP_to_S mainParse) . linesdata Dir = Dir String [Dir] | File Stringdata Direction = Root | Parent | Path Stringderiving Showtype CurrentPath = [String]type WorkingDirState a = StateT (CurrentPath, M.Map String Int) Identity agoDir :: Direction -> WorkingDirState ()goDir Root = do(_, map) <- getput (["/"], map)goDir Parent = do(cwd, map) <- getput (drop 1 cwd, map)goDir (Path s) = do(cwd, map) <- getput (s:cwd, map)fStat :: Int -> String -> WorkingDirState ()fStat a _ = do(cwd, map) <- getlet dirs = scanr1 (flip pathJoin) cwdlet new = foldl' (\m k -> M.alter (f a) k m) map dirs-- let new' = M.alter (f a) (head dirs) newput (cwd, new)wheref x Nothing = Just xf x (Just old) = Just $ x + oldtest :: Int -> Maybe Int -> Maybe Inttest a Nothing = Just atest a (Just old) = Just $ old + agetCwd :: WorkingDirState StringgetCwd = do(cwd, map) <- getpure . drop 1 . intercalate "/" . reverse $ cwd-- maximumBy (compare `on` snd) . M.toAscList . M.filter (< 100000) . snd . snd . runIdentity . flip runStateT ([], M.empty) . sequence_ . concatMap (map fst)pathJoin :: String -> String -> StringpathJoin xs ys'@(y:ys)| last xs == '/' || y == '/' = xs ++ ys'| otherwise = xs ++ "/" ++ ys'-- ParsersfileName :: Char -> BoolfileName x = isAlpha x || x == '.'dirName :: Char -> BooldirName x = isAlpha x || x `elem` "./"parseCd :: ReadP (WorkingDirState ())parseCd = dostring "$ cd "dir <- munch1 dirNamecase dir of"/" -> pure $ goDir Root".." -> pure $ goDir Parents -> pure $ goDir (Path s)parseEntry :: ReadP (WorkingDirState ())parseEntry = dosize <- read <$> munch1 isDigitskipSpacesname <- munch1 fileNamepure $ fStat size namemainParse :: ReadP (WorkingDirState ())mainParse = parseCd <|> parseEntry