From 01c6b2cb42a4144a573ec43e9e25c6718741a272 Mon Sep 17 00:00:00 2001 From: omagdy Date: Sun, 8 Dec 2024 15:28:08 +0200 Subject: Some solutions to AOC 2020 --- 2020/Rust/Cargo.lock | 96 ++++ 2020/Rust/Cargo.toml | 78 ++++ 2020/Rust/input/day_1.prod | 200 ++++++++ 2020/Rust/input/day_1.test | 6 + 2020/Rust/input/day_2.prod | 1000 ++++++++++++++++++++++++++++++++++++++++ 2020/Rust/input/day_2.test | 3 + 2020/Rust/input/day_4.prod | 1102 ++++++++++++++++++++++++++++++++++++++++++++ 2020/Rust/input/day_4.test | 13 + 2020/Rust/src/day1.rs | 47 ++ 2020/Rust/src/day2.rs | 64 +++ 2020/Rust/src/day4.rs | 94 ++++ 2020/Rust/src/day5.rs | 174 +++++++ 12 files changed, 2877 insertions(+) create mode 100755 2020/Rust/Cargo.lock create mode 100755 2020/Rust/Cargo.toml create mode 100644 2020/Rust/input/day_1.prod create mode 100644 2020/Rust/input/day_1.test create mode 100644 2020/Rust/input/day_2.prod create mode 100644 2020/Rust/input/day_2.test create mode 100644 2020/Rust/input/day_4.prod create mode 100644 2020/Rust/input/day_4.test create mode 100755 2020/Rust/src/day1.rs create mode 100755 2020/Rust/src/day2.rs create mode 100755 2020/Rust/src/day4.rs create mode 100644 2020/Rust/src/day5.rs (limited to '2020') diff --git a/2020/Rust/Cargo.lock b/2020/Rust/Cargo.lock new file mode 100755 index 0000000..e9cb66a --- /dev/null +++ b/2020/Rust/Cargo.lock @@ -0,0 +1,96 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Rust" +version = "0.1.0" +dependencies = [ + "rayon", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" diff --git a/2020/Rust/Cargo.toml b/2020/Rust/Cargo.toml new file mode 100755 index 0000000..5595980 --- /dev/null +++ b/2020/Rust/Cargo.toml @@ -0,0 +1,78 @@ +[package] +name = "Rust" +version = "0.1.0" +edition = "2021" + + +[[bin]] +name = "day1" +path = "src/day1.rs" + +[[bin]] +name = "day2" +path = "src/day2.rs" + +[[bin]] +name = "day3" +path = "src/day3.rs" + +[[bin]] +name = "day4" +path = "src/day4.rs" + +[[bin]] +name = "day5" +path = "src/day5.rs" + +[[bin]] +name = "day6" +path = "src/day6.rs" + +[[bin]] +name = "day7" +path = "src/day7.rs" + +[[bin]] +name = "day8" +path = "src/day8.rs" + +[[bin]] +name = "day9" +path = "src/day9.rs" + +[[bin]] +name = "day10" +path = "src/day10.rs" + +[[bin]] +name = "day11" +path = "src/day11.rs" + +[[bin]] +name = "day12" +path = "src/day12.rs" + +[[bin]] +name = "day13" +path = "src/day13.rs" + +[[bin]] +name = "day14" +path = "src/day14.rs" + +[[bin]] +name = "day15" +path = "src/day15.rs" + +[[bin]] +name = "day16" +path = "src/day16.rs" + +[[bin]] +name = "day17" +path = "src/day17.rs" + +[dependencies] +rayon = "1.8.0" + + diff --git a/2020/Rust/input/day_1.prod b/2020/Rust/input/day_1.prod new file mode 100644 index 0000000..4b0b53c --- /dev/null +++ b/2020/Rust/input/day_1.prod @@ -0,0 +1,200 @@ +408 +1614 +1321 +1028 +1018 +2008 +1061 +1433 +1434 +1383 +1645 +1841 +1594 +1218 +1729 +1908 +1237 +1152 +1771 +1837 +1709 +1449 +1876 +1763 +1676 +1491 +1983 +1743 +1845 +999 +1478 +1929 +1819 +1385 +1308 +1703 +1246 +1831 +1964 +1469 +1977 +1488 +1698 +1640 +1513 +1136 +1794 +1685 +1802 +1520 +1807 +1654 +1547 +1917 +1792 +1949 +1268 +1626 +1493 +1534 +1700 +1844 +1146 +1049 +1811 +1627 +1630 +1755 +1887 +1290 +1446 +1968 +168 +1749 +1479 +1651 +1646 +1839 +14 +1918 +1568 +1554 +1926 +1942 +1862 +1966 +1536 +1599 +1439 +1766 +1643 +1045 +1537 +1786 +1596 +1954 +1390 +1981 +1362 +1292 +1573 +1541 +1515 +1567 +1860 +1066 +1879 +1800 +1309 +1533 +1812 +1774 +1119 +1602 +1677 +482 +1054 +1424 +1631 +1829 +1550 +1636 +1604 +185 +1642 +1304 +1843 +1773 +1667 +1530 +1047 +1584 +1958 +1160 +1570 +1705 +1582 +1692 +1886 +1673 +1842 +1402 +1517 +1805 +1386 +1165 +1867 +1153 +1467 +1473 +1803 +1967 +1485 +1448 +1922 +1258 +1590 +1996 +1208 +1241 +1412 +1610 +1219 +523 +1813 +1123 +1916 +1861 +1020 +1783 +1052 +1140 +1994 +1761 +747 +1885 +1675 +1957 +1476 +1382 +1878 +1099 +1882 +855 +1905 +1037 +1714 +1988 +1648 +1135 +1859 +1798 +1333 +1158 +1909 +652 +1934 +1830 +1442 +1224 diff --git a/2020/Rust/input/day_1.test b/2020/Rust/input/day_1.test new file mode 100644 index 0000000..e3fb011 --- /dev/null +++ b/2020/Rust/input/day_1.test @@ -0,0 +1,6 @@ +1721 +979 +366 +299 +675 +1456 diff --git a/2020/Rust/input/day_2.prod b/2020/Rust/input/day_2.prod new file mode 100644 index 0000000..8903fa4 --- /dev/null +++ b/2020/Rust/input/day_2.prod @@ -0,0 +1,1000 @@ +13-16 k: kkkkkgmkbvkkrskhd +5-6 p: qpppvzp +3-4 p: psppxhlfpvkh +3-10 w: wwwwwwwwwwdwww +4-5 r: rcgrrcr +3-4 c: clvccc +1-5 x: xfsfxmctb +9-14 k: kpkmkkckhkkkkvkk +5-6 s: gsfsss +4-8 c: cccdcqdcr +2-5 k: kmkpkkfgkkkkdkkk +9-11 f: pfnsfffwxsn +8-9 w: wjwnwcwxc +7-8 q: rrxhplqs +5-10 n: gpnkqnxnbjzgjnb +18-19 p: fvpkgfkfjgwllqwhrjd +12-13 v: kvvvbmdvvvvvvcvvvv +3-5 m: mdmkmvhszpjcxl +2-7 v: qjmvzdwxc +1-4 b: bbbbbbbb +2-5 c: fzcdccfkcsjhckccrcx +2-10 d: fhdwdbdddrsldrtdjdr +1-7 z: ztszzfzztcqzrz +4-6 j: mmjjjrj +11-12 b: smbgkbbmbpbbmkbbbb +3-5 r: jxzrk +13-15 d: fppsvgqrdgrbddd +12-14 w: wwwwkcwwwpwzwzwwsz +5-6 v: lmcvvv +12-14 x: xxxxxxvxxmxbjnx +1-2 p: hpgpt +10-11 k: qmktzklkgkcknfwkh +6-7 r: ntcrrrjrznk +7-8 v: vshxvzxw +9-13 c: cncccccclcdwccwmc +5-6 r: srrrgv +6-9 w: bwfswqthk +5-7 f: hfvsfjf +11-14 v: zbksgqcrclvvwpfvfr +8-9 v: vvvvvmvvvkv +1-12 n: gnnnnnnndnqnd +10-11 j: jtjjjvbjjhj +3-10 x: vgxxxwqxkxn +5-6 z: zzzztr +2-4 z: rzdhz +10-11 m: mmmmmmmmmmvj +2-4 z: jzczpvzzs +1-4 k: rkkhk +4-8 n: nwcwmnflpbnnl +2-4 w: dwwgwwssf +1-3 m: smzm +2-6 d: dsddwwljd +13-15 w: wwwwrwwwdvwwpwg +7-10 f: bhsfffzfjdbfmf +6-7 w: wwwwtwww +3-6 b: bbbbbbxb +7-9 d: dvwdxjgdhf +12-14 n: znnnnnnnnlnfnrn +1-7 v: qvkvvvgv +2-15 x: xsxxxxxxxxxxxxbx +5-11 n: nckpwnmmnzg +4-13 d: dzdddcdkxgqddqdp +5-17 m: mkxmzbmmmmvfvmmjvmmm +11-13 p: pppzppppswhqhpppp +4-5 b: bbbgg +5-8 v: vvvvvvsv +9-10 j: jnlkmhmvjvnbjcsvlwb +2-4 x: zxxxxv +1-17 r: drrrrrrrrrrrrrrrcr +11-17 w: wqmwlszsnnwwwzwwwww +2-3 m: mmmmmmmmm +9-10 n: nrnngngnvr +4-8 z: bxjtzkdzwkzz +5-8 g: vjtvqtgqjgtggggmj +2-5 q: qfgcqw +6-11 c: cgccccchcccvc +6-8 t: tpjgfjpr +5-10 h: hhhnhbhhczhh +11-14 d: gdddddddddwdddr +1-2 l: twngrmgrckmlmh +10-12 r: rrrrrrfprfrr +7-8 m: bmmmmsrhqm +2-11 w: wlwwwwdnqsvw +10-13 j: jjjjjjtjzjjjj +4-16 f: fdvgffxfzcffffff +2-6 q: wbfvkm +4-6 d: ddddddd +2-4 p: jpxprdpn +5-6 s: tgssrrpbvsgs +3-10 j: spjgjjjcbjsjxj +5-10 w: wwqrdvwwwpwwwr +3-4 x: hpxxxzf +4-8 d: dxcpddddddrddddddqj +15-16 z: zhfxlzzkzzgzhzzz +3-5 s: ssslsnc +2-3 j: rrjrwg +7-13 x: xxxxxxpxxxxxtxx +5-8 x: xxxxxxxrxxxxxxxgx +4-10 g: dmhcmbwnwwggcw +6-8 s: qtsxflsfshzvsgpxg +7-9 c: cbvccckcwc +15-16 r: rlrrrrrrnrrrrrsx +8-10 r: kjrbrrrbrnvrrx +6-7 q: zpsmcjmmr +5-10 p: ppgpsppppkpp +3-4 k: kbkkk +1-2 b: bbbbb +8-11 s: sssvssssbsw +5-7 m: lmwrmmmmgmfhd +16-18 j: jjjjjjjjjjjjjljsjt +1-14 b: bcjlbbcwbjbxbbvbf +2-5 z: qzzrfv +4-17 t: tttrtzttttttttttxttt +5-6 w: kwwwjw +7-9 l: bclgtbghdtd +1-8 h: mqhbhhhhhhh +5-6 j: zznjjfvvjwcths +5-7 t: tttbmttd +5-14 v: vvvvpjvvvvvvhm +2-4 x: vxlx +5-15 g: gfgfnnqkbgngpdpp +1-8 n: jnnnnpnvntrp +3-4 b: bbbb +6-7 z: frszzzfz +6-9 f: pbbmlvfpwvw +4-15 g: gbjgggfgvggggdgbq +1-9 w: tgwljtgwlm +14-15 k: kkkkkkkkkkkkkzk +11-12 p: ppppppppppklp +4-8 n: nnnvpkzsn +13-16 m: fmjsqwtmwbdxmnwmlmb +2-7 c: qccgccczcc +8-11 x: xxxxkxxbxxx +1-4 g: gcgb +6-7 l: pkjllll +2-3 n: mnntpwsrlqkxkgnlb +9-10 s: sssssssscss +6-16 n: rtthnbsrfvndnsnnj +1-2 h: hjdhh +1-3 f: ffff +6-9 l: xqtvlllllpmlxtl +6-11 r: rrrrrrrrrrr +1-6 z: fzzzzzzzzzz +2-7 q: qqdqqqgqqqqtxqqqq +9-13 k: dbfkszjjmkkkfkdkklxk +5-6 j: mdjjljdfzjvqd +5-10 s: tsbskgsbtsqdd +12-14 j: tjjsjdjfjtjjfjj +9-10 x: xxxxxxxxgx +8-11 r: rrgrrrrbrrcrrr +6-18 m: vmnmhmbmmmmmmmmmmz +6-8 k: llkkqrkc +1-2 c: cccc +2-8 x: xxxxxxxxxx +7-10 p: ppzppppppwp +9-17 v: cdjwncwrbcgkfvwzvkf +6-11 w: wwftwjwwwcwwvwwvw +12-16 g: gggggggggxggggggggh +1-4 z: kzxzcdnpgczhn +3-5 t: tttmtttvxtd +4-5 h: hhhwh +4-8 d: dvddddln +8-15 l: lvllfllllxllllwmpl +7-9 s: dbsksbwtj +8-15 q: qkbqmqqqqqqqccqhq +2-6 r: grcsrrqz +14-18 s: sssssssssssssssssss +7-10 r: ffrrttnrrrrs +2-11 c: csccccccfdgccgcccccc +3-5 r: rrrrr +3-4 h: qrhh +7-9 k: kkzqkrkwk +1-5 k: khkkfgkj +3-6 l: pplnxl +10-13 k: chsxfrtrkkjgq +6-9 b: lbbblnbrbbb +3-5 n: hqnlfpnj +5-8 f: shffkcnfdmswfrnsfrpg +2-7 j: jjjjcdcnwxnbr +4-13 z: dvxnzpcbfkngk +11-13 h: hwzpzbphjhrhk +1-10 v: vqptqpbbtq +1-4 b: bdfpt +13-18 p: pppppppppppppppppp +14-15 h: hhhfhhhhhhhhhnmhh +4-14 x: wxsbxxxjvxxbxx +9-10 m: mmdmmxsrjdmpdmzsmm +11-16 s: szsbssssssszsxss +9-13 h: hhhhbhvhthhvnh +5-6 q: qqqqqq +1-3 d: ddldcqrdmd +11-17 f: ffcfkfffffpwfqffm +3-6 m: rmmmqm +9-11 l: vlblgszllwbvpn +13-15 z: ghzvdlzrvrzzcnz +3-5 l: bglllcll +1-8 h: hhhhhhhhhh +2-7 j: qjsgtjjt +1-2 d: ddbctlvpdf +11-14 v: vvvbvvvvvvtvvvvv +14-15 g: ggzgggggggswgrjggm +9-13 v: hqtcqvnbvqnmv +12-13 b: bbbbbbbbbbbjzbbbbb +5-6 r: rrfrcv +4-6 p: pppppppppppp +6-12 d: fdddddddddddrd +12-17 g: ggghgggggggxggggfgp +2-7 h: hqhhhhjhh +8-12 v: vvvlvvvvvvvv +4-5 n: nnkpg +3-12 m: mmzmmmmmmmmmmmm +11-14 b: bbbbbpbbbbbbdbbbb +6-7 z: zzzzzzr +4-7 n: snnnnfnkn +1-2 h: hnshhqvmjpghntx +15-16 b: bbbbbbbbbbbrbbbb +4-6 n: nxnnpnnnh +2-9 v: sdghvmxtkz +5-7 j: jjjjjjj +4-10 l: plbhsmlllrl +12-18 g: ggtggdlghcjwqwggggg +5-7 b: bzbxrbxgwcdbb +5-15 m: mmmmmmmmmmmmmmmmm +4-13 j: jjjjjjjjjjjjjjj +4-11 k: kshkkwlkkkkkdkbk +1-15 w: bwwwzbwwwnwwwmcww +19-20 l: pblvxmgslllnnsplldnv +3-4 z: skzx +1-5 x: xxqdxgb +2-3 g: wgggc +5-9 d: dgcddwrdf +3-6 m: mfkzjg +5-8 s: hmssmgwxhssg +10-11 s: ssssshqssll +17-19 v: vvsvfvvvvxvvvgvvvbv +11-12 t: cwssdtfqkdttjv +1-5 b: hcptprhlpbwkg +2-8 j: ljjxjjjljp +2-5 q: qqqlqr +2-8 r: jrcwdbhrcltrnsgswpm +3-4 f: ffvff +5-10 h: hhhhhhhhhhzph +5-6 z: mzzmctzz +10-13 w: wwwwwjwqwwwwwwwwww +1-4 m: mmtm +11-12 z: tddzcrptcnlmbjj +3-6 l: llmllpl +2-4 f: ffsf +5-11 g: gggrvgggggg +2-10 k: zbmpktfnddfs +5-9 l: lsbblgpjlms +1-12 s: sssssssssssss +5-7 f: fffdrsc +9-11 z: rzzzzkfzzwqzrz +3-6 z: zwzrbzv +17-18 r: rrrrrrrrrrrrrrrrrg +2-4 n: nnnrgnnn +3-4 n: nfqq +2-3 h: khhc +9-10 x: xxxffbxxxnr +5-6 d: mtgnrjdnmzhddks +3-4 b: bbbb +11-15 p: kppxppppppppppppp +13-18 t: tttdtttttttttttttttt +1-7 p: frjpppwgdpzvvfwds +1-6 k: qkzkkvpk +4-15 n: nnnxnnnnnnnnnnpqn +6-7 l: ndlrqrl +4-5 r: rchrwr +11-12 f: ffffffffhfff +1-3 j: xjjjj +9-10 z: zzzzlzzzgn +6-17 g: tgrhpggcqbjwjggmgql +11-15 v: vvvvvvvvvvlvvvhv +10-13 w: wwwwwwwtwwwwswwfwww +1-2 l: plllllllllllpll +8-9 k: kkckklwkc +2-4 b: bvbp +1-6 r: rrrnqrrrrrrrrrrrrr +8-10 d: pwnvkxddpddd +3-6 k: kkkwkf +8-15 v: vvvvvvvvvvvvvvvvvvv +13-17 g: lhqgggcxlgcvgwgdg +6-13 x: kxxxxsxxxmxxxx +3-4 r: rrrqr +2-3 r: kvrsxjrmtvtr +1-2 h: jtbh +8-9 w: wwwwwdfckw +13-18 v: vvqwvvvnvvvvvvvsvv +6-14 t: mpfthffdnmtxmx +4-5 d: dddcsd +6-7 m: mlmmmnfmmh +5-7 x: xhxpkpqxqnx +9-11 v: vgvvqgvvwmkpfvvlv +15-18 l: jlxqvmjgrrnbhccpdl +2-9 k: kkkkznkkbf +14-15 w: wwwwwwwwwwwwwbwww +9-10 k: wkkvvmkkvgfkkk +10-15 g: bfggggggggggggg +7-8 x: xxxxxxxx +12-14 t: dmtmwtztltfsthtb +6-7 k: kkkkkwk +4-5 c: ccvsz +3-4 c: mclvcfjcqh +16-17 k: skkpknhxxsrqmcvkj +12-13 v: vvvvrfdfsdtvf +1-2 q: fpqp +7-8 b: bwbbbqbbb +5-6 h: hhhhhh +5-7 z: zzvzdzzxzwz +17-18 w: wwwwjhggnwbwwwwwzb +6-8 g: gggggtggg +4-8 n: lnnnzhbn +17-18 g: lggggggggcggglgggg +2-8 v: vbvvvvvkv +1-9 v: vvxvrvvtvvvvv +13-15 j: fhvxdngcrjdqxmnz +5-17 n: nnnnnnnznnnnnnwnnn +1-4 f: fnxdmjdsqbfffnjsnkf +3-8 q: dqqgbnbrpxqclq +4-6 b: xkpbbbk +11-12 l: llqllllllldjll +9-10 c: cwvlcdnmzr +6-8 l: zkjlllvlgvlnlblspm +4-9 b: lbbbbbbbbbwbbbw +9-12 g: gfgrggvgbggg +16-17 r: rrrrrrrrrrprrrrtc +2-16 r: mrbmrrxgrrbzrrmrrj +16-17 v: vnsvvczmjwfkvjvvvsrv +2-11 l: lglrllnlllqlll +2-8 t: sllgjrxkthl +3-7 d: ddldddk +8-13 c: ccckchmcdxccccccsf +8-9 t: cttbtztttfqdqh +4-5 b: tbbxh +12-17 w: wwwwwwwwlwwtwwwvtww +1-5 t: krfwxtzxcwphw +3-10 w: wwwwwwwwwwwww +1-2 n: nnjqqkspswql +9-13 w: wwwwwwwwfwwwwww +1-3 s: ssss +13-14 x: xfxxxxxtxxxxnx +4-5 x: xxxcj +5-15 k: kkkktkkkkkkkkkf +14-16 l: lrlzjxlllpqltlblvlll +5-6 t: ttttfct +11-14 z: zzzzzzrczdkzzz +6-8 f: ffffftfj +9-11 d: ljdngglsdvdsv +10-15 c: ccrqhcqzccnnjvcfcj +11-15 w: jwvwnccwwxzcwwww +9-10 s: ssssssssss +2-4 r: vzfmrr +5-8 l: blhlnlsqb +6-7 c: ccxxcfxldckpcc +2-4 j: czjkj +2-14 d: rlxksvpqsnhhpkds +16-19 k: kkkkkkkkkkkckvkjkkwp +3-9 j: kcjcbjjjjjjjjgljml +2-7 l: ljjzdll +4-8 r: fqnqjbsssqrrwrrrrr +5-15 t: xtnvhtttdsrhtttt +1-3 l: xlzl +6-10 g: ggggncchghgggghgg +10-11 m: msmmmmmcmgj +4-6 c: mcnprhmcfcclcl +12-13 s: ssssswssssstsss +13-14 m: mmmmmmmmmmmmmmmmm +9-11 p: kqvrdbpppcpgqh +6-7 q: qqqqqqq +9-10 b: bpbbnbbbkdbbsbblqrfb +12-13 b: bbbbbbbbbbstsb +8-11 g: ggbbfrsgdxhldnt +7-8 d: dddwddssdbd +6-7 b: bbbbkbfj +3-5 z: jtdklzthgz +5-6 l: hlnlllltmvhmlmq +3-6 q: qqpxqvqp +1-3 z: zskzmzzzhzzzhzvzrzzq +2-8 h: sskhzhlhkht +2-9 r: rltcgrrrrrrr +3-16 f: zrxffkfcvffffncffgff +1-2 r: rrcrhkns +14-17 b: bbbbbbbbbbbhjbgbdblb +4-15 c: cccccccwcckclccrcc +13-14 l: lkzlclbnlhlcnk +13-14 r: rrrrrrrrrrbrrr +4-5 k: cvhkkkbj +2-5 m: kmfnmzh +14-15 n: nnnnfnnnxnnnnnnndnnn +7-10 t: wttwkbhtpf +3-9 n: qjgzpnkpn +6-7 n: nhnnnzn +5-10 n: nngtndngcn +2-5 x: rdxnp +10-13 s: sssssssssxssssssss +6-8 n: mnjnnxnnvckn +2-10 p: gpxpglqwpppp +5-7 t: twtktdts +18-20 c: cccccccccccccccccccc +6-7 d: dddddddw +10-11 x: xxxjxxxxxvzxxxx +4-7 z: zrphzzlzhgfwd +4-8 l: lllnlllkl +2-7 q: kkwsgndmdrmsvfqj +4-7 m: mmnmjfmm +2-5 s: flhkzzs +12-15 x: xxxxxlxxxxxmxxs +9-11 v: vvvvvhvkbndjvx +1-9 n: kpqgbxnkx +5-10 f: ffdfrpfffffwfffff +1-3 f: jsvqkff +5-7 j: jsjjjfxl +8-14 z: zzznrzzzzzqzzz +1-12 d: dzlbdzhgmrdddc +12-13 k: kkkkkkkkkkkbk +7-8 m: pmmmmmmmm +1-6 s: bsssssvslx +6-8 d: dddgdgrtbfdm +11-14 k: gkplwxkmskwmdpm +6-10 x: xxxxxkxxlr +4-10 l: lllxlllllklllll +1-2 t: ttstmpksrrp +10-12 s: ssssdsssshscs +10-12 z: zzzzzzzzpwjszzzz +2-4 r: grrrctkzmw +1-2 l: fspl +3-5 k: kkkkk +5-12 b: bcbbbbjbbbbb +8-9 c: ccccccctcc +3-8 p: pmplmhpp +6-7 b: bjhfsbbx +16-19 d: dddddddddwdvddddkdg +5-6 j: sjrzcj +5-8 f: mfdffdgf +1-3 q: qcqqq +9-10 s: sbsssssspm +2-4 f: dffl +3-4 n: nnnn +4-10 t: wttthjpdmtlthttgwtkt +9-10 d: jpxdmbnddddd +10-19 q: sqhswtjrpqbxwjqzfqmr +2-6 w: swwzvgwbww +1-2 m: cfmmsl +9-14 w: pwdbjwwhbnpwllm +4-5 q: qqqqqqqqk +8-15 m: mmkdmwzkrvlmpmnmmmmf +17-18 q: qqqqqqqqqqqqgqqqnvq +3-6 g: gkkngh +1-8 g: gghdzwkg +3-11 j: vxdspqtvkpj +5-7 q: qqtqgpmqdq +6-8 d: bdmddddvd +5-6 w: zwwwwwvwxfw +2-11 n: bnplrmpvbpn +7-14 k: kkktbkkkkkkkkk +3-11 b: fmkqvvbztnxzqvjc +3-6 q: sscqqq +4-7 c: cfrrdrzbjmvpk +6-9 w: pwrtzwrww +2-5 v: vvcvv +2-4 f: ffmf +8-10 k: kkkkkkkpkd +6-7 v: mvjvvvv +8-11 c: vccvcckccfk +7-8 b: bbbbbbbsr +2-3 x: xxxmvx +6-7 l: llbllwsl +8-10 r: rrrrrbrrgrrrrnrb +12-16 g: ggggggzsggmwgggv +18-19 p: pprppppppppppppppppp +3-6 s: ssssssss +2-6 x: lwxkdx +2-3 n: xgbnf +2-4 p: dzrk +2-4 h: hlhpjhh +4-5 b: bmnbb +1-7 z: zczvzczsxmxpzznp +2-9 l: nlwxdwlblzl +1-4 r: xbtcqrfkv +13-16 k: skkkkkkvkkjkxrkfqk +9-14 b: bbbfcbwfjbbcbg +1-13 r: frrrrrrrrrrrfr +1-4 w: hwwxwnvvt +2-6 l: zzhlrx +3-8 v: vmzvggqtslnlqrj +15-16 s: dhssknsjztzssssssss +2-6 q: qqqqqqqq +2-3 t: mkktlt +7-17 b: bbbbbbbbbbbbbbbbdb +11-17 s: sssssszfssxssssskj +2-7 h: hnhkhshhhhhhhh +2-15 x: xzxjxnxxpxxkzxxxxj +15-16 p: pmcmpclzphppxplp +8-9 k: kkkkkkkdpkks +2-4 r: vrwt +8-12 r: qrrrhhwjrrrhrrr +3-4 j: vjjzq +8-10 q: qqqqqqqqgs +6-7 j: zjjjjjjj +1-11 m: mdgkdkmqzmmsrhxxmmj +1-7 x: pxxxrbq +3-4 z: zrhkzz +4-5 s: ssqlss +5-8 f: vtrfffffff +7-13 j: jjjjjjdjjjjjtj +1-7 n: dnnfxwz +2-11 n: nzgnqncnnnjg +4-5 x: xxxxx +5-7 v: rhbvvvvhvxvpz +10-11 z: zlbbddzlzwzv +10-13 v: vvvvvvvvvvvvvv +3-4 s: ssrs +11-12 m: mmmcmmfdmmsmmmmnm +5-7 s: sdstsssssrs +1-3 w: bwzw +3-4 h: hphq +7-16 q: qqqfqqdwksqlfcqjxq +6-7 x: kndcxfv +10-11 m: mmmmmmmmmmm +1-4 n: fvsvnfhgwcgcnp +13-14 s: ssssssssrssswrss +5-9 x: xmvkxwgrxrtwxmrxhxx +3-5 q: jdbvvxvdg +3-15 w: zlzcksssjbwcvgp +16-19 x: bxxxxxxxxxxxxxxxxxx +3-5 z: rzzhz +4-10 f: hpttvbtjmq +3-6 n: wsngjn +4-5 p: ppphg +10-12 c: bqlccfctmchqbchhcg +9-10 z: zzzzdzzzzhzzvz +7-9 w: nwgwcvdcxqqwmzq +14-19 x: pxtxxlbrxdpvspwmxxx +2-8 t: ssktwbft +8-9 j: jjjjjgjsjzjj +7-9 v: vvvvvvdvlvvwv +4-6 x: qxxkssx +11-13 g: ggggggggkgvgg +8-9 t: tttttvttjttwt +2-8 b: pfbbcsbwbbbb +8-16 r: mkrcrtsrrrrbxmprftvx +9-10 k: hvwlqvktkkb +1-6 w: wsbwwvjwwrwh +10-19 f: nfftfffrdhjffjsnffd +13-16 h: hhzghvhhhfhhhhhhhhh +14-16 x: kskxbwrwrvjxfvfg +1-4 k: rflk +6-7 b: bbbbbbgb +4-17 v: vvvvvvvvvvvvvvvvv +12-13 s: sdstmsspfwsssscqf +9-11 z: zzwzvmrzzczzzz +4-8 s: skslmgsqtszbswsssscs +4-12 h: bdshxnpgvwhktdwgdp +3-5 t: tltst +4-5 h: hhhhh +9-11 w: wwwwwnwxxwwwwwww +6-7 n: dcnngffnnzn +1-3 l: clflll +6-7 x: xxxzxxgx +6-7 n: nnnnnkgnnnnnn +1-6 m: mmmmmmmm +5-7 t: tktttpt +4-8 v: zpcvqvzvrvgttntrbl +6-7 d: dddrddd +3-5 k: jskdkswqjfftgkfr +5-6 f: ffffgrffn +6-8 l: lwlkllgl +10-13 p: ppppkpppppppd +4-5 d: hbjdd +9-15 r: rrxrrrrrrrrrrrrrgr +4-5 b: bbbbtbx +8-11 b: brbbtlvvlbdbbbqjsb +6-8 g: zgzqgwmg +4-9 r: qstrmxrtr +5-8 m: mbmjmmmmmr +5-7 v: tvvzqvgrvqvmvncshv +17-18 g: fgggggggggggggggwr +2-12 t: nttpgcjtkdjt +6-10 k: kkkkklkkkk +2-7 q: qqqmtgqq +3-6 n: npccknvnn +5-16 k: rtlhkbtdkmmntdbl +2-3 b: wwkb +7-17 q: qqqqqqqqqqqqqqqqqq +1-4 g: ltgc +2-6 l: lxlnln +13-15 q: qqqqqqqqqqqqqqxq +3-4 j: jvjj +5-15 c: cpmzlhcckwlnhwmwgzw +3-8 b: qvblmmchbcc +5-8 b: fqhdwtcxb +4-15 k: kkvkkkcwgkkbkkdkkkkn +11-12 f: fnffffffffffffff +9-10 t: tttttttpfvt +4-10 f: nfffpftfffffffnf +2-4 m: scgxnm +7-8 z: zzzzzzxhbz +6-9 z: vznwkzzzz +3-5 k: hkcdn +3-10 k: kkskkkkkkz +2-3 p: pbdf +1-4 m: mdhmm +6-10 b: lfbbwdbbtv +8-10 g: gggggggggggg +2-3 t: qgthtztbwtppb +15-17 n: nnnnnnnnnnnnnnbnjn +8-17 v: vvvvvvgkvfvvzvvvpv +4-5 f: vwffff +8-15 w: wwbvwwwwdwwkzwwwwwwf +7-13 n: srmzrmnvcgshljkchp +5-15 q: dqjvfqvpwqnmpwqzh +1-2 h: hhfs +2-6 h: jhqwhh +3-4 t: tthg +2-4 b: sxsqrrxkjb +6-8 q: qqqqqqqqqq +6-7 c: rqcxcclxccwqcgwq +4-5 v: vvmfv +6-7 m: mmmcmmmm +2-4 j: bqfj +2-12 k: kkkkvkkkkskkkkkk +5-9 q: xjtqqrnnkdplrnqq +1-6 k: bqkrfpkcrwwkk +1-4 r: mrblr +12-18 s: ssssbfdlqbbssplswpsl +8-9 b: bhbhhbbkbzbnbcbh +3-7 t: tsdtthx +12-15 f: xcmghffxtgfffjf +12-16 n: bxnnhnhnnzfnnnwrtgl +7-9 q: qqqcqmnqdq +2-3 m: rpbjgkxqtmjrzm +11-12 s: hssssssssshc +3-5 x: xxldx +3-4 k: kkkxt +7-9 k: wlgkqndkz +5-7 l: llmtllv +2-6 v: svzvfv +5-6 d: djdddvddd +5-6 k: mhkkkkkwvkkcfk +3-4 c: rjcc +4-8 t: ttttzfttc +10-11 g: ggzggngbzgg +14-16 w: qzqwdwbcwwwmllndzlsm +2-4 z: zzpz +12-13 g: gwxpwcbsvwgtthn +1-4 b: bbbbmzc +5-7 f: cnxlfdffmt +3-4 z: znsdz +10-13 c: mrckljhmrcmnc +2-9 m: dxmdhndrwpmpgc +7-16 z: zzzzzzzzzzzzzzzzz +1-3 j: jjjjjjjjjjjjjjjj +15-18 g: mmglvtgzggzgnggggg +4-10 c: cccncccccz +1-8 n: mnnnnnntn +10-13 l: llllllltzhlvvld +2-3 r: gnnd +3-7 v: vcnfzzbd +6-7 p: pprpctdp +5-8 g: gggggqgggg +1-13 f: wfffdfpbfjlfhb +3-8 j: dmjjkqwj +4-10 j: vfjhnswwwtzlfvmcdn +2-4 v: bnjd +4-7 w: btwwlfwkwzmzhhlsvs +14-15 g: gggggggggggggpgg +10-11 w: zwwwwwwpwgrww +2-3 b: dbbcgwqfzlhwcbs +1-9 f: qfpfvffffffmfxbcpf +9-10 t: tttbpttttmttcnt +2-3 l: lgll +8-9 s: vzgvjsnns +6-8 w: wwwdwsbtswrww +13-14 h: dhhhxhdjnvhrhrflhh +7-8 d: dddddvjd +14-15 l: lllqlllllllllnlxlh +12-13 d: ddddzdjdddhhkdd +9-14 p: pvtplhjvpzdvqjqvh +9-10 r: rjrrrrrtrrrr +6-8 g: gjjgfwgg +9-14 j: jjjjjjtjcjjjjhjjj +8-9 q: phxjqqnqq +5-6 k: lkkkkk +14-15 x: xxxxxgwxxxxxxtwxq +1-4 x: xqfxx +1-8 m: mmgmnmvm +2-3 n: hnwr +14-15 z: zzzzzzzzzzzzssz +2-6 p: pspppp +1-6 z: zzxzzx +9-18 z: zzzzzzgzzzzzzzzzzgz +6-11 z: wzhtdzzfxjz +3-4 v: vzvv +16-19 q: qqqqqqqlqqqqqxqqqqq +2-4 v: vvhvvvv +2-9 p: lpxppwppppgppspb +11-12 m: mmmmmmmmmmndm +8-9 v: vvvpjvvvpvv +16-19 k: kkkkkkkkkkkkkkfkkkk +9-10 z: zxlzfzczzzczrdn +12-18 p: ppppppppppbjpplpphp +1-3 p: pvpppx +1-2 x: vxlx +10-12 l: lllnlllllwlll +4-5 b: bphwg +7-10 c: gcjjpprxxjcwvk +6-9 l: llwqklmpxlszgzlvl +9-15 s: fsxsscswksvrmsh +15-16 q: lqxqqwqpqwptqqmg +10-13 r: xmpmqrdjkrzkpzc +3-5 c: kcbcclt +17-18 f: jffffsffffffffffbsff +1-3 t: vqcqdmmgc +1-2 n: qnnn +16-18 n: nnjzhnznnnxlrmmnsn +13-19 q: srxlcdznhbfxqtsqtsqx +2-7 m: vmmmnjmmmmz +6-7 v: vlvmjvg +7-15 k: xnpkbtzwgntptwkgmxm +15-19 g: wggggggggggsggkggxg +8-17 h: hhhhhhhwhhhhhhhhhh +2-5 w: kwwwww +4-12 k: kkkqkkkkkkkqkkkkkkk +7-11 d: hddcndsgddgz +2-7 t: tdzxnth +1-7 z: lzzcrvz +5-10 h: shvchmxxdh +12-13 f: kffwgtfsssfqnvff +1-9 b: mbbbbtxbrbbc +4-12 r: rnfvrprrrrzrrr +2-6 p: qzltppwqljg +2-4 w: hwdxwmmqphfkhthczx +3-4 r: rrwj +3-4 b: lbbbpldfj +4-12 g: gggggggggggggkv +4-5 r: rrqjtrrr +4-8 n: nnnrfhnfn +4-11 h: lrnxkwkbhgnhh +1-8 l: lvjlhbffl +6-10 g: ggtgghghghpfgg +1-2 s: szsss +3-6 s: dszxsdsssskssbs +11-14 x: xxxncxxxxxxxxq +5-10 m: mtmmmmmmmdmm +1-3 r: qrgr +2-7 m: gmhmmtd +1-3 c: cccswmjcmnm +2-9 x: qbcdsxxlx +6-7 s: nsswzssv +1-14 m: trmlzmsmgqmmmnfdsmtm +5-7 d: cdddzdtdd +3-4 k: tvczkxvvrw +2-8 s: slvmswvs +10-16 p: pppppppppgpptpptpp +2-11 l: jqxsjlvpzkgzjdmt +4-7 t: ttmtpttp +4-11 r: twbrxccwcrtffpnv +6-8 k: kkckkkkqkk +10-12 v: vvvvvvvvvvvv +4-6 k: gqzkkk +3-4 r: rrmxr +12-13 p: npgppsppppqnw +1-16 x: mxxxxxxxxxxxxxxv +5-6 l: llllll +1-4 k: bkkckkkkk +10-11 v: vkvtvkjltmlvtxlnlrsj +3-11 h: mzhrhlhhhhhwl +5-6 p: pppppp +1-17 m: mmmmmmmmmmmmmzmjmmmm +2-6 v: cvvcvfbgcvvvcq +4-7 n: nnsnnwj +2-3 k: xvkxkksvb +16-17 x: xxtxxxxxxxxxxxxxr +1-13 w: lwwwwwwwwwwwxw +3-14 d: ddjdddbddddddtdddd +4-10 g: jrxggnqmjg +1-3 b: bbfbbbbb +4-5 d: pdhdm +5-7 d: mvdsdnd +17-19 m: mlmmmmmmmmhmmmmmmmm +4-6 g: gtlgxggggsgc +6-7 m: mzvmhglmmmpmmxf +10-14 j: jrjjjxcjjtjjjhpljl +9-15 w: wwwwlwwwwwwwwwjwwdw +1-3 g: wtzgjgr +5-7 m: dmmmtmm +1-8 g: ggkdgpggg +5-6 x: xnjhmx +1-7 b: bbbbbbbfbbbb +3-11 n: mnnnngnnnvnnqnnvn +2-3 l: jglgdrczl +12-14 f: tffpffsmfffffg +10-13 d: mndmdwdxjdxpd +9-10 m: mlmmmmmmzvxm +6-8 l: ptpjwltl +7-8 r: rrdrprlqrr +8-9 n: nnnnnnnrc +6-7 p: ppppphn +4-8 t: smtptgwtmlttw +4-10 j: jsjjjjjjjj +15-18 k: kkhwkkkkkkkkkkkkkk +1-2 s: sksxb +2-10 g: sggchblktg +8-12 r: rrrrrrrrbwrr +13-14 v: vvvvvvvvzvcvvvvv +3-4 p: kppp +4-14 m: mmmsmmmmmmmmmzm +5-6 n: kndmnnnnpnznjqb +3-10 d: xlddcdbdlddpqdkdl +17-18 n: tnmcvdcznnnfnznldt +6-11 g: wgbgzgggggg +16-18 z: zzzzzttzzzzzzzzkzq +11-13 x: pxxlgmtvbjrlb +2-13 p: bmphpwxpsmmthppprdk +14-16 r: rmrrrrrdmrrrrztrjr +1-5 x: xdxxx +1-3 d: dgdddfzddfd +1-9 m: ddfmgwfgf +7-11 x: xwnqqtxdmns +5-6 v: ffvvvv +3-15 g: dggggggzggggggb +10-13 p: pptpppkdpwcngppf +11-12 x: xxngxbxxdxxxxnzxbxx +3-4 n: nxqc +1-2 x: dvxxx +4-5 h: zhvhh +3-5 j: jqpjj +2-7 f: ffffffpfz +8-10 k: kkkkkkkkkk +5-12 x: xxtxxxxxxxxxxx +12-14 c: cccccccccccccc +8-9 s: vhlssssws +1-4 k: dqkk +4-10 r: rrbrrrrrrdrr +1-3 r: hqljfr +8-12 c: qcccccszgjgcccddccw +6-14 m: mmmmmxmmpmmqmcmmdm +5-6 r: mwrrdtm +1-5 t: rdjtts +6-14 c: gpcbczvfbcbcckblzc +5-6 w: wxwwww +3-4 p: rjppp +10-13 t: ttttttctdtgtttts +3-14 c: cvlcpqscwgzgxzxvkmh +3-7 h: kxqfwfddhllhj +10-18 r: mdqrrmrdxkkvxftrrr +13-14 m: cmmmcgmmmmhvmm +2-7 h: khvhhjhhjbv +5-9 r: rrrzgrrrlr +1-8 c: gccccccsccc +15-17 v: vvvvvvvvvvvvvvdvn +9-13 v: vbvdgpvjvhvhwxv +6-9 z: zzxbqznzqjzh +3-6 r: rrrrrrrrrrrrrrrrrrrr +3-4 x: nxxxxst +7-10 q: qqqqqqfqqf +9-10 j: jjbjdjqcqw +9-13 z: dhzzzzzzzzzwxkzzzzjk +3-9 q: pqxgqqcqqjql +10-11 h: ljhgjwhzdrhhhh +18-19 v: vvvvvvvvvvvvvvvvvvvv +10-11 l: vgxrhvtfblwl +2-3 v: rvvvvpj +8-9 c: smchcscccdmf +2-3 n: nqmnn +15-17 x: xxxxxxxxxxxxxxqxrxk +11-14 j: jjjjjjjjjjljjvj +7-9 z: zvzzmzjkfbvzzczczlzm +2-6 z: zzzjzjzzmfzk +9-11 m: mvcmmbmlzrmmz +6-7 r: rrrrrrr +3-6 c: jtcfscccvvf +2-5 s: cssbntxggkwvwnchn +8-10 x: xxsxjzxqxx +6-7 n: ndnnnbg +9-16 j: jgzxxsmljbhbttqjw +3-4 k: gjsk +9-10 q: qqcrqqqpqq +2-4 t: thtt +3-4 w: wrfxww +9-14 v: vvsvvkqgzvmvvvvvlvvv +9-15 m: mmmmkmxdmdmmhmmwjw +3-9 b: bbbbwcwbb +3-6 c: ctdccs +7-8 k: kkqrkkkk +5-7 l: llmllcqjljlh +5-7 w: wnzbwgw +15-17 f: fcffffffffffffffpf +1-2 t: tttft +1-7 n: zctqhnxvbn +3-8 z: hdpqzzzlzsw +3-15 l: llslllllllllllml +8-19 w: rwtbwrwjwtwxcclthdw +4-5 g: zggggg +5-14 v: vvvvhvvvvvvvmlvv +1-7 l: mlgxllpgl +2-12 b: mvwbfjcddqjb +1-3 m: qmzm +2-3 r: rrrrrffr +1-7 x: xxsgxxv +8-10 d: tdrrqdzcdddddxddl +2-4 n: crnnfdcnnnzn +3-4 n: nnnz +9-10 z: zzzzqfzzzzz +10-16 n: nnnhmnnznsnntnnc +9-16 s: vssssbsscssssssjss +9-13 w: wwkwwwqqwvwwww +4-5 d: hkdhwddtdkqwvl +3-4 l: llll +4-5 f: ffzffftld +7-9 d: ddddddddgd +6-7 t: ttthptttqxlfddstsq +5-16 c: clhwccvlnmttjqcc +4-5 k: pkkkk +7-11 m: xwmmmmchmmt +16-17 n: nnnnnnnnnnhnnnnrm +5-8 b: bbbbbbbbb +1-4 s: jsss +3-4 h: rhhhtjwfvdhz +9-10 r: rrrprlrwrrw +1-6 n: nnnnnkn +18-19 p: ppppppppppppppppppp +4-5 l: ljlrcl +3-7 m: mmmmmjmdmtm +12-13 b: bbbbbbbbbbbvf +6-11 g: hcghdwfpcqk +4-6 q: krpfvw +10-13 j: jsjkvjjjjjzjjfj +5-6 n: lcnnnnzndqkfnsq +2-4 j: nvdj +2-5 p: hppnpmpq +2-4 w: wnwbw +2-7 f: fwfxfmfszmcxf +6-8 d: dqrdbsnjds +1-3 f: ffffffmff +5-8 s: lnbwqnkxws +10-12 n: nnnnnnjnnnnnjcn +9-12 c: pccvnbccxrncrcclccc +14-18 s: ssssssssslsssstsssss +3-6 l: lldllczl +6-11 g: gggggwgggghg +11-12 h: chhhmjhzhqfh +5-6 n: qhnvcw +6-7 k: nckkkkmnkkkzkkk +6-8 d: wddgbdpdzdqxrwddjlz +1-3 h: qghp +3-5 j: mnjjjxjkgnrdzjbtdr +1-9 g: gfgcgggxgjggggggf +8-20 b: vptprmjbwwtnbhwjtnjb +7-8 j: jjjjjjjj +3-4 t: tqtt +5-10 f: fffzbxxszjjvjfhn +3-4 t: tttttttbtt +4-7 p: wjrgpnj +1-9 g: pgzllxgfg +14-15 c: cccccccccccccqm +11-12 b: btmcbzbnzcbbxr +5-6 h: hhhhhhh +1-6 s: nssmsssss +11-12 d: ddddddbddthfdddd +11-13 j: jtjjjjjjpjjjjwfjj +2-4 j: gjjj +3-9 v: vvgvvvvvrv +1-2 l: tqjjljxcsl +5-6 q: nqqqqr +12-16 h: hkhhhhhjhhhhqxhhhhhh +2-6 p: lpppkpbpzg +2-7 v: vzvvvvfv +13-16 g: ggggggggggggwggb +3-14 j: ghsjjcgmkwsdchlslpf +1-3 s: ssplw +7-8 x: xxxnxxxxxxx +3-4 h: zghhvtwtmlplvxxhsbf +4-5 g: sqgsnf +14-17 z: zzzzzzzzzzzzzwczc +1-2 z: cpzzzzk +16-17 s: ssssssssssfsqssss +3-9 j: jvjjfjdjjjjjh +1-6 v: vtvrvvj +4-8 c: clzcccccccf +4-5 d: dwldw +2-4 l: lwlrllllllll +6-11 s: zxgcsdxkrcns +14-17 r: vrhvhrprrfrsrrrrr +3-6 p: mrcztppnl +4-6 w: wwwwwwwwww +1-6 w: zwjccrqpwmnthz +2-7 t: mnjntdcq +1-5 b: bbjbbbbb +10-11 w: wwwwwtwwwwww +4-6 d: dddxdfd +2-4 f: fjfff +13-15 b: vbbbbbbbbbbbbbb +8-9 n: ncbnnnnnn +2-6 d: hdfphnnmbbdt +1-4 f: wffz +7-15 f: ffsffffffffffvzff +8-10 c: zchrckkcqcr +2-6 h: thvbvh diff --git a/2020/Rust/input/day_2.test b/2020/Rust/input/day_2.test new file mode 100644 index 0000000..fe19c03 --- /dev/null +++ b/2020/Rust/input/day_2.test @@ -0,0 +1,3 @@ +1-3 a: abcde +1-3 b: cdefg +2-9 c: ccccccccc diff --git a/2020/Rust/input/day_4.prod b/2020/Rust/input/day_4.prod new file mode 100644 index 0000000..3609690 --- /dev/null +++ b/2020/Rust/input/day_4.prod @@ -0,0 +1,1102 @@ +hcl:5d90f0 cid:270 ecl:#66dc9c hgt:62cm byr:1945 pid:63201172 eyr:2026 + +ecl:amb byr:1943 iyr:2014 eyr:2028 +pid:333051831 + +byr:1971 +eyr:2021 iyr:2015 pid:158388040 hcl:#18171d ecl:brn hgt:179cm + +byr:1936 +pid:707057570 iyr:2014 ecl:amb cid:299 eyr:2030 +hcl:#c0946f hgt:186cm + +hgt:163cm iyr:2013 ecl:gry hcl:#86e981 byr:1939 +eyr:2020 pid:241741372 cid:203 + +ecl:brn hcl:#341e13 +pid:686617364 byr:1929 eyr:2029 hgt:160cm cid:280 iyr:2020 + +byr:2002 hcl:#623a2f +pid:253005469 iyr:2011 ecl:hzl hgt:184cm eyr:2027 + +ecl:#bb984b eyr:2040 +hgt:188in +iyr:2005 hcl:c5be8e pid:174cm cid:161 byr:2004 + +ecl:oth iyr:2010 cid:128 hgt:153cm byr:1991 +pid:24061445 eyr:2025 hcl:#54d43e + +hcl:z +iyr:2023 pid:981178503 ecl:gmt eyr:2038 byr:2004 + +ecl:gry eyr:2022 iyr:1981 pid:566993828 +byr:1941 hcl:#341e13 hgt:176cm + +eyr:2027 byr:1976 +pid:350079989 ecl:blu iyr:2013 hgt:180cm hcl:#866857 + +eyr:2029 hcl:#ceb3a1 +ecl:lzr +iyr:2011 hgt:152cm byr:1986 pid:162999623 +cid:240 + +ecl:gry iyr:2017 hcl:#18171d byr:1926 +eyr:2027 hgt:68in +cid:310 pid:560836007 + +ecl:grn +cid:307 +pid:#cdc803 +byr:1975 eyr:2039 hgt:75cm +hcl:318b11 iyr:2022 + +ecl:brn hgt:179cm eyr:2020 iyr:2016 +pid:322103252 byr:1940 hcl:#b6652a + +hcl:#733820 hgt:188cm cid:70 eyr:2021 ecl:amb +byr:1996 +iyr:2013 pid:412419084 + +hgt:164cm iyr:2011 byr:1928 eyr:2020 hcl:#733820 pid:704914380 ecl:blu + +ecl:brn cid:267 eyr:2029 byr:2011 +hcl:z pid:467662306 iyr:2026 hgt:104 + +pid:224593036 eyr:2027 +ecl:brn hcl:#341e13 iyr:2014 +byr:1997 +hgt:181cm + +eyr:2005 pid:9756449964 +hcl:#fffffd byr:1999 ecl:dne hgt:152in iyr:2027 + +byr:1998 +iyr:2017 pid:618350852 hgt:156cm cid:193 ecl:amb +hcl:#602927 eyr:2029 + +byr:2021 pid:3395281192 +hcl:z hgt:167in ecl:grt eyr:2008 iyr:2025 + +cid:206 pid:735212085 eyr:2020 byr:1950 hgt:153cm +ecl:blu iyr:2019 +hcl:#733820 + +eyr:2021 pid:551149968 iyr:2020 hcl:#6b5442 +byr:1948 +ecl:grn +hgt:152cm + +hgt:76in cid:113 iyr:2019 eyr:2023 hcl:#888785 pid:131239468 ecl:grn +byr:1994 + +ecl:oth cid:240 hcl:#bed757 byr:2027 eyr:2021 pid:#ffa971 iyr:2022 + +cid:204 iyr:2011 +ecl:blu hgt:169cm byr:1985 eyr:2020 hcl:#18171d + +ecl:hzl iyr:2012 cid:344 hcl:#7d3b0c +hgt:190cm pid:599490023 byr:1954 eyr:2023 + +cid:333 +eyr:1971 hgt:193cm +ecl:#12421d hcl:#7d3b0c iyr:1991 pid:#7149ad byr:2008 + +iyr:2014 +hgt:151cm pid:190259199 eyr:2021 ecl:blu +byr:1975 hcl:#ceb3a1 + +hgt:164cm ecl:oth hcl:#c0946f pid:427760590 eyr:2023 iyr:2012 +byr:1979 + +hgt:193cm iyr:2023 ecl:#213711 hcl:z +pid:23861701 +byr:2020 +eyr:1924 + +pid:450691994 cid:191 +eyr:2028 +byr:1972 ecl:oth hgt:168cm hcl:#888785 + +iyr:2013 hcl:#18171d hgt:170cm ecl:blu +pid:040253250 eyr:2024 +byr:1954 cid:340 + +cid:185 byr:1956 eyr:2029 pid:454637740 ecl:hzl hcl:#efcc98 iyr:2019 hgt:73in + +hcl:#efcc98 +hgt:176cm +ecl:hzl cid:113 pid:747653564 iyr:2016 +eyr:2020 byr:1945 + +hgt:69in cid:264 byr:1971 hcl:#733820 ecl:amb pid:086130104 +iyr:2011 +eyr:2022 + +iyr:2010 +eyr:2034 +pid:501068596 +hgt:109 hcl:z byr:2018 cid:326 ecl:lzr + +pid:955229652 +eyr:2027 cid:175 +byr:1950 iyr:2010 ecl:gry hcl:#866857 hgt:177cm + +ecl:amb hcl:#888785 eyr:2020 +hgt:172cm byr:1991 +pid:556956304 + +byr:1930 +eyr:2011 +pid:734176827 +ecl:brn hgt:182cm +hcl:z + +hcl:#a97842 +pid:040278061 ecl:brn hgt:168cm cid:194 +byr:1973 +iyr:2016 eyr:2027 + +hcl:#623a2f +eyr:2023 +ecl:blu iyr:2016 pid:844348663 byr:1997 hgt:179cm + +hgt:188cm hcl:#a97842 byr:1972 +ecl:hzl pid:912948357 eyr:2026 iyr:2025 + +iyr:2011 eyr:2025 +cid:286 +pid:084736292 +byr:1936 +ecl:oth hcl:#a97842 hgt:166cm + +iyr:2012 ecl:blu hgt:159cm byr:1980 eyr:2024 pid:811644928 cid:105 hcl:#7d3b0c + +pid:530452683 hcl:#341e13 +iyr:2011 +hgt:163cm ecl:oth +cid:309 byr:1940 + +ecl:hzl +pid:144377866 +hcl:#18171d hgt:193cm +iyr:2013 eyr:2028 + +pid:868386570 +ecl:brn +hgt:161cm hcl:#18171d +byr:1956 +iyr:2017 +cid:307 + +iyr:2019 eyr:2026 ecl:brn +hcl:#866857 byr:1993 cid:299 +pid:603503348 hgt:186cm + +iyr:2014 +pid:852954158 hgt:73in byr:2021 +eyr:2020 hcl:#a97842 cid:260 ecl:oth + +hgt:164cm eyr:2025 pid:113005290 byr:1955 ecl:blu iyr:2017 hcl:#b6652a + +cid:179 iyr:2015 +pid:317467924 eyr:2025 ecl:gry byr:1996 hgt:180cm hcl:#a55f97 + +hgt:172cm hcl:#efcc98 cid:53 ecl:grn iyr:2016 +byr:1991 pid:337133478 +eyr:2025 + +hgt:150 iyr:2008 +pid:#3e66a7 ecl:#8b3133 eyr:2040 byr:2012 hcl:802d16 + +pid:577607614 byr:1924 hgt:173cm hcl:#341e13 eyr:2026 ecl:amb +iyr:2013 + +eyr:2020 iyr:2011 hgt:175cm hcl:316607 pid:738554684 +byr:2029 ecl:dne + +hgt:179cm iyr:2016 +pid:178cm byr:2015 +ecl:gry +hcl:#341e13 +eyr:1986 + +byr:2005 iyr:2028 ecl:#7be9b8 eyr:1941 pid:#e7e9cb hgt:177in cid:67 hcl:#602927 + +ecl:#0d50e6 +pid:192cm iyr:2014 eyr:2027 hgt:73cm cid:162 hcl:93ea2f +byr:1958 + +hcl:z +cid:292 hgt:184in eyr:2001 pid:7218132701 byr:2020 +ecl:grt iyr:2014 + +ecl:gry +hcl:#fffffd +eyr:2026 iyr:2013 +pid:117261833 + +pid:780384540 ecl:gry cid:52 eyr:2020 hgt:193cm hcl:#4ae223 iyr:2017 +byr:1984 + +ecl:hzl +pid:218314886 eyr:2030 byr:1948 hcl:#c0946f hgt:185cm iyr:2013 + +pid:175cm cid:340 ecl:blu hcl:#cfa07d eyr:2036 iyr:2018 byr:2018 hgt:70cm + +byr:1953 hgt:164cm ecl:hzl +pid:488831953 iyr:2010 +hcl:#fffffd + +byr:1961 hgt:165cm pid:506597451 +cid:122 eyr:2020 hcl:#cfa07d ecl:gry +iyr:2016 + +iyr:1970 +eyr:2040 +byr:2008 +hgt:188 +ecl:#b00a46 hcl:#fffffd + +hgt:179cm +byr:1972 eyr:2026 +cid:62 ecl:oth +pid:996355557 iyr:2013 hcl:#a97842 + +ecl:amb eyr:2026 byr:1936 pid:812982189 hgt:158cm hcl:#888785 iyr:2010 + +iyr:2020 +hcl:#7d3b0c hgt:160cm +pid:336806720 +eyr:2024 ecl:#7e0ae0 byr:1992 + +eyr:2036 pid:178cm hcl:z +hgt:133 byr:2009 ecl:dne cid:127 + +byr:1938 hcl:#fd309a +cid:104 iyr:2015 eyr:2022 pid:201047563 +hgt:160cm ecl:hzl + +byr:2023 pid:25086180 hgt:160cm cid:180 hcl:z ecl:grt eyr:2038 iyr:2022 + +ecl:grn hgt:167cm +byr:2023 iyr:2026 eyr:1928 hcl:z + +hcl:#efcc98 hgt:187cm byr:1925 +ecl:grn +pid:753746076 iyr:2017 +eyr:2021 + +iyr:2017 +byr:1934 ecl:grn eyr:2021 hgt:163cm +pid:688172460 hcl:#b6652a + +hcl:#c0946f iyr:2018 ecl:blu pid:676564085 +hgt:184cm cid:152 byr:1980 eyr:2023 + +ecl:grt hgt:70cm iyr:2022 hcl:58716b byr:2010 +pid:60834390 eyr:2037 + +iyr:2028 pid:270499403 +ecl:xry eyr:1947 hgt:152cm byr:2025 + +pid:091281559 hcl:#733820 +hgt:166cm +eyr:2021 ecl:grn cid:327 byr:1928 +iyr:2014 + +eyr:2025 ecl:grn byr:1938 hcl:#ceb3a1 +cid:234 +pid:549433891 +hgt:172cm iyr:2016 + +hcl:#c0946f hgt:173cm iyr:2014 eyr:2030 ecl:blu byr:1965 +pid:696577272 + +hgt:154cm eyr:2030 +pid:475642195 byr:1920 iyr:2013 hcl:#866857 ecl:blu + +pid:518398763 iyr:2010 +eyr:2020 +hgt:183cm +ecl:brn byr:1921 hcl:#18171d + +eyr:2023 pid:614116723 hcl:#7d3b0c ecl:hzl +iyr:2016 hgt:189cm byr:2000 + +ecl:oth hgt:178cm hcl:#733820 byr:2001 pid:862420089 eyr:2023 + +pid:851985534 eyr:2028 hcl:#18171d ecl:oth cid:238 byr:2001 +iyr:2019 hgt:166cm + +byr:1927 +hgt:170cm +pid:246933107 +ecl:amb iyr:2015 +cid:166 eyr:2027 hcl:#b6652a + +byr:1929 +hcl:#7d3b0c +cid:263 pid:317156081 hgt:165cm eyr:2031 iyr:1980 + +hcl:#866857 eyr:2021 hgt:179cm pid:206504353 cid:84 ecl:gry iyr:2012 byr:1952 + +byr:1986 ecl:hzl +hcl:#a97842 +iyr:2015 hgt:152cm pid:722601936 eyr:2025 + +byr:1921 +pid:563550743 iyr:2015 ecl:hzl +eyr:2026 hcl:#fffd7b + +ecl:hzl +hcl:#888785 cid:268 byr:1926 hgt:176cm pid:321394231 eyr:2021 iyr:2014 + +eyr:2021 cid:225 +pid:770796086 +ecl:gry byr:1961 +hgt:154cm +hcl:#6b5442 +iyr:2011 + +eyr:2028 iyr:1961 byr:2016 +cid:98 pid:587360691 hgt:70cm ecl:#ceaf1f +hcl:#c0b6db + +byr:1978 +eyr:2022 hgt:184cm hcl:#7d3b0c +cid:271 +ecl:amb pid:235352975 +iyr:2010 + +eyr:2026 pid:2844744 +iyr:1958 byr:2017 hcl:z +hgt:192in +ecl:#971530 + +iyr:2020 +byr:1960 eyr:2028 cid:162 pid:491912610 hcl:#fffffd hgt:59in + +iyr:2012 pid:365229485 ecl:amb byr:1933 hcl:#18171d eyr:2024 + +hgt:193cm pid:473100400 +hcl:#efcc98 +cid:201 eyr:2020 byr:1969 ecl:gry iyr:2016 + +eyr:2025 pid:137807160 iyr:2014 +ecl:grn byr:1944 hgt:168cm hcl:#ceb3a1 + +byr:2008 ecl:xry +iyr:2012 hcl:#efcc98 eyr:2028 pid:272344138 + +eyr:2024 pid:959415175 cid:148 hcl:#efcc98 +byr:1977 hgt:179cm ecl:amb + +pid:253742161 ecl:hzl hcl:#602927 +eyr:2021 hgt:191cm byr:1925 iyr:2010 + +ecl:amb hcl:#341e13 +eyr:2024 iyr:2017 +byr:1975 +pid:838040028 hgt:172cm + +hgt:172in +pid:311113967 iyr:2015 cid:111 eyr:2023 ecl:oth byr:2003 hcl:#866857 + +hcl:#888785 byr:1978 hgt:64in pid:442064310 eyr:2021 +iyr:2011 ecl:hzl + +eyr:2021 byr:1988 hcl:#a97842 +pid:290578586 ecl:hzl hgt:174cm iyr:2020 + +byr:1998 iyr:2020 hgt:163cm ecl:oth eyr:2025 +hcl:#6b5442 pid:913461954 + +hgt:173cm hcl:#18171d +eyr:2029 ecl:brn cid:313 byr:1980 +iyr:2011 pid:810497375 + +byr:1975 hgt:153cm eyr:2027 hcl:#fffffd pid:857730031 +ecl:gry iyr:2020 + +hcl:#18171d ecl:hzl +pid:185778821 hgt:178 iyr:2014 eyr:2028 byr:1974 + +iyr:2015 hgt:163in hcl:#c0946f ecl:#4844a6 byr:1979 pid:124626004 + +eyr:2024 +pid:737015681 byr:1952 +ecl:hzl iyr:2019 +hgt:192cm hcl:#cfa07d + +pid:2986469633 byr:2025 hgt:66cm hcl:z eyr:2011 iyr:2027 cid:311 + +byr:1962 +eyr:2032 +ecl:lzr iyr:2014 +hgt:70cm pid:94309916 +hcl:#fffffd + +cid:350 hcl:#602927 iyr:2019 hgt:178cm +pid:172238204 byr:1949 ecl:hzl +eyr:2028 + +hgt:153cm +hcl:#ceb3a1 +ecl:grn +byr:1997 +pid:266747822 +iyr:2011 eyr:2022 + +pid:839681159 hgt:150cm eyr:2024 hcl:4d6414 +ecl:blu +iyr:2018 byr:1988 + +byr:1930 iyr:2011 pid:352711700 hgt:174cm cid:67 eyr:2020 ecl:hzl hcl:#6b5442 + +byr:1949 iyr:2013 hcl:#623a2f eyr:2030 +hgt:176cm + +hgt:164cm eyr:2026 hcl:#866857 +iyr:2018 pid:922679610 byr:1974 +ecl:brn +cid:114 + +eyr:2038 cid:317 +hgt:166in pid:0384056779 byr:2013 iyr:2021 +ecl:xry + +cid:83 hgt:166cm eyr:2026 iyr:2018 byr:1994 ecl:brn pid:858360477 hcl:#ceb3a1 + +hgt:169cm eyr:2020 +pid:110129489 byr:1958 +ecl:oth hcl:#7d3b0c +iyr:2011 + +cid:279 +iyr:2019 byr:1995 eyr:2026 ecl:hzl +hcl:#7d3b0c hgt:185cm pid:085427066 + +hcl:#c0946f +iyr:2011 eyr:2027 +ecl:amb +byr:1943 pid:060674566 hgt:183in + +hgt:156cm hcl:#c0946f pid:242827141 +cid:152 +iyr:2018 +eyr:2025 byr:1963 + +byr:1925 cid:168 eyr:2020 hcl:#cfa07d iyr:2011 ecl:brn hgt:150cm pid:740118192 + +ecl:oth byr:1951 eyr:2025 cid:213 +iyr:2020 +hgt:154cm + +eyr:2025 iyr:2018 ecl:grn cid:91 byr:1925 +hgt:164cm hcl:#18171d + +byr:1997 +iyr:2018 eyr:2023 hcl:#602927 pid:251296833 ecl:blu +hgt:185cm + +hgt:168cm pid:556895048 +hcl:#341e13 ecl:oth eyr:2020 cid:64 byr:1940 + +byr:1996 pid:821204904 cid:250 ecl:amb eyr:2026 hgt:185cm iyr:2019 + +ecl:grn hcl:#b6652a iyr:2013 +eyr:2028 hgt:157cm +byr:1925 pid:158cm + +hgt:190cm iyr:2019 ecl:oth eyr:2028 hcl:#341e13 cid:334 pid:258135663 byr:1972 + +byr:1936 hgt:76in pid:748344702 cid:335 +eyr:2027 hcl:#a97842 ecl:amb iyr:2015 + +hcl:z hgt:66cm eyr:2029 +pid:#1589e0 iyr:2019 ecl:hzl + +hcl:#733820 ecl:amb +iyr:2013 +hgt:188cm byr:1955 pid:125663066 eyr:2020 cid:179 + +iyr:2017 +hgt:185cm ecl:grn +cid:298 eyr:2030 hcl:#5b1c03 +byr:1992 pid:092887457 + +eyr:2032 ecl:grn hgt:82 iyr:2022 +pid:180cm byr:2003 +cid:55 hcl:z + +pid:257666411 eyr:2023 byr:1982 hgt:179cm hcl:#18171d ecl:brn iyr:2010 + +iyr:2020 +ecl:amb hcl:#18171d +pid:971402454 eyr:2028 + +hcl:#efcc98 byr:1964 pid:577424639 eyr:2030 iyr:2010 ecl:brn hgt:169cm +cid:285 + +ecl:amb byr:1958 hgt:159cm hcl:#efcc98 eyr:2024 iyr:2016 +pid:029502840 + +hcl:ac11eb +byr:2007 pid:0489471320 hgt:69cm iyr:2030 ecl:blu eyr:2033 + +pid:3785138563 eyr:2020 iyr:2020 +hcl:#966583 byr:2008 hgt:186cm ecl:gry + +iyr:2014 pid:868785127 eyr:2029 +cid:220 hcl:#18171d ecl:blu byr:1948 hgt:171cm + +byr:1936 +pid:433437105 +hcl:#c0946f eyr:2020 iyr:2019 hgt:160cm ecl:brn + +iyr:2015 eyr:2024 hgt:176cm ecl:hzl +byr:1995 pid:101835436 hcl:#ceb3a1 + +eyr:1959 +hcl:#cfa07d iyr:2010 pid:9214728 +ecl:#42fda0 hgt:71 byr:2022 + +byr:1998 iyr:2011 cid:275 ecl:oth +pid:924517068 eyr:2024 hgt:191cm +hcl:#623a2f + +hgt:157 hcl:z +byr:1923 pid:#f6ce52 iyr:1975 ecl:lzr cid:100 + +pid:565022102 +eyr:2021 hcl:#efcc98 +byr:1988 ecl:gry iyr:2012 + +hgt:156cm +hcl:#b6652a eyr:2021 pid:969724332 +cid:126 iyr:2016 +ecl:hzl byr:1988 + +ecl:blu hcl:#866857 hgt:153cm +pid:798083560 +iyr:2015 +byr:1981 eyr:2030 + +iyr:2013 cid:103 hcl:#efcc98 eyr:2022 byr:1964 ecl:gry +hgt:161cm pid:950689613 + +pid:4316019547 +ecl:gmt +eyr:2029 byr:2011 iyr:2005 hgt:170cm cid:135 +hcl:567fd8 + +hcl:#6b5442 pid:843348901 byr:1960 +hgt:156cm +eyr:2028 ecl:amb + +eyr:2027 +pid:286247733 byr:2000 hgt:191cm +iyr:2014 +hcl:#341e13 ecl:amb + +ecl:gmt byr:2005 hgt:182cm pid:376332625 hcl:z iyr:2021 +eyr:1949 + +hgt:184cm +byr:1940 +cid:260 eyr:2030 ecl:brn +iyr:2011 pid:792881807 + +iyr:1936 eyr:2021 cid:133 hcl:#623a2f byr:2003 pid:197167496 +ecl:#8896de + +hgt:67in cid:110 +byr:1951 +pid:389358116 eyr:2028 iyr:2017 +ecl:grn + +hgt:161cm +cid:215 +pid:116325531 iyr:2019 +eyr:2025 hcl:#18171d ecl:blu +byr:1951 + +pid:787859682 hcl:#a97842 eyr:2020 byr:1948 hgt:190cm ecl:brn iyr:2020 + +pid:034440951 hgt:73cm hcl:803e55 +cid:350 byr:1985 +ecl:#a18487 eyr:2031 +iyr:1973 + +hcl:#40ee86 ecl:brn +iyr:2016 byr:1922 hgt:150cm pid:449374426 + +eyr:2040 hcl:260be4 pid:208681353 byr:2029 ecl:gry +hgt:178cm + +hcl:#18171d hgt:162cm byr:1983 eyr:2020 pid:328556776 iyr:2017 ecl:grn + +eyr:2029 +hcl:#a97842 +pid:#7bd019 iyr:2015 +hgt:168cm byr:1926 +ecl:grn + +ecl:grt eyr:2034 pid:640680934 hgt:189in cid:276 byr:1969 hcl:511eed iyr:2023 + +eyr:2039 hgt:182in cid:145 +hcl:4a259b iyr:2026 +byr:2004 +ecl:xry pid:#a3c9ea + +hcl:#866857 +pid:615665716 ecl:blu hgt:164cm iyr:2020 +byr:1948 eyr:2024 cid:286 + +hcl:#b6652a hgt:59in eyr:2027 +pid:752461325 ecl:oth +byr:1932 iyr:2019 + +eyr:2030 byr:1936 ecl:hzl +iyr:2010 cid:263 pid:186570962 hcl:#888785 +hgt:163cm + +byr:1949 ecl:blu +pid:407719342 +eyr:2030 +hcl:#b6652a iyr:2012 +hgt:186cm + +pid:154cm ecl:amb byr:1944 +eyr:2022 +hcl:z iyr:2017 + +byr:1980 hcl:#d2c954 iyr:2013 ecl:brn hgt:72in +eyr:2030 +pid:017095362 + +hgt:179cm +hcl:#ceb3a1 cid:61 eyr:2026 +iyr:2011 +pid:897403026 byr:1984 +ecl:amb + +cid:150 hgt:181cm +eyr:2028 pid:894689339 +hcl:#602927 byr:1933 ecl:grn iyr:2018 + +pid:125553946 byr:1942 eyr:2026 hgt:193cm +iyr:2010 ecl:gry +hcl:z + +eyr:2013 pid:1213613355 +ecl:#b08dca hgt:190in +hcl:06adb3 cid:303 iyr:2010 + +iyr:2019 pid:255938897 +eyr:2022 hgt:152cm +byr:1956 ecl:grn hcl:#ceb3a1 + +eyr:2029 +pid:670713784 +iyr:2020 ecl:grn +hgt:155cm hcl:#6b5442 byr:2002 + +byr:1925 hcl:#866857 pid:323449427 ecl:oth +eyr:2023 hgt:163cm iyr:2014 + +pid:841608722 byr:1955 hgt:150cm ecl:blu eyr:2029 +hcl:#6b5442 + +eyr:2023 hcl:#efcc98 +hgt:164cm ecl:gry +iyr:2018 +byr:1993 pid:501920795 + +eyr:2030 +iyr:2019 hgt:73in hcl:#bf908a +byr:1961 ecl:blu cid:86 pid:436811356 + +pid:#02516a hgt:131 iyr:1969 ecl:grt byr:2015 +eyr:2010 hcl:z + +ecl:#25fb6c cid:239 pid:167cm iyr:2021 +byr:2023 hgt:75cm +hcl:z eyr:1931 + +pid:279251948 +ecl:oth hcl:#6b5442 +byr:1943 iyr:2015 hgt:173cm eyr:2039 + +byr:1935 +iyr:2013 hgt:151cm hcl:#b6652a +ecl:grn +eyr:2023 pid:741958450 + +hcl:6beab7 byr:1986 +hgt:85 +iyr:2012 pid:#d98df3 eyr:2035 +ecl:dne + +byr:1929 +pid:764478810 ecl:grn +hcl:#866857 iyr:2019 hgt:155cm eyr:2022 cid:277 + +hgt:155cm pid:450816410 eyr:2030 cid:165 byr:1969 ecl:blu hcl:#866857 iyr:2019 + +cid:330 pid:168777528 eyr:2024 ecl:blu hcl:#341e13 +hgt:178cm iyr:2013 +byr:1921 + +eyr:2037 iyr:1973 hcl:a4ebf3 +pid:161cm +ecl:oth hgt:64cm cid:62 + +cid:235 +hcl:538f8a hgt:70cm +iyr:1970 pid:177837127 +ecl:#95700d byr:2003 + +ecl:hzl pid:375018246 hgt:161cm +iyr:2011 eyr:2029 hcl:#c0946f +byr:1956 + +hcl:#888785 +iyr:2016 +pid:161cm byr:1977 ecl:#0188d8 eyr:2029 +cid:104 hgt:63in + +byr:1979 eyr:2020 hcl:#ceb3a1 ecl:amb pid:752141341 hgt:150cm iyr:2010 + +cid:274 byr:1928 iyr:2018 eyr:2023 hcl:#a97842 hgt:173cm pid:186060112 ecl:gry + +hcl:#341e13 +ecl:blu iyr:2011 +hgt:190cm cid:292 pid:974271891 eyr:2020 byr:1927 + +hcl:#fffffd eyr:2025 +ecl:brn byr:1923 iyr:2011 +pid:037981552 + +ecl:blu pid:412817852 hgt:150cm iyr:2026 +byr:2026 +eyr:2020 + +ecl:brn byr:1988 eyr:2026 +hgt:178cm pid:008152501 +hcl:#602927 +iyr:2020 + +ecl:brn pid:877401308 byr:1923 cid:154 +hgt:170cm +hcl:#fffffd +iyr:2014 +eyr:2022 + +cid:56 hcl:ee020e pid:590581021 iyr:2018 hgt:72cm byr:2007 +eyr:1964 ecl:oth + +eyr:2029 +iyr:2012 ecl:oth +hgt:185cm cid:235 +byr:2002 +pid:064901580 + +byr:1956 hcl:#6c1a8c pid:497814257 +eyr:1964 hgt:155cm ecl:gmt iyr:2030 + +byr:1935 hgt:171cm cid:253 pid:033393224 hcl:#c0946f iyr:2012 +ecl:blu eyr:2025 + +byr:1977 hcl:#602927 cid:175 iyr:2010 +pid:9391986394 hgt:65in eyr:2026 +ecl:amb + +iyr:2011 hgt:158cm ecl:#31cae1 byr:1958 hcl:b94ad1 +eyr:2023 pid:#400a21 + +hcl:e205b0 pid:84195182 byr:2012 eyr:2037 ecl:zzz hgt:75cm iyr:2030 + +pid:102379515 +byr:1971 +hgt:169cm +ecl:amb +eyr:2020 hcl:#cfa07d iyr:2017 + +pid:236611157 +eyr:2020 hcl:#b6652a +iyr:2017 cid:194 byr:2001 hgt:169cm ecl:gry + +iyr:2012 hcl:a256b5 eyr:2040 cid:62 hgt:177in byr:2010 + +eyr:2028 byr:2009 iyr:2020 ecl:brn +pid:12371575 hcl:#866857 hgt:190cm + +byr:1965 eyr:2028 +pid:402013776 hcl:#bc4e9e cid:183 hgt:150cm iyr:2015 + +pid:0269051559 +byr:1936 hcl:z ecl:#ff0ab9 +iyr:2014 eyr:2031 +cid:346 hgt:153in + +hcl:#18171d iyr:1929 hgt:157cm +eyr:2036 byr:1970 +ecl:amb + +hcl:#733820 +eyr:2022 +pid:096076686 +iyr:2010 +hgt:192cm +byr:1957 + +hcl:#ceb3a1 ecl:brn iyr:2013 +eyr:2025 +byr:1953 pid:751516675 +hgt:175cm + +byr:1928 +eyr:2027 +cid:85 +hgt:179cm ecl:oth +pid:169307999 hcl:#3e07af iyr:2010 + +hgt:60cm byr:2008 hcl:z +eyr:1965 pid:167cm +cid:106 +iyr:1930 + +hcl:#1099d9 ecl:amb pid:638820661 iyr:2014 +byr:1998 eyr:2025 +hgt:162cm + +ecl:amb +eyr:2022 hcl:#623a2f byr:1956 +hgt:154cm +iyr:2010 pid:717452826 + +hcl:fc9ba5 +iyr:1928 +eyr:2029 pid:54503219 +byr:2020 +ecl:#d2155a hgt:124 + +eyr:2027 +hcl:#7d3b0c hgt:178 ecl:#63b8e6 iyr:2015 byr:1954 + +ecl:oth byr:1970 +pid:833178609 hcl:#c0946f iyr:2016 cid:81 eyr:1976 +hgt:69in + +hcl:#0cf4b8 pid:499271062 hgt:62in ecl:hzl iyr:2016 byr:1922 +eyr:2022 + +byr:1994 +eyr:2029 hgt:174cm hcl:#efcc98 +ecl:amb +iyr:2019 pid:297210449 + +ecl:hzl +eyr:2026 iyr:2017 hcl:#a97842 hgt:162cm +byr:1950 + +pid:091886000 hgt:179cm byr:1975 eyr:2020 cid:326 +ecl:oth +iyr:2015 hcl:#a97842 + +hcl:#efcc98 hgt:176cm byr:1940 iyr:2016 ecl:brn pid:514758507 eyr:2024 cid:313 + +eyr:2026 byr:1980 +hgt:155cm +iyr:2013 pid:367909831 ecl:oth + +byr:1965 +eyr:2021 iyr:2017 +hgt:185cm +hcl:#a97842 ecl:hzl pid:238901177 + +hgt:156cm pid:916654189 +byr:1943 eyr:2022 ecl:amb hcl:#341e13 iyr:2016 + +cid:305 iyr:2013 +eyr:2029 hgt:163cm ecl:blu +hcl:#fffffd pid:944033881 +byr:1952 + +pid:638190538 +hcl:#866857 ecl:brn +eyr:2030 iyr:2016 cid:78 byr:1943 hgt:186cm + +eyr:2024 iyr:2015 +pid:231006970 +cid:312 byr:2000 hcl:#623a2f hgt:190cm ecl:brn + +ecl:#f89e87 +hcl:#fffffd hgt:166 cid:215 +iyr:1961 +eyr:2027 pid:314310197 byr:1977 + +hcl:z eyr:1995 pid:951911095 hgt:154cm +ecl:xry +cid:154 byr:2023 + +hgt:66in hcl:#866857 +ecl:brn +pid:328148585 byr:1984 eyr:2024 + +pid:456453839 +eyr:2024 hcl:#fffffd byr:1990 ecl:amb + +eyr:2030 cid:149 pid:983735096 hgt:179cm iyr:2014 byr:1957 ecl:gry hcl:#341e13 + +byr:2001 hgt:157cm +ecl:hzl eyr:2021 +hcl:#ceb3a1 +pid:558527031 iyr:2018 + +hgt:122 ecl:oth hcl:z +pid:384664729 +iyr:2012 cid:298 eyr:2023 + +ecl:utc eyr:2024 +hgt:162in iyr:2018 pid:1722490341 byr:2027 +hcl:#18171d + +ecl:gry iyr:2017 hcl:#602927 cid:303 byr:1950 +pid:509264482 eyr:2030 +hgt:164cm + +hgt:192cm pid:967128169 iyr:2019 ecl:blu eyr:2024 hcl:#fffffd byr:1949 cid:301 + +ecl:blu +cid:71 hgt:164cm eyr:2022 hcl:#cfa07d pid:750303088 +byr:1949 iyr:2014 + +iyr:2014 +pid:401425898 byr:1981 +hcl:#7d3b0c hgt:167cm eyr:2028 + +hcl:#602927 hgt:160cm iyr:2014 +eyr:2023 byr:1940 pid:748539736 ecl:amb + +eyr:2025 +hcl:#c0946f pid:325296854 iyr:2020 +hgt:76cm ecl:amb byr:1921 + +hgt:190cm +iyr:2011 pid:082777116 +byr:1979 cid:73 ecl:oth hcl:#6b5442 eyr:2021 + +eyr:2029 ecl:amb hgt:151cm pid:144881592 byr:1964 hcl:#efcc98 iyr:2012 + +hcl:#efcc98 +iyr:2019 +eyr:2023 byr:1999 pid:645291123 +ecl:brn + +eyr:2029 pid:922956941 hcl:#623a2f byr:1934 +ecl:grn hgt:151cm +iyr:2019 + +byr:1992 ecl:brn +hcl:#a97842 +pid:269079906 hgt:187cm +iyr:2016 cid:218 + +byr:1951 ecl:oth eyr:2026 hgt:185cm +cid:82 hcl:#7d3b0c +iyr:2020 pid:052476816 + +eyr:2026 +cid:319 iyr:2020 +ecl:brn hcl:#888785 +hgt:172cm pid:327064207 byr:1956 + +hgt:178cm +pid:638854420 byr:1995 eyr:2030 ecl:gry hcl:#7d3b0c iyr:2018 + +iyr:2026 hcl:#b6652a +byr:1946 +hgt:186in pid:622875187 eyr:2028 ecl:gry cid:140 + +byr:1931 ecl:oth eyr:2030 +pid:437813485 +hgt:181cm +hcl:#efcc98 iyr:2018 + +byr:1999 +ecl:amb +hgt:160cm iyr:2013 hcl:#b6652a pid:043039693 +eyr:2022 + +byr:2025 +pid:#fd7ad7 eyr:2025 hgt:63in +ecl:oth iyr:2010 hcl:#b6652a + +ecl:grn +byr:1939 eyr:2025 hgt:171cm cid:134 iyr:2020 pid:090346629 +hcl:#cfa07d + +hcl:z +eyr:2031 cid:74 +pid:50216290 ecl:utc iyr:2030 +hgt:176in + +byr:1971 ecl:brn hgt:190cm pid:791682756 hcl:#fffffd +iyr:2020 eyr:2027 + +iyr:1931 byr:2025 hgt:76cm pid:735796617 eyr:2040 ecl:utc hcl:#c0946f + +hgt:163cm +hcl:#18171d +ecl:hzl +pid:628854394 cid:311 iyr:2020 eyr:2027 + +hcl:z +ecl:amb pid:#a8f973 hgt:94 +eyr:2027 byr:2020 iyr:2012 cid:202 + +pid:086190379 byr:1931 ecl:blu iyr:2010 eyr:2027 hgt:175cm + +ecl:#0dafcd byr:2025 iyr:2021 eyr:1970 hgt:63cm cid:260 hcl:75300a pid:208921120 + +pid:024722981 iyr:2011 hgt:193cm hcl:#efcc98 ecl:blu byr:2001 + +byr:2027 +cid:123 +ecl:xry hgt:183cm iyr:2019 eyr:2026 +hcl:#c0946f +pid:380513483 + +eyr:2028 pid:302044900 iyr:2011 byr:1938 hgt:190cm ecl:amb hcl:#c0946f + +eyr:2024 pid:672033747 byr:1931 +iyr:2020 hcl:#f01aed ecl:brn + +hgt:184cm hcl:#efcc98 pid:391597648 +iyr:2020 ecl:gry +byr:1961 + +iyr:2013 hgt:191cm byr:1935 eyr:2028 hcl:#ceb3a1 cid:195 ecl:brn + +eyr:2025 pid:322775528 hgt:155cm hcl:#efcc98 iyr:2015 byr:1996 ecl:oth + +byr:1960 +hgt:183cm pid:764315947 eyr:2030 +hcl:#ceb3a1 ecl:brn + +eyr:2029 hgt:168cm byr:1929 pid:800222003 ecl:gry hcl:#8f8aaa +iyr:2011 + +hcl:#623a2f ecl:hzl hgt:168cm pid:795434985 eyr:2020 iyr:2020 cid:209 +byr:1970 + +cid:325 +byr:2007 eyr:1933 hgt:188in +pid:713080083 ecl:#d624ca iyr:2030 hcl:z + +hcl:#7d3b0c pid:431742871 +ecl:hzl hgt:169cm cid:340 +eyr:2023 +iyr:2017 byr:1994 diff --git a/2020/Rust/input/day_4.test b/2020/Rust/input/day_4.test new file mode 100644 index 0000000..0ff208e --- /dev/null +++ b/2020/Rust/input/day_4.test @@ -0,0 +1,13 @@ +ecl:gry pid:860033327 eyr:2020 hcl:#fffffd +byr:1937 iyr:2017 cid:147 hgt:183cm + +iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884 +hcl:#cfa07d byr:1929 + +hcl:#ae17e1 iyr:2013 +eyr:2024 +ecl:brn pid:760753108 byr:1931 +hgt:179cm + +hcl:#cfa07d eyr:2025 pid:166559648 +iyr:2011 ecl:brn hgt:59in diff --git a/2020/Rust/src/day1.rs b/2020/Rust/src/day1.rs new file mode 100755 index 0000000..9a84dd4 --- /dev/null +++ b/2020/Rust/src/day1.rs @@ -0,0 +1,47 @@ +use std::collections::HashSet; + +fn solve_part_one(input: &str) -> i32 { + let mut seen = HashSet::new(); + let numbers: Vec = input + .lines() + .map(|line| line.trim().parse().unwrap()) + .collect(); + + for &number in &numbers { + let complement = 2020 - number; + if seen.contains(&complement) { + return number * complement; + } + seen.insert(number); + } + panic!("No two numbers sum to 2020!"); +} + +fn solve_part_two(input: &str) -> i32 { + let numbers: Vec = input + .lines() + .map(|line| line.trim().parse().unwrap()) + .collect(); + + for (i, &first) in numbers.iter().enumerate() { + let mut seen = HashSet::new(); + let target_sum = 2020 - first; + for &second in &numbers[i + 1..] { + let complement = target_sum - second; + if seen.contains(&complement) { + return first * second * complement; + } + seen.insert(second); + } + } + panic!("No three numbers sum to 2020!"); +} + +fn main() { + let test = include_str!("../input/day_1.test"); + let prod = include_str!("../input/day_1.prod"); + println!("Test_1: {}", solve_part_one(test)); + println!("Prod_1: {}", solve_part_one(prod)); + println!("Test_2: {}", solve_part_two(test)); + println!("Prod_2: {}", solve_part_two(prod)); +} diff --git a/2020/Rust/src/day2.rs b/2020/Rust/src/day2.rs new file mode 100755 index 0000000..4785b3f --- /dev/null +++ b/2020/Rust/src/day2.rs @@ -0,0 +1,64 @@ +struct Policy { + min: u32, + max: u32, + letter: char, + password: String, +} + +impl From<&str> for Policy { + fn from(value: &str) -> Self { + let (left, right) = value.split_once(':').unwrap(); + let (range, letter) = left.split_once(' ').unwrap(); + let (min, max) = range.split_once("-").unwrap(); + let password = right.trim_start().to_string(); + + Policy { + min: min.parse::().unwrap(), + max: max.parse::().unwrap(), + letter: letter.chars().next().unwrap(), + password, + } + } +} + +fn check_policy(policy: &Policy) -> bool { + let count = policy.password.matches(policy.letter).count() as u32; + count >= policy.min && count <= policy.max +} + +fn check_policy_part_two(policy: &Policy) -> bool { + let mut count = 0; + let policy_password = policy.password.as_bytes(); + if policy_password[(policy.min - 1) as usize] == policy.letter as u8 { + count += 1; + } + if policy_password[(policy.max - 1) as usize] == policy.letter as u8 { + count += 1; + } + count == 1 +} + +fn solve_part_one(input: &str) -> usize { + input + .lines() + .map(|line| Policy::from(line)) + .filter(|policy| check_policy(policy)) + .count() +} + +fn solve_part_two(input: &str) -> usize { + input + .lines() + .map(|line| Policy::from(line)) + .filter(|policy| check_policy_part_two(policy)) + .count() +} + +fn main() { + let test = include_str!("../input/day_2.test"); + let prod = include_str!("../input/day_2.prod"); + println!("Test_1: {}", solve_part_one(test)); + println!("Prod_1: {}", solve_part_one(prod)); + println!("Test_2: {}", solve_part_two(test)); + println!("Prod_2: {}", solve_part_two(prod)); +} diff --git a/2020/Rust/src/day4.rs b/2020/Rust/src/day4.rs new file mode 100755 index 0000000..113e838 --- /dev/null +++ b/2020/Rust/src/day4.rs @@ -0,0 +1,94 @@ +#[derive(Debug)] +struct Passport { + byr: Option, + iyr: Option, + eyr: Option, + hgt: Option, + hcl: Option, + ecl: Option, + pid: Option, + cid: Option, +} + +impl Passport { + fn new() -> Self { + Self { + byr: None, + iyr: None, + eyr: None, + hgt: None, + hcl: None, + ecl: None, + pid: None, + cid: None, + } + } +} + +impl From<&str> for Passport { + fn from(value: &str) -> Self { + let mut passport = Passport::new(); + let v = value.replace("\n", " "); + let v: Vec<&str> = v.split(" ").collect(); + for ele in v { + if ele.is_empty() { + continue; + } + let (key, value) = ele.split_once(':').unwrap(); + match key { + "byr" => passport.byr = Some(value.parse::().unwrap()), + "iyr" => passport.iyr = Some(value.parse::().unwrap()), + "eyr" => passport.eyr = Some(value.parse::().unwrap()), + "hgt" => { + passport.hgt = Some( + value + .trim_end_matches(|c| c == 'c' || c == 'm' || c == 'i' || c == 'n') + .parse::() + .unwrap(), + ) + } + "hcl" => passport.hcl = Some(value.to_string()), + "ecl" => passport.ecl = Some(value.to_string()), + "pid" => passport.pid = Some(value.to_string()), + "cid" => passport.cid = Some(value.parse::().unwrap()), + _ => unreachable!(), + } + } + passport + } +} + +fn solve_part_one(input: &str) -> usize { + let mut cnt: usize = 0; + let passports: Vec = input + .split("\n\n") + .map(|pass| Passport::from(pass)) + .collect(); + for passport in passports { + if passport.byr == None + || passport.iyr == None + || passport.eyr == None + || passport.hgt == None + || passport.hcl == None + || passport.ecl == None + || passport.pid == None + { + continue; + } + cnt += 1; + } + cnt +} + +fn solve_part_two(input: &str) -> usize { + todo!() +} + +fn main() { + let test = include_str!("../input/day_4.test"); + let prod = include_str!("../input/day_4.prod"); + println!("Test_1: {}", solve_part_one(test)); + println!("Prod_1: {}", solve_part_one(prod)); + // println!("Test_2: {}", solve_part_two(test)); + // println!("Prod_2: {}", solve_part_two(prod)); +} diff --git a/2020/Rust/src/day5.rs b/2020/Rust/src/day5.rs new file mode 100644 index 0000000..ad48295 --- /dev/null +++ b/2020/Rust/src/day5.rs @@ -0,0 +1,174 @@ +use std::{ + fs::{self, File}, + io::{self, BufRead, BufReader, Write}, + sync::{Arc, Mutex}, + thread, +}; + +#[derive(Debug, Clone)] +enum TaskStatus { + Pending, + Completed, +} + +#[derive(Debug, Clone)] +struct Task { + id: usize, + description: String, + status: TaskStatus, +} + +impl Task { + fn new(id: usize, description: String) -> Self { + Self { + id, + description, + status: TaskStatus::Pending, + } + } + + fn mark_done(&mut self) { + self.status = TaskStatus::Completed; + } + + fn to_string(&self) -> String { + format!( + "{}|{}|{}", + self.id, + self.description, + match self.status { + TaskStatus::Pending => "Pending", + TaskStatus::Completed => "Completed", + } + ) + } + + fn from_string(data: &str) -> Option { + let parts: Vec<&str> = data.split('|').collect(); + if parts.len() != 3 { + return None; + } + let id = parts[0].parse().ok()?; + let description = parts[1].to_string(); + let status = match parts[2] { + "Pending" => TaskStatus::Pending, + "Completed" => TaskStatus::Completed, + _ => return None, + }; + + Some(Self { + id, + description, + status, + }) + } +} + +#[derive(Debug)] +struct TaskManager { + tasks: Vec, +} + +impl TaskManager { + fn new() -> Self { + Self { tasks: vec![] } + } + + fn add_task(&mut self, description: String) { + let id = self.tasks.len() + 1; + let task = Task::new(id, description); + self.tasks.push(task); + } + + fn mark_task_done(&mut self, id: usize) -> Result<(), String> { + match self.tasks.iter_mut().find(|t| t.id == id) { + Some(task) => { + task.mark_done(); + Ok(()) + } + None => Err(format!("Task with ID {} not found.", id)), + } + } + + fn list_tasks(&self) { + for task in &self.tasks { + println!( + "ID: {}, Description: {}, Status: {:?}", + task.id, task.description, task.status + ); + } + } + + fn save_to_file(&self, filename: &str) -> io::Result<()> { + let mut file = File::create(filename)?; + for task in &self.tasks { + writeln!(file, "{}", task.to_string())?; + } + Ok(()) + } + + fn load_from_file(&mut self, filename: &str) -> io::Result<()> { + self.tasks.clear(); + let file = File::open(filename)?; + let reader = BufReader::new(file); + for line in reader.lines() { + if let Ok(line) = line { + if let Some(task) = Task::from_string(&line) { + self.tasks.push(task); + } + } + } + Ok(()) + } +} + +fn add(x: i32, y: i32, z: i32) -> i32 { + x + y + z +} + +fn main() { + let task_manager = Arc::new(Mutex::new(TaskManager::new())); + + let xay = 5; + let yay = 6; + let x = xay + yay + add(xay, yay, 3); + let y = 2; + + // let z = add(x, y); + + let tm_clone = Arc::clone(&task_manager); + println!( + "tm_clone: {:?}, Arc::clone(&task_manager): {:?}", + tm_clone, + Arc::clone(&task_manager) + ); + thread::spawn(move || { + let mut tm = tm_clone.lock().unwrap(); + tm.add_task("Learn Rust".to_string()); + tm.add_task("Build a project".to_string()); + tm.list_tasks(); + }) + .join() + .unwrap(); + + let tm_clone = Arc::clone(&task_manager); + thread::spawn(move || { + let mut tm = tm_clone.lock().unwrap(); + tm.mark_task_done(1) + .unwrap_or_else(|err| println!("{}", err)); + tm.list_tasks(); + }) + .join() + .unwrap(); + + let tm_clone = Arc::clone(&task_manager); + thread::spawn(move || { + let mut tm = tm_clone.lock().unwrap(); + let filename = "tasks.txt"; + tm.save_to_file(filename).expect("Failed to save tasks"); + tm.load_from_file(filename).expect("Failed to load tasks"); + tm.list_tasks(); + }) + .join() + .unwrap(); +} -- cgit v1.2.3