From a2abe26e3190ee2105bf1d46066ae48d3c2ad4f0 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 2 Dec 2020 00:33:09 -0500 Subject: puzzle 2-1 --- Cargo.lock | 43 +++ Cargo.toml | 1 + data/2.txt | 1000 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/2020/2/mod.rs | 64 ++++ src/2020/mod.rs | 4 + 5 files changed, 1112 insertions(+) create mode 100644 data/2.txt create mode 100644 src/2020/2/mod.rs diff --git a/Cargo.lock b/Cargo.lock index c55b2a0..4fb9879 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6,9 +6,19 @@ version = "0.1.0" dependencies = [ "anyhow", "paw", + "regex", "structopt", ] +[[package]] +name = "aho-corasick" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5" +dependencies = [ + "memchr", +] + [[package]] name = "ansi_term" version = "0.11.0" @@ -87,6 +97,12 @@ version = "0.2.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" +[[package]] +name = "memchr" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" + [[package]] name = "paw" version = "1.0.0" @@ -156,6 +172,24 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "regex" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38cf2c13ed4745de91a5eb834e11c00bcc3709e773173b2ce4c56c9fbde04b9c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", + "thread_local", +] + +[[package]] +name = "regex-syntax" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b181ba2dcf07aaccad5448e8ead58db5b742cf85dfe035e2227f137a539a189" + [[package]] name = "strsim" version = "0.8.0" @@ -218,6 +252,15 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "thread_local" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" +dependencies = [ + "lazy_static", +] + [[package]] name = "unicode-segmentation" version = "1.7.1" diff --git a/Cargo.toml b/Cargo.toml index ad1246e..e0ffda6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,5 @@ edition = "2018" [dependencies] anyhow = "1.0" paw = "1.0" +regex = "1.4" structopt = { version = "0.3", features = ["paw", "wrap_help"] } diff --git a/data/2.txt b/data/2.txt new file mode 100644 index 0000000..45e8c19 --- /dev/null +++ b/data/2.txt @@ -0,0 +1,1000 @@ +5-6 s: zssmssbsms +3-6 j: jjjjjrrj +4-7 k: kfkgkkkkk +2-3 n: nkbgfnn +7-12 h: hhhhhhdhhhhhfhhhh +1-4 v: nvvv +6-9 h: hhthplhgmpzsmhhxhh +6-7 r: rrtrrrgrgcc +10-15 h: sdbhvbhfjhwllmrpdv +3-4 s: bsss +5-7 s: sstjsswsspldr +10-14 b: bzbqbbbkpvbblbnrbs +4-11 s: sssmcskwsssssss +2-10 v: rlttvvnvvvvvvksm +4-5 x: xkrxx +2-5 m: bfmmmmm +11-14 r: rlprrtrcrxcrgrrhrr +4-16 l: dzllmllldnllblwcr +3-4 t: nplr +3-5 x: jcxxgkxtjwwgh +3-4 j: msjcjqjgxmjsjfjjj +1-6 z: zgkkdzww +3-5 q: pgqqbq +17-19 t: tttkttwtttttttttttt +5-11 n: nqnlfknntdn +11-12 c: ccccccccccgc +2-14 x: pxmvfrrwlbzxhk +4-5 g: gcggwggxv +4-5 h: phbzhhhqhl +4-5 h: hwbhk +1-2 t: tgmq +16-19 l: llllbjlfvnlhwlllqfp +4-6 r: srrrqggrs +1-3 g: nggwhvcl +1-8 f: pffffffff +2-3 l: lllll +13-15 d: ddrdkdddmdmdddd +11-13 r: rrrgrkrrdrwrrr +3-10 x: xxxxxxxtxq +6-7 p: pspzpvlpxnplhtpc +3-8 f: fsfkfbffvxfc +3-5 z: zzzvwzsfktz +4-7 c: cccgccc +11-12 n: nnnnnnnnnnzn +12-13 n: nnnnnnnmznnpnnn +4-7 q: wqqzgqgfg +5-13 p: tgplpbpmvgpppktps +12-13 x: zwcxlnhwpsvxm +7-10 r: rrrrrrnrrrrgr +1-5 r: rlrrj +15-18 l: nlllllslcllllllllcl +10-11 w: wnwwzwwwwwwwmwrwr +10-11 j: njmmjjjcjjv +3-6 z: vgbdvzgzzzzw +7-8 r: bbcvxzrqpqskcmhwsvx +4-5 c: rgvcgmccc +6-9 d: ddddddddd +6-7 g: gggsggg +4-7 c: ffclfbcdmcvnshw +3-5 n: xnznv +6-7 d: ddddddk +1-2 r: rjvprt +6-7 p: ppphppp +1-11 p: ppppppppppxppp +10-16 x: bxxnxpxxxcxjxtxnw +4-8 s: hzsvsswc +10-12 p: lpwswppppvppphp +2-3 d: bdcddnxc +4-6 s: ssscssp +18-19 k: kkkkkkkjkkkkkkkkkzk +4-6 x: ncxpxx +6-8 h: xhhhqxrhhhfh +15-16 p: qppjnpzfvppzdppgppp +1-7 d: dwvdddddc +3-4 w: wlshzvqw +4-16 s: sbwgjshsznhdsssjts +4-8 t: ptttbkbhtt +11-12 w: wwddwwwwwwwj +2-6 z: zkzzzzzhzzzz +3-6 b: bbxbbb +3-6 z: zztzzq +2-3 h: hhjhh +1-5 x: xptxl +10-11 n: nnwnnnnnndrnpp +5-6 s: jsswmjzkrspsms +2-7 n: nnnnnnnn +4-6 q: qqqhgxg +5-6 r: rrrrqrr +4-5 k: kstjksjbkhhfpzkl +5-6 n: nnnnqpldn +11-13 w: mptdwqgfkwwzb +3-4 x: ccxxmxfzfztxvxdg +2-13 w: wwwwwgjwwwwwwwwwwww +1-5 m: mrmkjqhdcqbz +7-8 l: lldllllh +7-17 d: ddvddddktmckjbmds +3-8 n: htnnnnqlv +3-8 v: chvkvjkvxl +8-12 t: rtffbltcbtttwtqbvt +1-8 n: nhnbvdwq +6-11 b: bblbbmbbbbbbbbbbb +4-7 s: rssbphs +8-9 q: wqqdqqqwqq +10-11 f: sfwfffdffhntffj +4-5 x: xlxbxx +2-4 d: lvdd +3-6 t: djtcsmjrrt +7-11 v: lvvvvvxvvvv +3-4 c: ccpc +3-17 g: nzgjkrpwbfcgzqjvtth +8-15 l: lnhlllgllvgllbgscl +10-11 z: zzzzmzzzzmzzjz +3-10 b: bwntlkjnfbm +5-6 f: vffxnfjffp +1-4 s: dvcssdw +11-13 c: cccctcfccckct +4-6 m: cmtzbmkqqgbmpsmbxwkw +11-13 j: jhjjcjmjjjqjvj +6-7 q: qqqqqqqq +4-10 f: fmxffftfnbm +7-10 n: cdnrfrnvpmmhpnmxbnx +8-9 z: zzzzzzzvz +2-9 h: zrvhddntmhjhhh +11-12 g: gggggggggggg +1-2 h: vhtgfg +1-2 g: gggp +1-2 r: nrktwt +2-8 b: bslkbbbbb +1-5 q: lrfqmq +10-14 q: qbqbqpqqqrqdqqq +7-16 r: nvrrzhsgrwthgbrqkqh +4-5 z: zzzzh +3-8 v: nkvwfvlvv +8-9 z: zzzzzzzfs +2-4 w: vrlrss +1-2 j: jnqswjgps +7-8 f: ffzffffwff +11-12 k: klwqntvkpcthq +5-13 k: kkkkkkkkkkkklk +2-5 w: wwwdxgwwszb +1-13 q: cqqqqtqqdmmnqm +3-8 q: bqtlqqzn +3-12 n: xnzdxdnndpnnqhcnnnnn +6-7 r: kqhrrrxldrmwr +3-5 k: hjkdp +5-6 h: hhhqhrmhbh +14-15 v: vvvvvvvwvvvvkvvvv +2-10 h: nbcpsmpvph +8-9 r: rjrrrrrrp +8-10 j: jjjjjjjcjt +8-13 l: jkfllllllxldvplvll +5-11 m: mmmmmmmmmmmm +5-6 v: vhvvgvv +12-13 n: nndnnnnnnnnnb +3-4 f: wfmfjfffnfflf +4-14 l: llllllvllllllf +10-13 f: vvtfcfxfwdfmnf +4-8 w: wxwwwghwpwrtwww +5-8 g: tsggmgcggg +9-11 w: wcwwwwwwwlqw +8-10 z: zzzzzzzpzz +2-4 m: mmrm +16-17 k: kdkkkkkkkkwkkkpklkkk +4-8 k: kkkkkkkn +2-5 p: wpppqtwkpbptmlds +6-8 f: ffbffnff +2-16 z: ffzjwnbbljfzgfrlz +3-18 j: jjqdrpcjjjjjjbfbjjj +10-11 v: vjvvvvvvvvm +3-8 f: fmnpffflfnd +13-14 n: nmnnnnnnnnnnnr +3-11 k: jrkrkjzccwhlxkgkh +1-4 z: pzzzhzz +6-7 k: kvknwkj +2-10 l: cllblhlwlq +3-4 n: nnnng +3-6 w: tjlzwwc +12-17 l: llllvlllllllllllw +2-4 h: dhhlmhqddhnh +1-2 r: rsqjd +10-13 s: zszlssssssjsswpssssz +2-6 v: vmvvdxvv +9-13 m: qpmdmzmmxjswmmmmm +19-20 f: pzjnfzfwfcffffxmfffl +1-5 n: nnnsknnnn +13-14 r: rrkrrrrrrrrrrr +9-10 h: hhhhhhphfh +6-8 x: ppcxlxhl +1-3 z: bzxwzjhcgwcjgfgrlc +8-9 n: nnnnnnnwwn +5-6 g: qcgghgg +3-4 p: ppxp +7-9 b: phbbtbsbffbjbbb +5-13 t: tcstttjtzdnhkt +10-12 k: mkckkkkkkbkkk +4-5 v: twcpvvzvjsvzqvwkbc +17-18 m: bflhwmndwmkcmqsmmgkm +14-16 t: ptttrtttpttttttfhtlt +7-10 b: bxbrbbbnmcbbvbb +6-9 r: rwvrrpmmr +10-11 h: hxhhhhhhhhx +4-5 h: hmhth +1-3 l: lldl +1-2 d: dqhsxsqmmndx +10-13 l: llllhlqllslld +18-19 z: zzzzzzzzzpzzzzzzzcpz +5-6 j: jjjjjp +7-9 t: tttttttttt +6-8 t: tttttttzc +5-17 x: xxxxxxxxxxxxxxxxxxxx +16-20 x: xdxxxxxwxxxxxcxpxsxw +3-4 f: ffxf +4-9 q: mqqcqqqqqqd +2-6 z: zdjnzjtr +4-7 p: phppppv +11-12 m: mgmshkmmbmqmmmmm +2-5 b: ztltbbpgxmbbptqb +4-10 v: vjvwlvfqmrhffvbkfv +1-3 k: xdcthk +3-9 s: ssssssssm +9-18 w: whjwnwwwkwbwwwwwwwww +16-17 j: jjjkcjjjjpjjjjjjdjjt +9-12 b: bdvjzbwbbgbbqb +2-6 f: ffrrsj +3-8 t: tttttttwt +5-7 c: cczcmcxc +5-6 z: tfwszq +8-9 k: kkkrskkdkkr +5-7 h: hhwhhhghh +8-14 m: smfgmmmkmmmmmmmpxmnn +8-9 w: gwwmplbkjf +1-8 z: kjzwvtvdhpkzjzlxpjq +3-5 b: mgbqbbb +3-4 g: skltgpcng +7-8 k: cxxkktkc +12-20 b: fbbmcbbhkbbbbhbbbbbz +6-19 k: gvflkkgqbkckcmlcqkl +10-11 l: llllllllkdll +3-4 g: ggqg +5-6 d: ddddzd +4-5 n: nvnnn +4-5 j: jsjsjj +1-4 m: mmmmmmmmmmmmmmmmm +11-15 c: fljcwwlnbfzxfqt +3-4 l: lwlndjl +7-10 w: wqwwvwwwwjw +15-16 k: fkkkvkkklbkkxkdkkr +3-4 z: zszz +5-7 z: xzzhlzzzplzzq +8-9 z: zzzzkzzzk +2-13 h: hhhhhhhhhhhhqbhh +6-9 n: dnnzwdnncqnjnnvm +6-10 r: rkwlrdsrrrzrrrr +1-4 b: bbbwbb +1-2 b: vbxm +5-11 m: jrkbkmmmmmmmw +2-3 n: wnmntnxdkl +11-12 f: ffwfnffffvxfffff +1-2 m: xhgmxvmkzj +10-14 s: sssrnsssssssssrsv +3-9 x: xxxxpxxxgx +2-7 d: pddwwpbv +2-5 l: lljslz +3-4 g: ggkg +9-13 r: crrrlwzbrvjzt +4-5 k: kkzpkfk +2-4 q: kqqxq +6-8 c: tcmcccccccfccgcchc +7-17 r: nrsdshrrqhjllsrjrjxr +1-3 b: bpgkwcbnb +3-8 t: zdnjtvttjgt +6-7 v: gpgnwkgnvkv +5-7 v: vmvcnjvvvmv +4-7 z: zvrjzxzzdxzlpz +3-9 m: cdlplfjrmvbdvm +7-8 w: wwjwwwwww +13-15 q: qqqqqqqqhqjqrqjjqrq +8-9 v: vvvvvvvvg +3-6 f: qfffffjf +2-4 d: nddpxd +1-3 q: bqmqqqqq +14-16 j: jjxjbjjjjjfjjjjfgj +5-6 t: ttttgtt +14-18 l: llllllllllllllllwbll +11-15 c: kscccdcdccdccccc +15-17 v: vvvvvjvvvlvvvvhqvvv +5-6 b: bbbbnl +3-10 r: rrrrrrtrqkjr +11-13 w: wwwwhwwwwwskw +13-14 h: hhhhhhhhxhhhhs +8-9 k: kkkkkkzkw +11-12 m: mmmmvmmmdmmcm +2-9 k: kffkknkfkkkkkgkk +4-13 d: dggdndznddddc +4-7 t: kksmtmdswzvt +2-4 z: ppzccxtbcnwswtlc +11-14 r: rrrrrprrrrrrrvr +14-15 x: xxxxxblxxxxxxtxxxc +7-9 b: bkxjjjbtbtlhgrtmb +4-5 p: fgzdp +5-8 l: ncrlljltnllll +1-2 x: mxgcx +7-12 x: xxxxxxxxnxxr +1-2 r: rkrrrrlnrrrr +6-10 q: qqbqbqqqqqqzrqz +2-9 b: bsbbbcvbcxcrbbbbgpcd +12-19 x: xtlrxvxsxxjxxxknxxcx +2-3 p: mzpptxpg +3-5 d: gkdzgdjlzbfvcbhtgl +5-9 t: ttttnzttt +15-16 q: qsqqqqqqqqkqqnwqqq +12-14 q: qqqqqqqqqqlfqpz +3-8 b: lslqgrzbgbjzthlgnrmc +9-12 m: wmxmmsmmvmcm +3-4 t: qxttt +3-11 m: kbzljjmbpxmt +14-15 n: nnnnnnnnnnfnnnvnsnnn +11-17 l: lclglllclzflllbllt +6-7 m: msmmmmskq +6-10 c: ccccccxccc +9-13 l: plpgntbglpbgfj +5-8 l: llxltljlws +3-7 z: zqzlztgzkzszb +11-15 k: kkkkkkkkkkkkfkqkk +15-16 l: mgxlzbvfwbdmptlbjwz +9-13 j: jjjjjjgjjjjjjj +7-8 z: zzkzzzzbz +14-15 j: jjjjjjjjjjjjjlv +3-7 q: qqdtqgqq +2-4 c: cccpzn +4-7 k: hkkxkkk +2-5 k: kxkkkk +14-15 w: jwwwwwvwwwwwwwpw +2-6 g: gmrgdgnwdbhggxgh +5-14 q: djqtxqxkmgqxqqcplwqq +14-15 q: qqqqqqqqqqqqqqq +3-7 x: dqxqxxtrx +8-13 j: jjjjjjjbjjjjjjjjjj +18-19 r: rrrrrrrrrrrrrrrrrcr +3-14 x: xxsxxxxxxxxxxxxx +7-14 s: kknsngsgkfswjlsns +3-4 z: zzjz +2-4 z: zzzd +1-3 d: dqzdgzwdjmdcpfpfd +3-4 p: jppj +14-15 c: lcccctcccccczzdcccc +14-15 f: fffffffmrfffffpffx +1-5 c: qcvvrcqm +2-11 t: trcltttgttttt +8-9 j: jjjljfjkjjj +1-12 t: wttttttttttttt +7-14 q: gsqqqqgmqqqqclqxdq +5-7 h: hhhhslrlhwsmphc +14-15 x: cxrxxxxxxxxxvxrz +3-6 k: rkkkkkk +3-4 t: dtmttt +1-8 z: zzzzzzzgzz +3-17 t: rtlwttmttttxtttttttt +4-7 w: wwwswww +3-4 w: qvsww +8-11 g: ggggdgqdgggnh +14-16 q: qqqqqqqqqqqqqqqqq +11-12 d: ddddddtddrbddd +10-12 v: wvhvxqpvvbvqvtvmv +6-11 c: cpckcmcctccc +5-9 r: djrcrrrrrrmr +5-9 t: ttbcmnbzt +6-11 f: lwxssffcfks +12-17 v: vvvvqjvvvqvzvvnvvck +11-13 k: kwvtzwczgdwqwp +3-6 l: zdglhlklllhk +15-17 x: xxxxxxxxxxxxxxpxsnx +2-7 s: swdsssx +4-8 v: xvxvxgmvvvqwvhtqt +17-19 n: nnnnnnnnnnhnnnnnnntn +2-4 p: jtppkrgpfph +15-16 v: vvvvvvvvvvvvvvrfv +6-9 q: wqxqqdvdqq +14-16 w: wpwwwwwtwwwwwcwwwdbw +5-6 k: kjrrnk +6-13 w: qfcjlwtlbwgvp +2-3 b: sbbbx +1-3 b: bpbf +2-7 r: dsrrnbmdf +3-13 w: wwwwswjmwwwwdww +3-5 l: dzhll +7-9 l: llqllfzxw +2-5 n: cdkhngnnf +4-12 q: dqqkqklqqqqh +14-15 b: twbbbbgbfkbbbbgcbt +10-16 q: qqnqzbqqzgqrqqqqqqqx +1-3 x: sjltfnnx +9-16 g: tcghdqfsqbcllvdsckx +6-9 w: pwhwjwwxdwjw +3-5 l: rlxlflz +7-18 p: pppppppppppppppppppp +4-14 t: wvfglxkbtrqxkjjtqccl +15-16 b: bbhnbbqqfbbbsbcz +3-4 n: znpnfntn +6-9 v: vvvvvvvhfz +17-18 p: pppppppppppppppprp +2-18 n: lnnnnjpnnnnnnnnnnt +12-14 b: bvtbbbbbbbbbbs +2-6 r: rrrwrrrr +3-4 f: fpfk +1-4 s: skcrmsczxwxrn +4-7 n: nnnpnkz +5-17 j: jkjjgjjjjjjjjjjjj +7-8 n: nnnnnnpnjsn +1-5 j: rdjhp +3-5 f: hdfff +1-3 j: qqjj +2-3 j: vhjrz +7-15 r: jrrrrrrrbrrrrrr +3-6 r: pwdpzr +6-10 n: lncrcndstsww +10-11 m: jmqqmmvshmj +3-5 s: sjjnsvshs +11-12 v: vvlvwvvhvgvkcvv +6-8 c: wcpcclcc +10-12 x: dxxxxxxxxgxxx +5-7 s: sssssst +2-6 j: jksjjkjj +3-4 w: wqrw +2-4 c: qgzdchzcsc +4-6 c: cwngwcxwdcpspfccgdcl +9-10 g: ggvggggxgrgg +5-17 h: hhrwhhfwtrfhzhhblxxv +4-13 g: ppcgtcqgdzswgjtp +3-10 r: rmhwrbtrrwktcqrr +2-7 l: vqhgljg +2-9 l: llgmcllqglllczl +14-16 c: zmccccccccbccnccccfc +10-11 z: zzzzzzzzfzz +5-10 b: bbbbbbhrxbbbb +7-9 b: bbnbbbgbb +9-11 t: tlttttttqtstm +11-13 p: pfmwgpzppppgppppp +14-15 d: ddqdddddddddddpd +5-11 x: xcxvxxqvgnlxzxfdp +12-16 x: xxtxxgrxlxzzwgxm +15-16 z: ztzzzzzzzzzzzzlz +2-6 j: jdjjjjjjjj +4-6 p: zqjkgfctlwqplppj +1-2 d: ddzdd +14-16 v: vvvvvvkvvvvvbjvvcvv +3-4 x: xxxxxk +16-19 t: ttttttrtttmttttqttc +8-14 b: pbcbsbhbbbbbbgbn +2-9 v: vkvvvvvvvvvv +3-6 x: xxxxxnxl +13-14 r: rrrrrrsrrrrrrjr +10-12 x: xxxmxtxwxvxxpxx +4-5 h: hntfhzwhhhv +11-16 z: zzzzzzzzzzqzzzzzz +3-8 h: qfhhhhhmd +1-4 r: rbrw +3-5 q: mqqqqqscq +2-9 n: nnnnnnnnnn +12-15 v: vvbvgvvvvvvvvvcqvv +8-10 j: jjjgjrjjjkjj +9-14 m: mmmmmmmmmmmzml +5-7 v: zvvvvvwx +13-14 t: tttttttttttttkt +3-6 l: lvwxlll +6-7 w: xhbgnlg +11-12 z: zzzzzzzzzzwzz +1-11 m: mmxrltjrmmmwm +9-10 b: bbbbbtbbbrbbb +6-8 n: xnnpkncnhlv +14-17 w: wwwjwtwwntsgwwrwm +12-18 z: zzzzzzzzzzbqzzdzzz +1-8 j: kjsjnjjm +14-18 h: hhhqhhhhhhhhhbhhhr +7-15 n: cpxrrxnvbmwktqg +6-8 w: twtwwdwnwww +1-2 s: sfwss +1-6 z: zzcrqfjkcrkcxnwzz +6-18 n: nnnnnnnnknnnnnnnnw +4-10 z: zzzzgzzzzzz +6-9 s: xvrcshqcsmslsshtscj +2-16 w: gwbljbgmwzgpfjtqnjkj +10-12 j: gwjjjjjkjjtjjjjjj +2-5 p: prpps +5-6 f: fffffr +4-5 r: rjnvr +6-9 c: csccccqpgccc +12-14 g: ggggggdggggdgg +9-12 p: pppkpfppppplp +5-11 f: mhfpffffdfzdrnskfwff +6-8 h: hhhhnxhhh +18-19 m: mmmmvsmmmmmmmmvmmzm +7-9 g: ggptdsgzg +1-7 f: kffzqmfp +10-12 p: pppppptppppk +10-11 f: vfftfffffffff +10-11 f: rxxlzzpvcfbtzfww +3-7 b: bbhrhrb +4-7 j: tjjgjwfnrh +10-12 g: gkggpgggggzfrggvgdhg +7-8 z: gpqfckkzknzrvgngpfh +6-9 c: cccgcnfckgt +2-11 x: zlfxsxslzcxp +16-19 j: jfjjkltpxlqjbvjjjbt +13-17 k: kkkkkkkkkkkkkkcknw +5-9 f: ffxhfxflf +7-9 g: gprnxtxlgndg +1-2 l: tjllwll +7-9 w: wwbwccwwvcwwwz +6-7 n: ntmklznfl +4-7 r: rrrlrrpr +7-12 v: vhmvvvgvvvvs +5-7 t: vfwgctwq +16-17 m: mmmmmmmmmmmmmmmjm +11-13 j: jjjjjjjjjjfjg +4-7 d: dfdddcdwzdrd +7-14 j: jgjjljmmjjzkgjjjqx +10-11 b: bdhbblbbbxhbbd +8-17 k: kkkkxvnrmkkskkkkk +13-15 v: vvvvvvvvvvvvvvv +3-7 t: ltptttf +1-2 q: qqqkj +11-13 t: tmttttntttttft +4-6 t: xgtxrt +9-12 q: fqqpvqqqhcqzqqq +5-8 s: qdjtcsfssss +2-17 c: ccdccccccczqcccccc +3-11 q: qqpqqqqqqqqq +4-12 l: qkqxllknxltdlzlsllj +2-8 r: qlrddbplz +16-17 l: xllllllllllllllgb +8-12 j: kjdfjjjjjjrpjfhjjrj +8-9 d: qvddsrddvpvbddbdddm +4-5 p: pptss +4-6 c: cccscc +4-5 c: cccrc +1-6 r: rzrzfd +1-4 t: tttzz +6-8 d: ddgdsjdd +6-8 c: cccdccccccq +6-9 k: kkkkkvkkk +1-4 m: pmrm +15-17 d: ddddddddddcdddzdd +6-10 b: cljmbjbtbbz +6-11 l: lllllwllllvlll +13-14 r: rrrrrrrrrrprrmrrrrg +3-5 w: hnwbd +3-8 f: fffxfffz +5-9 z: zhzzztzqnzzpl +3-4 x: jxvgxhrd +8-9 x: xxgxxxxxjxx +3-6 z: zlvzfzbzzzb +2-3 v: jvrvq +10-11 q: kqjqtpzqwbqzqh +9-10 g: ghgxgcggdg +5-8 r: srmrrqps +3-4 k: kgkkk +3-4 f: dfsflf +3-4 m: mmmxm +10-11 x: xxxxjxxmxwxx +16-17 n: nnnnnnqnnntnnnnnnnnn +2-13 l: lfblltnlrllll +1-4 l: blblllnnlllj +4-17 k: nkltzflkkjmmknxwkf +4-6 s: sstssfssssssssss +1-2 f: fkvbs +3-5 v: vvvhcvv +1-3 t: nttttttt +1-3 p: ppnnppph +10-15 q: qqqqqqqqqqwqnrqq +2-18 v: vvvvvvvvvvvvvvvvvv +2-3 r: zgrrbrmhqtxc +19-20 x: xxxxxxxxxxxxxxxxxxxv +10-16 n: nzvfnnnnnnnnnnffn +3-4 d: dvdcdw +3-16 l: vrqhbhvmlrllllfl +14-16 c: cccbcpcccccccwccc +7-9 l: lmlnllllll +7-9 r: rfrrrqlrrrsbr +9-19 s: snmbxvrcsssnhpswrss +5-6 s: ssssks +4-9 l: llllbllllllllz +5-9 w: wwwwdbwwwww +2-4 w: mvvw +17-18 v: vvvvvvvvvvvvvvvvrvv +8-9 h: hhhhhhhhh +3-4 n: ntcn +3-4 b: nbbr +8-11 b: bbkbbbbfvbbb +5-8 d: nddnjcdd +12-13 v: vvvvvvvvvvzvh +2-5 k: kfxlc +3-4 r: rrrm +10-16 k: kkkkkkkkkpxkkkkkkkkk +5-6 z: zzzzdm +12-18 p: rrpplpwppgppvpppppp +9-15 x: vxpfxftcxlmzccz +7-8 g: kpgmghgrkgggqbnhggg +4-13 k: kkkkkhbktkwbkcvk +2-7 g: bgggcgtxg +18-19 q: qqqqqqqqqqqqqkqqqhqq +12-16 r: rmdvrrrqrbgdxprrr +4-5 v: lrvxvjlxvfkcbsvv +1-10 l: lllwllllnllvlllll +1-5 t: ttttmt +1-3 v: vfrdvj +9-12 j: jhjwjbjjjjjpjw +3-10 m: mnrdhxmmmm +3-11 n: ngnzbxwgcddgtwvxtrt +2-4 q: dqqq +5-9 z: zgdzzzsfzzxslvzwzp +1-10 x: xjxxxxxxxlxx +3-4 x: gnlvxwt +5-10 q: dqqqqdqqfqqqqqqq +8-9 p: nmpcpppzpnpcpppn +5-6 f: fffffr +6-8 h: ghhphhnhmhhhhhz +6-9 h: hhkshhhkhh +3-4 v: cffvrv +7-8 h: qvzvlzxhhqlsrjrgjwf +5-6 t: ntjztwjttv +3-4 b: bbbs +4-5 k: kjkmk +5-7 k: bvbhkkv +6-16 j: jjqjjvjjjjjjjjjl +7-8 t: rtlmzxtr +9-10 n: nznnnnnnhnn +3-4 b: tmnbdrbjbnfksm +3-4 q: lqqq +5-6 b: bbbgbbz +6-8 l: llvtlllzll +12-16 s: stvsnzssssssssml +1-4 k: jkkk +4-7 t: ttttztttttt +14-15 j: jjrjjzjjjjjjjghj +4-11 j: jxqjjxjjjjth +4-10 v: fvsktttspv +3-7 g: tdgwkspnggpfg +2-18 r: rrfbmqhrldrcqrprrrrl +6-7 r: rrrrrfrr +4-6 f: fjffxqzdffr +8-10 l: llllllllkb +8-12 s: wsgssfssssss +14-15 d: xddddfddddwdtvddddd +2-10 f: fffffkfwcr +12-16 l: llllllllllgtldll +6-7 r: rrrrrkrrr +9-12 q: lqqqqmqhnqqq +8-13 q: qdfqqqqqqqqhl +2-6 g: gjfjgggvng +1-3 z: qzzz +8-10 p: ppppppppzbp +7-12 f: dstffffzfkczfffff +1-15 k: kkkkkpdkkkkkmxf +3-6 w: whwwwmkqf +16-17 g: gpnglggggggggggdcg +5-15 s: nsssnssgssssssssss +14-15 q: qqqqqmqqqqqqqqx +2-11 s: psslpssssrsssdssrmp +1-6 d: hdndpdd +3-6 q: sqpqqnpsqjrqq +1-5 b: qbbbb +1-3 v: vvsv +4-5 q: qqqqjqtfqqqtqqn +6-9 h: hhhhhhhhhh +7-8 r: rrrrsndrrr +3-4 r: brrtb +3-8 t: fjtkttxtzt +10-11 b: bcbfbbbbbbkb +1-6 l: llzssp +16-17 f: ffffffffffffffffn +3-4 l: clml +13-14 h: hhhhhhhhhmhnhnhh +9-12 t: lthttttbtthcctv +3-8 x: xxfkbjhxlqxvxxthxb +2-3 l: llrlmlw +1-10 h: hhhhhhhhkhhhhhh +14-18 l: llllllllflllbllllc +14-15 b: bspvbkbpkkbmgjn +10-12 z: zzzwzzxzzzsxzpz +5-7 d: dhmtldrqddmdw +1-4 g: bqzfgqg +7-10 j: wxjbgbjdlz +3-14 q: csqgmhfqgfqlcnw +1-3 m: mmkmltxmn +1-5 l: llllcll +1-3 b: bcbbjzwfdmmnsrtqbsnl +2-4 s: sszs +14-17 k: kkkmkzkkkkskkkkkbk +5-6 g: gnggcg +4-15 t: dfmlshpqhhmwptzkwgt +2-3 w: drwtngwhgw +5-6 t: tttttrn +15-16 b: bbbbbbbbbbbrbbbr +7-11 s: tswssqssfstsssbzs +8-11 j: jjjbdjjjjsjj +4-7 c: mjclkfccpccfcjchqg +11-13 q: qqqqqqqqqqqqqqq +4-5 r: rgrdrb +8-9 n: nnnnnnnntn +12-13 g: gggxgggggggzgg +7-8 q: qqqqqqqq +9-10 m: gcqmlctsmfmstprmmmkm +2-6 h: dhhhhlh +19-20 b: qkzbbbhbwbtbvqbdpfrt +5-11 k: skkkkkqkhkkkz +10-12 l: lllllllplwllf +3-5 x: hxxxb +4-5 z: zdzzwtzz +5-9 f: fmqfffffmpq +2-3 w: xwkg +6-8 x: xxxxxxckxnq +10-13 k: khkkkkkkkkkkbx +7-15 j: xjjjjjjtjjtjjdljjjjj +2-4 p: mpckqmgpbzcb +2-3 r: rwrz +5-12 t: xhgntttllqtpjzttltt +4-12 q: bwwfvqwrmmbqt +1-3 g: cgpggg +7-11 j: vjjjwjjjrvrjbj +6-11 j: jjjjjjjjjjr +4-8 k: klkkwjkkkvkfk +8-16 p: pppppppvppppjpzs +4-5 m: mmmhr +13-14 t: tstttttttttttw +4-6 n: hmnbznk +14-15 z: zzdzzzzqzzzzwzg +1-6 p: hsjlxpppwv +1-18 d: tddddddddddvdmddddd +2-4 n: nznjn +6-10 v: fqvvszfvvtx +13-18 k: qbckrkkmkkktnkknkk +1-6 n: lnfxntnznnbq +3-9 n: lvnwnlnxnggnvdnqpz +1-3 k: skkjb +1-7 m: mwmrcjt +3-5 k: kfkmw +6-7 f: crfbrfcjdjvm +10-11 m: mmmmmmmmmmz +6-7 t: ttsgttzb +4-6 f: fjfbff +10-12 m: mmmmmmmmmmmmb +10-11 z: wzzzzzzzzszz +6-11 z: nbdmzzztpzh +10-13 f: ffdfdfffxlffgf +3-4 s: vcksscsk +1-5 f: ffvfcpffgfww +13-15 c: cccccccpcccchcc +1-16 x: xxxrxxxxxgxxxxxxx +6-9 v: kfxvvvgvlvvjvvs +14-17 f: cfxfdffbjmbjdfptg +6-7 s: sssssss +15-16 b: bbbbbbbwbbbbbbpb +2-4 w: wdww +1-7 m: mpmtmsmmmpm +4-7 z: tzzpzzz +1-2 q: qdqx +6-12 g: gcggwxrjkjgtrgt +14-18 m: mmfmmmvmmdmmjmmmmq +17-19 j: jjjzjjjjzmbsjjqjplj +2-5 m: ljxmmcnmmgmt +3-8 w: wwwwwwwt +5-7 b: bbbbbzsn +1-17 t: btttttttttttttttttt +1-2 s: svsss +5-6 p: pppmmr +2-7 m: vrgmmjmhm +15-16 w: wwwwwwwwwwwwwwgw +10-11 q: pqqqqqqqqlqqq +7-8 k: kjbkkjdkzc +5-9 x: xmxxtxxxxxx +13-14 v: vvvvvvvvvvvvqvv +1-4 z: lzzszz +4-5 x: xxxkxf +13-14 h: hhhhhshhhhhhpfhh +6-8 s: sssgsssvn +14-17 l: nsgfxplzbmljjstld +6-13 j: jjjjjjjjjjjjjjjjvjjj +10-11 q: qqqqqqlqqrq +7-8 l: llfplllwll +13-16 h: hhhhhhhhhhhhhhhp +5-8 s: ssfsssgc +3-4 b: bbbn +16-17 p: ppppppppppppppppn +5-7 w: wwwwcww +6-14 d: ddlhgjtldncddvdrsd +10-12 h: hhhhhhhhhhhrh +4-5 s: ssrss +1-7 z: wkzcvczpcskxfzxxxmzh +4-7 h: rphjtkh +3-5 k: mdtzkjfkq +2-3 c: cwcc +2-6 r: rrnrrmrrlrrr +10-14 n: ntjrrpfpxxwdznjvmh +3-10 h: flhtwzhhhh +3-8 v: vvnkvvvp +6-8 n: bnnnndnnnnnnnn +2-11 p: hpnppgfmpbp +3-8 h: khhmlhxjshsbf +3-4 l: jllnlglrqz +4-9 g: ggqbghggg +5-6 w: wwwwlwwb +1-9 s: hssssssssssss +1-5 j: jjjjbjj +8-10 s: dssrssssgstssss +3-6 c: cctccccp +7-9 v: vvnvvvvvpv +5-16 t: zmspstpctqgrbmlt +8-14 m: mpmmmmjqmmmnmmm +13-16 c: cbdxwzfbjpkvcpdp +3-19 w: wlwwkfxwfwzkvjxjnthw +13-14 l: ldllllllllllmll +8-14 s: spssshxjfnsjsssskkkj +2-7 c: cmccdcpcw +5-14 t: psntttqxbxdqstvkttb +8-9 z: zzzzzzzzbz +4-9 n: lnmnwcvntmhrznc +1-4 v: tvvv +2-8 d: ddqddqtdscsfddblqk +1-2 t: wttttv +5-6 n: nnrnxnnn +4-14 c: zccscgzpzvwlwcjqpfjl +3-11 g: gglggggfggg +11-18 d: ddddddddddfddddddd +1-7 q: qsqkgpf +2-11 q: qqfqqqqnqqhlqqq +8-9 c: ccccsccwcp +4-7 m: mmmqmmmm +7-17 c: cxscnqkjdfkcgqzccdkc +4-5 b: bbbzb +3-4 l: llll +1-2 j: ljcn +11-16 r: rrdrrrrrrrrrrrrz +1-15 l: rrlkklllllllgqllk +14-15 b: bpbbbbbbmbbbbbpwb +2-3 q: xcqqh +1-3 q: qwckphmm +1-6 d: dwdtsfxzvdqbbhlhwtk +3-6 n: nmmzcnnmn +6-7 q: qqqqqzq +1-2 z: jzpzz +2-6 r: rrrfmrvlr +3-4 n: nncn +2-3 l: plblwq +2-7 g: gggckcqgwsk +12-13 q: qqqqqqqqqzqxqqq +16-17 s: sssssssjsssssssqs +1-10 h: hjvvvknhmh +11-12 z: zzzzzpzzzczlzz +6-13 q: qqqjrbqcqqqqqxq +6-9 p: ppcpkfpppptp +15-16 p: pplpppppppppppjdh +7-9 c: hqswstxxcnl +2-4 x: ngbxbqszx +1-2 g: sgfxt +6-7 x: bxgnxxt +16-18 j: mjjtjjjjjjjjljjzjjj +13-14 c: ccpccvcccccccgc +3-7 s: fksrgsbcnfmkxdwd +1-4 q: qwpmqjlbhqfnpdjgqjqx +2-3 p: ptpp +4-8 k: sbkkskgc +4-11 j: gjjbjnjjjnnj +1-16 f: fffbwjwfmfqcjffmf +6-8 b: wbbbbwbbbb +1-3 z: rzzv +2-4 v: wvcjnjmdbjjjvptcsv +4-7 b: bmjdfpfwqvgpbb +9-15 f: fdfqffhfpfnffpwfffhf +4-7 t: ttwbttjtdt +3-14 d: ddhdddddddmsdddddddd +3-4 z: vsmm +7-8 w: wwwwwwhw +3-4 r: rrrlvwvqztszhmr +4-5 c: ccctkcn +1-3 g: ggmpdspfbvb +3-4 c: cccc +5-6 p: pqgppspbkpgxvcsp +7-13 n: nnnnlxnvnnmng +9-14 l: lqlllllxlllllzll +6-12 l: llllllllljlxll +3-8 g: jbkzsshsmsngghn +1-4 r: trrrrz +3-4 p: kppg +1-5 w: whljvw +11-14 v: svnrvvtmvccgcxjfbpkd +12-18 q: rqqvfqqqqqtvqqqmqq +12-18 m: mxmmmqmpmmwmmmmmmm +8-9 k: hkvnxnmkpkmplkkkkkkv +6-8 p: ppppppppp +3-5 t: qpxdtctb +15-18 z: zzzzzzzzhzzzzzbtzzt +10-11 t: ttswttttmttttt +10-11 f: ffffxffffffs +2-3 j: hjrj +6-10 x: xxxctxxjgdz +10-11 r: brrcrrrhwlz +9-10 s: sxssssqssksq +7-13 n: bnkwlnnncnnvnnnnn +11-13 f: lffffffffgffcfffffc +2-4 z: qczzfcztz +10-12 q: qxqqqqqcqqjqqqw +6-9 h: hhjhhhhhrqhch +3-4 l: xjmllb +2-5 m: mmmhm +1-2 w: pwkzww +3-7 s: sgccssszvssnqssj +6-8 j: jjgpjjnj +9-13 s: zjhskrssshssvqdxsrns +7-9 b: bbbbbbfbd +8-10 c: cwczgzcccgcctscfx +4-8 s: ssssmgssslrssp +14-20 z: jzjszzzzzzzzptzlzzzz +5-6 d: dsdddhd +6-7 z: zzzzzzh +2-8 f: fpzsgwsh +2-4 d: dddd +5-6 w: wwwdwc +3-4 r: crnr +4-7 s: zssdvsz +19-20 x: xxxxxxxxxxxxxhxxxxhx +7-8 g: ggggggkg +8-10 f: fffwfcfvdfffff +5-6 v: vvvvmv +9-14 k: wkpkknkkklkknkkkkkc +3-4 h: hhhjhhht +1-5 c: cbccrcbcdczgccfct +13-15 x: xxxxxxkxxxxdxpzqxxx +13-15 b: bbbbbbbbbbbbgbb +1-4 v: wvvvnm +5-8 v: zczvdvmvjvzv +8-9 p: gsppkptps +8-17 r: srrrrhjnrrdrrvrrhrv +9-13 l: lmlclllglqllmlll +1-4 g: gfgj +2-8 c: jtvmkcccdmccfxh +5-7 l: llztkvlb +2-7 v: fvlbrrtdpv +7-9 b: bbbbjbwbbd +6-8 j: jsjjjjjjj +3-5 w: wwwbwbgjmlrvfhkvfqp +15-17 l: llllllllllllllfll +13-14 z: dzzzzzzzzzzzzwz +11-13 z: zzzzzxzzzzzzg +3-4 b: pgbntlqbtbbbnp +7-12 z: zzpzjzzzmzzzzjzjzz +2-11 h: dtjsvvjkvghq +3-5 p: zpcjpp +14-17 z: zzzbzzznwzzzzzzzzzzz +3-6 h: nxhlfxlxngphhbdb +7-10 n: tjnnnncwnnvnnn +1-2 b: bfbm +13-16 t: ttdttttttrttztttt +9-10 t: jthtfttttttttt +8-9 z: cvfzzfnzzzzzlfzz +15-16 b: bbbbjbbpbbbcbbmm +3-9 x: rrqxxgxxt +4-18 j: qqqjlzcjfnjddjnqzvh +3-14 q: qqzqqqqqqqqqqdqq +5-6 h: hhhlch +5-11 z: zzjdzjzdtzww +2-9 w: wwwswwgbftlr +3-4 l: hlllbgdczpl +5-8 c: wwcvccckcccc +1-3 j: czjzxblj +1-3 z: vjzjz +11-16 m: mmmmmxrmmmmmtmxkmmhd +4-10 h: gzkhhxplhhhh +3-7 d: smdxmdfpn +12-17 t: tttttttntttdttttt +3-4 f: kfffjwhbllp +4-10 h: hhgkvhhhnqhh +14-18 w: whlchwwqwwlrwjdbwww +4-6 z: szjzhjhpzzmgz +3-9 x: xxxxxxxxq +5-6 x: rxprlx +3-4 b: pbbbbb +11-13 g: ggggggggggggh +2-3 b: bfbb +6-7 d: dddddvd +2-10 p: ppskvdctvpsn +12-18 r: rrrrsrrrrrrfrrrrrrr +4-5 c: ckclcc +8-13 v: vvtmtvvvvvvvvvzwp +4-18 j: qmdwjqqlpznldltqvjm +1-4 j: dbcjpzk +4-5 f: ffmfqvzf +8-10 p: pprptnfvpphvppp +7-8 z: zzzzzzzzz +10-11 n: xnnnnnnnnnnn +10-17 v: jwmqwvplsvvvfhhll +5-6 w: wwwwqtw +5-13 c: cccwbcccccccncfc +13-17 r: rrrrrrrrrrdrrrcrldn +2-15 b: nbnknkblbdbbhxxn +17-19 n: jwmjbxxvcrqlwpsknnz +5-16 x: xxxxxxxxxxjxxxxnx +1-7 m: mmmmmmvm +4-5 r: rrrrv +6-7 c: xkdzcscg diff --git a/src/2020/2/mod.rs b/src/2020/2/mod.rs new file mode 100644 index 0000000..88d3f5b --- /dev/null +++ b/src/2020/2/mod.rs @@ -0,0 +1,64 @@ +use anyhow::Context as _; +use std::io::BufRead as _; + +struct Line { + c: char, + min_times: usize, + max_times: usize, + password: String, +} + +impl Line { + fn parse(line: &str) -> anyhow::Result { + let rx = regex::Regex::new(r"^([0-9]+)-([0-9]+) (.): (.*)$").unwrap(); + let captures = + rx.captures(line).context("line failed to match regex")?; + let c = captures + .get(3) + .unwrap() + .as_str() + .parse() + .context("invalid policy char")?; + let min_times = captures + .get(1) + .unwrap() + .as_str() + .parse() + .context("invalid policy lower bound")?; + let max_times = captures + .get(2) + .unwrap() + .as_str() + .parse() + .context("invalid policy upper bound")?; + let password = captures.get(4).unwrap().as_str().to_string(); + Ok(Self { + c, + min_times, + max_times, + password, + }) + } + + fn valid(&self) -> bool { + let count = self.password.chars().filter(|c| *c == self.c).count(); + count >= self.min_times && count <= self.max_times + } +} + +pub fn part1() -> anyhow::Result<()> { + let f = std::fs::File::open("data/2.txt") + .context("couldn't find data file 2.txt")?; + let f = std::io::BufReader::new(f); + let lines = f + .lines() + .map(|l| Line::parse(&l.context("failed to read a line")?)) + .collect::>>()?; + let count = lines.iter().filter(|l| l.valid()).count(); + println!("{}", count); + Ok(()) +} + +pub fn part2() -> anyhow::Result<()> { + todo!() +} diff --git a/src/2020/mod.rs b/src/2020/mod.rs index 3800c30..87ceb55 100644 --- a/src/2020/mod.rs +++ b/src/2020/mod.rs @@ -1,10 +1,14 @@ #[path = "1/mod.rs"] mod day1; +#[path = "2/mod.rs"] +mod day2; pub fn run(day: u8, puzzle: u8) -> anyhow::Result<()> { match (day, puzzle) { (1, 1) => day1::part1(), (1, 2) => day1::part2(), + (2, 1) => day2::part1(), + (2, 2) => day2::part2(), _ => Err(anyhow::anyhow!("unknown puzzle {}-{}", day, puzzle)), } } -- cgit v1.2.3-54-g00ecf