summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2020-12-02 00:33:09 -0500
committerJesse Luehrs <doy@tozt.net>2020-12-02 00:33:09 -0500
commita2abe26e3190ee2105bf1d46066ae48d3c2ad4f0 (patch)
tree7bc9fbff5225d240456733c4377791791961ca38
parentb87a72594515f4a05aee7622db96269f2ee9c0af (diff)
downloadadvent-of-code-a2abe26e3190ee2105bf1d46066ae48d3c2ad4f0.tar.gz
advent-of-code-a2abe26e3190ee2105bf1d46066ae48d3c2ad4f0.zip
puzzle 2-1
-rw-r--r--Cargo.lock43
-rw-r--r--Cargo.toml1
-rw-r--r--data/2.txt1000
-rw-r--r--src/2020/2/mod.rs64
-rw-r--r--src/2020/mod.rs4
5 files changed, 1112 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index c55b2a0..4fb9879 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6,10 +6,20 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -88,6 +98,12 @@ 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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -157,6 +173,24 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -219,6 +253,15 @@ dependencies = [
]
[[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"
source = "registry+https://github.com/rust-lang/crates.io-index"
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<Self> {
+ 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::<anyhow::Result<Vec<Line>>>()?;
+ 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)),
}
}