diff --git a/inputs/input.txt b/inputs/input.txt index e8acc40..c400166 100644 --- a/inputs/input.txt +++ b/inputs/input.txt @@ -1,1087 +1,99 @@ -$ cd / -$ ls -dir bfbjzfd -dir mbc -dir psqmv -dir qqpgw -59022 rrqzqwl.frp -dir sscj -dir vpfdwq -dir zzp -$ cd bfbjzfd -$ ls -125000 bmzjjgzc.dcr -dir brmgzjp -165351 hgm -dir rhrqttg -dir zfdc -$ cd brmgzjp -$ ls -298676 zzp.wrm -$ cd .. -$ cd rhrqttg -$ ls -dir hmz -dir hpcrbfq -$ cd hmz -$ ls -297949 lqcg -$ cd .. -$ cd hpcrbfq -$ ls -dir ghmfgn -dir pnhcpprn -dir wgvqhw -$ cd ghmfgn -$ ls -dir rrfg -dir tggwct -$ cd rrfg -$ ls -240584 svzjf -$ cd .. -$ cd tggwct -$ ls -dir lqmrbncv -$ cd lqmrbncv -$ ls -268356 zlw.tsd -$ cd .. -$ cd .. -$ cd .. -$ cd pnhcpprn -$ ls -138460 sjth.rhr -$ cd .. -$ cd wgvqhw -$ ls -144558 zphv.mwp -$ cd .. -$ cd .. -$ cd .. -$ cd zfdc -$ ls -173854 fgj.fhz -233205 vwrmp.rzc -$ cd .. -$ cd .. -$ cd mbc -$ ls -93070 jfl -95270 jpr.wlb -30324 rmrtw -243981 zphv.mwp -$ cd .. -$ cd psqmv -$ ls -dir cjzpb -169953 ctb.bmm -151614 gsmdbsp.sjz -245528 hmz.qqt -dir jdvsccc -46723 nfbbqvvs.fdn -dir tbcz -$ cd cjzpb -$ ls -156179 lqmrbncv.jpf -$ cd .. -$ cd jdvsccc -$ ls -240937 lqmrbncv -dir pnhcpprn -279509 qpjtdqfg.rwm -265236 vwrmp.rzc -dir zwjqnf -148420 zzp.smp -281537 zzp.zhh -$ cd pnhcpprn -$ ls -123983 zphv.mwp -$ cd .. -$ cd zwjqnf -$ ls -244132 gsmdbsp.sjz -dir stbgzg -$ cd stbgzg -$ ls -9605 cbzw -$ cd .. -$ cd .. -$ cd .. -$ cd tbcz -$ ls -dir dwpc -dir gdhpqjd -dir lwmjgnh -dir zlw -dir zps -dir zssntdj -dir zzp -$ cd dwpc -$ ls -225827 jmjtjrnt.zsb -30125 zphv.mwp -$ cd .. -$ cd gdhpqjd -$ ls -dir lqmrbncv -$ cd lqmrbncv -$ ls -167746 nwhbvps -$ cd .. -$ cd .. -$ cd lwmjgnh -$ ls -190409 bwdlz.sjf -dir jbrcnsm -dir pnhcpprn -dir zbprw -51030 zjvgm.tqb -$ cd jbrcnsm -$ ls -dir fhtzf -dir zzp -$ cd fhtzf -$ ls -dir hmz -$ cd hmz -$ ls -194260 fbbpbpdm.rrn -259497 pcqhzfh.gwv -$ cd .. -$ cd .. -$ cd zzp -$ ls -dir dmqjmgsp -dir hmz -222531 zzp.zvb -$ cd dmqjmgsp -$ ls -118387 mdgrqss -34746 zphv.mwp -$ cd .. -$ cd hmz -$ ls -dir ljg -dir tpnpp -250664 trzfnvc -dir vmj -$ cd ljg -$ ls -262125 bnwg.spg -dir nrqs -$ cd nrqs -$ ls -259010 gmvnbthn.shd -$ cd .. -$ cd .. -$ cd tpnpp -$ ls -292722 wqljsz.zzj -$ cd .. -$ cd vmj -$ ls -94772 thf.jhp -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd pnhcpprn -$ ls -dir bvdhw -145794 gsmdbsp.sjz -dir gtlvqfwv -dir mzwcp -30226 nqdjpgpm.zmd -dir pvmbp -dir qtc -dir snwrdp -dir tcmp -272593 wjzlh.mbz -dir zjhcdbg -dir zzp -$ cd bvdhw -$ ls -258434 zzp.jbp -$ cd .. -$ cd gtlvqfwv -$ ls -21710 fzg.tvc -25429 vwrmp.rzc -$ cd .. -$ cd mzwcp -$ ls -271460 lqmrbncv -256282 zphv.mwp -$ cd .. -$ cd pvmbp -$ ls -137453 jmbh.csg -9818 ppbgtcr.rrl -dir zlw -$ cd zlw -$ ls -232130 pgwdrp.lnd -dir rgvscq -dir zrns -$ cd rgvscq -$ ls -107168 gsmdbsp.sjz -261303 pnhcpprn.lrt -$ cd .. -$ cd zrns -$ ls -156386 jcsnz -dir schnzjrv -dir zhfqhlvh -106788 zphv.mwp -$ cd schnzjrv -$ ls -dir zfhmw -$ cd zfhmw -$ ls -dir dfd -$ cd dfd -$ ls -103262 rvqtmdb -$ cd .. -$ cd .. -$ cd .. -$ cd zhfqhlvh -$ ls -267785 pnhcpprn.vzc -297909 zlw -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd qtc -$ ls -dir cndr -dir lqmrbncv -201719 rrqzqwl.frp -$ cd cndr -$ ls -218298 hmz.rqz -104450 mzqtrz.jsb -$ cd .. -$ cd lqmrbncv -$ ls -dir bzlvtw -61437 gsmdbsp.sjz -dir hmz -129583 mqjzq.fvd -232347 rrqzqwl.frp -121479 tjd.hfr -247144 zphv.mwp -$ cd bzlvtw -$ ls -256488 gscrll.ttf -301325 gsmdbsp.sjz -$ cd .. -$ cd hmz -$ ls -118154 ggb.gmm -$ cd .. -$ cd .. -$ cd .. -$ cd snwrdp -$ ls -dir hmz -dir lqmrbncv -46060 rrqzqwl.frp -245119 vwrmp.rzc -171585 zlw -185512 zzp -$ cd hmz -$ ls -51192 lmhzqqw -$ cd .. -$ cd lqmrbncv -$ ls -dir cwz -$ cd cwz -$ ls -218678 lfsthrnb.vcm -$ cd .. -$ cd .. -$ cd .. -$ cd tcmp -$ ls -dir czm -dir ghnv -259550 zzp.sgm -$ cd czm -$ ls -dir jzbn -$ cd jzbn -$ ls -dir mzmf -$ cd mzmf -$ ls -244258 zzp -$ cd .. -$ cd .. -$ cd .. -$ cd ghnv -$ ls -42931 rrqzqwl.frp -168344 zzp -$ cd .. -$ cd .. -$ cd zjhcdbg -$ ls -301695 fwz.mjb -72201 nfhnb -33600 prpwjp -$ cd .. -$ cd zzp -$ ls -dir bgmrjcr -dir prdswch -$ cd bgmrjcr -$ ls -278740 gsmdbsp.sjz -$ cd .. -$ cd prdswch -$ ls -4297 pnhcpprn.bmn -$ cd .. -$ cd .. -$ cd .. -$ cd zbprw -$ ls -dir dnmrqs -dir fjq -251370 lqmrbncv.wrt -dir nrmzvg -dir pnhcpprn -67326 rrqzqwl.frp -dir tbnj -$ cd dnmrqs -$ ls -259873 pvhjcsrw.plw -149720 rjstdm.hjb -dir trblfgd -180904 zphv.mwp -$ cd trblfgd -$ ls -143069 dgjbwqw.jwh -264572 gsmdbsp.sjz -$ cd .. -$ cd .. -$ cd fjq -$ ls -dir rdjngdcz -243915 wcvdfwrq.wnp -$ cd rdjngdcz -$ ls -dir wdblhmf -$ cd wdblhmf -$ ls -54076 ctnqhqw.zmb -$ cd .. -$ cd .. -$ cd .. -$ cd nrmzvg -$ ls -294196 bmfjwnnp -101511 pcqhzfh.gwv -35978 zphv.mwp -129984 zzp.drz -$ cd .. -$ cd pnhcpprn -$ ls -dir hgvsvqtl -dir nvmstd -135796 rrqzqwl.frp -$ cd hgvsvqtl -$ ls -159657 mzrqwfl -dir pnhcpprn -102064 pnhcpprn.nwb -dir zlw -$ cd pnhcpprn -$ ls -65147 vwrmp.rzc -$ cd .. -$ cd zlw -$ ls -130115 smrwnbm.rrl -$ cd .. -$ cd .. -$ cd nvmstd -$ ls -dir bzjbbjr -234589 ldjvm.lbh -290105 pcqhzfh.gwv -dir pnhcpprn -181679 qblpgd.wwh -dir sjnqdjzd -45384 vwrmp.rzc -dir zzp -$ cd bzjbbjr -$ ls -290256 zlw.qfj -$ cd .. -$ cd pnhcpprn -$ ls -86162 pnhcpprn.rvr -$ cd .. -$ cd sjnqdjzd -$ ls -219465 hhpddvl -$ cd .. -$ cd zzp -$ ls -251390 dcg -dir hmz -163193 pcqhzfh.gwv -241952 tdd.gdm -dir zdwplgb -72331 zlw.zjw -128370 zzp.pdv -$ cd hmz -$ ls -196959 ndncntz.dpf -189089 zzp.pff -$ cd .. -$ cd zdwplgb -$ ls -42204 zlw -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd tbnj -$ ls -27280 svhfd -186526 vwrmp.rzc -$ cd .. -$ cd .. -$ cd .. -$ cd zlw -$ ls -282587 pcqhzfh.gwv -$ cd .. -$ cd zps -$ ls -178180 lqmrbncv.llw -202379 rpp.crf -208722 vvlgrl.wtd -257512 vwrmp.rzc -dir wgvhd -dir zlw -$ cd wgvhd -$ ls -222879 rwtmqzv.crt -$ cd .. -$ cd zlw -$ ls -211821 tgq.drp -$ cd .. -$ cd .. -$ cd zssntdj -$ ls -dir bgst -84503 hwtnd.cqr -dir mjj -dir nhgp -dir pnhcpprn -dir zlw -$ cd bgst -$ ls -184029 lqmrbncv -167501 tntvjzd.cjr -$ cd .. -$ cd mjj -$ ls -dir nnqhcjd -$ cd nnqhcjd -$ ls -291365 vwrmp.rzc -$ cd .. -$ cd .. -$ cd nhgp -$ ls -199554 hmz.ncq -$ cd .. -$ cd pnhcpprn -$ ls -dir hmz -dir lnz -$ cd hmz -$ ls -13943 vwrmp.rzc -$ cd .. -$ cd lnz -$ ls -131441 lqmrbncv.jlc -$ cd .. -$ cd .. -$ cd zlw -$ ls -dir cnssf -dir hdqb -dir ljplj -dir lqmrbncv -187051 pcqhzfh.gwv -$ cd cnssf -$ ls -191226 jbpvr.wpn -$ cd .. -$ cd hdqb -$ ls -dir rswtmqp -$ cd rswtmqp -$ ls -48087 zzp -$ cd .. -$ cd .. -$ cd ljplj -$ ls -dir czmjzd -dir pnhcpprn -$ cd czmjzd -$ ls -195882 vwrmp.rzc -289013 wst.mfl -$ cd .. -$ cd pnhcpprn -$ ls -108176 fmtbrzwj -$ cd .. -$ cd .. -$ cd lqmrbncv -$ ls -17821 bzlbgvd.rlq -40881 jbbrbp.wbg -66245 rrqzqwl.frp -$ cd .. -$ cd .. -$ cd .. -$ cd zzp -$ ls -dir brwc -dir cgptm -109548 lqmrbncv -dir pnhcpprn -126920 smmhjggp.hjg -262364 srbpw -197385 wqqffn.fhz -$ cd brwc -$ ls -87802 bffrfpqc -$ cd .. -$ cd cgptm -$ ls -dir lqmrbncv -$ cd lqmrbncv -$ ls -dir nspmbfq -dir nzrcvwzf -$ cd nspmbfq -$ ls -270004 szhbblh.frw -$ cd .. -$ cd nzrcvwzf -$ ls -69278 tjwt -150708 tzhq.zzq -$ cd .. -$ cd .. -$ cd .. -$ cd pnhcpprn -$ ls -dir nsjtn -158565 vwrmp.rzc -dir zlw -$ cd nsjtn -$ ls -78943 vvbp -$ cd .. -$ cd zlw -$ ls -dir bzm -dir mgpvzqlf -$ cd bzm -$ ls -142352 qqbvshtw.mnp -$ cd .. -$ cd mgpvzqlf -$ ls -248943 zphv.mwp -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd qqpgw -$ ls -21091 gsmdbsp.sjz -$ cd .. -$ cd sscj -$ ls -dir hmz -294941 prgdqt -139104 qrhrv.vjd -228958 rrqzqwl.frp -dir whhbsrs -11069 zphv.mwp -286845 zzp -$ cd hmz -$ ls -110085 fvjp.qzq -dir gzwfqd -104041 pnhcpprn.zlz -236776 tjvhzdrj -241516 vwrmp.rzc -dir zmvhp -106304 zphv.mwp -$ cd gzwfqd -$ ls -142395 bcjn -139565 gpgq -$ cd .. -$ cd zmvhp -$ ls -12354 glbcr.cnr -115791 hmz.vsw -53725 pnhcpprn.nnm -dir stdlstb -$ cd stdlstb -$ ls -14732 jltstzz -$ cd .. -$ cd .. -$ cd .. -$ cd whhbsrs -$ ls -dir lqmrbncv -75836 lvr -dir zjtpvt -263963 zphv.mwp -$ cd lqmrbncv -$ ls -272847 jslww -128309 pcqhzfh.gwv -58964 vwrmp.rzc -$ cd .. -$ cd zjtpvt -$ ls -245195 zphv.mwp -$ cd .. -$ cd .. -$ cd .. -$ cd vpfdwq -$ ls -166531 gsmdbsp.sjz -dir lqmrbncv -95329 nntncwh -27020 pcqhzfh.gwv -dir pnhcpprn -279032 ttpdwl.dgm -2499 vwrmp.rzc -dir zzp -$ cd lqmrbncv -$ ls -dir zzp -$ cd zzp -$ ls -dir lqm -290776 pnhcpprn.ljp -$ cd lqm -$ ls -221570 jhb -$ cd .. -$ cd .. -$ cd .. -$ cd pnhcpprn -$ ls -dir hhhbwl -dir hmz -dir hwj -55329 lqmrbncv.fgl -dir mtbcvdwq -106653 zlw -$ cd hhhbwl -$ ls -dir bswnjsc -232525 hmz -2087 pnhcpprn.mdm -246118 zzp -$ cd bswnjsc -$ ls -53676 pcqhzfh.gwv -$ cd .. -$ cd .. -$ cd hmz -$ ls -271083 pnhcpprn.brj -105660 zphv.mwp -$ cd .. -$ cd hwj -$ ls -dir hczspwn -222799 lqmrbncv -dir phrvq -$ cd hczspwn -$ ls -53018 lqmrbncv.mwm -$ cd .. -$ cd phrvq -$ ls -126253 crjbtfn.sqp -65577 pnhcpprn.rwg -dir rtvfnr -dir sqvqf -dir vfvrjm -3480 vjvq -dir zlm -$ cd rtvfnr -$ ls -dir fdqdt -dir zzp -$ cd fdqdt -$ ls -265656 zzp -$ cd .. -$ cd zzp -$ ls -238729 zphv.mwp -$ cd .. -$ cd .. -$ cd sqvqf -$ ls -dir dwpfrjcm -dir hmz -$ cd dwpfrjcm -$ ls -133324 vwrmp.rzc -$ cd .. -$ cd hmz -$ ls -104746 wcgnq.ggd -209360 zphv.mwp -$ cd .. -$ cd .. -$ cd vfvrjm -$ ls -dir hmz -221983 rvwffc -230779 zlw.dhn -232043 zpfmr -$ cd hmz -$ ls -38064 rrq.sdn -$ cd .. -$ cd .. -$ cd zlm -$ ls -dir jgzwp -$ cd jgzwp -$ ls -287272 lqmrbncv -30088 qvcmwpg -266066 znf.jbq -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd mtbcvdwq -$ ls -234145 gsmdbsp.sjz -dir zqhm -$ cd zqhm -$ ls -270079 dnqdjh.fjd -$ cd .. -$ cd .. -$ cd .. -$ cd zzp -$ ls -284975 pnhcpprn.vzq -150735 rcm.ntz -dir wlqqd -dir zbdpt -$ cd wlqqd -$ ls -163718 jms -289870 ltfsb.bbc -261093 zvf -288629 zzp -$ cd .. -$ cd zbdpt -$ ls -271137 gsmdbsp.sjz -dir jjmfpmnn -dir lqmrbncv -115632 mfpvr.vbg -dir mqg -dir nmg -157663 plgqqf -dir tgqrcfmt -dir zzp -$ cd jjmfpmnn -$ ls -dir djtsbb -119203 hmz.wlh -dir htzzs -151275 pcqhzfh.gwv -dir tmr -dir tpdrmpz -dir wqzq -dir zlw -275792 zzp.tpm -$ cd djtsbb -$ ls -dir cfbnc -dir gsnsdc -dir jtcc -dir mmjv -39430 zfbqs.lfp -$ cd cfbnc -$ ls -91862 hmz.gzt -36788 rrqzqwl.frp -$ cd .. -$ cd gsnsdc -$ ls -dir pnhcpprn -$ cd pnhcpprn -$ ls -99325 bfs.hhj -$ cd .. -$ cd .. -$ cd jtcc -$ ls -4288 ldpvgl.wsc -199095 lqmrbncv.dnh -18988 lqmrbncv.rsp -dir tdhsnr -$ cd tdhsnr -$ ls -dir mtwrwgd -dir ndnmj -$ cd mtwrwgd -$ ls -dir vpb -$ cd vpb -$ ls -96743 bnnglntn.czw -29316 zlw -$ cd .. -$ cd .. -$ cd ndnmj -$ ls -224172 hmz.dbh -$ cd .. -$ cd .. -$ cd .. -$ cd mmjv -$ ls -92219 gfv -dir hqqqlfpt -dir lqmrbncv -dir mhzbbgzq -83949 rrqzqwl.frp -100668 vwrmp.rzc -17966 zphv.mwp -$ cd hqqqlfpt -$ ls -dir hmz -$ cd hmz -$ ls -dir hmz -dir pmpndws -164308 sbrvvpvf -$ cd hmz -$ ls -20375 pnhcpprn -140460 twc.tmq -$ cd .. -$ cd pmpndws -$ ls -dir zlw -$ cd zlw -$ ls -267730 dwmbrd -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd lqmrbncv -$ ls -dir fjjts -277257 gsmdbsp.sjz -dir smhc -$ cd fjjts -$ ls -219095 bhdpb -dir nlgqmc -dir vtcfh -$ cd nlgqmc -$ ls -dir hzzrtpwm -$ cd hzzrtpwm -$ ls -151067 hfvdw -$ cd .. -$ cd .. -$ cd vtcfh -$ ls -57426 cczlmj.dsb -$ cd .. -$ cd .. -$ cd smhc -$ ls -6007 pnhcpprn -$ cd .. -$ cd .. -$ cd mhzbbgzq -$ ls -dir zlw -274198 zzp.qrv -$ cd zlw -$ ls -189860 cshrcj -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd htzzs -$ ls -249670 hmz.tfw -$ cd .. -$ cd tmr -$ ls -293208 lqmrbncv.svw -$ cd .. -$ cd tpdrmpz -$ ls -106737 gsmdbsp.sjz -dir zzp -$ cd zzp -$ ls -48813 gsmdbsp.sjz -dir wrsj -$ cd wrsj -$ ls -dir ffjtv -dir hmz -dir qstdzsh -$ cd ffjtv -$ ls -4111 zlw.rts -$ cd .. -$ cd hmz -$ ls -dir sjt -$ cd sjt -$ ls -269004 pvfbz -297312 rrqzqwl.frp -270486 zphv.mwp -$ cd .. -$ cd .. -$ cd qstdzsh -$ ls -dir glb -dir nzljfz -73551 qdstwvw -77703 sgnbngld.cfj -16097 vwrmp.rzc -$ cd glb -$ ls -154850 pcqhzfh.gwv -$ cd .. -$ cd nzljfz -$ ls -158622 tfwwj.wsf -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd wqzq -$ ls -dir fjjrcs -dir gtrsmwmm -119618 lqmrbncv.dng -263259 pnhcpprn -dir wdlpr -195318 zphv.mwp -34727 zzp.jpm -$ cd fjjrcs -$ ls -dir mhg -$ cd mhg -$ ls -27680 nns.nnr -29177 zhwpw -74154 zphv.mwp -$ cd .. -$ cd .. -$ cd gtrsmwmm -$ ls -181463 pnhcpprn.jnf -$ cd .. -$ cd wdlpr -$ ls -65151 dznclb.frm -267043 gsmdbsp.sjz -1114 lqmrbncv.vnd -$ cd .. -$ cd .. -$ cd zlw -$ ls -222177 hfvmfrtr.gqt -207956 vlzvst.zps -111131 whnvbpm.jdr -$ cd .. -$ cd .. -$ cd lqmrbncv -$ ls -dir lqmrbncv -231082 lqmrbncv.glf -220876 pcqhzfh.gwv -122980 qvrcq.rwt -197294 wcll -$ cd lqmrbncv -$ ls -203618 rrqzqwl.frp -66116 vwrmp.rzc -109306 zlw.fbt -73751 zlw.qvz -$ cd .. -$ cd .. -$ cd mqg -$ ls -213353 gsmdbsp.sjz -240884 lqmrbncv.cqd -249290 lqmrbncv.rrw -229731 rrqzqwl.frp -$ cd .. -$ cd nmg -$ ls -dir zlw -$ cd zlw -$ ls -214686 grhstbr -$ cd .. -$ cd .. -$ cd tgqrcfmt -$ ls -102076 zlw.jzl -$ cd .. -$ cd zzp -$ ls -231301 lqmrbncv.frd -$ cd .. -$ cd .. -$ cd .. -$ cd .. -$ cd zzp -$ ls -197095 vwrmp.rzc +020110220332333020110144320304042020444223003535441353331002333431100300241023221210123003331021020 +002120010112022233203323334422340102033151553341235324543343233301202102130210343113312320222102020 +000000000301021002423224442341031145215244543444223314545524515335404222310244314423023331200102012 +011200302010212334422213334343335452314532352111122533515334412241512412033340322004232020212310011 +110111200102310120411101020333232255345143342245212323552344535253214434143032323213200301101020121 +122001020113011314043121413025543341512335111452355331355351515421515411500421204113413212021112302 +011210211003201420103123304513544114145311452334355144111521441452154223512022101102111221311323311 +011030200312240341224434214241313322323544154242345656634321531531424124544551344224331443202111303 +031023120224010220144244342511241334331166432443322363352643453525244443222142533014331212133113031 +331033331100013013431114214253543323143222523423236646456363626622312534521454454123324132323233200 +313320023430241044213221132131122135436564345625426422255326234363243521151144414344130023210131130 +002203011410101343345413454143416333665335233566235623536644652644522345535525153521230411343303211 +022030323311323124542521154345356626352343324652424464566645425223224521453553252234321033403323130 +331222243010032043452454232565665256426536435254566436633323343652534544214412242551144312310221231 +231133233004211422411531255443363333555345434532475762623642433466363266634413551244254134333243030 +020231113200002214145443133533534653326664654474363645366343345466265644554325342415122332200024311 +311032340032414323451542554464466352256347635357637447736577667463426532442564245132242343241314212 +210342413212232542421452232234546643373633347344743377376553465333423522425436534352355150302110320 +012302042023135125251364365232626547463576733637455663764376436734352545425434331543241124042312202 +304042410233125532432523224245663443763753734647533535565636563665334542556665554245524241400402122 +100324144335411111343624365526556753335435457754653754663647544353454443256623466532421524442220212 +004310002315421423634565264237567445665436743333467647547754434765353667542365233361541321530411122 +340100133133254351662534562377644656735477678648447854646765556636735646456562322345353223545130204 +223422234555541234336653556365464346366386775667444744567758637737757667635354324626442355153142402 +301202352352311332364654446567354376644665887886878854847858588356564773766244445222614543212440041 +121010254322255546522625235356663453785775455846758588786788567566653645763532436352663334521520342 +223123122512444365553626454767563488464886467858877655766685458675437556363673526236645213411512224 +003314511142456453664565476333555654845565878476575468776548666885476777366354622652365442341232330 +100434351354142623236353735657745766665557455465675844665578767675874476556574642555262344222545124 +310035122251134332246455666547787878577677667587668567788744875844888844364453536232254344234442004 +332355524421462334544344655646458867688886798865795569865997666688465755335745555656646243433122421 +212252432545222565265377376368574784887787696558698987968675547855656555445333366624445325141553342 +113535121253534442546646364347455675758878676575695576785998796454646647555637657565266546254424513 +023531155256556443573534665476784478579889966685965558767695667786588646763565366352565623135242132 +332235311465633455637577656876574774599858977857599877979855878694546488485435736564352255345534352 +423312331346353345545646578646466549968669789766955768696578957665488458568376747735452426221223133 +042131555255526335474354376567744577697576655686887997959968659596857774864465577464334245541411144 +314335533542324633457667677854784879668896688676989899996875778858675674784535777333543532331142411 +342431321343652634443346854886679789759856968779866777899677797959996774647753365556465426225312415 +443122331352464374355445874586585857875568898788666678776787986756859447544446666763365552244452322 +434332122456323647344556476668759666569568769987679766689798887678765548587477474536465533643451422 +012515214225433447464677777487776597697976998888987789798887796967785955887765466437333665342324523 +151212435544622335634548655777875966867886867777679699887698988956977857868655457465635544364542154 +425332155643342656676678888575989888788767888899689899798688796666757955465858667777362363434424542 +531532414223243445466348848575895777968779899997887798776667989655588765447757447347342252524115215 +155245334655555376575664568856876978978787888977789987998877778796686666588544843473375333466131323 +442223263655353573545578848875879796997899897789887987979686977788898887848487563664644353624212355 +532342436423523433743374566649565796978689677778887988977986779775985585775684847364464225436344143 +144131162643455446377457566657777998676869667898877798979888978868889578745676553337663625625354412 +212531125562654464546354657756555595879978788779777999979988869895856856488587466676673534564554215 +515521136425625643733788668547967896969879989899779977888986996776697776777887634766746536654352314 +533115456346557773554457648785576555967877979777897997977979879979889786544548474557775226255314122 +432554142445363766476368787846679896977899887779797978979969889696765986666844737665565256236231155 +125253442625345476646468778468579567787976888987879797899978977695756855477657433457362446432521533 +451335344244435635354545558745856999567779868887799878899867977959975677866558447464563253543641554 +412221312464362643575387865576575778679997969899879799897898997777656968646646747476434353234412443 +132123436534443354553586484485777568678779897878779989966877968659558598445764456573762542646254544 +024143156436353736354736885476858987768978898698789976987668878886568974574565737457544455543452243 +413135313643263775675578866878568599957868689889887898688888897699957964455656556464353643525222353 +151155234625524455454576866886566769799886776697778986968676996687578554546778475347663665445441542 +225335432336665664467554464786765996688599897886876679899878795577796866847588643664352344525425543 +231314414363454365656445447648785668665699968677877867679686575989979554888874435546345632362455211 +215225154624264466667536475884866766856799777898688869799678789658958655666655664763723652345235254 +035354151466424636347656474544888889966575676978876877797665689589954588444647355553546242434541533 +001253252266442433343367457848868577696576876956987767987878766766685545864636355333223636351531525 +432114153244234344474473336455665467595685659677769775776598955788485844764764774633253355345153344 +440231335123622442356777766866685464699576999777998779679677676798556674878735743562224245652132511 +321533313113424533355576556587855784598797699998756887876998858868457756543476743664332364153212141 +003415211213442534357575744467674686668987887956977567898997789587764784753377657636326255155213240 +224445525333436434526743474634674544887785577959758998579798555487687877644644777665225554533252422 +114025431113445462556535777346657775747764689775588768859877487468477864653336547436625221413353402 +444431445545324552322733365535555774656466544687955795855665775645668663457547655566226341423452434 +410445115125126462226236353755455888548674587788447578688475766447586446763443644432535242233435244 +124340412535436432636663557555763744747854587474866557668648548584743443577534342355356535325312231 +200313132541126432532542747437536486654767558545587875558487658465577773437664544545354413212211212 +101333454545223643623655465756576356785656755457885765456674785763465474656725224222541315314114031 +131233142323341366245232435554365765545574774767785475776848668453355554474332533326544433554514201 +321411402434455156645353526473756763444567846554465464446465455445745336435566265254512531525210112 +030131034355454454644464565464475577344753366858566476585577545346763733342656446563454444451042420 +123233024345514531322525463344645673755773347575544437475656346736346777342352464432215452454013411 +014322323421235432556233655455544546633674634474456664346664375533773475562242423541545331424443423 +103044012005453352356343445634325645434337637364655565435774676736733553262634342435541343244030000 +320224321434222311444445623462256346445463567453434633465443337646352226626622452524224345304403330 +212420324020443535541356556336654222753455556557453353546474577342535554563532343321131244211234443 +122201202000423112251512562424625443344753367744337643545467743645523543344535431154212330403302410 +302200224224202341324112146243633653523426575646533673677763345633345645554351214352331400423031333 +123001320330302415435532414224224226352235334353577574436324344226425624263133551342153034141032032 +213131040401103044255424155325562642646633364323565455323646566426224245451451423431324433130343033 +231211142003310021532152553311226325626362465244625533422332633634454451545253314415220400420413203 +312320130422410131322514243524545532465435666446335525623552365342455442353243151122403024303312021 +133332233112042420435241253424143243654366264342464546256332442465235435334432132240241304411322221 +333302213333240222002452421142454145262355663455246362444253326353144344554554324413300122011222021 +202310030210410440001115535553444131333333663342464256255352255253344353414423520402213424030101331 +020120023231001430421410113431542415212332151336254445313532121145524443121220343020012020230032230 +210023323121322121303302233233245321224455333332343322323215223451525532222223304043001030230132022 +002222021003231011234340303045243412535411232132142332533521354111141433134004443142111110122121100 +022122131333022231003311233440122445251415343142141523345254553214425533033042143220401300010213100 +122110132221332212341431023220242412121544355542132225542445544553234342030402442141111321103231211 +122021200131211021314010312001241211235253115315252213451111223452204220130001212341202130012001221 diff --git a/inputs/sample.txt b/inputs/sample.txt index 09a921e..16d6fbd 100644 --- a/inputs/sample.txt +++ b/inputs/sample.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/src/main.rs b/src/main.rs index 4d35172..c5f5c6e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,30 +1,18 @@ +#![feature(byte_slice_trim_ascii)] #![feature(test)] - -use std::collections::HashMap; extern crate test; -const INPUTS: [&str; 2] = [ - include_str!("../inputs/sample.txt"), - include_str!("../inputs/input.txt"), +const INPUTS: [&[u8]; 2] = [ + include_bytes!("../inputs/sample.txt"), + include_bytes!("../inputs/input.txt"), ]; -fn parse(input: &'static str) -> impl Iterator { - let input = input.trim().lines(); - +fn parse(input: &[u8]) -> Vec> { input -} - -#[derive(Debug)] -enum Node { - File(u32), - Directory(Directory), -} - -#[derive(Debug)] -struct Directory { - children: HashMap, - parent: *mut Node, - size: u32, + .trim_ascii() + .split(|&c| c == b'\n') + .map(|line| line.iter().map(|b| b - b'0').collect()) + .collect() } fn main() { @@ -36,115 +24,63 @@ fn main() { } } -fn solution(input: impl Iterator) -> u32 { - let mut tree = Node::Directory(Directory { - children: HashMap::new(), - parent: std::ptr::null_mut(), - size: 0, - }); +fn solution(input: Vec>) -> usize { + let m = input.len(); + let n = input[0].len(); - let mut current = &mut tree; + let mut answer = 0; - for line in input { - match &line[..4] { - "$ ls" => continue, - - "dir " => { - let dir = &line[4..]; - let cptr = current as *mut Node; - - let Node::Directory(Directory { children, ..}) = current else { unreachable!()}; - - children.insert( - dir.to_string(), - Node::Directory(Directory { - children: HashMap::new(), - parent: cptr, - size: 0, - }), - ); - } - - "$ cd" => match &line[5..6] { - // we are supposed to match on .. but this is fine - "." => { - let Node::Directory(Directory { parent , .. }) = *current else { - unreachable!("current is not a directory"); - }; - - current = unsafe { &mut *parent }; - } - - "/" => current = &mut tree, + for i in 0..m { + for j in 0..n { + match (i, j) { + (0, _) => answer += 1, + (_, 0) => answer += 1, + (_, j) if j == n - 1 => answer += 1, + (i, _) if i == m - 1 => answer += 1, _ => { - let dir = &line[5..]; - let Node::Directory(Directory { children, ..}) = current else { - unreachable!("current is not a directory"); - }; + let th = input[i][j]; + // l to r check + if input[i][0..j].iter().all(|&h| h < th) { + answer += 1; + continue; + } - current = children.get_mut(dir).unwrap(); + // r to l check + if input[i][j + 1..n].iter().all(|&h| h < th) { + answer += 1; + continue; + } + + let mut visible = true; + for row in &input[0..i] { + if row[j] >= th { + visible = false; + break; + } + } + + if visible { + answer += 1; + continue; + } + + visible = true; + for row in &input[i + 1..m] { + if row[j] >= th { + visible = false; + break; + } + } + if visible { + answer += 1; + } } - }, - - _ => { - let (size, name) = line.split_once(' ').unwrap(); - let fsize = size - .bytes() - .take_while(|&c| c != b' ') - .fold(0u32, |a, x| a * 10 + (x - b'0') as u32); - - let Node::Directory(v) = current else {unreachable!("not a directory") }; - - v.children - .entry(name.to_string()) - .or_insert(Node::File(fsize)); } } } - compute_dir_size(&mut tree); - - let total = 70000000; - let required = 30000000; - - let Node::Directory(ref root) = tree else { unreachable!("not a directory") }; - - let to_freeup = root.size + required - total; - - part2(&tree, to_freeup) -} - -fn part2(node: &Node, to_freeup: u32) -> u32 { - match node { - Node::Directory(dir) if dir.size >= to_freeup => { - let mut answer = dir.size; - - for v in dir.children.values() { - answer = std::cmp::min(answer, part2(v, to_freeup)); - } - - answer - } - _ => std::u32::MAX, - } -} - -fn compute_dir_size(node: &mut Node) -> u32 { - match node { - &mut Node::File(v) => v, - - Node::Directory(dir) => { - let mut sum = 0; - - for v in dir.children.values_mut() { - sum += compute_dir_size(v); - } - - dir.size = sum; - sum - } - } + answer } #[bench]