summaryrefslogtreecommitdiff
path: root/aoc22
diff options
context:
space:
mode:
authormathiasmagnusson <mathias@magnusson.space>2022-12-11 23:04:39 +0100
committermathiasmagnusson <mathias@magnusson.space>2022-12-11 23:04:39 +0100
commitb7e2fe6160280472a625a8867ea5177b0155737c (patch)
treef8b10bd9a20adbd568b3a0d75fc0367a0523107f /aoc22
parentac1f723d39b6d25903237af86a7319209373731b (diff)
downloadprogramming-problem-solving-b7e2fe6160280472a625a8867ea5177b0155737c.tar.gz
Aoc day 6, 7 & 8
Diffstat (limited to 'aoc22')
-rw-r--r--aoc22/Cargo.lock14
-rw-r--r--aoc22/Cargo.toml2
-rw-r--r--aoc22/day6/input (renamed from aoc22/input)0
-rw-r--r--aoc22/day6/solve.pl24
-rw-r--r--aoc22/day7/Cargo.toml7
-rw-r--r--aoc22/day7/input1001
-rw-r--r--aoc22/day7/src/main.rs122
-rw-r--r--aoc22/day8/Cargo.toml7
-rw-r--r--aoc22/day8/input99
-rw-r--r--aoc22/day8/src/main.rs46
-rw-r--r--aoc22/lib/src/lib.rs14
11 files changed, 1334 insertions, 2 deletions
diff --git a/aoc22/Cargo.lock b/aoc22/Cargo.lock
index 866c487..af6e3ba 100644
--- a/aoc22/Cargo.lock
+++ b/aoc22/Cargo.lock
@@ -17,5 +17,19 @@ dependencies = [
]
[[package]]
+name = "day7"
+version = "0.1.0"
+dependencies = [
+ "lib",
+]
+
+[[package]]
+name = "day8"
+version = "0.1.0"
+dependencies = [
+ "lib",
+]
+
+[[package]]
name = "lib"
version = "0.1.0"
diff --git a/aoc22/Cargo.toml b/aoc22/Cargo.toml
index f712e2b..e2032ea 100644
--- a/aoc22/Cargo.toml
+++ b/aoc22/Cargo.toml
@@ -4,4 +4,6 @@ members = [
"lib",
"day1",
"day2",
+ "day7",
+ "day8",
]
diff --git a/aoc22/input b/aoc22/day6/input
index 842f18b..842f18b 100644
--- a/aoc22/input
+++ b/aoc22/day6/input
diff --git a/aoc22/day6/solve.pl b/aoc22/day6/solve.pl
new file mode 100644
index 0000000..8452fff
--- /dev/null
+++ b/aoc22/day6/solve.pl
@@ -0,0 +1,24 @@
+% vim: ft=prolog
+
+main(Filepath) :- read_file_to_string(Filepath, InputString, []),
+ atom_chars(InputString, Input),
+ p1(Input, Ans1),
+ writeln(Ans1),
+ % p2(Input, Ans2),
+ % writeln(Ans2),
+ !.
+
+% p1([A,B,C,D|_], 4) :- unique([A,B,C,D]).
+p1(XS, 4) :- take(XS, 4, YS), unique(YS).
+p1([_|T], L) :- p1(T, L1), L is L1+1.
+
+
+unique([H|T]) :- \+ member(H, T), unique(T).
+unique([]).
+
+p2(XS, 14) :- take(XS, 14, YS), unique(YS).
+p2([_|T], L) :- p2(T, L1), L is L1+1.
+
+% take(XS, N, YS) :- take(XS, N, [], YS).
+% take(_, 0, Acc, Acc).
+% take([X|XS], N, Acc, YS) :- N1 is N - 1, take(XS, N1, [X|Acc], YS).
diff --git a/aoc22/day7/Cargo.toml b/aoc22/day7/Cargo.toml
new file mode 100644
index 0000000..b0e6e9d
--- /dev/null
+++ b/aoc22/day7/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "day7"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+lib = { path = "../lib" }
diff --git a/aoc22/day7/input b/aoc22/day7/input
new file mode 100644
index 0000000..b3e669b
--- /dev/null
+++ b/aoc22/day7/input
@@ -0,0 +1,1001 @@
+$ cd /
+$ ls
+dir bqm
+dir ctztn
+dir dbclg
+dir fhndmnt
+dir gczqbh
+276177 hvbf.lvm
+dir lnsgbqp
+dir pblb
+dir pwfs
+209719 rtv.cjj
+192236 vmtnnfv.mdq
+dir vmvpf
+dir wjgh
+dir wjqsq
+$ cd bqm
+$ ls
+133711 vqv
+263237 wwlv.vgv
+$ cd ..
+$ cd ctztn
+$ ls
+dir gpgbfzbs
+dir hfvqpt
+55466 jshtffs
+dir rgzfgz
+115519 wdzh.szq
+dir wmfvclz
+221554 zgwwgps.gfn
+$ cd gpgbfzbs
+$ ls
+354710 tlvmh.ghp
+$ cd ..
+$ cd hfvqpt
+$ ls
+dir cggfgt
+dir jshtffs
+175230 nnn.chs
+13406 plqjpqss
+dir pnwcq
+dir str
+$ cd cggfgt
+$ ls
+109434 fhww
+dir glnrg
+dir mptpfvlh
+305315 nlhfgpr.vnv
+297519 tlvmh.ghp
+dir vmvpf
+$ cd glnrg
+$ ls
+345026 qzfpwv
+196361 rgzfgz
+$ cd ..
+$ cd mptpfvlh
+$ ls
+dir lsbjp
+121174 vlbbbgnn
+$ cd lsbjp
+$ ls
+dir jqclpq
+359939 nlhfgpr
+dir whp
+$ cd jqclpq
+$ ls
+189319 mnhnclpt.qsv
+$ cd ..
+$ cd whp
+$ ls
+dir lgdlztb
+$ cd lgdlztb
+$ ls
+94150 wdzh.szq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vmvpf
+$ ls
+dir pfzd
+66706 rgzfgz
+dir zrc
+$ cd pfzd
+$ ls
+345595 bpjpm
+dir ljtdcgt
+dir plltpvgv
+$ cd ljtdcgt
+$ ls
+134178 nlhfgpr
+$ cd ..
+$ cd plltpvgv
+$ ls
+355576 rqj
+$ cd ..
+$ cd ..
+$ cd zrc
+$ ls
+45363 vqv
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd jshtffs
+$ ls
+dir bwbwldd
+124375 fwvcbcpz.lvr
+dir jctctjj
+dir jshtffs
+dir sngchq
+$ cd bwbwldd
+$ ls
+144330 vthsfg
+$ cd ..
+$ cd jctctjj
+$ ls
+dir flhrmt
+dir rgzfgz
+dir vmtnnfv
+$ cd flhrmt
+$ ls
+132008 dgrt
+263345 nlhfgpr.hss
+$ cd ..
+$ cd rgzfgz
+$ ls
+214808 mcqlbzs.gwl
+120157 nlhfgpr.hcs
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir rgzfgz
+52978 vlbbbgnn
+$ cd rgzfgz
+$ ls
+177061 nnc
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd jshtffs
+$ ls
+157488 bbsfrg.bbr
+166412 dhwbvggg
+$ cd ..
+$ cd sngchq
+$ ls
+dir bvcsvv
+dir hhd
+$ cd bvcsvv
+$ ls
+dir gbmccf
+5663 vmtnnfv
+278760 vqv
+323147 wjlm.cbw
+$ cd gbmccf
+$ ls
+dir fttnqbwp
+$ cd fttnqbwp
+$ ls
+dir fhs
+$ cd fhs
+$ ls
+137718 rgzfgz
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd hhd
+$ ls
+350019 gphghhdh.rrb
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd pnwcq
+$ ls
+dir qtqqdd
+$ cd qtqqdd
+$ ls
+62319 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd str
+$ ls
+334780 tlvmh.ghp
+dir vcdcgbtr
+211478 vvh.tzh
+dir zlsv
+$ cd vcdcgbtr
+$ ls
+276438 zhh.dsw
+$ cd ..
+$ cd zlsv
+$ ls
+315890 vmvpf.tcs
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd rgzfgz
+$ ls
+dir qwzfs
+$ cd qwzfs
+$ ls
+dir lzl
+$ cd lzl
+$ ls
+dir gpgccbc
+259493 vmvpf.dgz
+$ cd gpgccbc
+$ ls
+124141 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd wmfvclz
+$ ls
+25819 fmqtjdfd.dwp
+253619 qccd.gnd
+121087 sjsz.rtg
+350518 tgs
+dir zmft
+$ cd zmft
+$ ls
+248086 vlbbbgnn
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd dbclg
+$ ls
+dir dgm
+dir rwdfw
+182454 slctrj
+103919 tzp.dvf
+311601 zlbmvfq.qsh
+$ cd dgm
+$ ls
+dir fflb
+dir jshtffs
+26424 shzfvbs.jrj
+$ cd fflb
+$ ls
+154495 ngzgfpt
+$ cd ..
+$ cd jshtffs
+$ ls
+11509 fwvcbcpz.lvr
+169064 hzhbhgjn.dvc
+38675 jwcnwm.prf
+dir mjb
+dir nwwcb
+300017 qtrqn.qdv
+dir rfjdh
+173691 rgzfgz.wgz
+$ cd mjb
+$ ls
+dir rgzfgz
+$ cd rgzfgz
+$ ls
+192387 ssm
+$ cd ..
+$ cd ..
+$ cd nwwcb
+$ ls
+312609 ggvwvdw.hhg
+107482 ppqmjzh
+204253 vlbbbgnn
+$ cd ..
+$ cd rfjdh
+$ ls
+305213 smf.jgv
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd rwdfw
+$ ls
+dir hbsbctsr
+145955 tqj
+dir vvthg
+$ cd hbsbctsr
+$ ls
+dir shqdr
+$ cd shqdr
+$ ls
+101441 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd vvthg
+$ ls
+344816 wdzh.szq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd fhndmnt
+$ ls
+dir lstcq
+dir nvlncq
+dir rgzfgz
+dir ssqs
+dir vzpnjpsv
+$ cd lstcq
+$ ls
+24507 jshtffs.nrf
+34332 lvqdthm.gwh
+313126 szfqhv.jtv
+274515 wmwpglh
+$ cd ..
+$ cd nvlncq
+$ ls
+dir vmtnnfv
+$ cd vmtnnfv
+$ ls
+104013 wdzh.szq
+$ cd ..
+$ cd ..
+$ cd rgzfgz
+$ ls
+311945 nlhfgpr.fcv
+$ cd ..
+$ cd ssqs
+$ ls
+104254 vlbbbgnn
+207441 vmpd.tdt
+$ cd ..
+$ cd vzpnjpsv
+$ ls
+253593 plfsrlr
+$ cd ..
+$ cd ..
+$ cd gczqbh
+$ ls
+dir nlhfgpr
+dir rgzfgz
+dir vmtnnfv
+$ cd nlhfgpr
+$ ls
+dir bwpd
+86459 vmvpf.mwh
+$ cd bwpd
+$ ls
+345948 rgzfgz.qnp
+$ cd ..
+$ cd ..
+$ cd rgzfgz
+$ ls
+dir rgzfgz
+dir sdsqqq
+$ cd rgzfgz
+$ ls
+dir mprdrmmz
+331389 rbcrg.chs
+191328 rpvpnprr.smn
+$ cd mprdrmmz
+$ ls
+dir ncljgf
+$ cd ncljgf
+$ ls
+309996 bjwvhw.ltr
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd sdsqqq
+$ ls
+95157 qmwcb.wsm
+$ cd ..
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir gbntbhrj
+dir nlhfgpr
+283985 ptl
+dir tnljzft
+38026 vlbbbgnn
+$ cd gbntbhrj
+$ ls
+117782 jshtffs.fpb
+9101 rgzfgz.bdp
+300155 vmtnnfv.wcq
+$ cd ..
+$ cd nlhfgpr
+$ ls
+dir cpglmt
+65206 cwmpnz.czl
+dir gcrntzb
+$ cd cpglmt
+$ ls
+288805 mghgq.msj
+$ cd ..
+$ cd gcrntzb
+$ ls
+126442 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd tnljzft
+$ ls
+278719 ccwfvtgh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd lnsgbqp
+$ ls
+dir lqltnz
+dir vmtnnfv
+69119 vmvpf.rgd
+$ cd lqltnz
+$ ls
+dir vmtnnfv
+dir whvdf
+$ cd vmtnnfv
+$ ls
+3012 vmtnnfv.zlv
+$ cd ..
+$ cd whvdf
+$ ls
+dir nlhfgpr
+115838 rwqbdmfb
+298358 tlvmh.ghp
+dir vmtnnfv
+335379 vmtnnfv.ltj
+129665 zglmsgf
+$ cd nlhfgpr
+$ ls
+12607 fwvcbcpz.lvr
+dir lrbrcz
+dir nvqzmflc
+3793 tlvmh.ghp
+39593 vqv
+$ cd lrbrcz
+$ ls
+195996 vmtnnfv.hlb
+$ cd ..
+$ cd nvqzmflc
+$ ls
+190198 vmvpf
+$ cd ..
+$ cd ..
+$ cd vmtnnfv
+$ ls
+359558 rdjqs
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir clwrz
+362269 nphz.plr
+dir rqbq
+188843 tlvmh.ghp
+dir wsrdwm
+$ cd clwrz
+$ ls
+233770 wdzh.szq
+$ cd ..
+$ cd rqbq
+$ ls
+183770 jtnlfd
+71164 lwgqzccd.dgb
+$ cd ..
+$ cd wsrdwm
+$ ls
+266826 bqg
+dir nlhfgpr
+53502 nlhfgpr.slz
+320422 qzsfvzl.wbb
+dir vhq
+dir vmvpf
+$ cd nlhfgpr
+$ ls
+dir ddlplnhp
+dir nbdj
+$ cd ddlplnhp
+$ ls
+dir czp
+dir dmchbv
+dir nlj
+299460 tlvmh.ghp
+dir wrqqln
+$ cd czp
+$ ls
+286886 tlvmh.ghp
+98020 vlln
+$ cd ..
+$ cd dmchbv
+$ ls
+239186 ppjcgwq
+$ cd ..
+$ cd nlj
+$ ls
+310042 nsgvvfcw.vfm
+70206 vlbbbgnn
+$ cd ..
+$ cd wrqqln
+$ ls
+dir bdprgbp
+$ cd bdprgbp
+$ ls
+42055 hjwrqzf.cqj
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd nbdj
+$ ls
+dir cdjd
+$ cd cdjd
+$ ls
+330601 bzhvfzh.ldp
+14662 hjhdwz.qrt
+188113 pct
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vhq
+$ ls
+348147 qsgjjzn.nft
+$ cd ..
+$ cd vmvpf
+$ ls
+192773 wdzh.szq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd pblb
+$ ls
+dir jshtffs
+dir pwgtvhm
+$ cd jshtffs
+$ ls
+dir vtthv
+$ cd vtthv
+$ ls
+39542 fwfz.gll
+$ cd ..
+$ cd ..
+$ cd pwgtvhm
+$ ls
+271449 hvfq
+$ cd ..
+$ cd ..
+$ cd pwfs
+$ ls
+dir dnnzr
+dir ncjzvsph
+dir nlhfgpr
+$ cd dnnzr
+$ ls
+337565 vlbbbgnn
+345668 vqv
+$ cd ..
+$ cd ncjzvsph
+$ ls
+290438 fdtftjj.sdt
+170963 tlvmh.ghp
+56596 vlbbbgnn
+72923 vmvpf.ldg
+$ cd ..
+$ cd nlhfgpr
+$ ls
+321213 vqv
+$ cd ..
+$ cd ..
+$ cd vmvpf
+$ ls
+dir gwbt
+dir vmvpf
+dir vplm
+$ cd gwbt
+$ ls
+209996 jrzlrp
+23503 vmvpf.hwn
+173320 vqv
+$ cd ..
+$ cd vmvpf
+$ ls
+299874 hqwppnws
+177211 pcqdrn.wqd
+266011 pjllm
+227969 wdzh.szq
+$ cd ..
+$ cd vplm
+$ ls
+dir fbl
+354786 jdb
+273253 nncwhbq.vzn
+dir rgzfgz
+$ cd fbl
+$ ls
+38301 vqv
+256284 wdzh.szq
+$ cd ..
+$ cd rgzfgz
+$ ls
+60018 rdsrl.whb
+dir rgzfgz
+dir wgvw
+$ cd rgzfgz
+$ ls
+dir gmcqfqrn
+$ cd gmcqfqrn
+$ ls
+337129 rgzfgz.pjs
+$ cd ..
+$ cd ..
+$ cd wgvw
+$ ls
+14727 zdhwsm
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd wjgh
+$ ls
+dir ccgddrt
+dir cqh
+60305 dtjctmsw.qgp
+dir hwr
+dir jshtffs
+335879 smfjq
+344915 vlbbbgnn
+63031 wdzh.szq
+dir zbmjg
+$ cd ccgddrt
+$ ls
+148368 dpnlbg.fbb
+dir vmvpf
+$ cd vmvpf
+$ ls
+dir ptwrssn
+340536 tlvmh.ghp
+$ cd ptwrssn
+$ ls
+119875 jshtffs
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd cqh
+$ ls
+dir blvcjl
+158276 fjv
+279848 fnh.rdf
+dir vmtnnfv
+$ cd blvcjl
+$ ls
+dir cgsznlm
+47381 gtcv
+227459 rgzfgz.wvr
+dir tgcqhcv
+dir vff
+dir vmtnnfv
+dir vmvpf
+75937 vmvpf.psj
+29291 wdzh.szq
+dir zqmsn
+$ cd cgsznlm
+$ ls
+91350 rpmwrtm.dlr
+$ cd ..
+$ cd tgcqhcv
+$ ls
+dir hnrhdvff
+81404 jshtffs.msp
+158082 jshtffs.szt
+dir nhmqcm
+dir rvfsl
+dir smcrnh
+$ cd hnrhdvff
+$ ls
+154674 htwms.nqc
+dir rslbgns
+192997 vlbbbgnn
+dir vmvpf
+230969 vqv
+195769 ztfg.mfd
+$ cd rslbgns
+$ ls
+236439 dwbjh.whr
+dir gzph
+279480 tlvmh.ghp
+107447 vqv
+$ cd gzph
+$ ls
+46947 tdnmmqm
+$ cd ..
+$ cd ..
+$ cd vmvpf
+$ ls
+285442 sftfzz.pzn
+292269 vmtnnfv.bbc
+$ cd ..
+$ cd ..
+$ cd nhmqcm
+$ ls
+219245 hwpgpdm.qrf
+130169 rsmdgwjz.rph
+$ cd ..
+$ cd rvfsl
+$ ls
+263768 ctprwbl.tjt
+dir jshtffs
+dir rgzfgz
+291351 vpcd.hvf
+$ cd jshtffs
+$ ls
+9465 fwvcbcpz.lvr
+dir htb
+dir jshtffs
+202004 nrgq.cwj
+dir vmvpf
+$ cd htb
+$ ls
+323938 gwhlttb
+75918 llmlgmqz.zsp
+dir nvfv
+117786 qjjv
+167090 vmvpf.qvd
+$ cd nvfv
+$ ls
+135820 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd jshtffs
+$ ls
+240326 fhr.jbf
+$ cd ..
+$ cd vmvpf
+$ ls
+154309 fwvcbcpz.lvr
+$ cd ..
+$ cd ..
+$ cd rgzfgz
+$ ls
+dir jjfdn
+dir nlhfgpr
+$ cd jjfdn
+$ ls
+46675 vfwhjfl.zrz
+$ cd ..
+$ cd nlhfgpr
+$ ls
+26537 qwzcnfz
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd smcrnh
+$ ls
+331015 vpttwwc.jgr
+$ cd ..
+$ cd ..
+$ cd vff
+$ ls
+68000 ntbfs.znj
+265866 rgzfgz.lsl
+53570 vmvpf.ncb
+74229 vqv
+96730 zwq.zdb
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir rgzfgz
+dir zmr
+$ cd rgzfgz
+$ ls
+7492 fwvcbcpz.lvr
+dir gjg
+dir sfrlhmm
+$ cd gjg
+$ ls
+dir dqjfz
+59560 vqv
+33788 wdzh.szq
+$ cd dqjfz
+$ ls
+dir zhtbsq
+$ cd zhtbsq
+$ ls
+222414 cgsjvqvd.rsd
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd sfrlhmm
+$ ls
+94423 rgzfgz
+$ cd ..
+$ cd ..
+$ cd zmr
+$ ls
+269611 gvhrsmt.bdt
+dir vmtnnfv
+$ cd vmtnnfv
+$ ls
+dir rgzfgz
+$ cd rgzfgz
+$ ls
+355703 fwvcbcpz.lvr
+286378 pcf.dss
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vmvpf
+$ ls
+336533 fwvcbcpz.lvr
+80609 hsfnp
+9548 jld.rvt
+dir jshtffs
+219383 rjtrbjl.vbc
+dir vmtnnfv
+182036 vmvpf
+$ cd jshtffs
+$ ls
+dir jshtffs
+dir rtnwnqcb
+358722 szfhzcj.tjt
+167284 tlvmh.ghp
+$ cd jshtffs
+$ ls
+68702 blcgmn
+299911 jjd.pvb
+243135 wdzh.szq
+$ cd ..
+$ cd rtnwnqcb
+$ ls
+128787 jmvlgd.bwv
+268582 tdpqcqfs.nzp
+348305 vmvpf.bnl
+$ cd ..
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir nlhfgpr
+241246 tlvmh.ghp
+$ cd nlhfgpr
+$ ls
+292694 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd zqmsn
+$ ls
+244052 mmthhf.wmd
+144084 psspc.czf
+dir vflpgd
+$ cd vflpgd
+$ ls
+22881 hsbbcdp.psd
+dir rgzfgz
+dir tmz
+246706 vmvpf
+$ cd rgzfgz
+$ ls
+346162 jshtffs.hqw
+dir lhmh
+dir pfwbz
+87008 tzddth.whp
+$ cd lhmh
+$ ls
+dir nlhfgpr
+$ cd nlhfgpr
+$ ls
+167305 tlvmh.ghp
+dir vnsdh
+$ cd vnsdh
+$ ls
+22714 tlvmh.ghp
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd pfwbz
+$ ls
+163433 bzttjhqz.hpz
+198604 vlbbbgnn
+$ cd ..
+$ cd ..
+$ cd tmz
+$ ls
+300571 bmrs
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd vmtnnfv
+$ ls
+dir llwmdf
+dir pvzdlsgp
+48025 zvvrwh.dhw
+$ cd llwmdf
+$ ls
+236755 hbfdll
+$ cd ..
+$ cd pvzdlsgp
+$ ls
+dir drjbqvn
+102548 fwvcbcpz.lvr
+300337 gcv.bnn
+dir grgc
+27918 mtnvzzc.vlj
+dir nlhfgpr
+92639 wdzh.szq
+152813 wmnpg
+$ cd drjbqvn
+$ ls
+292541 jshtffs.gjg
+84918 vqv
+355763 zqsmd
+$ cd ..
+$ cd grgc
+$ ls
+45875 nlhfgpr.rnf
+294562 slshp
+$ cd ..
+$ cd nlhfgpr
+$ ls
+310430 fpglshq
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd hwr
+$ ls
+dir jshtffs
+dir srrgj
+$ cd jshtffs
+$ ls
+275253 fwvcbcpz.lvr
+262142 vlqflmdn.gtd
+dir zrm
+$ cd zrm
+$ ls
+103078 jshtffs.ncf
+$ cd ..
+$ cd ..
+$ cd srrgj
+$ ls
+328221 fqdmfshj.ftn
+107311 lpdrrw
+214681 ltq.gmq
+321175 pzd
+$ cd ..
+$ cd ..
+$ cd jshtffs
+$ ls
+dir ngbb
+$ cd ngbb
+$ ls
+218170 lvmj.sjg
+123373 nwv
+326485 rgzfgz.gjd
+192138 vlbbbgnn
+dir vmtnnfv
+179027 vptgrfr
+$ cd vmtnnfv
+$ ls
+206046 vnlsclvh
+$ cd ..
+$ cd ..
+$ cd ..
+$ cd zbmjg
+$ ls
+30152 fwvcbcpz.lvr
+$ cd ..
+$ cd ..
+$ cd wjqsq
+$ ls
+23196 cmvfcwp.nfz
+dir lnrzw
+316798 nlhfgpr.spt
+dir ntrngh
+284657 tlvmh.ghp
+50758 vmvpf.msg
+$ cd lnrzw
+$ ls
+dir crc
+dir ddhnvwqt
+dir gdhfqlln
+dir vmtnnfv
+$ cd crc
+$ ls
+296423 vmtnnfv.prq
+26320 vqv
+$ cd ..
+$ cd ddhnvwqt
+$ ls
+173923 vqv
+$ cd ..
+$ cd gdhfqlln
+$ ls
+275288 vqv
+$ cd ..
+$ cd vmtnnfv
+$ ls
+52004 pgtmmtrf.vfc
+$ cd ..
+$ cd ..
+$ cd ntrngh
+$ ls
+dir czt
+185012 vlbbbgnn
+$ cd czt
+$ ls
+355964 cvnslv
+143166 mwbcbphd.prr
+40666 rgzfgz
diff --git a/aoc22/day7/src/main.rs b/aoc22/day7/src/main.rs
new file mode 100644
index 0000000..09dbd8a
--- /dev/null
+++ b/aoc22/day7/src/main.rs
@@ -0,0 +1,122 @@
+use std::collections::HashMap;
+
+fn main() {
+ let input = lib::read_input(7);
+
+ part1(&input);
+ part2(&input);
+}
+
+fn part1(input: &str) {
+ let fs = parse(input);
+
+ let ans: u32 = fs
+ .iter()
+ .enumerate()
+ .filter(|(_, f)| matches!(f, Node::Dir { .. }))
+ .map(|(i, _)| get_size(&fs, i))
+ .filter(|&s| s <= 100_000)
+ .sum();
+
+ println!("{}", ans);
+}
+
+fn part2(input: &str) {
+ let fs = parse(input);
+
+ let used = get_size(&fs, 0);
+ let free = 70_000_000 - used;
+ let to_free = 30_000_000 - free;
+
+ let ans = fs
+ .iter()
+ .enumerate()
+ .flat_map(|(i, f)| match f {
+ Node::Dir { .. } => Some(get_size(&fs, i)),
+ _ => None,
+ })
+ .filter(|&s| s >= to_free)
+ .min_by_key(|&s| s)
+ .unwrap();
+
+ println!("{:?}", ans);
+}
+
+fn get_size<'a>(fs: &Vec<Node<'a>>, index: usize) -> u32 {
+ match &fs[index] {
+ Node::Dir { contents, .. } => contents.values().map(|&i| get_size(fs, i)).sum::<u32>(),
+ &Node::File { size, .. } => size,
+ }
+}
+
+#[derive(Debug)]
+enum Node<'a> {
+ Dir {
+ parent: usize,
+ contents: HashMap<&'a str, usize>,
+ name: &'a str,
+ },
+ File {
+ size: u32,
+ name: &'a str,
+ },
+}
+
+impl<'a> Node<'a> {
+ fn parent(&self) -> usize {
+ match self {
+ Node::Dir { parent, .. } => *parent,
+ Node::File { .. } => panic!("File has no parent"),
+ }
+ }
+ fn contents(&mut self) -> &mut HashMap<&'a str, usize> {
+ match self {
+ Node::Dir { contents, .. } => contents,
+ Node::File { .. } => panic!("File has no contents"),
+ }
+ }
+}
+
+fn parse<'a>(input: &'a str) -> Vec<Node<'a>> {
+ let mut dirs = vec![Node::Dir {
+ parent: 0,
+ contents: HashMap::new(),
+ name: "/",
+ }];
+ let mut curr = 0;
+ for line in input.lines() {
+ let s = line.split_whitespace().collect::<Vec<_>>();
+ if s[0] == "$" {
+ match s[1] {
+ "cd" => {
+ if s[2] == "/" {
+ curr = 0;
+ } else if s[2] == ".." {
+ curr = dirs[curr].parent();
+ } else {
+ curr = dirs[curr].contents()[s[2]];
+ }
+ }
+ _ => {}
+ }
+ } else if s[0] == "dir" {
+ let name = s[1];
+ let node = Node::Dir {
+ parent: curr,
+ contents: HashMap::new(),
+ name,
+ };
+ let idx = dirs.len();
+ dirs.push(node);
+ dirs[curr].contents().insert(name, idx);
+ } else {
+ let size = s[0].parse().unwrap();
+ let name = s[1];
+ let node = Node::File { size, name };
+ let idx = dirs.len();
+ dirs.push(node);
+ dirs[curr].contents().insert(name, idx);
+ }
+ }
+ dirs
+}
diff --git a/aoc22/day8/Cargo.toml b/aoc22/day8/Cargo.toml
new file mode 100644
index 0000000..d9b0e54
--- /dev/null
+++ b/aoc22/day8/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "day8"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+lib = { path = "../lib" }
diff --git a/aoc22/day8/input b/aoc22/day8/input
new file mode 100644
index 0000000..e67c61c
--- /dev/null
+++ b/aoc22/day8/input
@@ -0,0 +1,99 @@
+200120010031113332213034140102430141241124321111512323442304040044220141342121012210022220211111200
+111021120230012003124233312003010303204555454332453445353125225214221214442214301113012111020220220
+010000112330232223210123331341111021455213441355415452453433542411022110033014112420103200010200112
+210220131023203033023421012411405531115123145115445215311422135252541100222231431331003220231121021
+020112210133112114444340100410411231114131452544155151415233415312511222041221113442132231003203100
+121210122332301142321211440441113455552434332511455325315545354524142541534411112013143013120333022
+002022223332143323320030004111431434153352153321414154453442552321332341355132444030442110103203212
+212130023213100232130230411132244242133251435525323326611211534441513532233340420321144212221332012
+112201210213131241203033341411115513233426453426433653356253533133113511115222441140433214102332200
+212012000101044144022321521321444445566546646625625665232323663631331412343532242340023204432003233
+101233132121222100241254211542133266356326564552445466322626353633223221135151311240430411433022011
+200132020222314334333551152431232424524623645555522366665322366466545513112135535223102441334310202
+023113000020114221524122422222662645435544455234636242322656464245462233555511334411233402112203303
+323212301014434412315252233452332225554646452654545433445553336343544664455435323243510303023142200
+310022200424121333144123222262332322343322244646667564465544426245466232342143412141451122001041322
+212301111322001335441132334525635254352425553354565445643472236236266635446421522132452121404230333
+222212444300345211222512256444456624535343536756355746664436374344346652444335121144422222340114403
+133103420101433344253425324366444265345745457464444766674564476573243345254266312555221132304022243
+104024111323421413115464433455553477333456354575666765646757774776752425462423244113225443242031103
+102001244212344453145353232652647556546465453563544776667356374453675332254663444121345213131024201
+224444241243433331136646422564367344447534333336573546336576477746463642222264422255444411444213332
+111102440221143134255523244546456346745346547453543465664363545634575433436342252431313443241200434
+134231321331555233423635635366465473563535535586445888474374535544636375425246452265522242444124430
+234112414314111344422243544643454775656784865866884848444877466476364476356322553554245224411411221
+034400114351525345222546546744637535635657575787587675474664764764736443646462322222525151425423322
+200214241324215322354446653764777674587466544685754678446567884767437556756324542252661541311422130
+343144113253113264625454456777333344687566876677476786864558645875776364454562645333232242321313142
+343024121143435322432236376444777668467756646886688564457885758774655565674476525265433235351133020
+403402124545255442342535445764457654765745674556784877787445455686478773563733543423236235255444144
+103322531152132266562676355566367676848756788886766967585484486646776553753344443262466623351341241
+310355244513624552353465735465555764667556575665597778969594858667646774744555337236256442514154340
+023311451112523462333545544537465688645559988688956997665697964748587858337347363225646321434554144
+320135522136342345436443367666564847488558589757575579796688785767645678467555334323622425311134113
+302355525243323546577736555686874886486985688686888898966978978668487864787645754566534465541511251
+334125312126266532347576536548547584696886997768569758698995755875465674754333433642553345425533431
+341111335132225635365534457665748575977867585959997886979957965558787465664637533766462255534332423
+332515314534343636736373478687676678865555895657977886779567677978977887466835476754353523355412552
+223554423243256435734467677444784886576856669787898778968956989875566754875777467667635224535114135
+155522522343322534364735656868875656687568869667769697877887796866975856457447636733764232364431215
+242345244424435673345476658556448689589759768689899966877768987857579874745884637474453634352133231
+415255446645436567674735664645455855996887768879976678686967768687868985856885736776326622253351232
+345511155426334655353457846578475998667966669787979667866969678557875668566464436456435236255355314
+142554534636264637437346664558867877978687978689679869967766679569789677485678377367342526223134543
+445152112563265336347774464854776998568899676687677797996796877777879786686845577654534235322155423
+333311452256452445537757558677965658888896678979799998788899698785896978877575444547572432544335251
+153342523322435374455644657476596955598987666997999878876686677879688676464687476363732553363413554
+144335145664565566437454557675966795686769969779977988878679878778787789465465637576634655354532332
+152415343652336664567566647557776598677998979889877998977867798897785759685544636646555455665423232
+233452324356364643433768554555595977968766779897887998898666688775789556775758843355374525244243434
+415514136342636535455644448567857957878867697988999887897878896698589669784466744746433345345355353
+232342145445335734443368474877857768999979889789879797978786868766697957448687837436437246435352325
+423142134652644455355368647749855698998886897798977997799867788779868756865564445675347463653623132
+221215125542657466763755887857659858677696867997877899797779899996787779754784846775376254442211254
+154531463524644747547747455647685566769977767978799879788898879798999996758665537564563322242224125
+114543323332546776763457675777969696978788779877889799879998997975759878686666834757774555334611241
+353441154256436766664748544445957885788777978878979877989798876799786999466647747557553324526153313
+433233236244364537664567776764977668967888876787887977898978679686668778764647857553662664333221513
+112335142543334473565677774456986769698869989679787999966877889796668798648474667745633463364123315
+113555236654542657737447854474695576987788777767987976776779677896568655666568777374452626625515123
+335535115334436455537766485588496998559679678997888767666867796988758985466776445675326242423551222
+113534446446435634464566878474597579966586699697988866966997787776788976778774466655756463456235323
+432234422656545375357656547448457656589888789768979867898878979959955468888683644466555336562315155
+313344415452422533675445775845665999956589788887986877769867786689888565577764433373633363624515141
+222432351346446453465663784584875977688789959977876966969658866777886544775874577535665532224311252
+225114233145352533344653757488874695566977756698769768695668575699668757584555454357642544414312222
+033415322244643242337557674678486867575857998965787859688788778777887745544746656765646262354135222
+244444135424622245536477356767676647596876888859989597677576756885858547856577434533266366252341111
+043422441154553466473376764757644888596669857975585975898957778585855575867574554436566563342243533
+331142132342425642446677456357664865566895568659588999997598897847485545576757377726563624233332331
+023252542543632422666654576368776445864568889675685656595757555564576478356355573264462564525315531
+401013153355343645357335364463874854866687865999886679877556446867474565563474773455256232432344241
+021145311524153334266573666344586785645787666877957988698886547444446737764473344255436645355133043
+343022114235145422524664767447348848745548778464684486768568675765556575337775543626443412212441440
+111402455441135334663624565477563468586767564584754776865658486876757446535673333342623334312243002
+300312451335434322222245676775746358685854756547745674447587647487533473336654232544332431554454412
+433111155454541556355524273356653577688858857767884847858548544877576457444762553325524214215402141
+131233333423335563265232427676636343767667757678865557657665545337553674363435662333422331253432142
+424110224332255444554444426563344537343587775787775766858448446366677553432226234426335534235001312
+333412002215124441543424366273747763767633456777658554454464446357566564765333524264253113145112300
+101110030515255434456252656567734365435643756543777575374763565634563366532624443621453215143234300
+303322412424455315323623364345353365376676743654344676735433644466637676342646445331232331222232310
+323112211415542144152522545435246756534467755554567676637543357465766366552324534423444455001240332
+104010010231221552145233456226456635564775656444567465773637433733444632663325561451234351230241312
+121411232340543435321316435636242655564355535365574763633547465475523553325562122152444444042300041
+131012210332331125512334254246234345354543573744464635755354544666345534262435114123351541032131413
+320204021134412321515435566234224352423426577577364457356445435455454244243342521425351312003010221
+323114214132034241313542544555435465334424654666346364554655422236635456436354122354410044244241323
+013302120424301452153353441245652435266525344656664634425626224355262362255351231351513443132401213
+320030122021334215313244242334523262333453263233364243362363226452453421344311524253311414201210001
+232000301112410134252124412414346224626463252363536262245565624425334453135542241232142142113023001
+023101113421202000305251552134255163452646652324334242436543224522235515444445314014323100240020120
+320223110031202012323335553432231212252653563665545464422324656333443431535442453303001103202231020
+102033222010100142203435155413125314311166645446465322244546532441244154143433143443342400201012012
+103310002120123402241302221241151441435355114335344522434421453552354154135223134443030043002000021
+112323110033212002113322411233332355223342424233213123445224135331545115152043042400020200022133330
+022111301200101044211214231433231311322554214331413543414521424255241531111410022413003020200231110
+012022111212202121003233141343155411314255551134343533133453252153433344441013011221420230021203220
+221101122202110034040022441212441254112211113355531534335143125434435312222200311411322330203331100
+210122210200133032213341213111433213432513121525124133544144433541201142230241123430213303001122221
diff --git a/aoc22/day8/src/main.rs b/aoc22/day8/src/main.rs
new file mode 100644
index 0000000..f73543d
--- /dev/null
+++ b/aoc22/day8/src/main.rs
@@ -0,0 +1,46 @@
+fn main() {
+ let input = lib::read_input(8);
+
+ part1(&input);
+ part2(&input);
+}
+
+fn part1(input: &str) {
+ let input = input.split_whitespace().map(|x| x.bytes().collect::<Vec<_>>()).collect::<Vec<_>>();
+
+ let mut ans = 0;
+ for (y, line) in input.iter().enumerate() {
+ for (x, c) in line.iter().enumerate() {
+ if visible(&input, x, y) {
+ ans += 1;
+ }
+ }
+ }
+ println!("{}", ans);
+}
+
+fn part2(input: &str) {
+}
+
+fn visible(heights: &[Vec<u8>], x: usize, y: usize) -> bool {
+ for (dy, dx) in &[(0, 1), (0, -1), (1, 0), (-1, 0)] {
+ let height = heights[y][x];
+
+ let mut sx = x as i32;
+ let mut sy = y as i32;
+
+ loop {
+ sx += dx;
+ sy += dy;
+
+ if sx < 0 || sy < 0 || sx >= heights[0].len() as i32 || sy >= heights.len() as i32 {
+ return true;
+ }
+
+ if heights[sy as usize][sx as usize] >= height {
+ break;
+ }
+ }
+ }
+ return false;
+}
diff --git a/aoc22/lib/src/lib.rs b/aoc22/lib/src/lib.rs
index ffe4e46..1ed2b06 100644
--- a/aoc22/lib/src/lib.rs
+++ b/aoc22/lib/src/lib.rs
@@ -1,9 +1,19 @@
-use std::fs;
+use std::{fs, io::Read};
pub mod prelude {
pub use std::error::Error;
}
pub fn read_input(day: usize) -> String {
- fs::read_to_string(format!("day{}/input", day)).expect("Could not read input")
+ let mut s = String::new();
+ let path = if let Some(arg) = std::env::args().nth(1) {
+ if arg == "-" {
+ std::io::stdin().read_to_string(&mut s).unwrap();
+ return s;
+ }
+ arg
+ } else {
+ format!("day{}/input", day)
+ };
+ fs::read_to_string(path).expect("Could not read input")
}