aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAn0nSaiko <porfeas12@gmail.com>2022-12-09 14:10:27 +0200
committerAn0nSaiko <porfeas12@gmail.com>2022-12-09 14:10:27 +0200
commit3ad90ea8f6bab9220e2bc12a3fefc16395abc5f4 (patch)
treebc8a8368ae76df2f591a28118569abe0bdb09a21
parentDay 6 (diff)
downloadaoc22-3ad90ea8f6bab9220e2bc12a3fefc16395abc5f4.tar.gz
aoc22-3ad90ea8f6bab9220e2bc12a3fefc16395abc5f4.zip
Day 7
-rw-r--r--day7/example.txt23
-rw-r--r--day7/input.txt1096
-rw-r--r--day7/solution.nim97
3 files changed, 1216 insertions, 0 deletions
diff --git a/day7/example.txt b/day7/example.txt
new file mode 100644
index 0000000..09a921e
--- /dev/null
+++ b/day7/example.txt
@@ -0,0 +1,23 @@
1$ cd /
2$ ls
3dir a
414848514 b.txt
58504156 c.dat
6dir d
7$ cd a
8$ ls
9dir e
1029116 f
112557 g
1262596 h.lst
13$ cd e
14$ ls
15584 i
16$ cd ..
17$ cd ..
18$ cd d
19$ ls
204060174 j
218033020 d.log
225626152 d.ext
237214296 k
diff --git a/day7/input.txt b/day7/input.txt
new file mode 100644
index 0000000..036d66d
--- /dev/null
+++ b/day7/input.txt
@@ -0,0 +1,1096 @@
1$ cd /
2$ ls
3dir brdsppd
4dir dnjqmzgg
5126880 fmftdzrp.fwt
6173625 hhfqgzfj.qvt
7dir lbbcfjl
8dir mzdqcb
9dir npppw
10dir plmb
116337 rfgtcj.tdn
12dir szfw
13230140 vmc.cdf
14$ cd brdsppd
15$ ls
16dir gjc
17dir lcz
18218543 ndqmcv
19dir qnj
20dir rrdd
21dir zppsglq
22$ cd gjc
23$ ls
24dir bvctghh
25262132 cbczvmdf
26111855 dnltsq.fwv
2722416 fnrwscz.vwb
28dir gwd
29dir lsprzlbf
30$ cd bvctghh
31$ ls
32dir lsprzlbf
33dir lwfgnzz
34dir tjslbpb
35$ cd lsprzlbf
36$ ls
37182522 hhfqgzfj.qvt
38dir hts
39229288 jtpdh
40dir lwfgnzz
41284594 szfw
4289639 tgdsjl
43$ cd hts
44$ ls
4511158 dnltsq.fwv
4652582 tchv
47$ cd ..
48$ cd lwfgnzz
49$ ls
50dir tjslbpb
51$ cd tjslbpb
52$ ls
5358586 jtzmjgw.bql
54$ cd ..
55$ cd ..
56$ cd ..
57$ cd lwfgnzz
58$ ls
59199598 rlhz.pbs
60$ cd ..
61$ cd tjslbpb
62$ ls
63119666 fmzfs.glg
64$ cd ..
65$ cd ..
66$ cd gwd
67$ ls
68dir bcfqd
691631 hhfqgzfj.qvt
70$ cd bcfqd
71$ ls
72197168 cqvwnslp.ltw
73$ cd ..
74$ cd ..
75$ cd lsprzlbf
76$ ls
77dir jwznh
78$ cd jwznh
79$ ls
80dir lpm
81dir ncs
82dir vqprn
83$ cd lpm
84$ ls
8515172 bnw.rqm
86215818 flpbspn.stt
87$ cd ..
88$ cd ncs
89$ ls
90dir rzdbw
91$ cd rzdbw
92$ ls
9315150 cvjldjt.gdc
94$ cd ..
95$ cd ..
96$ cd vqprn
97$ ls
9823882 njjjh
99$ cd ..
100$ cd ..
101$ cd ..
102$ cd ..
103$ cd lcz
104$ ls
10537587 gwcvttb.dhc
106195583 lsprzlbf.vng
107152648 tchv
108$ cd ..
109$ cd qnj
110$ ls
111dir bpvl
112275640 cfvznj.bqc
113dir lwfgnzz
114213007 nwbt.mct
115135231 twpf.pft
116165501 vmc.cdf
11788097 vmvs.hnr
118dir znbdpp
119$ cd bpvl
120$ ls
121dir nmzbpb
122$ cd nmzbpb
123$ ls
124129477 pjlvs.zcp
125$ cd ..
126$ cd ..
127$ cd lwfgnzz
128$ ls
129dir lwfgnzz
130dir rsbdcwjr
131dir sgh
132dir wvwmf
133$ cd lwfgnzz
134$ ls
13533186 ftcrfnmd
136$ cd ..
137$ cd rsbdcwjr
138$ ls
139dir lsprzlbf
140$ cd lsprzlbf
141$ ls
142dir jvcgnbs
143288445 pjmqm
144111585 szfw.drf
145dir vnftvqf
146$ cd jvcgnbs
147$ ls
148dir ctlwjnjz
149dir lwfgnzz
150dir tjslbpb
151$ cd ctlwjnjz
152$ ls
15372087 zmhnsmmf
154$ cd ..
155$ cd lwfgnzz
156$ ls
157151358 sqs
158$ cd ..
159$ cd tjslbpb
160$ ls
161112471 mftdzhwj.zvt
162$ cd ..
163$ cd ..
164$ cd vnftvqf
165$ ls
166120421 lsprzlbf.tqc
167$ cd ..
168$ cd ..
169$ cd ..
170$ cd sgh
171$ ls
172228239 szfw.dzv
173$ cd ..
174$ cd wvwmf
175$ ls
176dir bcjfz
177$ cd bcjfz
178$ ls
17926284 bzhqwdjq.nzn
180$ cd ..
181$ cd ..
182$ cd ..
183$ cd znbdpp
184$ ls
185dir szfw
186$ cd szfw
187$ ls
188dir nthzqpws
189dir snfmt
190$ cd nthzqpws
191$ ls
19296382 twhdbvtw.lbj
193$ cd ..
194$ cd snfmt
195$ ls
196133360 bjmgtpgh
197134215 vmc.cdf
198$ cd ..
199$ cd ..
200$ cd ..
201$ cd ..
202$ cd rrdd
203$ ls
204185903 cpgpgntt.tfn
205$ cd ..
206$ cd zppsglq
207$ ls
20841689 jvcgnbs.hrt
209169754 wgnpq
210$ cd ..
211$ cd ..
212$ cd dnjqmzgg
213$ ls
214dir lsprzlbf
215dir lwfgnzz
216dir nmvj
217dir sfpg
218$ cd lsprzlbf
219$ ls
220dir lbw
221141416 sqs
222$ cd lbw
223$ ls
22448758 cjv
225235522 dnltsq.fwv
226$ cd ..
227$ cd ..
228$ cd lwfgnzz
229$ ls
23036709 bcmtmwcz
231$ cd ..
232$ cd nmvj
233$ ls
234dir dqpw
235dir tjslbpb
236$ cd dqpw
237$ ls
23810608 hhfqgzfj.qvt
239$ cd ..
240$ cd tjslbpb
241$ ls
242261140 qfzb
243$ cd ..
244$ cd ..
245$ cd sfpg
246$ ls
2478543 szfw
24869248 tjslbpb
249$ cd ..
250$ cd ..
251$ cd lbbcfjl
252$ ls
253dir csnjp
254dir drwpfn
255301956 hhfqgzfj.qvt
256dir jvcgnbs
257dir lsprzlbf
258dir pdzlnm
259161886 tchv
260153858 vmc.cdf
26187849 wghtg
262dir zhgchnld
263$ cd csnjp
264$ ls
265dir ffgfmcm
266dir gtd
267dir lbjvqv
268dir lwfgnzz
26911312 sqs
270$ cd ffgfmcm
271$ ls
272dir bcnvw
273dir lcf
274dir lsprzlbf
275$ cd bcnvw
276$ ls
277111692 ftcvs.tcz
278173665 jpfh.hrs
279120561 lwfgnzz.zvd
280dir ngtbzz
28129479 tchv
282dir tjslbpb
283$ cd ngtbzz
284$ ls
285dir czrqmh
286dir jrhpnpw
287dir lsprzlbf
288$ cd czrqmh
289$ ls
290225055 hhfqgzfj.qvt
291$ cd ..
292$ cd jrhpnpw
293$ ls
294206497 tjslbpb.zbv
295$ cd ..
296$ cd lsprzlbf
297$ ls
29866627 szfw.wtd
299$ cd ..
300$ cd ..
301$ cd tjslbpb
302$ ls
303dir cgzlp
304116060 lsprzlbf
305dir szfw
306128885 zht.ptf
307$ cd cgzlp
308$ ls
30918201 sqs
310$ cd ..
311$ cd szfw
312$ ls
313104128 tchv
314$ cd ..
315$ cd ..
316$ cd ..
317$ cd lcf
318$ ls
319137662 lwfgnzz
320$ cd ..
321$ cd lsprzlbf
322$ ls
323151745 fmcgs.tvh
32437707 gszw.jlm
325dir lsprzlbf
326178133 rjw.wrq
327dir szw
328267875 tchv
329198852 vmc.cdf
330$ cd lsprzlbf
331$ ls
33254734 lsprzlbf.hcq
33381537 lwfgnzz
334120990 qppfdrf
335$ cd ..
336$ cd szw
337$ ls
338dir jtvschrd
339dir zcnpls
340$ cd jtvschrd
341$ ls
342dir gtz
343$ cd gtz
344$ ls
345dir rdzzlm
346$ cd rdzzlm
347$ ls
34855063 tchv
3498813 zfwvvpvz.zzb
350$ cd ..
351$ cd ..
352$ cd ..
353$ cd zcnpls
354$ ls
355282808 dpmd
356$ cd ..
357$ cd ..
358$ cd ..
359$ cd ..
360$ cd gtd
361$ ls
362148653 cmchsg.zdr
36366537 hhfqgzfj.qvt
364125493 mdtmqbml.gnt
365dir rwjdjqcs
366dir tjslbpb
367$ cd rwjdjqcs
368$ ls
36977026 zpt.gfp
370$ cd ..
371$ cd tjslbpb
372$ ls
373dir dfl
374$ cd dfl
375$ ls
376203731 qpsmsjgh.gvs
377dir tjslbpb
37884386 vmc.cdf
379dir zgh
380$ cd tjslbpb
381$ ls
382dir lwfgnzz
383140021 qnp
384312305 svh.vqt
385$ cd lwfgnzz
386$ ls
38749701 lgffdn.gmr
388$ cd ..
389$ cd ..
390$ cd zgh
391$ ls
392138627 tchv
393$ cd ..
394$ cd ..
395$ cd ..
396$ cd ..
397$ cd lbjvqv
398$ ls
399dir bnl
400$ cd bnl
401$ ls
402dir gbv
403dir lwfgnzz
404$ cd gbv
405$ ls
406dir lsprzlbf
40736406 lsprzlbf.cfd
408$ cd lsprzlbf
409$ ls
410168615 hlhp.rvp
411$ cd ..
412$ cd ..
413$ cd lwfgnzz
414$ ls
415149511 cdpwjbpd
416$ cd ..
417$ cd ..
418$ cd ..
419$ cd lwfgnzz
420$ ls
421232898 dnltsq.fwv
422181665 hhfqgzfj.qvt
42362529 qfmhhvvq.prh
42457822 sqs
425$ cd ..
426$ cd ..
427$ cd drwpfn
428$ ls
429dir fvgw
430dir lsprzlbf
431dir lwfgnzz
432104745 nqvlqd.mdb
433203189 qqpmz
434159549 tchv
435dir tjslbpb
436dir wnrns
437$ cd fvgw
438$ ls
439dir tlzmplfl
440$ cd tlzmplfl
441$ ls
44229740 vmc.cdf
44330062 wgrm.dst
444181738 zqr
445$ cd ..
446$ cd ..
447$ cd lsprzlbf
448$ ls
449dir lcqhctjl
450dir ldr
451dir tjslbpb
452$ cd lcqhctjl
453$ ls
454209114 bcfr.gpf
455$ cd ..
456$ cd ldr
457$ ls
458148649 fzh.pqm
459$ cd ..
460$ cd tjslbpb
461$ ls
462241013 dnltsq.fwv
463$ cd ..
464$ cd ..
465$ cd lwfgnzz
466$ ls
467288335 cdctnn
46867277 tchv
469$ cd ..
470$ cd tjslbpb
471$ ls
472dir pblzrspg
473dir qqgddb
47486103 sqs
475183539 tjslbpb.wrs
476$ cd pblzrspg
477$ ls
478dir pgl
479$ cd pgl
480$ ls
481305421 lwfgnzz.jdz
482114244 tjslbpb
483dir vzff
484$ cd vzff
485$ ls
48680591 rlww.htq
48786968 sqs
488$ cd ..
489$ cd ..
490$ cd ..
491$ cd qqgddb
492$ ls
493dir szfw
494$ cd szfw
495$ ls
496dir jtw
497$ cd jtw
498$ ls
499263 szfw.lzp
500$ cd ..
501$ cd ..
502$ cd ..
503$ cd ..
504$ cd wnrns
505$ ls
506203725 dnltsq.fwv
50777752 qrg.fnt
508$ cd ..
509$ cd ..
510$ cd jvcgnbs
511$ ls
512296356 lwfgnzz.svf
513294928 ptvdsngf
514$ cd ..
515$ cd lsprzlbf
516$ ls
517dir lwfgnzz
518dir tjslbpb
519$ cd lwfgnzz
520$ ls
521105095 tchv
522$ cd ..
523$ cd tjslbpb
524$ ls
52553558 hhfqgzfj.qvt
526189180 szfw
527$ cd ..
528$ cd ..
529$ cd pdzlnm
530$ ls
53176426 jwttcp.rjj
532dir lsprzlbf
533dir qldhzf
534dir rtdsjf
535dir sfdtljj
53669033 slhl.jst
537$ cd lsprzlbf
538$ ls
53971362 vgdr
540$ cd ..
541$ cd qldhzf
542$ ls
543303106 lsprzlbf.rbq
544$ cd ..
545$ cd rtdsjf
546$ ls
54745781 pzbgwrdm.lwt
548dir rzc
549$ cd rzc
550$ ls
551297081 qqvlp
55286015 zthlr
553$ cd ..
554$ cd ..
555$ cd sfdtljj
556$ ls
557254377 ftw.fwg
558dir jvcgnbs
559153393 lwfgnzz.dws
560dir pnphc
561220821 wslttcn
562$ cd jvcgnbs
563$ ls
56492642 bzpvvlsn.gvt
565$ cd ..
566$ cd pnphc
567$ ls
568288388 lwfgnzz
569$ cd ..
570$ cd ..
571$ cd ..
572$ cd zhgchnld
573$ ls
57416588 ftgrpj.srl
575112044 vmc.cdf
576$ cd ..
577$ cd ..
578$ cd mzdqcb
579$ ls
580dir bfphcs
581dir cgjmj
582dir jgcqqsh
583dir jvcgnbs
584dir lccjbtqs
585dir lwfgnzz
586dir pprvjm
587dir szfw
588dir tjslbpb
589dir ztc
590$ cd bfphcs
591$ ls
592124148 wzt.qtr
593$ cd ..
594$ cd cgjmj
595$ ls
59628095 ddjdbdf
597dir jvcgnbs
598169536 sqs
599dir svbsrj
600159511 vmc.cdf
601$ cd jvcgnbs
602$ ls
603dir crmsnch
604dir jvcgnbs
605$ cd crmsnch
606$ ls
607195745 lsprzlbf.prh
608271424 tjslbpb
609227054 vmc.cdf
610$ cd ..
611$ cd jvcgnbs
612$ ls
613294249 vmc.cdf
614$ cd ..
615$ cd ..
616$ cd svbsrj
617$ ls
61849038 cspzcpqs
619dir czltsqrg
62098084 ljhljcw
621dir ntdjg
622202570 szfw.lpj
623$ cd czltsqrg
624$ ls
625207690 dnltsq.fwv
626208745 lnns.hsv
62740703 rgmjszf.vtd
628$ cd ..
629$ cd ntdjg
630$ ls
631dir szfw
632$ cd szfw
633$ ls
634284994 qzwptr.ggb
635$ cd ..
636$ cd ..
637$ cd ..
638$ cd ..
639$ cd jgcqqsh
640$ ls
6412462 djfwggvp
642$ cd ..
643$ cd jvcgnbs
644$ ls
645dir ftjprdj
646289965 zhlrstpt
647$ cd ftjprdj
648$ ls
649dir wnmhs
650$ cd wnmhs
651$ ls
652dir tjslbpb
653$ cd tjslbpb
654$ ls
655dir jvcgnbs
656$ cd jvcgnbs
657$ ls
658160761 dnltsq.fwv
659$ cd ..
660$ cd ..
661$ cd ..
662$ cd ..
663$ cd ..
664$ cd lccjbtqs
665$ ls
666dir jjrdbgtg
66777186 sqs
668116398 szfw.qjt
669182665 vmc.cdf
670248366 vqdjwsh
671$ cd jjrdbgtg
672$ ls
673237358 bdvbjs.sjp
674$ cd ..
675$ cd ..
676$ cd lwfgnzz
677$ ls
678dir ggptdvr
679dir jnb
680dir lcpmzpr
681222506 lsprzlbf
682293605 qbjfqh
683dir smvwg
684291643 tchv
685247095 vwdstb.pdw
686dir wghpmnm
687dir wtrbfrj
688$ cd ggptdvr
689$ ls
690184198 vmc.cdf
691$ cd ..
692$ cd jnb
693$ ls
694296536 dnltsq.fwv
69591419 jvcgnbs.cvq
696279635 rwt.wth
697$ cd ..
698$ cd lcpmzpr
699$ ls
700184769 hhfqgzfj.qvt
701dir qwqcbdms
702236533 tjslbpb.bnc
703162397 vmvctfnw
704dir wcc
705$ cd qwqcbdms
706$ ls
707232132 jgm.tfm
708dir jnfmcnfh
709173727 mwrbndt
710dir qshphcb
711dir tjslbpb
712$ cd jnfmcnfh
713$ ls
714dir rngnt
715$ cd rngnt
716$ ls
717236114 hhfqgzfj.qvt
718$ cd ..
719$ cd ..
720$ cd qshphcb
721$ ls
72278407 lsprzlbf.hpd
723$ cd ..
724$ cd tjslbpb
725$ ls
72630200 brbz
727171368 jvcgnbs.vwl
728236158 sqs
729285872 srfwnmb
730dir znr
731$ cd znr
732$ ls
733108194 hhfqgzfj.qvt
734$ cd ..
735$ cd ..
736$ cd ..
737$ cd wcc
738$ ls
739167768 jvcgnbs
740289640 lgthn.cjn
74128517 lwfgnzz.chf
742dir nvgfwn
74343738 rrg
74481011 sqs
745$ cd nvgfwn
746$ ls
747270370 hgnv.ssj
74898235 lwfgnzz.nfv
749$ cd ..
750$ cd ..
751$ cd ..
752$ cd smvwg
753$ ls
754dir jvcgnbs
75577510 tchv
756dir tgrm
757$ cd jvcgnbs
758$ ls
759287955 bqcnj.zzv
760119021 bsrtmzd
7613391 cnngp.mbf
76268540 qjmb.vjz
763149062 tchv
764$ cd ..
765$ cd tgrm
766$ ls
767112315 qzth
768277566 scqp
769$ cd ..
770$ cd ..
771$ cd wghpmnm
772$ ls
773dir hpm
774$ cd hpm
775$ ls
776113354 hhfqgzfj.qvt
777$ cd ..
778$ cd ..
779$ cd wtrbfrj
780$ ls
781dir ggrsgzvv
782dir mvzzsl
783dir szfw
784dir vsqjb
785$ cd ggrsgzvv
786$ ls
787dir dpv
788dir gqtsmnr
789dir lsprzlbf
790dir pcjcm
791137203 tchv
79284711 tns.sdh
793$ cd dpv
794$ ls
795233264 dmd
796dir fzlchpb
797293097 gwmspnm.qtp
798100283 jbbnssc.nnv
799$ cd fzlchpb
800$ ls
801150431 pdmzrs.rll
802$ cd ..
803$ cd ..
804$ cd gqtsmnr
805$ ls
806dir jdml
807dir jfqtjt
808dir lwfgnzz
809dir tjslbpb
810$ cd jdml
811$ ls
812148333 bwm.dnt
813dir lsprzlbf
814$ cd lsprzlbf
815$ ls
816dir cslvm
817dir lwfgnzz
818dir rllt
819265856 sqs
820dir szfw
82156452 tchv
822$ cd cslvm
823$ ls
824266380 vmc.cdf
825$ cd ..
826$ cd lwfgnzz
827$ ls
828dir tzghdrd
829$ cd tzghdrd
830$ ls
831dir tjslbpb
832dir vhv
833$ cd tjslbpb
834$ ls
835dir jvcgnbs
836$ cd jvcgnbs
837$ ls
83818188 sqs
839$ cd ..
840$ cd ..
841$ cd vhv
842$ ls
84395547 jhhblnn.vzt
844dir srgh
845$ cd srgh
846$ ls
847299624 lsprzlbf.dnr
848$ cd ..
849$ cd ..
850$ cd ..
851$ cd ..
852$ cd rllt
853$ ls
854dir crpcbl
855308185 dnltsq.fwv
856dir szfw
857$ cd crpcbl
858$ ls
859209445 dfds.mzh
860$ cd ..
861$ cd szfw
862$ ls
863dir lsprzlbf
864159720 vmc.cdf
865$ cd lsprzlbf
866$ ls
867291090 tzrvpv
868$ cd ..
869$ cd ..
870$ cd ..
871$ cd szfw
872$ ls
873113605 fbrtbfjm
874$ cd ..
875$ cd ..
876$ cd ..
877$ cd jfqtjt
878$ ls
879119124 hhfqgzfj.qvt
880251412 jvcgnbs.zfm
881dir rbv
882dir tjslbpb
883142371 tjslbpb.czt
88465455 vmc.cdf
88547786 zjmtjsv
886$ cd rbv
887$ ls
888300632 dzssgm.pqn
889$ cd ..
890$ cd tjslbpb
891$ ls
892221545 pswrb.bsw
893$ cd ..
894$ cd ..
895$ cd lwfgnzz
896$ ls
89734086 wshbr.spm
898$ cd ..
899$ cd tjslbpb
900$ ls
901118394 djfwjd.fvl
90265377 qmgcpdr.qjz
903146317 tchv
904$ cd ..
905$ cd ..
906$ cd lsprzlbf
907$ ls
908195086 clqmgmq.gbw
909dir cpgjgbdf
910109787 jmwshtg.snl
911305108 lsprzlbf
912dir szfw
913174614 szfw.qjq
914105247 vmcf.rsm
915$ cd cpgjgbdf
916$ ls
917dir vzddwsr
918$ cd vzddwsr
919$ ls
92091787 nwgfs
921$ cd ..
922$ cd ..
923$ cd szfw
924$ ls
925193316 tjslbpb
926$ cd ..
927$ cd ..
928$ cd pcjcm
929$ ls
930dir lsprzlbf
931$ cd lsprzlbf
932$ ls
933210834 hvrpj.cdc
93429497 wcnf
935$ cd ..
936$ cd ..
937$ cd ..
938$ cd mvzzsl
939$ ls
940dir rnrtf
941$ cd rnrtf
942$ ls
943221025 btwgwrp.ctj
944$ cd ..
945$ cd ..
946$ cd szfw
947$ ls
948dir jvcgnbs
949dir szfw
95031365 tjslbpb
951$ cd jvcgnbs
952$ ls
953250409 lwfgnzz.nvf
95466638 tchv
955dir tlms
956$ cd tlms
957$ ls
95884192 lsprzlbf.pcm
959107549 nwqzqcmw.rls
96097234 svdqvwcz
961$ cd ..
962$ cd ..
963$ cd szfw
964$ ls
96545362 zsflqrtc
966$ cd ..
967$ cd ..
968$ cd vsqjb
969$ ls
970dir vvnzdcbb
971$ cd vvnzdcbb
972$ ls
973144027 tchv
974$ cd ..
975$ cd ..
976$ cd ..
977$ cd ..
978$ cd pprvjm
979$ ls
980dir hvst
981137237 lwfgnzz.qfp
982dir szfw
983$ cd hvst
984$ ls
985100531 svmvncf
986$ cd ..
987$ cd szfw
988$ ls
989233868 hhfqgzfj.qvt
990$ cd ..
991$ cd ..
992$ cd szfw
993$ ls
99414971 tchv
995$ cd ..
996$ cd tjslbpb
997$ ls
998283684 lwfgnzz.wzv
999$ cd ..
1000$ cd ztc
1001$ ls
1002dir bwhfncdm
1003161420 jvcgnbs
1004135102 tchv
1005$ cd bwhfncdm
1006$ ls
1007108615 lwfgnzz.msn
1008$ cd ..
1009$ cd ..
1010$ cd ..
1011$ cd npppw
1012$ ls
101394593 cwdz.tlb
1014258598 jsswljc
1015245674 nmmfzscz
1016$ cd ..
1017$ cd plmb
1018$ ls
1019dir dwnpl
1020dir lwfgnzz
1021$ cd dwnpl
1022$ ls
102315993 hhfqgzfj.qvt
1024264944 vmc.cdf
1025$ cd ..
1026$ cd lwfgnzz
1027$ ls
1028154801 cnbmh.hsh
1029$ cd ..
1030$ cd ..
1031$ cd szfw
1032$ ls
1033173334 lsprzlbf
1034dir lwfgnzz
103570693 szfw
1036$ cd lwfgnzz
1037$ ls
1038dir jgwzcgd
1039dir qgdcjq
1040dir spwcmrl
1041$ cd jgwzcgd
1042$ ls
1043dir jvcgnbs
1044dir nvtvcf
1045$ cd jvcgnbs
1046$ ls
1047131852 cntlhf.mqq
1048217305 dnltsq.fwv
1049174110 jvcgnbs.njb
1050179602 lwfgnzz.mth
1051dir pzcssdhv
1052dir qcmqmnpn
1053227361 szfw
1054dir wmhhl
1055$ cd pzcssdhv
1056$ ls
1057187518 gjfwbwnv
1058115671 lsprzlbf
1059$ cd ..
1060$ cd qcmqmnpn
1061$ ls
1062197002 dlns
106340030 mmpp.ggt
1064198158 tchv
1065$ cd ..
1066$ cd wmhhl
1067$ ls
1068168011 hhfqgzfj.qvt
1069$ cd ..
1070$ cd ..
1071$ cd nvtvcf
1072$ ls
1073dir rrzjjjhc
1074$ cd rrzjjjhc
1075$ ls
107633548 sqs
1077$ cd ..
1078$ cd ..
1079$ cd ..
1080$ cd qgdcjq
1081$ ls
1082252274 prshd.qdj
1083$ cd ..
1084$ cd spwcmrl
1085$ ls
1086dir lslmr
1087dir szfw
1088135076 tchv
1089265608 vmc.cdf
1090$ cd lslmr
1091$ ls
1092172247 rrvwsbl
1093$ cd ..
1094$ cd szfw
1095$ ls
1096192729 rnq
diff --git a/day7/solution.nim b/day7/solution.nim
new file mode 100644
index 0000000..e6f4643
--- /dev/null
+++ b/day7/solution.nim
@@ -0,0 +1,97 @@
1import std/strutils
2
3type
4 Command = string
5 # using LeFile for name because File already exists
6 LeFile = ref object
7 Size: int
8 Name: string
9
10type
11 Directory = ref object
12 Name: string
13 Files: seq[LeFile]
14 Parent: Directory
15 Subdirectories: seq[Directory]
16
17# Directory methods
18method cd(self: Directory, path: string): Directory =
19 if path == "..":
20 return self.Parent
21
22 for subdir in self.Subdirectories:
23 if subdir.Name == path:
24 return subdir
25
26method add(self: Directory, file: LeFile): void =
27 self.Files.add(file)
28
29method add(self: Directory, dir: Directory): void =
30 self.Subdirectories.add(dir)
31
32let total = 70_000_000
33var part1 = 0
34var minRemoved = total
35
36method size(self: Directory, freeThreshold = total): int =
37 var size = 0
38 for file in self.Files:
39 size += file.Size
40
41 for subdir in self.Subdirectories:
42 size += subdir.size(freeThreshold)
43
44 if size <= 100_000:
45 part1 += size
46
47 if size >= freeThreshold:
48 minRemoved = min(minRemoved, size)
49
50 return size
51
52proc run(root: Directory, input: seq[Command]): void =
53 # start pc from 1 to ignore "cd /" command thats coming first
54 var pc = 1
55 var current = root
56
57 let endpc = input.len()
58 while pc < endpc:
59 let command = input[pc]
60 assert(command[0] == '$')
61
62 let tokens = command.splitWhitespace()
63
64 case tokens[1]:
65 of "cd":
66 current = current.cd(tokens[2])
67 pc += 1
68 of "ls":
69 pc += 1
70 while pc < endpc:
71 let file = input[pc]
72 # end of file list
73 if file[0] == '$':
74 break
75
76 let fileInfo = file.splitWhitespace()
77 if fileInfo[0] == "dir":
78 current.add(Directory(Name: fileInfo[1], Files: @[], Parent: current, Subdirectories: @[]))
79 else:
80 current.add(LeFile(Size: fileInfo[0].parseInt(), Name: fileInfo[1]))
81 pc += 1
82 else:
83 assert(false)
84
85 return
86
87let content = readFile("./input.txt").strip().splitLines()
88
89var root = Directory(Name: "/", Files: @[], Parent: nil, Subdirectories: @[])
90run(root, content)
91
92let totalUsed = root.size()
93let totalFree = total - totalUsed
94discard root.size(30_000_000 - totalFree)
95
96echo part1
97echo minRemoved