From 0547d489ba29dcd078ec06a05701731a3e2d441d Mon Sep 17 00:00:00 2001 From: pegasust Date: Thu, 8 Dec 2022 05:01:20 +0000 Subject: [PATCH] d8: add data --- 2022/d8/data/example.txt | 28 +- 2022/d8/data/submission.txt | 1079 ++++------------------------------- 2022/d8/src/d8.py | 121 +--- 3 files changed, 109 insertions(+), 1119 deletions(-) diff --git a/2022/d8/data/example.txt b/2022/d8/data/example.txt index 09a921e..16d6fbd 100644 --- a/2022/d8/data/example.txt +++ b/2022/d8/data/example.txt @@ -1,23 +1,5 @@ -$ 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 +30373 +25512 +65332 +33549 +35390 diff --git a/2022/d8/data/submission.txt b/2022/d8/data/submission.txt index 1c87c00..d41afd7 100644 --- a/2022/d8/data/submission.txt +++ b/2022/d8/data/submission.txt @@ -1,979 +1,100 @@ -$ cd / -$ ls -dir plws -dir pwlbgbz -dir pwtpltr -dir szn -$ cd plws -$ ls -dir ffpzc -dir frcmjzts -92461 nbvnzg -dir phqcg -21621 vqgsglwq -$ cd ffpzc -$ ls -48459 dzdfc.vqq -143107 jql.jzl -208330 mmnvqn.hqb -290122 svjvhflz -218008 wjlmgq -$ cd .. -$ cd frcmjzts -$ ls -dir bsltmjz -dir jfzgrbm -$ cd bsltmjz -$ ls -34237 dzdfc.vqq -58741 mdgdhqgw -$ cd .. -$ cd jfzgrbm -$ ls -132811 fcmpng -103661 lgt.swt -173031 vqgsglwq -29134 wprjfg.zbr -$ cd .. -$ cd .. -$ cd phqcg -$ ls -955 jgfs.zjw -$ cd .. -$ cd .. -$ cd pwlbgbz -$ ls -dir gbg -dir mjzhcwrd -dir njcscpj -dir sphbzn -dir tbgjpphc -55938 tvrfpczc.djm -4840 twd -$ cd gbg -$ ls -287003 fcsjl.bzm -dir wgq -$ cd wgq -$ ls -22963 fcsjl.fcm -$ cd .. -$ cd .. -$ cd mjzhcwrd -$ ls -228632 clfnpmbq.zmb -28276 dzdfc.vqq -2982 tdbg.wgn -$ cd .. -$ cd njcscpj -$ ls -dir dqzgqgv -275186 ffpzc -192491 gjnflc.plq -$ cd dqzgqgv -$ ls -70309 dzdfc.vqq -56139 fcsjl -142095 sgwz.cdz -dir snjntth -dir sphbzn -284618 wjlmgq -$ cd snjntth -$ ls -51918 ffpzc -dir vrfgfds -$ cd vrfgfds -$ ls -155233 jlscz -$ cd .. -$ cd .. -$ cd sphbzn -$ ls -dir qbzwrrw -dir qwpzn -$ cd qbzwrrw -$ ls -278531 fcsjl.tqj -211591 snjntth.gpd -$ cd .. -$ cd qwpzn -$ ls -174183 vqgsglwq -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd sphbzn -$ ls -185471 bsltmjz.fqz -dir bsvh -dir fvzcs -dir ndw -dir nlml -dir pcbt -286260 zhcmrpvt -$ cd bsvh -$ ls -130814 wjlmgq -$ cd .. -$ cd fvzcs -$ ls -dir cgmv -dir ggzwljr -298241 qvzghdpw.lms -dir snjntth -dir sphbzn -$ cd cgmv -$ ls -46843 dzdfc.vqq -dir lmqcbbm -dir rstcqsmd -215261 snjntth -$ cd lmqcbbm -$ ls -229898 bdmbvgp -25529 ffpzc.stm -16871 lnpjzvg.qlj -$ cd .. -$ cd rstcqsmd -$ ls -289038 zrbbbwng.smf -$ cd .. -$ cd .. -$ cd ggzwljr -$ ls -198200 bcthn -$ cd .. -$ cd snjntth -$ ls -191672 fwp.phf -68229 hzs.zpg -dir pggcwb -222426 qbv.bwj -dir snjntth -155354 vmqcm -$ cd pggcwb -$ ls -154272 fqztwvnv.lvv -dir pdjg -62393 vqgsglwq -dir wjhrtg -$ cd pdjg -$ ls -260644 gvhlrcf -209906 wpls.pbd -$ cd .. -$ cd wjhrtg -$ ls -148640 dljf.zrq -172168 dzdfc.vqq -196203 hjdphcfm -247620 sgwz.cdz -$ cd .. -$ cd .. -$ cd snjntth -$ ls -37467 ndlshlmj.cjq -257404 snjntth.nsf -$ cd .. -$ cd .. -$ cd sphbzn -$ ls -64082 bfdv.lwv -dir bsltmjz -58942 dzdfc.vqq -dir snjntth -$ cd bsltmjz -$ ls -dir bsqqdr -266007 fcsjl.gfm -dir ffpzc -dir frsmrd -72122 nthnhzwf -286705 wjlmgq -$ cd bsqqdr -$ ls -117496 wcqt -$ cd .. -$ cd ffpzc -$ ls -280224 mmnvqn.hqb -105346 vrr -$ cd .. -$ cd frsmrd -$ ls -111509 sphbzn.shz -$ cd .. -$ cd .. -$ cd snjntth -$ ls -177491 mplj -9029 pvbz.jwn -92891 snjntth.zrv -203356 vnnnw.gql -134728 vqgsglwq -$ cd .. -$ cd .. -$ cd .. -$ cd ndw -$ ls -241303 bht.rpj -173068 vqgsglwq -$ cd .. -$ cd nlml -$ ls -228982 hzglfpvq.ftt -114981 sgwz.cdz -$ cd .. -$ cd pcbt -$ ls -dir bsltmjz -dir ffpzc -dir fjsjwfg -dir fwm -dir jvwt -227943 tmr.jdc -dir vwpqzdwh -31258 wjlmgq -$ cd bsltmjz -$ ls -177750 bsltmjz.spj -dir ffpzc -dir flrpwfs -138824 mtmdtcpv.cfj -165770 wzqwczj.qwn -$ cd ffpzc -$ ls -179645 snjntth.dss -$ cd .. -$ cd flrpwfs -$ ls -60566 wvjq.gmm -$ cd .. -$ cd .. -$ cd ffpzc -$ ls -97847 qzhhtmd.bhw -1197 vqgsglwq -$ cd .. -$ cd fjsjwfg -$ ls -152232 dnsdd.jgz -181301 gsb.wsh -dir jqpb -dir jscbg -dir snjntth -227677 snjntth.vvg -dir sphbzn -75358 vqgsglwq -2589 wjlmgq -$ cd jqpb -$ ls -253403 mmnvqn.hqb -108325 rvq.mrc -$ cd .. -$ cd jscbg -$ ls -dir dtm -dir gsdnz -208269 prh -25977 qdzljgh -169262 vmnq.mth -$ cd dtm -$ ls -80072 gzqnb -$ cd .. -$ cd gsdnz -$ ls -dir dsqzjs -297895 sgwz.cdz -129983 vqgsglwq -$ cd dsqzjs -$ ls -2621 jqrlsf.gzs -164844 snjntth -$ cd .. -$ cd .. -$ cd .. -$ cd snjntth -$ ls -118553 cbhql -dir ffpzc -dir snjntth -$ cd ffpzc -$ ls -dir lmn -12104 tvlwn.vhh -$ cd lmn -$ ls -46401 bsltmjz -96888 shrnqhvq -$ cd .. -$ cd .. -$ cd snjntth -$ ls -dir snjntth -dir vlnfhbq -dir wpwl -$ cd snjntth -$ ls -dir ctj -$ cd ctj -$ ls -82485 fcsjl.lfl -$ cd .. -$ cd .. -$ cd vlnfhbq -$ ls -250106 qvf -$ cd .. -$ cd wpwl -$ ls -153950 cmsd.rlg -$ cd .. -$ cd .. -$ cd .. -$ cd sphbzn -$ ls -dir glgq -$ cd glgq -$ ls -285182 wjlmgq -$ cd .. -$ cd .. -$ cd .. -$ cd fwm -$ ls -251865 ffpzc.qgb -279522 zvvpfqtp -$ cd .. -$ cd jvwt -$ ls -48990 bsltmjz.nzp -219604 ffpzc -69573 mvmdfzr.lwb -$ cd .. -$ cd vwpqzdwh -$ ls -267581 pvcch -$ cd .. -$ cd .. -$ cd .. -$ cd tbgjpphc -$ ls -255571 dstpcgr.tfq -dir fdbwbrpp -dir gjzwh -dir hjvrtjt -dir rhzczj -292888 sgwz.cdz -dir wlzhr -149395 wnfzrqgz.dtn -$ cd fdbwbrpp -$ ls -dir ffpzc -dir qbrth -51164 qprp -dir slpt -117026 sphbzn -295685 vqgsglwq -dir znmj -$ cd ffpzc -$ ls -dir jhnzrdvb -$ cd jhnzrdvb -$ ls -217775 ffpzc.sgw -$ cd .. -$ cd .. -$ cd qbrth -$ ls -183969 lpbwgfjv.vcg -47333 wjlmgq -$ cd .. -$ cd slpt -$ ls -32343 tqhtj.jwz -$ cd .. -$ cd znmj -$ ls -55058 mmnvqn.hqb -$ cd .. -$ cd .. -$ cd gjzwh -$ ls -dir dvcbcd -202530 dzdfc.vqq -dir fsgz -dir hfrrqq -54897 jlzn.qsn -16097 ldzqsbb.jzl -225078 pswccrd -dir rqqmldw -292464 rzrdhbp.vld -dir ssqbqqp -dir zsztqrc -$ cd dvcbcd -$ ls -187837 dzdfc.vqq -dir jlwtvf -dir jnjvshs -164053 nrf.fqd -5665 tlp.jmt -13801 wjlmgq -$ cd jlwtvf -$ ls -219985 sphbzn.dvj -$ cd .. -$ cd jnjvshs -$ ls -dir bsltmjz -dir nrpm -$ cd bsltmjz -$ ls -152972 qgdqj -$ cd .. -$ cd nrpm -$ ls -18509 wjlmgq -$ cd .. -$ cd .. -$ cd .. -$ cd fsgz -$ ls -224576 mmnvqn.hqb -$ cd .. -$ cd hfrrqq -$ ls -dir bwgsnfvb -dir fcsjl -294608 ffpzc.gvm -136880 qjcgtw -dir sphbzn -$ cd bwgsnfvb -$ ls -29735 dzdfc.vqq -dir wstmzfml -$ cd wstmzfml -$ ls -158447 bnvhbvvc.nrt -59889 jclclgd -$ cd .. -$ cd .. -$ cd fcsjl -$ ls -138297 ffpzc.szw -$ cd .. -$ cd sphbzn -$ ls -dir wqdths -$ cd wqdths -$ ls -8326 cgvtw.jpz -$ cd .. -$ cd .. -$ cd .. -$ cd rqqmldw -$ ls -226757 dzdfc.vqq -115055 mwb.btc -dir qpts -298524 sgwz.cdz -$ cd qpts -$ ls -60860 bsltmjz.frp -dir fcsjl -94904 sgwz.cdz -dir wnmqqspz -$ cd fcsjl -$ ls -25082 mmnvqn.hqb -$ cd .. -$ cd wnmqqspz -$ ls -165529 sgwz.cdz -$ cd .. -$ cd .. -$ cd .. -$ cd ssqbqqp -$ ls -192477 pvrgm -$ cd .. -$ cd zsztqrc -$ ls -254053 lht.htn -$ cd .. -$ cd .. -$ cd hjvrtjt -$ ls -189942 fwps -$ cd .. -$ cd rhzczj -$ ls -36502 bmtfr -dir ffjz -35148 nctfhmzm.vsz -dir qdgjzcz -208196 rwql -79863 sgwz.cdz -dir snjntth -$ cd ffjz -$ ls -dir grsvhwm -$ cd grsvhwm -$ ls -50231 fwj.rdv -dir snjntth -$ cd snjntth -$ ls -dir dtbgb -$ cd dtbgb -$ ls -150245 vdflm.lmq -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd qdgjzcz -$ ls -222389 dzdfc.vqq -$ cd .. -$ cd snjntth -$ ls -56794 mmnvqn.hqb -$ cd .. -$ cd .. -$ cd wlzhr -$ ls -116628 bsltmjz -60122 jqpbsgnr.fgb -252605 lfss -300065 qwjdl.vhr -$ cd .. -$ cd .. -$ cd .. -$ cd pwtpltr -$ ls -dir dplsvrhl -140951 gwtfzqvd.znb -dir jbvdb -dir jst -dir qhjv -dir snjntth -$ cd dplsvrhl -$ ls -272101 fcsjl -dir ffpzc -58852 mmnvqn.hqb -dir mnhntjz -91899 sgwz.cdz -228077 snjntth.btv -$ cd ffpzc -$ ls -5499 bsltmjz -dir qmfwpjhl -dir rsrb -dir wgt -$ cd qmfwpjhl -$ ls -300362 dzdfc.vqq -$ cd .. -$ cd rsrb -$ ls -252983 dzdfc.vqq -107744 ltssrgqb.zvj -214895 rhglgcwr.wpw -249727 sgwz.cdz -$ cd .. -$ cd wgt -$ ls -141984 dzdfc.vqq -194686 mmnvqn.hqb -258023 pgr -$ cd .. -$ cd .. -$ cd mnhntjz -$ ls -dir bdvght -dir jprwchh -dir snjntth -$ cd bdvght -$ ls -243166 vpsvjdq.wsn -$ cd .. -$ cd jprwchh -$ ls -178943 bmpc.bjb -$ cd .. -$ cd snjntth -$ ls -dir nlbm -dir zjmjntff -$ cd nlbm -$ ls -33050 fcsjl.rcc -dir sphbzn -17446 wjlmgq -$ cd sphbzn -$ ls -214563 prrfhff.pbp -$ cd .. -$ cd .. -$ cd zjmjntff -$ ls -82134 sgwz.cdz -52203 vrtlgdq.crp -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd jbvdb -$ ls -dir wmtjh -$ cd wmtjh -$ ls -dir ggvwn -$ cd ggvwn -$ ls -192285 spqvmf.sdh -$ cd .. -$ cd .. -$ cd .. -$ cd jst -$ ls -dir bsltmjz -212740 dzdfc.vqq -dir gncztvtb -dir jsqjcqnt -286257 jvs -36654 sdcsm.mbg -192040 sgwz.cdz -dir tbqphzb -dir vdcqgts -285843 wjlmgq -$ cd bsltmjz -$ ls -215705 snjntth.gpv -213665 wjlmgq -$ cd .. -$ cd gncztvtb -$ ls -229298 vqgsglwq -$ cd .. -$ cd jsqjcqnt -$ ls -dir bsltmjz -dir fcsjl -dir ffpzc -dir sphbzn -70864 vqgsglwq -$ cd bsltmjz -$ ls -14981 pqzffzjc -$ cd .. -$ cd fcsjl -$ ls -140328 jwhczwbc -$ cd .. -$ cd ffpzc -$ ls -213650 mmnvqn.hqb -$ cd .. -$ cd sphbzn -$ ls -dir psmtphhq -dir sphbzn -$ cd psmtphhq -$ ls -dir ffpzc -123131 tzgwd -$ cd ffpzc -$ ls -49737 cfngvmd -dir gcnrp -172799 gmd.cwl -dir llnztjf -dir nbqs -79661 rrqz -$ cd gcnrp -$ ls -283 vqnrgl.vwp -$ cd .. -$ cd llnztjf -$ ls -63263 tjhm.bwh -$ cd .. -$ cd nbqs -$ ls -dir vssmq -$ cd vssmq -$ ls -88980 dzdfc.vqq -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd sphbzn -$ ls -20140 fcsjl.zrs -260579 snjntth -$ cd .. -$ cd .. -$ cd .. -$ cd tbqphzb -$ ls -93470 sgwz.cdz -$ cd .. -$ cd vdcqgts -$ ls -223564 dzdfc.vqq -dir ffpzc -dir gwhfgwf -dir nbjtqnng -dir snjntth -$ cd ffpzc -$ ls -42813 qwwmw.nmt -$ cd .. -$ cd gwhfgwf -$ ls -59918 jvfv.mpm -dir mjl -211039 pcwl -$ cd mjl -$ ls -13004 pgjb.tpq -195995 tms.fjz -$ cd .. -$ cd .. -$ cd nbjtqnng -$ ls -107058 dzdfc.vqq -dir ldrsd -111631 vqgsglwq -104599 wbzmdljw.tjq -155747 wjlmgq -$ cd ldrsd -$ ls -107439 jvjm -$ cd .. -$ cd .. -$ cd snjntth -$ ls -242680 fgrt.gng -$ cd .. -$ cd .. -$ cd .. -$ cd qhjv -$ ls -dir bmnm -68453 hjjpdgn.hwl -dir sjlbj -dir vqnrj -$ cd bmnm -$ ls -1238 vqgsglwq -$ cd .. -$ cd sjlbj -$ ls -44239 wzzbtmrz.gml -$ cd .. -$ cd vqnrj -$ ls -3286 bsltmjz.qlc -$ cd .. -$ cd .. -$ cd snjntth -$ ls -130833 blm.wmt -dir snjntth -dir tcnmbcgg -218869 wjlmgq -$ cd snjntth -$ ls -dir snmrdfbt -$ cd snmrdfbt -$ ls -281025 bzrsds.lfg -$ cd .. -$ cd .. -$ cd tcnmbcgg -$ ls -194998 fcsjl -dir qdrmpqgn -dir rzqd -dir tcsds -$ cd qdrmpqgn -$ ls -165713 qmzgt.tnc -$ cd .. -$ cd rzqd -$ ls -dir cwhnmlv -57819 fcsjl -246864 pjnzdvd.gjm -$ cd cwhnmlv -$ ls -287539 mmnvqn.hqb -215636 pbnjt.zbn -124638 sqd -$ cd .. -$ cd .. -$ cd tcsds -$ ls -78812 gfmgb.wqj -218987 hnhfvz.dln -209640 mzzhqlq.zqp -102492 nml.ppg -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd szn -$ ls -dir fcsjl -dir snjntth -dir zjbp -$ cd fcsjl -$ ls -158019 jsv.pmz -$ cd .. -$ cd snjntth -$ ls -229510 dfvpvp -191061 fgplbptq.jlt -dir lfb -234911 lfsrwr.wcb -dir lrfcgzl -48031 stbbw -219691 vqgsglwq -dir zshh -$ cd lfb -$ ls -dir btj -99591 dhrjbvvg.gwm -137224 dzdfc.vqq -201972 jtzmqsvj.wnd -9704 mmnvqn.hqb -dir pwg -200308 snjntth.css -dir wcmhcfm -dir zwhvmln -$ cd btj -$ ls -dir rnbzdfgn -51799 wdhsm -dir wvf -$ cd rnbzdfgn -$ ls -117095 bsltmjz.tlv -$ cd .. -$ cd wvf -$ ls -dir ffpzc -dir ncbmgpsc -dir wtwrmjnt -$ cd ffpzc -$ ls -249919 lsth.fmf -$ cd .. -$ cd ncbmgpsc -$ ls -147899 dzdfc.vqq -$ cd .. -$ cd wtwrmjnt -$ ls -252366 pvpdv.jwz -$ cd .. -$ cd .. -$ cd .. -$ cd pwg -$ ls -280845 fcsjl.fjz -44300 sgwz.cdz -dir snjntth -229605 vqgsglwq -$ cd snjntth -$ ls -2053 pflvsnzs -143522 sgwz.cdz -$ cd .. -$ cd .. -$ cd wcmhcfm -$ ls -229329 qsznhwlw.vjg -$ cd .. -$ cd zwhvmln -$ ls -dir ffpzc -dir tjjzbf -dir wzcq -$ cd ffpzc -$ ls -dir ncnj -37497 vqgsglwq -$ cd ncnj -$ ls -40920 htbjhjq -$ cd .. -$ cd .. -$ cd tjjzbf -$ ls -47522 mczn.spd -$ cd .. -$ cd wzcq -$ ls -56662 ffpzc.vwp -dir snjntth -$ cd snjntth -$ ls -117276 wjlmgq -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd lrfcgzl -$ ls -267485 rsjmpph.qqz -$ cd .. -$ cd zshh -$ ls -dir ffpzc -dir gmn -dir snjntth -150048 tgtlh -32020 thfr -72152 vqgsglwq -$ cd ffpzc -$ ls -dir snjntth -$ cd snjntth -$ ls -224945 dpfpz -$ cd .. -$ cd .. -$ cd gmn -$ ls -238996 sgwz.cdz -$ cd .. -$ cd snjntth -$ ls -86775 dzdfc.vqq -19560 vshcmjj -$ cd .. -$ cd .. -$ cd .. -$ cd zjbp -$ ls -dir fcsjl -41522 nlvpb.fpf -dir nmtjtd -$ cd fcsjl -$ ls -276802 fcsjl.psm -197934 sgwz.cdz -$ cd .. -$ cd nmtjtd -$ ls -47477 dvqmqlgw.ths -51081 vqgsglwq +133120320210233440424211425033311533112110111336536142004454550513525522325223123404213204010312200 +201131111014211324423255354022022243226445013613610423653614522135534505055120330313403031333103010 +312033232323231244025301315245341424106564334260061464515142114141551050411122254121204214442432210 +101223224313414001513045124413405604251532415616200623342234245060512030200002055453441222043022132 +302000022010423415300513533001221654231646352603366222420353100303160621313144421120541324031322221 +022041343104313414435021243154525050055065506466215004364316065443031303052541012204020300331224312 +103341401201343234101335152026143021665443260024145323023321363412215203352344024010350241320230403 +113420142141151035404302242616255522460104100534576523546245441245051223305614204355454223220120301 +141313120334140413444311032422155464031057323373712672513175353623531154646460010504312302300002224 +222122233241135333145102102244620325637577115357373355166254434732406430504542404102101335430322111 +303334221050505214133200215501142243567431213624743475716112467711442460620524310041114411011423020 +314200333004550151023253063621162447552734266222424315622125733562141045411643325165010440012411104 +002041023423222500521530364652321342767176666734452465675417573276212213343035032650010252311440041 +424112310115314154624123026322722176144615437667237551164455332134452657635041110204303331153310423 +403331525242111322464321027125164326531546671615634451453753666614652523355664316050035035431040223 +043240150545010061116502263626227235517673287377662722735257631252161774623714640414211242003124031 +120153432445266666010553121747235535567222344854553227754373283562766712275433030145041514430322020 +130205252451225625553367153422361135376345652238658565468884466665635712475577163231554521534443142 +111112125502543266131422234726554665525278247588365447865236325776254766323137341434403365242323513 +303144132003506154604725457356146262354554756268227328243768455722852644644163423635454133132303535 +355321430425362320027571672735837582654822875282477453446323242873743335342262324741355251635040132 +134315335666154514547724226424352647855667536237263286847676436882327536177762242121655513144251300 +540433012152253201644772517187257277883368828477658659796427367852347254442546347411045431414354124 +123440236041532033152645165666552487887293658447738333978367787858534683322123676621510536503333401 +513523462114216537146475772264724378429935336847846348444575554346687726237537112655265045664650022 +152254463440132245722174776775434287876777476649865634494799993998688326736773121545343121065304241 +250224151321236513227671833576566739347663376834388478944395578563955424353347453672417622666244155 +515223301360505722213752783545553644495694566664938776366634393433784855746658113613537562051065554 +554241245610333147211334537367835857366454575934899676895788946595666473766285253431355325406031452 +100314521636253352672223432738853968767459797559486648888395749643933624738538781345525612342532041 +341462234622615555235573736647638675877393747847457878744844899855446378852378466172227414636330202 +345125124225634624432677378235488673587578945954767695474694483979633396738646725252521775306550112 +413420352557414334236458423883348897736674897485778466695756868398399557654674634472471146623221025 +251143521254271126368347667353953675589776644454498798849645686658369675764886773874127564444411365 +221413142252611772737673846553885549867478965666795885777985495763559573589863845361134756354652555 +243065641366675316826485533843887969469458797465896675796454946875597936434758642384462157714462066 +520553502161266638252882759578566955579648578498775589886979787578896857766344736358531725733564135 +424035430516117723442423478595343855468789497988556567558494878666699996375768427758374271236421335 +252313015177661777278432468494855844559656687766987679695575558744879656544795683583262246546564621 +066230444571526644743382974447835556985988567697575656976987588986595376466888728567376162756500435 +466346066733165454546438886894789699679455689766757985688888664759568963398874674733715475614334101 +325014552177542688745486585579599747867559596676796865787567755944786444539663262282351475561402534 +241163303516225237353826934978454869995779765759887659668665685578986859343646684568651136735352562 +450361264326612736655359595445797648876877955597997887987765775498545883744548752574473726565411112 +554605215356217343577344399893857478777797855566878769757669857854854856357865565536552164136515351 +526446641376374684266375494495458695869978975788699978669887967564769488567376982882762633361324360 +131314671231526545866684867949989786895865986986978678997899677764988874736369482822342624761635224 +623254034413371684428636874768586849979569867987768799666579796798469744978968758623884477174221325 +451620621666445477562568544366499474968796999686779676678989576768596484478933764745243527321126622 +454130052341168772645439448775675586969558878998779766779998798589986885955369648636673756137543515 +052463667567627485865289577459895546659595768687867979887989666587865576357344373227477771625616331 +460630633631764266522893997758984967975685969969798677679989558694657986684466928784764257141450213 +624130637644652532575536775488944945689777797679988979876565896659695947897698966634635115577122034 +312106635521463635433584476586795448766769568869779667989675669974989668369378542526764316562641343 +162151455625714643563689555468449898859656786796979798687579985864586658783373657585741615177725655 +522113305657225658843435489885646557577988797667968888669868768989959977879557377455733555272325032 +304510566333111422674633384687874565587979787768979689685867565897484896499888736286384551117254613 +501463041455354857783745556844585568845776985978966685877875599798784456633539465754543114144204310 +033044042511137887672349889484876755578886688778959586777755687684946795536886522746575472552603266 +506221035322726455557224463853355996897775558969955685797667999588974556935495475632746634441041151 +433136161743725565262636565676447685475989796568778598958657768879849778786859753335661722543205305 +265454361556653132263478888989675487694888975877759959776785674478666588788563747772733262666414514 +052441631644734262283652379957577654769979687765967795697668686969788694345962866843241632716655446 +236003436545632166356247457495793686988694668988898785686844466844799668333966735544674562633412352 +521460600027621624875854349394389587767654998655578976768847769685597639387383648267451531624063352 +342222114334344716267243334967869638699594976567878976765649455495834476654882454551336614731204621 +033566313156263553885434364795389663465876465857797479766958478858465479967473865454116236530266023 +312652012603144155543338267594667756579949844587785799854455597889659839838335338227724422251205254 +300006533237512225736566526838475448787546947968579975977675656694697397732838257677271224106345603 +133143326544516157647526755363599347754745759889457964588954897669586537634253625642342472416641244 +154255220262671713413357272553997888597745494647794956965689397737688378433337485552276212554465555 +100240040401314462336283253854484757937369955476776566463546476496874852334852883176722554655020500 +114224164252562264455188387248845988369836588899857935337746669656565572827235667727764740332042104 +210035410165643165676172383567428973379998596753776399638478657839665546428878531777515004325230423 +210124643010215635561443542385838474565467799589387569934754637575772733563765332372676641151131504 +302221012422133674231332744234367852633548864367379437949776375866557752335873376756770315423300102 +332125266633066263556242566636554222886478446383395355568773939525563625678526672212234343222625410 +025325451166410144267526457225543863563576656495967865696633785745578788783545643421165350000423343 +002055431510265615765734547166486528454663847694453963495886284323368575223225414276066312104153401 +355245141260142612771253626632378444477523462347872628387736452238277834561572523626005254261254042 +203545210065351052363237141625823577635472367448676276452678742864237273162112414622640501555430121 +335510044411666505051763342712375473385677658477545568853568734655885763312211631300144242225254322 +420503535251235101224431771412136627846753333256668624663675776462422374227471570160056336045543305 +311442220344522144201454355125161416822475756464544562823568565277363143626236634605524051151344323 +221042430004563020306242752654674353744234455564453257548654537765566764222366445225313642034222311 +410315020300414623613025143245525766347157877736466252545465214236744364172443246502214503112203230 +342304354225251006345461616171626576425171512572743837515273314522745717111151266035240243530314400 +101402542354002125435251304674647534521162334775342133371111747561164265140621412560624450505304430 +011211315525203435452400223603127166746242764515517634515312173434163762164444142306041434112503201 +312201041521122523410120106532007714457744313215145447526753371116262403622123305243410143403304001 +420143230433241404304622552610552657576751252637557577175144676122663421114064036341501055504120312 +321114124142324224151525015553652243236362311234247651266113535462142056365353412114023231401141232 +144010233331150422332523034411415500511027722375253755262514425243333354512150011301540445044301243 +321223141143321313415515024451144622413543514327723454716501265226013550620005111202312303242203422 +220312222242043544521300416060642531526303363025212311016020154415132623214322110011054242222314401 +120043213410140522500232142235034335033562221102412305131143065020436150033340525535242031300403012 +333011210021031104353104420453564321600565055235040060414452305642301521213234000231332120021102311 +213000422032423433105500120521112552552162045443040565055142555024614151234210022135411312102303010 +311113213314300134505043355233124354500023350433035532626242646113034040102425400244311432332422101 + diff --git a/2022/d8/src/d8.py b/2022/d8/src/d8.py index 1a0f7d9..c31cf62 100644 --- a/2022/d8/src/d8.py +++ b/2022/d8/src/d8.py @@ -1,123 +1,10 @@ #!/usr/bin/env python3 -from typing import Iterable, Optional -from dataclasses import dataclass -from functools import reduce - -@dataclass -class File: - name: str - is_dir: bool - children: dict[str, "File"] - parent: Optional["File"] - size: Optional[int] - -class Main: - def __init__(self, lines: Iterable[str]): - self.root = File("/",True, {}, None, None) - self.cwd = self.root - self.lines = lines - - def handle_cmd(self, cmdlets: list[str]): - match cmdlets[0]: - case "cd": - dest = cmdlets[1] - match dest: - case "/": - self.cwd = self.root - case "..": - if not self.cwd.parent: - return self - self.cwd = self.cwd.parent - case _: - self.cwd = self.cwd.children[dest] - # validate cwd - return self - case "ls": - return self - case _: - raise RuntimeError(f"Unknown command: {cmdlets[0]}") - - def parse(self): - for _line in self.lines: - line = _line.strip() - if len(line) == 0: - continue - # print("line:", line) - if line[0] == "$": # command - cmdlets = line[1:].split() - self.handle_cmd(cmdlets) - continue - # it's just ls listing, update it to our object storage - (sz, rel_path) = line.split() - self.cwd.children[rel_path] = File(name=rel_path, - is_dir=sz == "dir", - children={}, - parent=self.cwd, - size=int(sz) if sz != "dir" else None) - return self - - def solve(self): - self.parse() - def sized(file: File, parent: Optional[File]): - """ - alternative file - """ - if file.size: - return file - retval = File(file.name, file.is_dir, {}, None, None) - children = {rel_path: sized(f, retval) for rel_path, f in file.children.items()} - retval.children = children - retval.parent = parent - retval.size = sum(c.size for c in children.values()) - return retval - - def sum_with_threshold(sized_file: File, max_sz: int) -> int: - assert sized_file.size is not None - sz = 0 - if sized_file.size <= max_sz and len(sized_file.children) != 0: - # print("qual:", sized_file.name) - sz = sized_file.size - return sum(sum_with_threshold(c, max_sz) for c in sized_file.children.values()) + sz - sized_root = sized(self.root, None) - - part1 = sum_with_threshold(sized_root, 100_000) - print("part1", part1) - - def directories(file: File) -> list[File]: - if not file.is_dir: - return [] - return [file] + [dir for f in file.children.values() for dir in directories(f)] - - def upper_bound(sized_file: File, min_sz: int) -> list[File]: - assert sized_file.size is not None - if sized_file.size < min_sz or len(sized_file.children) == 0: - return [] - min_f: File = sized_file - contests = [c for e in sized_file.children.values() for c in upper_bound(e, min_sz)] - return [min_f] + contests - - TOTAL=70_000_000 - NEED=30_000_000 - assert sized_root.size is not None - DELETE=NEED-(TOTAL-sized_root.size) - print(f"{DELETE=}") - part2 = upper_bound(sized_root, DELETE) - p = sorted(part2, key=lambda x: x.size or 0) - # print("part2 qual:", "\n".join([f"({e.name}, {e.size})" for e in p])) - print("part2", p[0].size if part2 else "None") - - sorted_dirs = sorted(directories(sized_root), key=lambda x: x.size or 0) - # Before is_dir: 176 for part 2 - print(f"directories ({len(sorted_dirs)}):") - print("\n".join(f"{dir.name}\t{dir.size}" for dir in sorted_dirs)) - +import sys +from typing import Iterable def main(lines: Iterable[str]): - Main(list(lines)).solve() + pass - - -if __name__ == "__main__": - import sys +if __name__=="__main__": with open(sys.argv[1], "r") as f: main(f)