1
0
Fork 0

Compare commits

...

3 Commits

Author SHA1 Message Date
chylex c83c50eeaf
Add 2022 - Day 8 - Part 1 2022-12-26 14:00:21 +01:00
chylex c90b93c155
Add 2022 - Day 7 - Part 2 2022-12-26 11:06:51 +01:00
chylex 2456d3d7a0
Add 2022 - Day 7 - Part 1 2022-12-26 11:02:07 +01:00
7 changed files with 1258 additions and 2 deletions

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 07" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/07" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/07/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Day 08" type="PythonConfigurationType" factoryName="Python">
<module name="2022" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/08" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/08/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

991
2022/07/input.txt Normal file
View File

@ -0,0 +1,991 @@
$ cd /
$ ls
dir blrnnv
dir ctfjwl
dir dqf
135993 dqqbcfr
dir ftj
125510 fzjdz
dir jvtlfbzr
31762 lsvw.lwr
dir qfstpm
dir sbprmc
dir svbnljr
dir tchbjclg
dir wtm
dir ztrz
$ cd blrnnv
$ ls
169869 mjjj.wnq
$ cd ..
$ cd ctfjwl
$ ls
209537 zzdpcnmt.qbf
$ cd ..
$ cd dqf
$ ls
205200 hnbqlmmg
80316 lmw.zmd
dir mwj
122312 tsrwvqbg.tzh
$ cd mwj
$ ls
18195 bddslhrg.twf
122813 qfccg.crl
$ cd ..
$ cd ..
$ cd ftj
$ ls
dir clchr
dir hmd
40232 vtzlv
$ cd clchr
$ ls
dir sbzf
$ cd sbzf
$ ls
257770 thwhz.pgp
$ cd ..
$ cd ..
$ cd hmd
$ ls
62643 bddslhrg.qzl
dir lfpm
277745 sgddpc
117478 vjchlsrc.cmh
7911 zzdpcnmt.qbf
$ cd lfpm
$ ls
107158 bddslhrg
253844 fzjdz.mlw
217005 glzsnz.cvs
71371 qfccg.crl
193163 sdmmmds.nwt
dir vlnbm
$ cd vlnbm
$ ls
143113 lwhtsvg.bjm
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd jvtlfbzr
$ ls
dir gwz
dir hfftvmw
dir jlftgw
dir nnpvwtvt
98713 wtbzpqvb
$ cd gwz
$ ls
161853 blfnwqtm.vhw
180524 fbqpql.bbw
dir jvrdcf
dir ldcmtwvt
dir pjm
dir qjj
$ cd jvrdcf
$ ls
42681 bddslhrg
dir cbcq
dir fzjdz
dir ghwnd
dir gpbhtj
dir hsmlb
dir mjjj
129934 sdmmmds.nwt
dir wdvqhn
196970 zzdpcnmt.qbf
$ cd cbcq
$ ls
dir hsw
262458 lbhzblh.zfn
dir qbpvrr
205708 sdmmmds.nwt
263842 tqcgmwbj.bcn
4847 vjchlsrc.cmh
72550 wnmpdtrr.zrc
$ cd hsw
$ ls
dir rdvfwbw
$ cd rdvfwbw
$ ls
dir fthdrqnr
$ cd fthdrqnr
$ ls
31974 htnpjdr.wsl
$ cd ..
$ cd ..
$ cd ..
$ cd qbpvrr
$ ls
198987 nnhpdvv.vvn
$ cd ..
$ cd ..
$ cd fzjdz
$ ls
149832 ldb.qnt
183866 nbnzfplj.lrs
$ cd ..
$ cd ghwnd
$ ls
177598 ggchv.tsv
163367 mjjj
13258 pdcf.flm
$ cd ..
$ cd gpbhtj
$ ls
dir cvm
160598 fcng.sbf
272547 ndnlzb
285657 pvs.ldf
166261 sdmmmds.nwt
207433 zzdpcnmt.qbf
$ cd cvm
$ ls
246462 fpwvfs.gpb
133303 vjchlsrc.cmh
$ cd ..
$ cd ..
$ cd hsmlb
$ ls
252425 tqcgmwbj.bcn
$ cd ..
$ cd mjjj
$ ls
96351 fvgj
272667 qfccg.crl
196309 ssv.ljs
$ cd ..
$ cd wdvqhn
$ ls
190200 sdmmmds.nwt
dir tjgfcs
214364 tqcgmwbj.bcn
174218 wqpmmgtd
$ cd tjgfcs
$ ls
dir gngb
268455 hqctmf.cdg
242060 prbwvv
$ cd gngb
$ ls
102313 fhqgpb.cqc
77189 mjjj.cdw
163701 sdmmmds.nwt
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd ldcmtwvt
$ ls
dir bqmbrr
dir cfcfnspz
dir fzjdz
dir gvd
dir mpqtgd
9560 mqfdcz.wqt
75810 shps
249000 tqcgmwbj.bcn
139099 zdv.zgz
dir zpct
$ cd bqmbrr
$ ls
175893 hwrdtwsv.brd
$ cd ..
$ cd cfcfnspz
$ ls
dir gmzsn
dir gvrfbt
105314 mjjj
181873 vjchlsrc.cmh
$ cd gmzsn
$ ls
dir bddslhrg
$ cd bddslhrg
$ ls
dir cspptmpm
258841 fzjdz.bfs
dir npmh
72584 qfccg.crl
$ cd cspptmpm
$ ls
239223 fzjdz
11003 sdmmmds.nwt
73589 tqcgmwbj.bcn
251204 vdz.jcd
$ cd ..
$ cd npmh
$ ls
186878 bddslhrg
264830 bddslhrg.gdq
$ cd ..
$ cd ..
$ cd ..
$ cd gvrfbt
$ ls
200067 zcvjj
$ cd ..
$ cd ..
$ cd fzjdz
$ ls
dir bddslhrg
dir fvqszrj
dir gqcdtjzj
dir pcfr
250120 pqqbpmr
dir qbpvrr
$ cd bddslhrg
$ ls
72852 sjn
$ cd ..
$ cd fvqszrj
$ ls
dir mmzcqr
24439 tqcgmwbj.bcn
dir vhpqjr
$ cd mmzcqr
$ ls
dir gzfqggrr
$ cd gzfqggrr
$ ls
162528 frdgcr.gnb
$ cd ..
$ cd ..
$ cd vhpqjr
$ ls
194144 mjjj
$ cd ..
$ cd ..
$ cd gqcdtjzj
$ ls
231917 pftb
174091 vbzfgtwp
$ cd ..
$ cd pcfr
$ ls
dir dtbws
76624 qfccg.crl
dir qjqjd
dir qjsldd
$ cd dtbws
$ ls
dir vwjnsbjm
$ cd vwjnsbjm
$ ls
56502 mjjj.jqj
130426 qfglmz
23199 vjchlsrc.cmh
$ cd ..
$ cd ..
$ cd qjqjd
$ ls
71015 qfccg.crl
40443 vjchlsrc.cmh
$ cd ..
$ cd qjsldd
$ ls
261945 fzjdz.vcw
$ cd ..
$ cd ..
$ cd qbpvrr
$ ls
138915 fvh.sdp
dir mdvqv
168843 qbpvrr
90599 tchbjclg
226671 vjchlsrc.cmh
$ cd mdvqv
$ ls
159050 bddslhrg
2691 fzjdz
245322 psr
7732 zhnbgcc.lsc
$ cd ..
$ cd ..
$ cd ..
$ cd gvd
$ ls
84112 bhnt.gjg
18231 gzrgd.vvj
dir ntvmrrd
234773 rcfbjzj
281805 sdmmmds.nwt
267837 zzdpcnmt.qbf
$ cd ntvmrrd
$ ls
46209 lwvvwd.rtg
$ cd ..
$ cd ..
$ cd mpqtgd
$ ls
99833 qbpvrr
$ cd ..
$ cd zpct
$ ls
dir bddslhrg
272296 znffshsg.jrt
$ cd bddslhrg
$ ls
81585 vjchlsrc.cmh
$ cd ..
$ cd ..
$ cd ..
$ cd pjm
$ ls
147674 rbctzb
$ cd ..
$ cd qjj
$ ls
21770 wtht.fpd
$ cd ..
$ cd ..
$ cd hfftvmw
$ ls
dir bhvzrsv
130208 cclgndpd
dir fzjdz
39285 jtmcp.pjv
dir mbgvdmpp
dir tchbjclg
202920 vjchlsrc.cmh
$ cd bhvzrsv
$ ls
167049 bts
dir mjjj
257434 qsrpmshg
279724 sdmmmds.nwt
149934 snpb.zwq
254808 tqcgmwbj.bcn
dir wgf
$ cd mjjj
$ ls
dir mrlvp
$ cd mrlvp
$ ls
197237 pmwjbf.lmn
$ cd ..
$ cd ..
$ cd wgf
$ ls
77157 zzdpcnmt.qbf
$ cd ..
$ cd ..
$ cd fzjdz
$ ls
77499 mjjj.pdq
dir shrpdcg
180282 zzdpcnmt.qbf
$ cd shrpdcg
$ ls
22528 bddslhrg
191369 mjjj.llb
35213 sdmmmds.nwt
131772 spfmhdpf.wtr
284434 tpzg.qjg
$ cd ..
$ cd ..
$ cd mbgvdmpp
$ ls
220250 fsdzqhc.ljm
101355 vnrcwb
$ cd ..
$ cd tchbjclg
$ ls
113952 gjbp.qgs
$ cd ..
$ cd ..
$ cd jlftgw
$ ls
dir bddslhrg
210047 cdbch
dir dvrb
266336 fhvwlg
139851 qfccg.crl
dir rcqhb
176510 vjchlsrc.cmh
dir wfrjg
$ cd bddslhrg
$ ls
78175 zzdpcnmt.qbf
$ cd ..
$ cd dvrb
$ ls
216103 fzjdz.blg
$ cd ..
$ cd rcqhb
$ ls
39727 cgfjm.dpt
dir pwb
$ cd pwb
$ ls
39040 sdmmmds.nwt
$ cd ..
$ cd ..
$ cd wfrjg
$ ls
206877 zzdpcnmt.qbf
$ cd ..
$ cd ..
$ cd nnpvwtvt
$ ls
264455 czrjz
dir nfdv
dir nmcp
113232 pffgw.hbv
dir qrzlrt
$ cd nfdv
$ ls
dir fpldng
dir jhj
56720 ltv
170870 rgvs.ggh
$ cd fpldng
$ ls
157283 vzv.qrq
$ cd ..
$ cd jhj
$ ls
172487 qpfh.lpr
$ cd ..
$ cd ..
$ cd nmcp
$ ls
273633 zzdpcnmt.qbf
$ cd ..
$ cd qrzlrt
$ ls
111080 bddslhrg
$ cd ..
$ cd ..
$ cd ..
$ cd qfstpm
$ ls
92950 hjr.zjn
252254 sdmmmds.nwt
$ cd ..
$ cd sbprmc
$ ls
dir bddslhrg
158704 bgnt.vbd
dir cddp
dir cpf
dir hfns
276655 phcccdq
dir qbpvrr
dir srjpcj
55405 vhb.mbj
$ cd bddslhrg
$ ls
238260 mjjj
$ cd ..
$ cd cddp
$ ls
87685 fzjdz.sbz
$ cd ..
$ cd cpf
$ ls
dir tchbjclg
$ cd tchbjclg
$ ls
dir wjcvfvz
$ cd wjcvfvz
$ ls
280711 svmf.czw
$ cd ..
$ cd ..
$ cd ..
$ cd hfns
$ ls
dir bbjnrhf
dir cvjtpc
101075 ddbml.vff
dir gdlqtlv
157960 mswfp.wcj
187182 qddfchn.dpg
59533 rfjvzcq
47332 wszmlq.nbt
$ cd bbjnrhf
$ ls
269590 dgmjpzcz
dir mjjj
84955 mjjj.jqn
dir mwqvvsnt
dir qbpvrr
dir qtdmwqcj
131930 tqcgmwbj.bcn
dir vvwb
$ cd mjjj
$ ls
dir hvvh
$ cd hvvh
$ ls
235980 vmmvp.sbh
$ cd ..
$ cd ..
$ cd mwqvvsnt
$ ls
242698 mjjj.qbm
15137 rncwrgjl.jfr
158528 sdmmmds.nwt
$ cd ..
$ cd qbpvrr
$ ls
dir gpc
$ cd gpc
$ ls
184310 lqfgplfg
$ cd ..
$ cd ..
$ cd qtdmwqcj
$ ls
30238 cfpng.fnl
284340 gst
dir lvcjcglg
82263 twmnlqcq
78023 zzdpcnmt.qbf
$ cd lvcjcglg
$ ls
225027 lsdrg.wqv
$ cd ..
$ cd ..
$ cd vvwb
$ ls
184590 trg.vmc
156231 zzdpcnmt.qbf
$ cd ..
$ cd ..
$ cd cvjtpc
$ ls
dir whqnlc
$ cd whqnlc
$ ls
66362 jnsprdt.vrs
dir tchbjclg
dir zhw
$ cd tchbjclg
$ ls
227846 vqjtc.pld
$ cd ..
$ cd zhw
$ ls
dir bgwcrp
$ cd bgwcrp
$ ls
114175 dftv
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd gdlqtlv
$ ls
121215 gbltpcv.prz
41387 tqcgmwbj.bcn
$ cd ..
$ cd ..
$ cd qbpvrr
$ ls
79921 tqcgmwbj.bcn
263185 vjchlsrc.cmh
$ cd ..
$ cd srjpcj
$ ls
106650 fzjdz.tdf
135245 qfccg.crl
97014 tvlmvqm
$ cd ..
$ cd ..
$ cd svbnljr
$ ls
286919 lwvw.zlr
$ cd ..
$ cd tchbjclg
$ ls
dir bljmjwm
dir hsjww
dir ptfsh
dir qbpvrr
147832 qfccg.crl
$ cd bljmjwm
$ ls
dir cqtmhzbf
dir mfpcdbg
dir qlzg
dir qtdh
dir tbdff
dir tchbjclg
211603 zhr.gwl
$ cd cqtmhzbf
$ ls
dir mmbgqlm
150758 tqcgmwbj.bcn
dir ztcbmbw
$ cd mmbgqlm
$ ls
93439 bddslhrg.gnm
25644 qbpvrr.jhm
$ cd ..
$ cd ztcbmbw
$ ls
dir cmwwg
dir stgmndfd
$ cd cmwwg
$ ls
239158 bfl.pwl
dir dbvnwz
17700 pqtpmpp
dir tchbjclg
$ cd dbvnwz
$ ls
217821 bzgsbc.zzp
$ cd ..
$ cd tchbjclg
$ ls
dir tpdtglwp
52714 vjchlsrc.cmh
111040 zzdpcnmt.qbf
$ cd tpdtglwp
$ ls
287567 jmddscd
$ cd ..
$ cd ..
$ cd ..
$ cd stgmndfd
$ ls
38426 bll.pww
$ cd ..
$ cd ..
$ cd ..
$ cd mfpcdbg
$ ls
dir trjgzcj
$ cd trjgzcj
$ ls
dir hngr
268655 lgrwtch
258843 pbpnjf.tmg
100112 qbh
72784 qbpvrr.cpg
dir vbmqtf
197735 vjchlsrc.cmh
$ cd hngr
$ ls
82873 cwbmqp.llb
261780 hsgwfv.pfn
42859 ljt
dir tchbjclg
$ cd tchbjclg
$ ls
dir fhsgvttf
253131 gtghn
dir nzpcvjhp
dir tpqrqtqj
$ cd fhsgvttf
$ ls
56727 mjjj.vzf
$ cd ..
$ cd nzpcvjhp
$ ls
dir bddslhrg
dir blhrls
$ cd bddslhrg
$ ls
242433 vpvpqtqb.dfr
$ cd ..
$ cd blhrls
$ ls
110313 fzjdz.qtf
$ cd ..
$ cd ..
$ cd tpqrqtqj
$ ls
dir dfjmpvj
114636 gmqqrtv
dir mjjj
175067 wggfznff
$ cd dfjmpvj
$ ls
174485 sjzg
$ cd ..
$ cd mjjj
$ ls
111397 pslm.fjf
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd vbmqtf
$ ls
151429 tchbjclg.tzm
$ cd ..
$ cd ..
$ cd ..
$ cd qlzg
$ ls
127640 bddslhrg.wbj
dir fzjdz
dir ghllcw
62733 qfccg.crl
96986 qwgh
268380 vjchlsrc.cmh
$ cd fzjdz
$ ls
153535 gcjss
$ cd ..
$ cd ghllcw
$ ls
dir fzjdz
dir hwfm
2536 jglh.njg
dir mjjj
dir mlhwcg
200842 qfccg.crl
dir tchbjclg
246542 tqcgmwbj.bcn
dir tqtsl
dir vpn
$ cd fzjdz
$ ls
124920 jzsbrwj
dir wtvfgcrq
$ cd wtvfgcrq
$ ls
dir ltnzjbl
187917 mjjj.svp
dir nvgrzrbr
dir pngcwl
$ cd ltnzjbl
$ ls
151460 jmc.zjf
252590 tchbjclg
$ cd ..
$ cd nvgrzrbr
$ ls
193994 qbpvrr.tsv
152776 tchbjclg.swm
243770 vqzs.hjp
$ cd ..
$ cd pngcwl
$ ls
74603 bddslhrg
288915 vjchlsrc.cmh
$ cd ..
$ cd ..
$ cd ..
$ cd hwfm
$ ls
dir qbpvrr
92630 vjchlsrc.cmh
$ cd qbpvrr
$ ls
dir vlwbhgnv
$ cd vlwbhgnv
$ ls
5248 tchbjclg
$ cd ..
$ cd ..
$ cd ..
$ cd mjjj
$ ls
255751 qfccg.crl
$ cd ..
$ cd mlhwcg
$ ls
115287 pfmch.ncr
$ cd ..
$ cd tchbjclg
$ ls
dir jgrmrzlh
155900 jpljl.fnw
$ cd jgrmrzlh
$ ls
dir mjjj
96116 qbpvrr
270714 tqcgmwbj.bcn
$ cd mjjj
$ ls
59415 dpdgtz
47363 twghmhf.qhf
194434 vbnppl.fws
$ cd ..
$ cd ..
$ cd ..
$ cd tqtsl
$ ls
34243 qqf
131945 qtplsbwd
$ cd ..
$ cd vpn
$ ls
286479 sdmmmds.nwt
$ cd ..
$ cd ..
$ cd ..
$ cd qtdh
$ ls
215668 nhfpn
$ cd ..
$ cd tbdff
$ ls
48347 qfccg.crl
178091 vbsqcnmm
$ cd ..
$ cd tchbjclg
$ ls
dir bddslhrg
dir cwn
251313 hll.ctt
dir qbpvrr
dir scsp
$ cd bddslhrg
$ ls
dir pqtj
185542 qbpvrr
dir tchbjclg
$ cd pqtj
$ ls
141015 jtwpnb.wvf
17260 lgvbns.pvt
$ cd ..
$ cd tchbjclg
$ ls
dir btsmnvn
237149 hhgbtf.zzs
258581 lwvfgbdj.gpp
31561 mjjj
240514 qbwq
90283 qfccg.crl
$ cd btsmnvn
$ ls
dir bddslhrg
dir qbpvrr
$ cd bddslhrg
$ ls
144007 tchbjclg.qql
$ cd ..
$ cd qbpvrr
$ ls
211075 mjjj
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd cwn
$ ls
67908 gldrw
231112 qbpvrr
$ cd ..
$ cd qbpvrr
$ ls
4482 fzjdz.lzr
134244 rnscgpv.tvg
211213 tmvzclz.mjg
107771 wvzs.nns
$ cd ..
$ cd scsp
$ ls
30654 zzdpcnmt.qbf
$ cd ..
$ cd ..
$ cd ..
$ cd hsjww
$ ls
12233 crzr.jrf
dir qbpvrr
$ cd qbpvrr
$ ls
dir bddslhrg
54681 fzjdz.wzv
212670 hpmzrq
dir mcvbjw
138779 nhsdjmjj.szh
dir nllvlzfr
217275 tqcgmwbj.bcn
$ cd bddslhrg
$ ls
261081 lbdqrjjp.ffj
244506 wvn.ttr
55843 zbng.zmm
$ cd ..
$ cd mcvbjw
$ ls
149468 rcvbqhh
$ cd ..
$ cd nllvlzfr
$ ls
162791 rdrhrnzc
$ cd ..
$ cd ..
$ cd ..
$ cd ptfsh
$ ls
163959 bddslhrg.wwb
dir hthjj
dir hwpv
222930 ndvqsfbs.rfb
dir rgrcfr
dir rvrsrfl
95254 tqcgmwbj.bcn
282463 vjchlsrc.cmh
181699 zzdpcnmt.qbf
$ cd hthjj
$ ls
101683 dthb.hwv
112759 mjmdfgl.vdz
191795 whtfg
$ cd ..
$ cd hwpv
$ ls
244334 fzjdz.pgp
$ cd ..
$ cd rgrcfr
$ ls
dir wpslpf
$ cd wpslpf
$ ls
87578 mjjj
$ cd ..
$ cd ..
$ cd rvrsrfl
$ ls
dir qbpvrr
$ cd qbpvrr
$ ls
dir gqv
dir hfg
dir lpbc
dir ppp
16805 snlhrz
29365 wnd.mdj
$ cd gqv
$ ls
229300 tqcgmwbj.bcn
$ cd ..
$ cd hfg
$ ls
1680 hcmmjtbq.wcv
$ cd ..
$ cd lpbc
$ ls
100372 lqf
88156 sddtdz
$ cd ..
$ cd ppp
$ ls
79608 tchbjclg
$ cd ..
$ cd ..
$ cd ..
$ cd ..
$ cd qbpvrr
$ ls
22955 zzdpcnmt.qbf
$ cd ..
$ cd ..
$ cd wtm
$ ls
4584 qfccg.crl
$ cd ..
$ cd ztrz
$ ls
187968 fzjdz.thw

85
2022/07/main.py Normal file
View File

@ -0,0 +1,85 @@
from typing import Optional
from utils.input import read_input_lines
class Directory:
def __init__(self, name: str, parent: Optional["Directory"]) -> None:
self.name = name
self.parent = parent if parent is not None else self
self.child_directories = dict()
self.child_files = dict()
self.total_size = None
def record_directory(self, name: str) -> None:
if name not in self.child_directories:
self.child_directories[name] = Directory(name, self)
self.total_size = None
def record_file(self, name: str, size: int) -> None:
self.child_files[name] = size
self.total_size = None
def get_size(self) -> int:
if self.total_size is None:
self.total_size = sum(self.child_files.values()) + sum(child.get_size() for child in self.child_directories.values())
return self.total_size
def collect_directories(self, target_list: list["Directory"]) -> None:
target_list.append(self)
for child in self.child_directories.values():
child.collect_directories(target_list)
class Session:
def __init__(self) -> None:
self.root_directory = Directory("/", None)
self.current_directory = self.root_directory
def handle_command(self, command: str) -> None:
if command == "ls":
return
(left, right) = command.split(" ", maxsplit = 1)
if left == "cd":
if right == "/":
self.current_directory = self.root_directory
elif right == "..":
self.current_directory = self.current_directory.parent
else:
self.current_directory = self.current_directory.child_directories[right]
def handle_listing(self, size_or_type: str, name: str) -> None:
if size_or_type == "dir":
self.current_directory.record_directory(name)
else:
self.current_directory.record_file(name, int(size_or_type))
session = Session()
for line in read_input_lines():
(left, right) = line.split(" ", maxsplit = 1)
if left == "$":
session.handle_command(right)
else:
session.handle_listing(left, right)
all_directories = list()
session.root_directory.collect_directories(all_directories)
total_size_of_interesting_directories = sum(directory.get_size() for directory in all_directories if directory.get_size() <= 100_000)
print(f"Total size of interesting directories: {total_size_of_interesting_directories}")
total_disk_size = 70_000_000
needed_free_disk_size = 30_000_000
current_free_disk_size = total_disk_size - session.root_directory.get_size()
minimum_folder_size_to_delete = needed_free_disk_size - current_free_disk_size
size_of_deleted_folder = min(folder.get_size() for folder in all_directories if folder.get_size() >= minimum_folder_size_to_delete)
print(f"Size of deleted folder: {size_of_deleted_folder}")

99
2022/08/input.txt Normal file
View File

@ -0,0 +1,99 @@
003112220410413101104044022234320204233341435252223642044225451531421012104343030211442433410302111
301233004003313130222434121135033231250505241131342032404032560542233000343455552123100410402211201
111301041221333142533352050250154136146324550411565615444115604102531135302000320033233340431313123
011312210420442043155233305201305643445224334303310253225205601265233454400214114322131420224022313
130102441231200141254202121022423405224443210463250415204410624313613034320040015223211432442333110
133121132322223054104323242043651144066341346000104210124535555236324451132555525220523220023202433
110011123024113203143145243605143331512223606564503661350336662505131254503242354031400131012444222
221400422202335053520044325014041432662161415523526711633662600635304000112322014001533351130303321
030222020044115331004065013253364503664435753416641653716424535324654054023321025154331103034342414
030331241153233040140314112524504535172167445223426653152774166352145410064425434012002122431142343
224111232453145423354550035141103644127571711431336236226321752314754510214316215104550522141301020
424321022432003551434012134531644165753146143232242275633762323631713541330463531053004424012234010
221233440041435131321565604060121637542135243721227576264551457171313165211546132314103242442012133
301320232222024200651041405631257577625236256225367443317773421262762172454463051224654015452230401
124314451244222611016300517414362722551374735555353871173242751564427674344212032442221554524035432
000210412345203005364660077252742673773341654558568632445755573574757433452636410261362004114032013
333130514223252440150314572132443233363783556666363566733363262631651361523573335361463232143300044
400403124212626240015541437753711632635435857234865883574647337436376563235264524230225211320425534
430312520241033613150127256341412352564548243842255622454762832274857163157242366022041262252034150
125211521340246341461723355443362487532437274863758283488567453538667642367654751321503343220351304
015045453331430626273664314125778234645658386774837783464366334264476243327176571544650404453253132
354034323663213666746174754737374552772744668787244468236435632534753452366177147233020313054042345
305241054630156250416544221136444247327848337737584777837244467756426322644474332262330430251551212
100144030632532041231474166555527386344645548655948476835366757558682728623657547471260405014131510
155501551351164622444476154658383338677369856795967346765977585753438378656352723127554031451225340
213252046404053134327512554784653544697439375473948735593644477348334755453317243676612665133404310
022440140420166534174335264388542568833984445757393864997986883894574577853347367415453352646352541
303425632364032563633467847288735478557676734393879573848466463466672455482853676764477400452414425
421140260266576264621526686828328833799894373434775335763857585383998562862724435337211515426106224
251234063153345361761483764445395779384568938899876568577359785776678952473247274437226445141011143
124165362100637756715727365876646574835535677777467785479666667584536895483528343623556220650044411
523533116461715454347526758528694839737349689796485884675949699354664766465728468324363766204426020
011655232111314171647378426863359767797699886798595874554677869353593448485338287251255363024600501
201454444103773472628888556987787587788889498545597569965587748496753787964648276727241677205552530
022050015673621733475438774338498584975649879876857968775687577968447843939528275674512475556245535
415145246426622536566872225778388854879897849855475687687595454675468637795674534385355242230005213
515410462156777244275234668693874665788796767699675757959578987749863457937753862877526274731341533
532441044352764132482273798897585496755464759898898996955476545867443535986538526852746625533463346
042116466642255478273735578633656564997786577695957789988869999965866866547392358543326526744105124
305463642721567264236826357995536786844968968785757997557699474697669835738584868845834527260231552
066231251534151145564875937345768799895756579656987695996797768779596848379994862646436522463360266
506513057363414584637639439854956668854878865987777598756576697549657897644947484484534264535522136
131666244551736787837659743739478747677995596779697659755568679946768553647438363837764527562663652
424404413335566473356634745356959967996577965786978695878778775749964899347635788855331715645156443
366410447316422733452686338845457787759555776998978979667795556665499755678449775626855353212651324
302136251253517685366593955978666557656668675898896669776695986549696689467499828826265743355612425
546506521534743584874443398869667685788797956777788696997955989646664668879679457843885333126334344
362262154313747445367249673496655464765879658679769897687679766789496785648597346877862642316202103
026226125354532563527338467655476495659657769687899897897899856576869585587683926347427571714351012
324246031677535478765836973778855888768885696676889798687785885666785975868394627754287365751563132
031351623136767474878299634934847976977866799698978866969865695657475657893553946224747277645245120
026056143144572747422538333594694756756655696798979976879958687957995676939686658475475623336500612
662533125413523284737634669357979456995895856799797767679899585888899799675553357648455413641663031
014206153225663545455694774965848955686699676678777689996997596965668976646983688667633463335404141
413012617325174456878669973969459678955956597997687976869576778966464554568469886777721516427616513
502662203642612255238447486939957458967857897679766997696655868558575999589335922456844736112131654
212661502516734223324889447354689969855787756889968698877896757975877697383989627364337421772343024
062105566125733258245733457473775547779958796868868895787767755559647545379345865238624356123242000
402335614754636628236824679555597465548989986755969565969678898559987586856955673832271674166105362
451334645753376162243335579543677879955598768556565759756869877876795947966569855573232735534601241
500262052615557247375888358635954578969966856685689678868986899965887995757987425824514566556143415
025221464647151347477323745438738647477798995699788989796688598687779795846437577837865212462025305
506261641542645445623578634938859695857548567987658895685668887664467397754563764284864222243613255
544001251632514343434242438697698767785468785559797877757559476976744589553445545348132556324315401
312662335054751647576346847944998349986995969646958568675577475645539379875732364426714676752004534
442336642122316123757636234859863735657746598877646757975758669549947438746824526434264347133600103
110222605363451462773826376864836593598856459788567868745977445869448964569655348846536363204056350
000101232124176476234372634789857987399659768658796566947966644948468844584756623732364133065443412
134465433226374477324823357757785535937975665949586889647565456766846389552458234767667646466124353
421406224300535763513347544755878674693949665984559799965894778876384773264625738631365460212615513
452351220036426717772576544574486575445936589965659469684553983864958887588836456352652752044465624
513131310021516677236857346343788436737376979889979498674877368855367664436225742117611411543534241
025341550553445563557374338552585545787433393754685485676457956894674542662544752536711135543323540
535152616216423251726174753447757785566344854848638858756838495369785886445488572266324260520452211
040010242452167571763413223445374499838658479769797468459895353937866635767567612446231533425561512
540233435611063354343623584674548775576735445736954663985773597646587532834332126771664204465150223
115125460640513624264577427672484376565394997956949478368583668555354324253116433334364541633501141
325235035031330065764773672233563447278366899833655673943396323666327273534372213517324021336301134
210455052102126060367721574443448283734742249765698995536842573866568587565571317173455040136014133
130303041444343616551636147765524538863657233824485633222587838375574238775244261440413305250410213
215411311040450233266672334763832288583822422248882386376826865647256855122326112462046245434214110
230231555011111141243461222762213386584878775753548542777758687642766773174237314624160241043301041
323544455001621231632772663352437368846236258422868628887825466644733647626344222306513541033345051
103143140115330535101443674523313247636278477357763543634765673375252223123145511514215131041302240
232425305344242122243634141575125456216884578682284677823883878251534364736772005201664151453532422
102015414143426060302001452111353522415644252842283555326642135161755673127454553246636405351210230
434225550123100466121402111553624464277266354226553673463535217337233242261322143516321221202244233
241043514014314144343662453056766274716234347315115145214653247673432611160552306341450310405413111
242112143335044304622645260260424573275613637141734623226773527441742321265241643455134145215344111
111301110035433343532532505066367716542154757534155161173124736561116131435620565213531350550432142
242323242143224035106205224411500635634124323342513747342475634262646442514656422055112331122023144
002021344233114150010341663531513334522142253265466242366366534525551142525131661102314124401314042
024004104024242151413420354625126365606642452553232242411563750634302214411623615524332515123123121
322320201030004104054100060453523451362415465573527326430616603635233444523531105134335533102202414
013231044323002420215041311645066036204353535300445225661352044506065120312154410321400034312200320
031030413344440552442114452066553136026033443442226333515665300213012326102141034413121232242040400
133131302014414220215344004521556454235620502443013233464014064103264525100404050140223431001414000
221120341111243124154321401255010441026151433422443520262166251632146441120442553301443334201231200
021222222103332103301112520131442023663055232552042262505152050120510455441325453404132240001402111

33
2022/08/main.py Normal file
View File

@ -0,0 +1,33 @@
from utils.input import read_input_lines
lines = read_input_lines()
grid = list(map(lambda line: list(map(int, line)), lines))
rows = len(grid)
cols = len(grid[0])
def is_visible(x: int, y: int) -> bool:
if x <= 0 or y <= 0:
return True
if x >= cols - 1 or y >= rows - 1:
return True
height = grid[x][y]
if all(grid[x_adj][y] < height for x_adj in range(0, x)):
return True
if all(grid[x_adj][y] < height for x_adj in range(x + 1, cols)):
return True
if all(grid[x][y_adj] < height for y_adj in range(0, y)):
return True
if all(grid[x][y_adj] < height for y_adj in range(y + 1, rows)):
return True
return False
visible_trees = sum(is_visible(x, y) for y in range(rows) for x in range(cols))
print(f"Visible trees: {visible_trees}")

View File

@ -86,5 +86,5 @@ The versions should not matter, but I used Visual Studio 2019 with `MSVC v142 (1
| 2021 | 04 | Kotlin | / | 2022 | 04 | Python |
| 2021 | 05 | Kotlin | / | 2022 | 05 | Python |
| 2021 | 06 | Kotlin | / | 2022 | 06 | Python |
| 2021 | 07 | Kotlin | / | | | |
| 2021 | 08 | Kotlin | / | | | |
| 2021 | 07 | Kotlin | / | 2022 | 07 | Python |
| 2021 | 08 | Kotlin | / | 2022 | 08 | Python |