diff options
-rw-r--r-- | aoc22/Cargo.lock | 14 | ||||
-rw-r--r-- | aoc22/Cargo.toml | 2 | ||||
-rw-r--r-- | aoc22/day6/input (renamed from aoc22/input) | 0 | ||||
-rw-r--r-- | aoc22/day6/solve.pl | 24 | ||||
-rw-r--r-- | aoc22/day7/Cargo.toml | 7 | ||||
-rw-r--r-- | aoc22/day7/input | 1001 | ||||
-rw-r--r-- | aoc22/day7/src/main.rs | 122 | ||||
-rw-r--r-- | aoc22/day8/Cargo.toml | 7 | ||||
-rw-r--r-- | aoc22/day8/input | 99 | ||||
-rw-r--r-- | aoc22/day8/src/main.rs | 46 | ||||
-rw-r--r-- | aoc22/lib/src/lib.rs | 14 |
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") } |