diff --git a/2020/01.rkt b/2020/01.rkt new file mode 100644 index 0000000..b64d086 --- /dev/null +++ b/2020/01.rkt @@ -0,0 +1,10 @@ +#lang br +(require racket/file rackunit) + +(define (solve combo-length) + (for/first ([c (in-combinations (map string->number (file->lines "01.rktd")) combo-length)] + #:when (eq? 2020 (apply + c))) + (apply * c))) + +(check-equal? (solve 2) 1007331) +(check-equal? (solve 3) 48914340) \ No newline at end of file diff --git a/2020/01.rktd b/2020/01.rktd new file mode 100644 index 0000000..c1aaa7d --- /dev/null +++ b/2020/01.rktd @@ -0,0 +1,200 @@ +1834 +1546 +1119 +1870 +1193 +1198 +1542 +1944 +1817 +1249 +1361 +1856 +1258 +1425 +1835 +1520 +1792 +1130 +2004 +1366 +1549 +1347 +1507 +1699 +1491 +1557 +1865 +1948 +1199 +1229 +1598 +1756 +1643 +1306 +1838 +1157 +1745 +1603 +1972 +1123 +1963 +1759 +1118 +1526 +1695 +1661 +1262 +1117 +1844 +1922 +1997 +1630 +1337 +1721 +1147 +1848 +1476 +1975 +1942 +1569 +1126 +1313 +1449 +1206 +1722 +1534 +1706 +1596 +1700 +1811 +906 +1666 +1945 +1271 +1629 +1456 +1316 +1636 +1884 +1556 +1317 +1393 +1953 +1658 +2005 +1252 +1878 +1691 +60 +1872 +386 +1369 +1739 +1460 +1267 +1935 +1992 +1310 +1818 +1320 +1437 +1486 +1205 +1286 +1670 +1577 +1237 +1558 +1937 +1938 +1656 +1220 +1732 +1647 +1857 +1446 +1516 +1450 +1860 +1625 +1377 +1312 +1588 +1895 +1967 +1567 +1582 +1428 +1415 +1731 +1919 +1651 +1597 +1982 +1576 +1172 +1568 +1867 +1660 +1754 +1227 +1121 +1733 +537 +1809 +1322 +1876 +1665 +1124 +1461 +1888 +1368 +1235 +1479 +1529 +1148 +1996 +1939 +1340 +1531 +1438 +1897 +1152 +1321 +1770 +897 +1750 +1111 +1772 +1615 +1798 +1359 +1470 +1610 +1362 +1973 +1892 +1830 +599 +1341 +1681 +1572 +1873 +42 +1246 +1447 +1800 +1524 +1214 +1784 +1664 +1882 +1989 +1797 +1211 +1170 +1854 +1287 +1641 +1760 diff --git a/2020/02.rkt b/2020/02.rkt new file mode 100644 index 0000000..8e69475 --- /dev/null +++ b/2020/02.rkt @@ -0,0 +1,21 @@ +#lang br +(require racket/file rackunit) + +(struct rec (password target low high)) +(define recs (for/list ([ln (file->lines "02.rktd")]) + (match-define (list range target password) (string-split ln)) + (match-define (list low high) (map string->number (string-split range "-"))) + (rec password (string-ref (string-trim target ":") 0) low high))) + +(check-equal? + (for/sum ([rec recs]) + (define howmany (count (λ (c) (char=? c (rec-target rec))) (string->list (rec-password rec)))) + (if (<= (rec-low rec) howmany (rec-high rec)) 1 0)) + 422) + +(check-equal? + (for/sum ([rec recs]) + (define low? (char=? (rec-target rec) (string-ref (rec-password rec) (sub1 (rec-low rec))))) + (define high? (char=? (rec-target rec) (string-ref (rec-password rec) (sub1 (rec-high rec))))) + (if (or (and low? (not high?)) (and high? (not low?))) 1 0)) + 451) \ No newline at end of file diff --git a/2020/02.rktd b/2020/02.rktd new file mode 100644 index 0000000..1ebcffb --- /dev/null +++ b/2020/02.rktd @@ -0,0 +1,1000 @@ +3-7 r: mxvlzcjrsqst +1-3 c: ccpc +6-12 f: mqcccdhxfbrhfpf +14-15 l: llllllllllllldgll +11-16 n: tnsznnfscnwtsdwn +1-5 v: jvlgm +6-8 f: ffffhfdg +5-6 w: xmwwhw +16-18 p: ppppppppppppppptpjp +1-3 z: zszlzbjdcwvnr +4-18 t: svptbwvbkqvpzbcxtc +6-10 g: rhtwpsxrzgpgxhk +19-20 j: zpjxfwvkjjktpkrbpdkj +10-11 p: prppppppppnppb +8-12 b: pzsdlxgbfkdb +8-11 k: ktkkkjkkwknp +5-10 w: wwwwwwwfwwww +6-8 k: kkklmrkqsk +14-16 z: zzsdzzzrzgkblkzw +14-17 h: hhhhhhhhhhhhhmhhwh +3-11 c: mjvvwjzqbwc +2-10 k: kkkkkkkkkkkkkkkkk +8-10 c: rjtvnjccwc +4-6 l: wmlljl +1-2 t: lsfz +1-2 k: zkkq +16-17 k: kkkdkkkkkkkkxkknkkk +1-2 x: pcnrxx +6-16 t: dttttttttttttttttt +2-4 m: rrhmrkwhdfsmjxq +12-19 v: dxvgvcgszzxvpczvxsp +7-11 d: xddfqnddgnd +8-9 z: zzzzzzzsz +2-4 q: qqqqqq +8-11 j: jkfgjkljjvd +5-12 h: hhjhmfhrhhhh +12-13 b: bbbbbbbbbbbrpbbb +10-14 r: bmrttrbrmvfgcrrrj +7-8 l: ljlllpll +8-10 m: mmzmmmmmmh +11-12 f: qpfffffnfffmff +2-7 c: qcwcdns +3-4 t: tctt +11-20 z: zzhzzzczzzpzprzkzzlk +5-6 v: vdvvtvv +10-13 z: zqzzzdcjzbzzzszh +11-20 k: xmckvrzfwrkkkjlhvtfk +1-9 d: dwddcdddqxrdqddqd +2-5 p: gwlpprkqkdnt +7-9 h: hbrhphhhhkhphhh +6-8 f: ffffxhfmw +1-10 p: pppppppppjp +1-3 k: wkrk +4-9 r: rrvrrrrrrrkrqrskr +5-20 c: dpclkznjtqdcvscwcnml +15-17 t: ttttttttttktttrtxzt +3-10 z: gjpszrzkkz +5-8 f: fffffffffkff +3-8 b: btjpwbxn +1-6 k: zkmkkskkktkkp +10-12 f: ffffffffffffffvfbh +8-12 b: jxkfhgllbbtbv +1-10 z: gcswlzkgxzxd +4-19 p: pjppbpljprptcppvcngp +1-16 v: trjvcgvvvvqvndmn +7-14 x: xrxxmzxvtxnlxx +2-3 q: wqnq +2-5 w: mwxswhpfwnmrm +13-14 w: wwwwwwwwwwwlwww +8-10 q: qqpqqqqrqs +6-9 k: sdhqvvpbfcx +1-5 v: vvqcw +2-3 k: tkfwjzrk +8-14 v: vsvvfvvfvvmlvvtvv +6-9 v: vvtvhvvvv +6-9 x: xxxxxvxxzx +14-15 z: dtdsfssszznpczb +2-3 q: qjqg +18-19 b: bbbbbbbbkbbbbbbbgpbt +2-4 j: vtjjnvpnvmmtddqznml +12-15 k: fknkkkkkkkkkkkk +9-11 c: tffkcwkdrvpd +9-10 x: xxqjxxxznx +5-6 m: mmmmmd +3-10 q: qzcqqjxlmjqqqqq +9-13 r: rbbbmkmpbkwzc +6-11 v: vvvhvvvvvvvvvvvvv +6-11 r: rrrrlrrtrrszrr +4-11 n: znpjndnvnnzc +9-13 r: mrxrwwkhkrrhbrrb +4-10 v: vvvvvvvvvvvvvv +5-8 r: kmppsrxk +5-6 k: lkksjk +2-6 d: gzdthhpglpgjdj +1-4 b: bnbb +8-10 b: bbbbjbbrbbb +14-16 f: fffffffffffffffff +5-15 j: jpxjjjgjjjjjpfjjj +3-5 z: gvxzz +18-19 g: wggggggggggggggggdgg +1-2 x: xpxxxc +13-16 f: ffdffxvfffwfxmfmfrf +6-8 b: bbbbrcbj +5-9 q: qrmgkqbql +3-6 q: qfqkvq +4-6 c: cccwgc +1-16 c: pccccccccccccccscc +7-10 m: mmmmmmdpmcmmmmmmmmm +6-7 r: rrprrpb +4-5 s: sxdsn +12-16 h: hhhxhhhhhhhbhhcq +2-4 l: rlccllz +12-14 g: gggggggggggmgmggggg +11-12 b: bbbbbbbbbbjxbbjb +3-5 r: rwcdz +3-5 d: ddddd +3-4 z: zzzzzz +7-8 c: cccccczhc +11-12 r: rrqrrrrrrtrrrhr +3-5 g: ggggnwgp +5-6 f: ffmfbf +2-5 g: zgfgggtgg +1-8 z: zwjmtrtgnzsjdmkzvk +1-6 q: qqjjqqk +7-10 j: jjmjjjjkgg +16-18 g: gggggggggggggggggggl +1-3 s: jhchssfsqs +11-12 m: mmmmmmzmmmzb +18-19 t: tttttttttttxtttttsht +8-9 t: tmttttttc +12-14 g: mmdzgggqwnwxmg +6-8 x: csmvxkfxkg +4-5 r: crrrz +2-4 f: fxpq +6-13 v: xvvvwvkvvvlvvdvg +3-7 j: wjjxjjkjcwjpjjj +12-16 g: xgblggrgggggggggpg +4-5 r: wrrrr +2-12 l: lllllllllllllllllkll +4-6 g: sbvghg +3-7 j: sjjccjlcsb +2-10 j: nhjssggdrv +1-2 n: nnnnnn +4-9 x: xxqvgxsgnn +18-20 m: mmmmmbmllmmmmmmmrmgn +8-9 n: nnnnnnnnqnnn +1-4 x: nxxzxxx +2-12 l: lsllllllllldllxllll +7-9 t: jvtjqtqkstttk +15-18 m: mmmmmmzmmmmmfmcmmwm +7-9 n: nnnnnnnnn +1-2 k: qkbm +5-11 m: msznmlmmmhghn +17-18 n: nnnnnnnnnhnnnnnnlknk +2-3 r: rrrr +1-5 n: nslzn +18-19 b: hnbcxvbbbmjgmrtbxbz +5-7 r: rrrrfrjr +8-13 x: xxkxxxxxxxxxxx +2-4 s: qjqg +2-14 h: hhhhhhhhchhhhmhhhh +2-5 k: kfjqgkvmkgxkn +10-14 v: vvvvvvvvvqvvvfv +5-14 b: bbbbbkbjbbdbbbbb +6-8 r: trrqqsrvz +13-15 d: ddwdnjdcqckdzdr +1-9 r: rrrrrrrrzrqzqrrrrrr +16-17 v: vvvvvvvpvvvvvmvjvb +2-3 t: xttsckjbbdtt +8-9 h: hhhhhhhhhh +8-10 x: cwxnpxsxpf +3-4 w: wwww +2-10 v: rvcgnvtpsv +12-17 f: ffffffffkfftffffn +4-6 n: hjdxnvbjrb +2-3 b: bsrb +3-8 g: kttgwvwfgdhkt +11-12 k: kkspkkkkkdckbkzkkk +3-4 g: ggjl +7-9 r: rrrsrptrrrrrprcrw +9-15 l: llhlxfldlclfzswgjlk +4-5 p: ppppdp +10-20 g: vhsxgvgwzkfsngszbgfm +8-9 b: vhxlqfbwbsxkbjmc +11-13 p: ppppppspkprplpppp +2-5 d: pbffwd +14-17 p: jplkcfzphzcdlpcplm +3-11 m: jmmwtzmwmbmm +4-8 j: xnsvfcrjsj +8-9 d: ddddmdgdt +2-12 w: wtwwwwwwwwwww +11-17 m: mmmmmmmmmmmfmmmmw +17-18 d: dddddddddddddddwfd +2-3 m: mrhmmm +3-15 l: zmvlldsrflxfhlll +6-10 z: zzzzztzzzz +4-5 j: sbrjj +4-9 s: hdssssbkmsrrkw +16-17 d: ddddddddddzddddbdd +8-11 l: lllkqlnkwcmw +17-18 c: ccccccccccccccccls +14-17 n: hjxnnpnhftlxshnjw +14-15 x: xxxxxxxxxxxgxdpxx +10-12 n: rnnnnnnnnjnpnnn +3-4 l: hvjk +1-7 k: kkkkkkrk +2-8 t: tvzgpsztkjxgzsqddqp +13-17 b: bbbbbbbbbbbbbbbbj +16-17 b: bbbbbbbnbbbbbbdbfbb +3-4 v: vnvvt +3-13 d: dkpdddddddddpdddd +7-12 f: ffffftfwfffffffffbfr +1-4 k: gppr +1-3 t: tttt +5-12 d: ddndddcpqjkddqwlddd +3-8 h: rphprwhhdh +5-6 b: jxbbwn +5-8 x: xlxxscmwxz +4-19 m: tlhhjnhjblzjrxpxgmm +7-10 f: fffffffffsfff +13-14 g: ggggggggggggdlgggg +3-7 j: kjjpmwl +4-6 t: zrtdgtf +4-6 l: lsllll +8-9 j: jjjbjqjzjjjjwj +4-14 x: xxxdxxxxxxxxxfxxx +6-7 w: wwxkzwwjzb +4-7 q: bcqxkhw +14-16 f: fdffzlffbfffpffffff +12-13 l: gllxlllnllxlrxzllll +3-4 m: kmdhnphcm +2-8 m: tmnpfmlm +7-14 x: xxxxxxxxxxxxxxx +2-3 z: zzcf +7-11 s: zvsrsstpssfhfmssss +2-11 j: njmlkghhrjjx +9-12 w: wwwwwwwwbwwww +12-13 l: llllllllllllb +1-4 j: jjjj +2-4 j: jjjxr +5-8 n: nnnffnvcnvbsnnw +18-19 h: hhhhhfhhhmhhhhhchqh +5-7 d: zdddzjcf +7-11 g: ggggggggggggg +1-3 t: ftrt +1-2 x: pxpxmxxxxfxxj +6-7 v: nkphvvv +6-7 x: rxxqxmx +3-7 j: pjfjjjxjjjj +14-15 p: zwpctlgtldwdppjhf +2-8 m: xmlhvvcmrbzfxmn +8-17 w: wwwwwbwwwwvgwhwsww +13-17 n: nnndnnnnnsnsnnnns +7-9 c: xnrnfzddc +1-5 s: ssssssss +8-10 z: zjzzzzhdzd +10-13 c: bvmrccnxcwdcz +5-9 p: pppphppppp +5-6 r: zdnmcrqkw +1-3 m: mmmm +3-8 l: ndllbnwdfmgvm +2-5 p: kpprp +2-3 s: sqfsssssssb +7-8 q: qqdqjwqqc +1-2 p: ppppp +6-7 j: jjjjjqjjjj +1-2 z: zzzz +4-11 p: pvgrdzppmqwzpptptrwk +3-4 r: rrvzr +1-11 r: rrrrrrrrrrrrrrrrrrrr +7-8 p: ppxppppp +15-19 v: vvqvdvlmhqvsnvvvnvdv +1-2 f: hfpljw +2-3 j: cjjjx +13-16 v: vvsvvvvsvvvvvjvkvvq +7-12 d: ddgdddrddqddnddddd +7-11 w: wwwwwwxwwwmwnt +4-6 h: lfrczh +6-7 r: rrtrhrrrrrrrh +3-8 m: lmwmmnjmmzs +5-6 k: bwkrkkkc +2-4 v: cqvz +3-4 f: pjjf +4-7 m: rmmjzct +1-3 t: tsttsxxhds +5-7 g: ggggdllggg +4-13 n: fjtmcnmvcrnfnxnwrfmq +5-8 w: schwwlhb +3-4 q: glqqwq +2-7 r: tkwdmwrxkrz +9-11 k: rbkvkkkdhlkkk +6-7 x: xxxxxjzx +10-16 r: rdhtslrmrrfkdcbq +6-8 w: bjjjwwwtvwwxwm +8-11 t: tvncrcktktts +6-8 c: ccccchcqc +9-12 x: xxxxxxxxxxxxx +7-16 d: hxljdhdqkwmnhfjd +10-12 l: lllvlxllllfmllmll +1-9 d: ddndsdsgd +2-9 g: ggqkpwmkc +15-17 s: sspszcsksssgzsmls +13-15 z: znzxzzvkpxzzzqzz +6-7 d: tcddfdjrwzrxgdnjcd +11-13 q: zbdbqxcqvpqgntmxq +2-5 k: kkkkfk +3-6 k: tkgxpsxjbkzcs +10-12 x: fxxxxgxxxsxwx +1-9 h: hhbbppghhhlmlxhw +6-8 w: wwwwxwwvnqw +13-16 g: gghgbggggdnggggg +4-12 p: pbpbppppqppqppppp +13-14 c: bcccccccccccdzcc +10-11 p: pppbppjpppp +5-6 p: pppppw +3-4 p: gdppzmcpcp +8-14 d: gdhddkldddxdddtdd +3-16 g: ggdgggggfgggggghgg +1-16 x: wgjdllqkjxxhnbvxmw +5-18 n: nnlnhngnsnnnnnnnndn +4-5 k: rkjvk +9-10 j: mpxjjjjjjjjqjzjkjp +7-8 k: kkhkbskk +8-11 b: bbbbbbbbbbbbbb +2-4 k: krskw +8-10 x: xxxxxxxxxxx +1-5 x: xfxxxtkxx +18-19 m: mmmmmmmmmmmmmmmmmxm +3-10 w: nwxlwvzsgkwkq +1-3 l: ktlll +11-12 z: sbslzvtzlzzzhg +3-10 z: wrzzrqwlzzg +2-6 k: kswbxkjtcqxwvxz +3-4 t: nvtt +3-5 w: wwnwg +11-18 f: mtfffjpffffgmvfslfv +7-9 m: brgcmrpxmzxttxnt +2-3 s: hssgzs +6-7 v: svvnbvv +16-17 s: csfmdrsgscjvbsqqq +7-14 g: ggggggggdggsggggg +2-3 p: dprwpp +4-5 s: sssxs +7-11 f: ffffffffffnf +6-7 n: njnlnnn +4-5 c: cccvccn +11-13 k: xswkdfpkkbkhskkkkmrm +5-8 l: lldlflllllllll +1-4 b: hbbx +3-9 m: mmmmmmmmmm +1-8 c: cprcfbrr +3-4 h: dvhh +1-2 l: lwlltl +4-6 q: qqvqqqqqqqq +4-9 b: vprbbbbxkgrqnn +9-11 t: qttxztttgtttztttt +5-10 r: rbqzrkctlhrr +1-6 p: zppfpqpppnp +5-7 r: rrrrxrhrrrrrrr +3-4 q: qqlq +1-9 s: vvsvsrsslsmssdqsjss +1-3 m: mmrqm +1-6 n: nnnnntn +3-10 n: lhnbhnpgvxqfbk +7-15 g: qhgbvggkggjggggjfwg +3-12 t: tdtwtdptndttqcjtdtl +4-10 x: xzxjsxxxxcxtxw +3-10 p: fpphpvlltk +1-4 s: dssstskszsssss +4-5 f: cffjtf +1-4 x: gxxxpx +3-7 h: gwxlrhhw +4-7 t: tttttttt +1-3 h: hgmhh +5-6 v: vvvvgbv +2-4 j: ncjjsf +3-6 j: tjfjmjc +1-3 p: fxbwnp +1-6 b: kfbbxb +1-4 x: pxxnx +10-12 r: rrrrbrrrrjrv +1-4 b: lbbbbbb +1-5 l: blzlt +13-17 g: gvgggggggggzfptgg +5-12 p: mlphpgdlmmjpnfrdj +4-10 h: xmphdjnxzh +15-18 m: smmmxmlmljwvmxlmkj +11-14 g: ggfgsgggvgdgggn +3-5 f: mffkf +3-7 d: dndhwqdpkdstpghdrc +5-7 f: fffflfff +3-9 w: kbwmvhpbwgtqbfdswkl +4-10 r: qjzrqfnvpmd +7-16 h: tshsnbhhlhmhhhhh +6-8 t: dcxtttkttttt +1-3 d: dcmcdqx +2-5 m: mmrmq +5-6 j: jjjjjkj +2-4 f: fdlprf +2-4 f: dfrfc +17-18 h: hkhhhhhhhhdhhhhhhhhh +8-18 s: sxpstpssrrrssblsdv +5-7 z: zzzzzzpzzzz +2-4 t: tggt +4-6 v: wrcbkv +3-4 b: wgbx +6-7 f: ffjbvfbg +1-14 b: rbbbbbbbbbbbbzbl +10-11 j: jjjjjjjjjdkj +6-7 b: zdbjhbh +3-4 c: wccccgc +7-8 n: fnnnnnwnmnnnnnfndnnn +7-8 b: bbbbbbtbb +4-16 j: rrjjmgnvsvddqkjk +3-5 j: pfjjs +2-5 k: hkkkd +4-12 l: lllczlllllllllll +7-15 p: thdkpvqpppmlppppv +6-7 x: xxxxjxcfx +11-13 s: tssssfsbdsbss +4-5 h: dlsmhlbwjhh +4-16 z: gcdzjwlxtnccsvngjzm +8-11 q: qdqtqqqkqtmqqqq +5-11 h: hhhhlhhhhhxhh +3-10 s: ssksssssnxsss +3-4 g: ttgh +2-5 j: skjxjnrb +1-4 l: lllklq +2-4 h: nhwzbffshjjqdhqgfd +6-9 l: llxslllrlhzwfbl +3-4 v: vvkb +7-12 t: rhtzdltmdgbfptcvfr +8-9 f: pfsfcffmgfffx +12-13 n: nnnnnngnnnntfc +3-5 z: dgzszvgzffswkjwnp +5-6 p: tvvphcj +10-11 s: gfpxwclsgvz +16-17 n: nrhcnnnlnrcnncnsn +6-8 d: dkcdzdzdsdncdddd +5-9 t: pgtttktwt +8-17 m: kczbmbkpxrpmbqpmmzd +12-15 g: gggtgggggggcgggxgg +5-15 r: hrznshmtrxwhqmf +2-9 k: ntjmwhqbmz +2-3 p: bprvhqpv +4-5 p: pvhfp +6-10 v: vtmcvvhcvt +1-2 p: gpphz +16-17 l: ppvhzpwtrkldlnsnlnl +16-17 m: kqbmmtmmmzmmmqmjw +18-20 k: khcsktxdxkbbvmkkkcxk +2-8 f: fqfqpfff +1-8 p: pktpkppphppppppppcc +2-4 g: fhgcf +4-6 g: ggggggggg +2-3 c: ccxf +7-16 r: rrrrrrtrrrrrrrrrrrr +2-4 n: nnqnn +3-4 l: llllllllllll +1-7 k: kzrbfgdb +9-11 q: qqqqqqkqhmdq +5-7 x: kpvkxgpnngx +5-8 r: wrtjcnnn +7-9 r: rrrrrrzrc +8-10 t: kgckbkgtst +7-12 g: gglgggggggggggg +3-9 t: dttgrtrttjj +6-12 c: cccccfcccccgpcccxr +7-8 b: vbbvbbpg +6-7 p: pjxpppkpd +12-14 z: zzzfkhmpzzfzdzz +14-20 b: bdbvbcbbbbfsbjhbrbhb +2-3 n: kqjvnn +4-5 m: mmmgm +2-4 q: xqwq +6-7 b: xbfbpmb +13-15 j: ghgxhdjngckxwzj +1-7 c: wnxnndbctg +2-7 g: ggggggggg +1-8 t: ttntttttmtnntt +4-7 j: jjjnzcjqbjjvjpdxjmx +14-15 d: ddddczddddsdddxdd +3-8 k: kkckkkkkk +6-14 q: qqqqqsqzqkqqqw +3-5 q: qqqqb +5-11 h: tdpkhpxqqgmnkhxlfl +7-9 r: jrxdqdcrrr +1-10 z: lwsllcvzbzzzzdzzgzr +4-9 w: wwsjbwwdhc +2-5 f: wjsffff +7-8 n: rbtktkmbnnt +2-3 k: kkkjcszknc +3-4 v: nqvlxkwrjblmgbvncvz +9-10 g: sglkwwxggmt +2-7 s: srcvkjxdtn +1-2 j: mdjjj +2-15 x: qxxsfddqknrbgmggm +7-8 h: hhshhqhl +4-5 p: kpppwp +4-9 p: czcdmbwnhztncrhgnmhb +7-14 z: gzzzqzzzjzdzzzzbzvfz +17-18 d: dddddnddddddddddcd +13-15 g: kxscchzmtgsvpnfbnrbt +12-15 n: nnnjnnngnknxnnfnhn +4-6 b: dczcbxf +12-13 b: bbbwbsbbblbbbbbbqbt +1-13 l: hlcnlllkgbltllf +4-14 k: vkxbzxqkmhdksw +10-12 z: zzzdzzzzzxvz +11-12 c: kcpncwcccbqc +5-8 j: jmzrzsjn +14-15 c: ccccccccccccccccc +11-12 v: vvvbvvllfpgn +15-16 t: thtttttwttttpttl +3-5 n: nnnnmnt +2-4 x: txknc +7-8 x: xxxxxxskxx +11-12 n: nlwnnpzgnnnnnnnnnn +4-5 b: bbbmb +5-8 g: gwggfcmcbgp +10-11 p: gpppzppdpvvppp +5-6 h: hhhhhch +5-6 p: gnkjsp +8-16 w: wcswwwwwwwwwtwww +7-8 h: hdhhhhhh +9-10 g: gggmggsglc +2-7 t: shbblrx +8-9 r: rhrwrkwrrcrrrr +9-11 b: bbbbbbbbbbbb +3-10 c: czbzjpsnvcwl +11-19 c: pccxcdncrtcccdbncbnc +7-17 p: ppppppppppppppppmp +10-12 c: ccchsfcccccc +18-19 b: bdtrbqbwkrlblxhcrbm +3-4 g: gggrgg +7-12 w: wthwwwwfwwfzkwhwwwww +3-5 d: jzddf +7-8 q: qqqwqwqv +4-7 d: dddddvddd +9-12 k: jxjcfmzkkwmkmhrr +8-13 d: dtdzwhgwzzmgv +9-12 z: trvwkzsjwzfzcp +12-13 r: rrrlrrrrrprdfxrrtz +7-8 f: gzbmlnkffkgjkrq +8-13 j: xslbjjgzrjbjms +2-4 n: nnjnn +1-4 f: djfgff +4-5 w: wwwww +5-6 m: mjmmwcw +3-6 v: vvhvmf +4-15 h: bhrktjhsgqfldbh +1-10 c: zccccccccjcrcccc +2-4 c: ccps +12-13 v: vvbvvvsvvvcvvv +6-7 r: rrrrrjs +9-12 w: wwwwwwwlwwwwww +1-3 w: wgwcwwwgxbnwwwtbms +3-4 p: qvpnp +14-15 h: hhhhhhhhhhhhhrq +6-11 q: qjdkqpqtqsq +4-6 t: xtltxg +2-4 g: gkgp +9-13 k: kkkkkkkkkkkkvkk +8-10 p: lnzkglhmdglppnzlrs +12-15 b: bbbbbbbbbbbjbvbbbbbb +1-3 j: jtzsjj +9-13 k: gkdkjkkdxxkkfk +2-5 g: dgkxh +2-10 j: zjjjxlkjjjpjqjzxnjss +14-18 h: tvhhrzhsggdgxhrxvhv +1-9 g: gggggggnggggggg +7-9 z: zzzzzzzzfz +9-11 v: vvvvvvvvrvx +13-14 b: bmrtbbtbbbdbbnbbbcr +12-13 k: kkkkkkkkkkjpmk +1-8 z: nnzzzzzlzz +3-5 g: mgcqv +2-3 m: wgmmpm +3-6 l: sllhsk +3-4 v: vlmv +2-5 t: gstgn +1-2 v: vtvv +8-9 j: jzjjjjjjl +7-8 z: zzzzzzxr +3-7 x: xxxnxxxxw +1-4 x: xxxlx +3-5 l: ldlmlkv +5-11 q: npqlqqqqbdkmqwq +2-6 m: mmmmmmm +4-5 d: bqbdddmphblbdtdh +4-7 l: lklllrl +7-9 d: mjdlgfwndnqr +2-10 w: wwwhwwwwwwwww +4-7 j: jjjbjpd +3-9 k: lwvkjxdkk +13-15 f: bdrtfvlfzfqgfmff +5-12 t: lldmbbtbrmtttrw +9-10 q: qvqvqqqtwpqxrqq +6-10 k: kckcsgtkrkcksz +17-18 t: tttttttttttttztttt +2-4 l: kdcvvsvqlx +12-15 z: zzzzzzzzzzzzzzlz +8-10 h: rhdkfxhflh +14-16 f: fffffffffffffxfcfff +8-11 k: kbfkkkkkdkkk +1-7 k: bkkkkktrk +9-10 b: bbbbbbbfbzb +1-3 t: tkmtt +3-4 m: mbwlmm +5-6 n: npnvndr +4-16 m: mtmmwmzmmmmtmmpnwmm +12-16 w: wwwwwwwwwwwzwwwcwkww +3-4 w: wwrpwmwwc +1-2 h: hhhh +5-9 t: tnvtrtrbfcvtx +2-11 q: qgqcstqbqkq +8-9 p: ppcgcxkppm +13-16 n: nnnnpndnnlnprnnfbnnn +7-13 x: xxcxxxpvxxxxwxvx +3-4 q: qqqz +17-18 v: vvvvfvhvxvvtvvvvvf +1-9 s: cssssssssds +2-9 z: zzpvwzzmzszmfwd +14-20 g: cghxgggggggggnggcsld +8-9 k: kkkkkkkxkkkkkk +4-5 b: blbnb +2-3 n: nnnn +3-4 b: bjqb +13-14 h: hhhhhhhhhhhhhhh +12-18 g: xggggggggggsgggglxgg +3-6 b: bbbbbbbbbbbbbbbbhd +7-13 v: vvvdvrnvcvvvwn +12-15 r: wrpcdrrrdrrrkfr +3-4 d: ddhd +12-13 k: kkkkkgkkkhkkk +8-9 z: dbzzzzzwfzjtzzzzxzdc +5-6 f: qfffkw +4-5 l: lllpwcvlx +2-10 m: nkchlsdsmt +4-8 t: tttmttttxtd +3-5 w: wlhwl +9-12 x: ggqlcwxbqtgx +2-10 b: rbpgvzwjtbj +2-7 h: hhhnhvl +8-13 m: cmmlsmlcmmsmk +3-5 s: hbsjstss +7-10 z: mtmzbtncjqzzz +3-4 p: hpppp +9-12 z: zznzzzzfpzzzzzz +9-16 s: sswcsssmtqsstlffqx +15-19 b: bbbbbbbbbbdbbbdbbbbd +13-16 b: bbbbbbbbbbbbbbbb +3-8 m: mmmmmmmmm +2-3 v: qvgzgrjgfvln +15-17 v: vwfvvvvvvvbmvvzvwvv +4-8 d: fddldwgbddddgddd +6-9 v: tvvxmmfzz +8-9 k: kkkkkkkfwk +4-6 d: dddldt +3-6 r: lrrrjrjn +1-6 t: tnttpgtt +1-16 g: rgggggggggggggggg +10-11 r: rtfdrqtrdkr +6-7 c: jcccczh +1-2 m: vnmmmm +14-15 f: ffffffffffffffb +1-7 m: smmvmmhxrmmwm +1-6 n: nnnnnnnnnnnnngznn +1-15 z: zzphzkhzzznzxzgznz +2-8 z: zhwfhkbgqr +6-7 f: ffsjfffff +5-6 r: rrdrrsrrrr +2-4 l: lllll +6-8 w: wxzvzqwg +3-10 l: gmxmtkkknlrlz +2-4 w: cmls +1-10 k: kkxkxkkkkkhfpkkhk +1-2 x: nxxx +3-8 x: llpxfhkxnsllggs +7-13 c: cghxfmcqcsrbx +2-4 l: lzll +9-11 f: qffbftpbgff +2-4 w: gwxndqdccmwwwzrmzq +10-15 w: khfvrdbpvfmwflww +15-18 n: nnnnnnnnnnnnnnnnnn +2-5 z: kkzrq +3-14 c: tcjmkcfdckqgbcw +13-18 b: bzgqmmgrzbbvbxtwgbxd +6-7 z: nvzmrqxbz +1-4 x: txxxb +1-10 z: hzzzzzqzzzzzz +1-7 n: nnnnwngnn +10-14 h: zmghfhnlhkqbwh +3-5 r: zkrnr +2-4 x: bxbw +5-7 t: rzmkvtttpttdzvvt +11-14 t: tttttxttttxttztmt +2-3 c: wvdvvc +1-4 d: qdhs +1-2 j: flfz +4-6 s: cdssrq +1-11 q: qvnpngslnqqwnvtmlk +8-9 n: mncnsnrjbl +2-9 r: pxjjzpmxm +2-4 q: nqzqnqfqsmw +2-14 p: djtfdmwphwkxwb +4-5 t: lbttt +8-9 n: nncnnnnvxnnxv +10-11 f: ffftffffffcfmfffz +3-9 l: rllszlqdl +7-11 h: hhnzdhhghhx +2-3 h: hsnb +3-9 v: pgxpfqsvg +5-6 q: qqqqqkqq +4-5 g: lgsxg +3-5 f: ftfsbd +1-16 p: xppppppppppjpppkpppp +1-19 z: xzzzzzzzzzzqzzzzzzrz +7-14 s: skmsmssjnssssv +10-11 d: vdtddmrdtdx +1-3 r: hmrwwn +1-5 b: vbbbbcbb +5-11 q: bxwlqgfqmgqcqn +6-7 g: hkgkkrbgddw +1-3 z: kzxz +9-11 n: nnnnnnnnrnnn +2-3 b: blbh +11-13 g: ggzgpggrqpgggggbtggg +12-15 w: wwwglwwwdjwcwwh +6-8 p: pppppfppx +10-12 f: fffffflfpwff +1-6 x: nlxxxx +1-3 m: vmxmmm +7-19 n: nnmdnnnnntznnnnnnzd +4-5 r: rrrsw +4-5 z: nxszzppxcdldz +3-5 q: tfsdqdklq +1-3 x: mxxx +6-10 w: wwwwwnwwwww +16-17 h: hhhzhhhhhhhhhhhzx +12-16 l: lllljlfllllllwllll +2-7 c: pcvchxpf +9-14 z: gxzjrzzzpszhzzz +7-8 z: zzzzzzzzv +3-14 l: llhllllllllllll +2-5 l: wpfgl +2-4 p: vfpqplbxpspzpmlf +8-9 h: bxxcwhcbq +12-13 c: xrdjccztqvvlc +3-6 f: xfrwfffmffzvwf +11-14 f: ffffgfflkkfffxfffff +7-9 c: zrlhgcgcbnbrt +8-20 r: rrfjmzgrrmprbrrcrgnr +6-7 v: rnhvqvv +2-4 x: xcxxwxxvxxxpxxxgv +3-4 m: zmvmm +1-4 l: llznls +4-5 h: rhcsh +7-10 c: rnjlmccrlm +3-7 q: qqhpxcg +1-4 f: fbfff +10-11 g: lgggggggglp +12-13 s: sssssssssssxs +12-13 w: wwwwwwwwwwwwk +4-8 r: rrrnrrrrrkr +2-9 d: mddgrdddddddddddddm +4-5 g: ggggz +16-19 k: kkkkkkkkkkkkkkktkkkk +7-13 n: qnnwgnnlnnspb +6-10 w: gzwwmfwxgrw +12-20 k: kkkkkkkkkkkjkkkkkkkk +6-9 f: fffjfnffbff +8-9 w: wwwwwrwswww +6-15 q: qqpqnqnqxjzqtvqgwkp +3-10 f: ffrffffffff +2-3 c: xccgfnxz +4-5 z: zzzxmz +3-5 f: xmxzpwzt +2-5 h: nghhhbsbhhh +7-9 f: jfffffffff +11-12 d: ddddddrdddrzd +9-12 d: dkxkdddddddvd +15-16 t: ttttttttttttttvt +2-3 b: bjsdvx +11-16 f: ffffffffpfmfffffff +7-13 z: kpvzczcgpcnjwmmspzz +3-4 w: thwdwwzx +2-3 t: tttstdz +4-5 k: kkgpkqkkrmk +13-18 b: kzvgqbfsdpkhkpdszbxm +8-9 h: hhhhmbhhjh +1-4 k: kkkkk +12-17 s: jdqnxssklhtnkttsm +4-11 n: nnnmnnnnnnrn +1-6 m: bmzbmlmmkmmtbmm +6-13 p: pfppprpppmlphpzp +3-4 w: wbws +2-7 p: fjxvpfq +1-3 g: ngxggggg +3-12 p: fvpzpcblqjhp +2-9 s: nfssdshhp +7-9 d: lxbszxdkvpwvfdn +11-12 b: bbbrzbqbqmgcl +5-8 l: rlllfllfll +18-19 t: tttttnbtttmtrttttqx +4-6 w: vzwqxwrwwm +7-9 c: hncwvgqccqphzcmqct +5-10 x: btxsfrqxxx +7-8 h: hhhhhhhthh +3-8 n: mbddzbvnxczhbnlx +2-9 d: dbmjjxzmfsdd +6-7 h: xpcbthhxrszqgzzh +9-11 d: dgdjmsdjdddddtdddd +6-7 b: bbbbbbsbb +4-6 z: zttxvz +4-8 l: rmdllsllxldckgl +9-10 r: rrxsrpfrtk +4-9 q: qqgpqknqxqqqqsqgr +5-7 t: mhhmttr +11-14 t: ttttttktttcttttttttt +1-6 l: llllltlllh +1-13 t: jttttrthtttvpttttttt +6-7 k: wkgkqjk +2-15 g: gqmlgtjqwgbgdgg +5-7 d: dqdjddd +17-18 c: ccccccccdccccccctcc +5-6 z: zzzzjs +11-12 c: cvzckcssnvcs +2-5 x: jxtqxcsppqmkkddkx +7-8 d: pddzhmfdddccxj +1-7 t: tgttttt +9-10 b: bbbbbbbbdb +14-17 c: cccccccccccccrccnccc +11-13 j: jhtjfdwwbjjjj +17-18 j: jjjjjjjjjjjjjjjjjj +4-16 m: mtmqmmmspmxmmmmvm +3-12 h: hzpjcdtnqcvchkx +4-17 r: rrrxrrjrrrrrrdhrjrr +10-11 v: jgvvrvvvvnvvnn +8-11 h: hhhhphhjhlhhwhh +7-13 h: cqwjhfkmrkqwcxdr +5-9 t: dttccdsthzctbvqw +7-9 d: fddhdthmdd +3-11 d: djdmdfpdrwds +6-12 t: klhgbgnrkttq +4-5 k: kkkkk +10-12 c: scjhrwzgcccb +11-12 l: lwllllllllmtl +3-8 j: jjjjjjjljj +2-9 v: rjmxfglqcgq +2-4 h: whhr +4-8 t: hwxtstdvxb +2-9 x: xxxxxxxxxxxxxxxxxx +6-7 l: llvrvsl +15-16 h: hhhhhhhlhhhhhhwn +1-2 p: kpppppppppp +10-14 g: xblfrggggggzjtg +8-9 v: vvvvvvvvz +8-16 m: mmmmmmmnmmmmmmmmm +8-15 b: lgzzqnhpzbmvfqb +8-10 j: jjjjjjjcjj +1-4 v: vvvcvvv +9-11 s: ssssstssmss +18-19 d: xdwnjcnwrdvfftdfzdm +3-5 h: zdxhb +1-2 s: brstss +3-4 l: llbl +7-12 m: pgmfvpmsmqmmhnhm +15-17 k: kklkkkkkkknkgnpfnl +6-7 c: jqcqjthbcqnz +4-6 p: pjwpkfbp +8-9 h: htkptkfrw +10-17 r: rrrrrrrrrrrrrrrrvr +6-11 h: nhhqjvkhwzxdf +2-4 n: hnvgdfnnvkn +3-9 l: llsllllljllml +6-8 r: rrrrrkrrj +6-8 n: ncnnnnsn +7-9 q: qqqqqgqqjqqqqqqqq +6-8 p: sptppppp +10-12 q: hfnwqvsqljqq +4-6 z: zszzbhzzzkg +3-5 b: bbhbbbb +6-10 v: svwvvnvmmvcj +3-7 q: qcbmqsqqqjqqd +11-12 w: wwwwwwwbwwdwwl +13-14 h: hhhhhhhhhhhhhbhh +2-9 x: kndwpxxxqxhxsfxcg +1-3 z: zzzzzzz +10-12 q: qqqqqqqqqqqzqqq +9-11 k: kknbkdkdhkkzk +6-7 g: gggvgcwg +6-7 s: bjtsscxs +5-7 x: xxcxxxrxx +9-12 w: wrwwwwwwpwwww +15-20 m: mdpgmbmsxfbhmvmzmmmm +11-14 k: kkkkkkkkkpkkkrkkk +17-20 n: nnnnnnnnhnnnnnnnnbnn +10-11 w: zwwwwwwwwhg +9-11 r: grrzcnsvsrk +9-15 l: glrdqzqjlfprpdldgsvc +2-6 r: rrgplr +5-7 q: kpqdbqk +7-9 t: jttttgnkt +2-13 x: xwxchfxdpxzlfxxxxxx +4-8 z: zzzzzzzvzk +11-13 g: ggggggggggkgxggkgg +2-3 w: kwkww +16-17 c: cccnvccccchjslcghccc +4-5 q: bqbdmlqkqmtltfl +2-6 x: gphkxx +5-6 w: wwbqwxwwxxvgtzgbf +9-13 q: qrqqqvqdqrbrq +1-2 w: wwtflrlzrnckcczdsw +16-17 j: jjjjjjjjjjjjjjjfj +1-4 s: sssssss +11-12 r: rmfrrrzrrrfd +4-11 k: kkkskdhkkkh +13-14 k: lzhkgbjxhlmljknc +2-7 k: xmwfmkk +9-11 v: kvzvvvwvpdvlvvlbv +4-11 s: shsblxpqczqhwtscqc +6-9 v: bzmqcvcfvwmh +4-5 m: mmmxhm +4-6 p: pqppqp +5-9 g: rghbksgggnns +4-11 q: qqqqqqqqrqqqqfqqxwjq +1-8 p: pppppppzppppppppppp +2-9 b: bbbbbrbbj +6-7 x: cxxfxxrxdpdhx +1-5 r: qrrrrrx +10-15 k: kkkkkkkkkkkkkkkkkk +6-10 r: rrrrrgrrrj +4-10 f: pjqfldsfzbgff +13-17 q: tbqntpzbqgsjqxqxq +5-10 f: fcrfsdxpfffff +5-11 s: sfxwrzcdzsngpjwwpp +5-7 w: cjwhwwwww +3-4 c: ccgt +1-8 c: nccfcccd +1-3 q: fqlqm +9-10 f: fftflsffbf +8-9 q: jfqkqqqns +1-3 r: rfrjr +1-13 f: ffffffffffdfzfffff +6-7 k: bkzdmkv +5-6 q: rpqqllqqbqqq +4-10 l: lblfvpkwmgqlfshqnpfj +6-7 g: gmhhhgg +1-6 q: qqqqqkq +9-11 p: pppppppgppphmbpk +3-8 n: nnghfhnnjn +2-3 d: vrdmd +9-10 g: gggggzggkvggg +3-4 g: gpgg +16-17 z: zzzzzzzzzzzzzzzzr +2-4 b: cvpbmnwnbrcbhbkgchkh +12-13 p: pppppppppppppp +2-3 c: ctzc +1-7 b: wbbbbbbb +7-9 d: dbddddddgd +12-15 q: mhqwpqqqqqqqsgl +4-5 h: bjhhhxpn +4-5 h: kmhqh +4-15 s: svsjtbsssssqsss +9-16 r: rrrrrrrrqrrrrrrrr +5-9 h: hgjzhllvhrn +5-8 d: ddhddmvzsq +2-4 p: pmqp +3-9 b: nrbnqmbdbnb +5-7 s: wstqqsbcss +1-14 x: fxrxxxxxxfxlxn +3-4 j: wjlb +1-2 h: hhghhvhhnhh +9-12 q: nqfgfkrsqxswwp +5-8 b: bbbbpbbbb +3-4 j: vzsv +3-5 m: nmmmzmhtdg +5-9 n: jdnxqkzfnj +6-7 m: rmmfcmnlm +7-8 t: tttthwtt +15-18 j: jjjjjjjjjjjjjjjjjzjj +3-5 d: rbcsdcvwx +5-6 z: zzzzgzzzz +3-4 t: tttqtt +1-7 h: hhlnhfhzxhhphhdhh +6-7 t: wtnttst +2-4 p: zvpl +3-4 k: swxgk +5-7 k: kkcrkkkkkp +3-9 x: xxhxxxxxnxxx +11-13 p: pdpppppppphpm +11-13 m: snglklmpcmmmm +5-10 j: cxjfwpxjwgjh +4-6 f: ffhffzfnf +11-15 p: pppppppppppppppp +3-6 h: hhhhmhhhhhw +6-7 q: vgldrqp +4-7 p: npzgpppdpjj +6-7 w: wwwwwwqww diff --git a/2020/03.rkt b/2020/03.rkt new file mode 100644 index 0000000..b90c2f3 --- /dev/null +++ b/2020/03.rkt @@ -0,0 +1,20 @@ +#lang br +(require racket/file rackunit) + +(define (trees-in-slope horiz vert) + (for/fold ([mod 0] + [sum 0] + #:result sum) + ([(ln lidx) (in-indexed (file->lines "03.rktd"))] + #:when (zero? (modulo lidx vert))) + (values (+ mod horiz) + (if (char=? #\# (string-ref ln (modulo mod (string-length ln)))) (add1 sum) sum)))) + +(check-equal? (trees-in-slope 3 1) 151) + +(check-equal? (apply * (list + (trees-in-slope 1 1) + (trees-in-slope 3 1) + (trees-in-slope 5 1) + (trees-in-slope 7 1) + (trees-in-slope 1 2))) 7540141059) \ No newline at end of file diff --git a/2020/03.rktd b/2020/03.rktd new file mode 100644 index 0000000..a3ac506 --- /dev/null +++ b/2020/03.rktd @@ -0,0 +1,323 @@ +.#......#..####.....#..#....... +#.#...#...#..#.#...#.#...##.##. +#.#....#..........#...##.....## +#.#.#.....##......#.#.......### +..#..###....#.#....#.#.#..#.... +.......#.#....##..##...#...#... +..#..#..#..###.......#.....#.#. +.#.......#...##...##.##......## +#.#.##..##.#..#....#..###..#.#. +#.....#.#.........#.....##.#.#. +..#.#....##..#...#...##........ +......#....#..##.#.#......###.. +.......#.......#......##...#... +.##.....#.......#...###.....##. +.#...#.##..##.#..##....#....... +..#......##...#..#...#.#.##.### +.##.##.....##....#..#......#.#. +.#.....#..###..#.##.#.....##.#. +......##..........#..........#. +.##....#.....#..##.#..#.#..###. +..##.......#....#...##...#..#.. +.##...#.....#.###.#.#..#...#.#. +.....##.#.##..##...#........... +..#..###.##.#.#.###...###..#.#. +.#........#..#.#........#.#...# +....##.......#....#.#.##.#..... +....##........######..###..#.#. +#.#.#............#.......#..#.. +...##...#.##.....#.#..#......#. +......#.##.#....##..#.#..###... +##.....#.#....#....#.##.#.###.. +#..#..#..##.#..##.##.##.#.##... +.###.####..#..#........#.....## +.......##..#.......#........... +.##...#............#.#.##...#.. +....##.....#...##..#..#.#..###. +...#.....#####.#..#...##....##. +#.....#.#.#....##.......##.#.#. +......#.#..#.##.#######......#. +#.##...##....#..###.#.......#.. +.....##...#....#...#....##.##.# +....###......#...###..#......## +..#...##..##.######..#.#......# +......##....#....##..#......##. +.#...#..##..#.###.#......#....# +##....##..#..####.#.....#...#.. +.#.......#...#.......##......#. +......#...#...#........#....... +.#........#.###...#..####.#..#. +##...#.#............#.....###.. +.....###.#.##...........###..#. +.#.#...#.....#.#.##..##...####. +..##.......#..#.##.#....#.....# +.#..#.#..####.....###.#.....#.. +..#..###.....####..#.##.#.#.##. +.###..#.....#......#...####.... +...#.#..#.#..#...#...#....##.## +..###....#.##.....#..........#. +###...#####......##............ +..###.....#........##.#...#..#. +..##.##.#.....##........##..#.# +##..#.#...#.#..#..###.#....#..# +....#..#.#.....#..#####...#.... +....#.........#......##.##..... +.#...####.##......##..##.#..#.# +...#...#.##..#...##..###...#... +###...#.....#.##.###.###..#.#.. +..#......#.###.....#..##.#...#. +#.....##.########...#####....#. +........##..#..##..##.#........ +....#.######....##..#..#.##..#. +#.......#..##..#..#.#.#..##.##. +...#.#..#..#.......#......###.# +.#.#..#.#..#.##.#.............# +#....#.##.#.#.....#..#.#..#.... +...###..#...#....#.........#.#. +.#..#.....##..#.#..#.#.......#. +..#...##...#......#......####.. +....#..#.......#.......#.#..#.. +#...#..#...........#.#..#.....# +#...#.#.......#...#....###....# +.#..#.#.##....#......#........# +..#...#..##..#..#..#..#...#.#.. +..#.#.........#....#....##..... +##.....##.#.#.#.........##..... +.##...#.##...........#...#...## +.##..##.#.#..........##..##.... +#....#....#.#...#.#..#....#.#.. +####....##.....#..##.###....... +#..#....#......##.#.#....#..... +.....#....#.###.##.........###. +#.......#.####..#..#..##....... +##.#.......#..##..#....#..#.#.. +..###...#.#...#.....##.##.####. +....#...#.#....#..#..#.....#.## +#.....##.#.#..#.##..#..##...... +................###..#....##... +..#.##.....#..........##.#...#. +..#.#..#.#....#.#.#..#..#..#.#. +#...#..##.#.#...#..#...#..#.... +#..#.#.........#..###........#. +.#...#.............#..###..#..# +#.........#.#..#...#.#.....#..# +....#..#..#.#.#...#...#.....##. +##...###.#.####..#......#...#.. +..#..##...#.#......#.#.......#. +#......###....##.#.##.......... +#####....###..#...............# +##.#...####....#....#...#....#. +.#.......#..#.....#...#.....### +...#..#.#.#....##......##...#.. +...#.....#...#.##.#..#.#....#.. +#...###....#...#.#....#........ +.#.......#........#...##.##.##. +.....#....#...##.....##...###.# +....#....#.#..#...##.##.##..... +.......#............#...#.#..#. +.#............#.....##.......#. +........#....#....##......##.## +.......##..#.#..#.##..###..##.# +#..##..##.........####.#.###... +#....#..#...##...#............. +#...#...###..........##..#..#.. +....#...#..#.....##...#........ +#.....#......#.#.....#...#..#.. +..#.....#.....#....#..#........ +..#..#.....#.#.........#..###.. +................###..#.#....#.. +#.....#.....#.#.#.#.#..#...#.#. +#....#....#.#..........#.#....# +....#..#......#..##.#...##..... +..#.#...#.####....#.#..#.#..#.. +.........##......#.....##...... +##.#.###.#.....#.....####.#..#. +.....#.....#..#....#..###.#.... +##..#.#...#.##....#....#....... +.....#......#.#...##..#.#...... +....##..#...#...##..##.#....#.# +............#..........##.#.... +##..#..#.##..##..#.#....#.#.#.. +.......#.#...#...#.#...#..#.... +#....#.#...#...#........#..#... +...........#.......#...##..###. +.#..##......#.##.........##..#. +...#...#...###.#.##....##.#..#. +#...#..#.#.#.....##..#.......#. +.##..#.###.##......#.#....#.#.# +..#....#.......#..#..#.#.#.##.. +#...#...###...###.........#.... +.#.#...#.....##.#.#..#....#.##. +.........#.#.##.....#.#.###.... +...#.#...#......#...####......# +...##..##....##......##...###.. +###...#..#.......##.....#....#. +...#..#..#..###...##.##..#..#.. +...#......#......##..#.#.##..#. +...#.........#....#.#....#.#... +##................#..#.#.....#. +....#.##...#..#.##...##.#.....# +......#..##.##..###.#..#.##.##. +.#.#...###.....###.....##...### +.##.....#.#.#..#..###..#..#..#. +#.......#..#..#....##.....#.... +...#.#.##..#..#......##.##...#. +....##.#......#...#..#..#...... +.####.#..#.....#..##.#...##..## +..#..#...#..........###..#....# +.#.#.##.##...#............#.... +........##..##......#.##..#.### +...#.#....###......##.......#.. +..##...#...#.#..#.....#.....#.. +##..#...###..#..#.#.#...#...#.. +.....#..#....##.....##.....###. +....##...###.#..#.#....##..#..# +#......#...#....#......#...##.. +....#.##...#.#......#.#.##...#. +.......#.....#...#####...#.#... +...#.....##.#............#..... +...#.#........#.#.#..#......... +....###......#.#.#..#.####.#..# +#.....#.#.#.....#.#.#.....#..#. +..##.##......#...#.#........... +###..###....#.#####......###... +..##..............##.#.#....#.# +#..#...#..........#..#.#.#..### +##.###............#....#.#...#. +#.#..#.#..##.#.#....#...#...... +#....#...#..##.....#..#.#..###. +..#.....#.#....#.#..#.##.#..##. +...##...#.#.##...#....###....#. +......###.####.......#..#.#.#.# +.#..............##........#.... +...##.##...##....#..#.......#.. +.....#.....#....###...#..#..#.# +.#.....#..#.....#......#.....## +#.#.##.#..#..#.....#.##..###... +..#......#...##.###..#.#...#..# +......#.....#...##......#...... +##.#........#..........#.....#. +#........##.#............##.... +...#......##...#.#.....##...... +...##.......#....#.#..#.#.###.. +..#....##..##.##.....###....#.. +..#...#.#...#.....#..........#. +......#...#...#.#.##.#...#.#.#. +.#...#......#.##........#...... +.##.##..#....#...#.#...##...... +#..#......#.#...........#....#. +....##.#....#...#..#....#.#..## +#....##.##....#.#..##.#........ +.##.##.#....##.....#..#....#..# +...#...#.....###.#.##.......... +....#...#....##.......###...... +#.........#......#.#.......#... +#..........#..##..#.#.......... +.....#.......#..##.##....##...# +........................#.#.... +#..#.........#.............#..# +#..#.....#.......#....#....#.#. +..##..##.......##....#...#..... +.##......#..##......#.###...... +...#.#........#.......##..###.. +..##...###.###......#...#....## +#...#...#.....###.#.#.#..#..... +#....#.........#..##...#...##.. +#..###..#.#.#.##.#..#.#....#.## +#...#.#.....#.###.#.......#.... +..##..#..#....#.#...........#.# +#.........#.#......#...##...... +.######......#..#....#.#.#....# +##..#.#..####.###.........#.... +###########.....##.##...#..#... +#...##.#.#....#.#....#......#.. +...#..##..#..##..#......#....#. +.#....#...#....#.#..##....##... +#..#.#............#....#.#...#. +...#...#..#.#.##......#..#.#... +#.#...##.....#..#.##......####. +.#.#..##..#.....#.#..#.##...... +#.#.##......##.....#..#.#..#... +#..##...#.##.#.......#.##...... +..#.......#.#.#...##..##...#... +.#...#..#..#.#.........#..##... +#..#.......#....#.#...#.###...# +.......#..#.......##.#.#...#.#. +.#.................###.#..###.. +..........#.#.....##..#####...# +#......#.#..##.#.#...#.##.#.... +#......#.#..##.##.#...#....#... +....#..#......#....#....####### +.#...#......#....###......#.### +#.#....#.#...#.###......#..#..# +.###......#.#...#.####.#..####. +######.#.....###.#...#.#.....#. +.#.###....#..#.#.....#.....#### +.......###.#.........#..#...... +#...#.....##.#......####....... +..#.#..##.#.#...#...#..##..##.. +.....#...##.....#...##......##. +##..#..#.##..#.#......#.....#.. +##.........#.#.##.#..#.#....#.# +.#........###...#.........#.... +...#..#.#..#....####........... +#.#....#..##..####.#...#.##.... +.#.....#.......#..........#..## +...#.......#...###..#.....#..## +.........#.###.#..##...#.##...# +.#..........##..####...#..#.#.# +.#...##...#............##...#.# +...#....#.#..........#.#..#.#.. +.#.#...##....##.#.#.#....#..... +....#..#.....#.#..#.#..#.##.### +.....#.#.....#..#......#.#.#... +.....#.#.#..###..#.#..###...#.. +#.......####...#.#..#......##.# +....#..#..###......###.##....#. +##.....#.....#.............#..# +#..#..#...##.....##..#..#.#.... +.....#.#.###...#............... +#.#.#.....#.#..#.#...#.......#. +..##.##............#....#..##.. +#....##...#.....#.###...#.#.... +#...##.#.........#...#....#.... +##.##.#...#.#...###..#....##..# +....#....##..#..#.......#...##. +.#...#...#..#.....#..###.#..#.# +....#..###......#....##....#... +#.#.....#....##.#..#.#...###... +.......#............#......#... +.##..#.###.#.............###... +..##...##.#.#.#.....#........## +....#.###....#..#..#...#...#..# +.....#...#...#..#....#.....##.. +###.#.#.....#......####.....#.. +#.#.###............#......#.... +..#.....#..#..#..#....#......#. +#...######...#....#.##...##.#.# +##.#.#.#..##......##.#..#.#...# +............#.#..#.##....#..... +......#............#.#...#..#.# +.#..##...##..#.#.#..###.....##. +#.###.#...........#...#....#... +....##.....#...##...#...###.#.# +.####.#.#.....#.#..#.#.##...... +.#...##......###...#..##..#.#.. +.#......#...#....##.....##..#.. +..........##.....###.##.#...#.# +.#........##.#..............#.. +#...###..#...#.....#....#.....# +...#......#..#...#...#..###.#.. +.#...##..#........#.......#.#.. +.#.#.##.........##.##......#..# +#...#.#.#...#.....#.#...#.#..#. +#.#..#...#...#...##..........#. +.#...........#....#..#.#..#.#.. +#.......#......#..#...#........ +.....#..#...##..###..##........ +......#...#.....#..#.#.#....##. +....##..##..##....###.##....... +.#........##.#.#...#..#........ +.....##...##...#......#..#...#. +..#.....#....###.#..##....#..#. +......#..#...####.#.....##.#### diff --git a/2020/04.rkt b/2020/04.rkt new file mode 100644 index 0000000..9bd8bed --- /dev/null +++ b/2020/04.rkt @@ -0,0 +1,35 @@ +#lang br +(require racket/file rackunit) + +(define passports (for/list ([pstr (string-split (file->string "04.rktd") #rx"\n\n+")]) + (for/hash ([kvstr (string-split pstr)]) + (apply values (string-split kvstr ":"))))) + +(define required-fields '("byr" "iyr" "eyr" "hgt" "hcl" "ecl" "pid")) ; "cid" is not required + +(define (passport-keys-valid? p) + (for*/and ([passport-keys (in-value (hash-keys p))] + [field required-fields]) + (member field passport-keys))) + +(check-equal? (count passport-keys-valid? passports) 202) + +(define (stringval-in-range str low high) + (<= low (string->number str) high)) + +(define (passport-values-valid? p) + (and + (stringval-in-range (hash-ref p "byr") 1920 2002) + (stringval-in-range (hash-ref p "iyr") 2010 2020) + (stringval-in-range (hash-ref p "eyr") 2020 2030) + (let ([hgt (hash-ref p "hgt")]) + (cond + [(string-suffix? hgt "cm") (stringval-in-range (string-trim hgt "cm") 150 193)] + [(string-suffix? hgt "in") (stringval-in-range (string-trim hgt "in") 59 76)] + [else #false])) + (let ([hcl (hash-ref p "hcl")]) + (and (regexp-match #rx"#......" hcl) (string->number (string-trim hcl "#") 16))) + (member (hash-ref p "ecl") '("amb" "blu" "brn" "gry" "grn" "hzl" "oth")) + (let ([pid (hash-ref p "pid")]) (and (= 9 (string-length pid)) (string->number pid))))) + +(check-equal? (count (λ (p) (and (passport-keys-valid? p) (passport-values-valid? p))) passports) 137) \ No newline at end of file diff --git a/2020/04.rktd b/2020/04.rktd new file mode 100644 index 0000000..5b0a490 --- /dev/null +++ b/2020/04.rktd @@ -0,0 +1,1068 @@ +hgt:159cm +pid:561068005 eyr:2025 iyr:2017 cid:139 ecl:blu hcl:#ceb3a1 +byr:1940 + +iyr:2014 +byr:1986 pid:960679613 eyr:2025 ecl:hzl + +cid:211 ecl:blu hcl:#7d3b0c iyr:2011 pid:006632702 +byr:1982 eyr:2023 hgt:68in + +hcl:#341e13 hgt:192 iyr:2028 +ecl:utc +eyr:2027 byr:1979 pid:653515689 + +eyr:2026 hgt:161cm ecl:#1850b8 +pid:298779494 hcl:b2114e iyr:1953 + +hgt:155cm +hcl:#a97842 iyr:2019 +ecl:gry byr:1939 +pid:935099157 eyr:2027 + +eyr:2024 ecl:grn +pid:102781360 byr:1962 iyr:2013 hcl:#602927 + +hcl:#602927 hgt:152cm +pid:659074205 ecl:brn iyr:2014 byr:1951 + +iyr:2025 hcl:8464b2 byr:2030 pid:976783295 hgt:155cm ecl:dne + +hcl:#ceb3a1 byr:1984 pid:863872932 +iyr:2016 hgt:190cm ecl:grn eyr:2026 + +eyr:2030 hcl:#efcc98 +cid:166 pid:894418497 ecl:hzl +hgt:189cm iyr:2014 byr:1966 + +byr:1937 iyr:2017 eyr:2028 +ecl:amb +hgt:165cm cid:84 +pid:435289747 + +hgt:166cm hcl:#6b5442 byr:1953 eyr:2023 iyr:2010 +pid:948173962 ecl:amb + +byr:1962 cid:276 iyr:2010 hgt:183cm pid:097154397 +hcl:#341e13 eyr:2024 + +hgt:61cm +byr:1942 ecl:xry hcl:#05e97d pid:42823283 +eyr:2024 + +hcl:#888785 +pid:960190685 byr:1967 iyr:2012 cid:99 eyr:2021 +hgt:76in + +eyr:2025 byr:1958 hcl:#18171d iyr:2012 pid:759427419 +ecl:hzl + +ecl:#829d2e +cid:60 iyr:2028 +byr:1979 hcl:caff12 eyr:1931 pid:#fd7aab hgt:184cm + +cid:251 byr:1981 pid:625590775 +hcl:#a97842 eyr:2020 +ecl:amb hgt:178cm +iyr:2016 + +pid:026891577 ecl:amb byr:2014 +hcl:bc419f eyr:2026 +iyr:1948 +hgt:123 cid:67 + +ecl:hzl +hgt:152cm hcl:#efcc98 +byr:1993 +eyr:2025 + +ecl:grn iyr:1924 eyr:2039 pid:8441306576 +hgt:163in +byr:2012 +cid:193 + +ecl:#78f4fa +eyr:2020 hgt:165cm byr:1965 pid:987868257 iyr:2012 +cid:331 hcl:z + +ecl:brn cid:289 pid:868305933 +byr:1936 hgt:174cm iyr:2016 hcl:#623a2f eyr:2021 + +hcl:#2a6308 eyr:2027 hgt:154cm ecl:grn +iyr:2012 +byr:1940 +pid:675209536 + +pid:186cm eyr:2022 +hcl:#fffffd hgt:151cm iyr:2016 ecl:hzl byr:1954 + +ecl:grn hgt:177cm pid:725111435 byr:1927 eyr:2027 cid:154 iyr:2010 hcl:#623a2f + +pid:801551597 cid:55 eyr:2028 hgt:193cm hcl:#a97842 +ecl:hzl byr:1942 iyr:2015 + +cid:176 eyr:2030 iyr:2018 byr:1932 hgt:162cm pid:896180324 ecl:amb hcl:#6b5442 + +cid:239 ecl:grn iyr:1953 pid:9500162195 +byr:1998 +hgt:182cm hcl:#733820 eyr:1966 + +eyr:2030 +pid:919325322 hcl:z iyr:2024 hgt:71cm ecl:#1e935c byr:2026 + +iyr:2012 +ecl:gry eyr:2025 hcl:#602927 hgt:168cm byr:1925 +pid:303312675 + +hgt:150in iyr:2014 ecl:gry eyr:2029 +byr:2029 +cid:228 + +ecl:#9524e0 byr:2026 hcl:z +iyr:2023 +cid:325 +eyr:1996 +pid:6172325031 hgt:191 + +ecl:#689e88 +eyr:1937 +cid:75 byr:1963 iyr:2024 +pid:4980937 hgt:156cm +hcl:#fffffd + +pid:719820090 iyr:2020 hgt:165cm +hcl:#ceb3a1 byr:1997 ecl:blu eyr:2027 + +eyr:2025 +pid:241723456 +iyr:2011 +byr:1953 cid:230 hgt:185cm hcl:#efcc98 ecl:oth + +byr:1936 hcl:#623a2f +iyr:2010 hgt:156cm +eyr:2022 +pid:064253102 ecl:brn + +cid:332 hcl:#a97842 eyr:2026 ecl:gry iyr:2019 pid:#4e4a46 +hgt:150cm +byr:1987 + +ecl:grn hgt:67in +iyr:2012 +byr:1953 pid:910793005 hcl:#341e13 eyr:2020 + +iyr:2024 eyr:2030 cid:204 hgt:166cm pid:218828260 +hcl:701b48 ecl:gry byr:1930 + +hgt:162cm pid:024916763 eyr:2026 ecl:hzl +hcl:#efcc98 iyr:2019 byr:1921 + +eyr:2025 +iyr:2017 ecl:hzl hcl:#fffffd hgt:167cm pid:779214145 + +eyr:2022 +hcl:#6b5442 byr:1941 ecl:grn hgt:169cm iyr:2014 +pid:610328167 + +iyr:2026 cid:179 pid:193cm +ecl:#deb37c +byr:1958 eyr:2024 +hgt:185cm + +pid:907508207 ecl:oth byr:1941 iyr:2017 hcl:#341e13 +eyr:2030 hgt:186cm + +iyr:2018 byr:1925 +ecl:brn eyr:2023 pid:903196231 +hgt:159cm +hcl:#a97842 cid:323 + +hgt:185cm ecl:hzl eyr:2022 iyr:2020 pid:572453155 hcl:#fffffd + +hcl:#a97842 ecl:blu pid:#ab3597 eyr:1964 byr:2030 +hgt:181cm iyr:2018 + +ecl:blu +hcl:#602927 +cid:234 +hgt:68in eyr:2021 pid:257420555 iyr:2014 byr:1972 + +hcl:#7d3b0c eyr:2022 +hgt:152cm byr:1974 +iyr:2017 +pid:353127736 +ecl:gry + +iyr:2018 eyr:2028 byr:1924 hcl:#69929e ecl:gry +hgt:68in pid:942207567 + +eyr:2028 cid:90 +hgt:185cm +ecl:amb byr:1990 pid:947625812 hcl:#623a2f iyr:2011 + +eyr:2023 byr:1996 hgt:175cm +iyr:2012 +hcl:#866857 ecl:blu +pid:437669135 + +byr:1937 eyr:2030 +hcl:#866857 iyr:2017 pid:513963895 hgt:157cm +ecl:grn + +iyr:2016 hcl:#623a2f eyr:2025 +pid:559150893 hgt:176cm +byr:1920 ecl:amb + +byr:1982 +eyr:1961 ecl:hzl +hgt:167cm hcl:#888785 iyr:2011 cid:261 pid:709006236 + +pid:307171649 byr:1935 hcl:#888785 hgt:182cm ecl:brn eyr:2030 iyr:2013 +cid:256 + +ecl:hzl +eyr:1998 +byr:2009 +hgt:153cm iyr:2010 +hcl:#888785 pid:140487128 + +iyr:2019 cid:78 +hgt:169cm +hcl:#888785 ecl:hzl byr:1997 eyr:2028 + +hgt:182in eyr:2025 hcl:#cfa07d ecl:#27a1c9 byr:2005 pid:8143047758 + +byr:2013 hgt:178in +eyr:1933 +pid:829007679 iyr:2016 hcl:#783308 +ecl:grn + +cid:267 byr:1930 pid:949963673 eyr:2026 +ecl:grn iyr:2020 +hgt:188cm hcl:#6b5442 + +eyr:2022 pid:254482159 +byr:1935 iyr:2017 +ecl:hzl +hcl:#b6652a +hgt:165cm + +hcl:109d15 hgt:72cm +cid:258 byr:2023 eyr:1987 ecl:grt iyr:2022 + +byr:1969 +ecl:oth hgt:151cm +pid:578662559 +eyr:2024 iyr:2015 hcl:#602927 +cid:343 + +iyr:2011 byr:1989 +ecl:brn eyr:2029 pid:123354233 +hcl:#efcc98 + +hcl:#a97842 iyr:2010 pid:558586208 +eyr:2029 byr:2002 ecl:amb +cid:225 hgt:152cm + +eyr:2005 byr:2024 iyr:1924 ecl:gmt cid:186 pid:#886ae9 +hcl:3cf4cd hgt:74cm + +ecl:gry +eyr:2029 +iyr:2013 +hgt:178cm hcl:#7d3b0c + +byr:1970 hcl:#6b5442 hgt:155cm iyr:2020 ecl:hzl +pid:698123164 eyr:2030 cid:185 + +hcl:#6b5442 ecl:hzl +iyr:2014 cid:324 pid:149063285 hgt:64in eyr:2023 +byr:1949 + +hcl:#866857 +eyr:2025 +iyr:2012 cid:116 hgt:185cm +pid:416329937 +ecl:grn byr:1962 + +iyr:2020 cid:55 byr:1985 hcl:#733820 pid:237883033 eyr:2020 ecl:blu + +iyr:2020 hgt:71in +ecl:hzl byr:1960 cid:53 hcl:#888785 pid:590574853 eyr:2024 + +pid:834729501 iyr:2019 hgt:72in byr:1977 +hcl:#604861 ecl:oth eyr:2024 + +pid:111536282 ecl:gry +hgt:69in eyr:2021 byr:1940 +iyr:2019 +hcl:#ceb3a1 + +hgt:186cm pid:045765056 ecl:gry byr:1958 iyr:2012 +eyr:2025 hcl:#cfa07d + +hgt:61in eyr:2023 pid:4189258985 ecl:brn iyr:1995 +hcl:#602927 byr:2017 + +byr:1984 hcl:#866857 +iyr:2013 pid:927074474 hgt:168cm +eyr:2021 ecl:oth + +hgt:186cm +pid:948677443 iyr:2014 hcl:#866857 byr:1968 ecl:amb eyr:2027 + +eyr:2028 cid:260 hcl:#623a2f pid:500330326 +iyr:2018 hgt:170cm +ecl:gry +byr:1960 + +hgt:71cm +pid:6209572 byr:1927 iyr:2011 ecl:utc hcl:3bc47a eyr:1984 + +hgt:164cm cid:160 iyr:2010 +byr:1922 eyr:2024 hcl:#c0946f ecl:gry pid:867476938 + +cid:316 +iyr:2015 hcl:#b6652a hgt:72cm pid:#c37dbf byr:2022 eyr:2036 ecl:#8bd8f4 + +iyr:2016 hgt:172cm +pid:482664712 ecl:hzl eyr:2024 hcl:#602927 byr:1945 + +eyr:2029 pid:883381915 +hgt:174cm byr:1937 hcl:#fffffd ecl:gry cid:91 + +eyr:2029 pid:302832265 hcl:#ceb3a1 byr:2010 +hgt:64 iyr:1960 + +hgt:170cm eyr:2030 pid:846949920 +hcl:#ceb3a1 +ecl:hzl iyr:2016 byr:1945 + +hcl:#efcc98 +pid:406029852 eyr:2023 byr:1981 ecl:blu iyr:2013 + +pid:788563693 hcl:#a97842 hgt:172cm eyr:2022 ecl:brn iyr:2010 byr:2002 + +iyr:2013 +hgt:60cm hcl:#7d3b0c pid:6594060725 ecl:#46a7d7 eyr:2023 byr:1995 + +cid:313 byr:1964 pid:102442749 eyr:2020 +hgt:167cm +hcl:#341e13 + +ecl:grn hgt:163cm pid:405504213 cid:349 hcl:#733820 eyr:2029 iyr:2011 + +ecl:hzl pid:470689685 iyr:2015 byr:1980 hgt:180cm eyr:2027 + +eyr:2023 iyr:2013 +hgt:189cm hcl:#866857 byr:1981 +cid:313 +ecl:brn pid:386584267 + +iyr:2011 +hcl:#7d3b0c +eyr:2027 +ecl:gry byr:1931 +hgt:71in +pid:435568613 + +eyr:2021 +pid:443386140 hgt:192cm iyr:2015 byr:1974 + +byr:1989 ecl:oth iyr:2011 +eyr:2027 +pid:761106563 hcl:#efcc98 +hgt:60in + +byr:1933 ecl:brn pid:607926472 +hcl:#cfa07d eyr:2026 +iyr:2010 + +ecl:hzl eyr:2027 hgt:175cm +pid:68527368 +byr:1980 iyr:2017 hcl:#341e13 + +hgt:159cm pid:6199921925 iyr:1920 byr:1950 ecl:amb cid:229 eyr:2034 + +pid:060780170 ecl:gmt +eyr:1961 hgt:184cm hcl:#a97842 byr:2007 + +eyr:2025 byr:1970 ecl:brn hgt:183cm pid:423232940 hcl:#cfa07d cid:283 + +hcl:#18171d hgt:191cm +byr:1951 +eyr:2029 +pid:627632195 cid:268 iyr:2012 + +eyr:2025 iyr:2019 hgt:163cm +ecl:oth pid:967756889 +byr:1938 + +hgt:160cm iyr:2015 +ecl:#9cf598 pid:297446459 cid:123 byr:1968 eyr:1970 +hcl:#efcc98 + +ecl:hzl pid:311990731 hgt:171cm hcl:#602927 byr:1978 +eyr:2026 cid:254 iyr:2014 + +hcl:#8e0dfc +pid:961997362 byr:1950 eyr:2027 hgt:184in ecl:blu iyr:2015 cid:266 + +pid:953859016 iyr:2018 hcl:#341e13 ecl:grn cid:61 +hgt:192cm +eyr:2022 byr:1920 + +eyr:2026 pid:149020634 byr:1942 iyr:2021 hcl:#6b5442 +ecl:oth hgt:176in + +eyr:2025 hgt:176cm +iyr:2020 ecl:oth hcl:#efcc98 pid:196082064 byr:2002 + +hgt:172in hcl:z +pid:#b454a0 +ecl:#d7a600 +byr:1977 +eyr:2035 iyr:2014 + +cid:254 iyr:2020 +pid:716596533 +hcl:#341e13 byr:1947 +hgt:150cm ecl:hzl eyr:2028 + +iyr:2019 pid:190601635 byr:1922 hcl:#18171d hgt:71in ecl:brn eyr:2021 + +byr:1938 iyr:2019 eyr:2028 pid:568504071 hcl:#efcc98 hgt:178cm ecl:amb + +pid:921417345 eyr:2020 ecl:brn hcl:#c0946f +hgt:168cm +byr:1983 cid:170 +iyr:2018 + +iyr:2020 cid:212 eyr:2002 pid:61850316 hgt:148 hcl:#b6652a +byr:2024 ecl:grn + +hcl:z eyr:1985 iyr:2015 hgt:72cm ecl:brn pid:599880521 + +pid:166cm hcl:z +hgt:165 eyr:2036 +cid:152 iyr:1943 +ecl:zzz + +eyr:2021 iyr:2014 +hgt:156cm +pid:654181902 ecl:amb +byr:1946 +hcl:#733820 + +iyr:2019 +hgt:189cm byr:1940 pid:419593669 ecl:amb +cid:149 hcl:#fffffd eyr:2020 + +hgt:172cm +ecl:lzr pid:788208394 hcl:#341e13 cid:183 +iyr:2020 eyr:2027 byr:1988 + +byr:2030 ecl:#d82c54 iyr:2014 +hcl:#be9be7 eyr:2027 pid:1291285950 hgt:61cm + +ecl:hzl +hcl:#a97842 hgt:186cm byr:1992 eyr:2022 + +iyr:2017 hgt:191cm pid:097984693 eyr:2025 byr:1963 +cid:333 +ecl:blu + +ecl:zzz pid:425594420 +byr:1983 +hcl:z +eyr:2028 hgt:184cm +iyr:1937 + +hgt:167cm +eyr:2025 hcl:#623a2f pid:575911832 +cid:305 byr:1939 iyr:2020 + +iyr:2015 hgt:179cm hcl:d678e0 byr:2030 pid:284187009 eyr:1977 cid:285 + +pid:405789549 byr:1982 eyr:2020 hcl:#623a2f +hgt:161cm iyr:2013 ecl:amb + +pid:775860836 hgt:184cm hcl:#fffffd ecl:amb byr:1930 eyr:2022 iyr:2016 + +iyr:2020 byr:1979 +eyr:2024 hgt:171cm +ecl:brn hcl:#ceb3a1 pid:853915000 + +iyr:2015 pid:244459567 +hcl:#18171d cid:224 byr:1931 eyr:2022 hgt:169cm ecl:gry + +iyr:2017 cid:308 eyr:2026 ecl:blu hgt:59in byr:1953 +hcl:#ceb3a1 pid:466915764 + +hcl:#7d3b0c +byr:1940 iyr:2015 +eyr:2020 pid:950614940 ecl:amb +hgt:179cm + +byr:2010 +cid:106 eyr:2022 +iyr:2020 pid:336057617 ecl:brn hcl:f13e26 +hgt:182cm + +byr:1981 iyr:2017 hgt:152cm +hcl:#fffffd +eyr:2024 ecl:gry + +cid:216 hgt:193cm +byr:1975 ecl:oth pid:684529055 iyr:2018 eyr:2020 hcl:#18171d + +hgt:150cm +eyr:2028 +hcl:#cfa07d ecl:grn +iyr:2018 byr:1951 pid:749102509 + +pid:937451204 hcl:#341e13 iyr:2020 +hgt:171cm eyr:2021 +byr:1941 +ecl:hzl + +cid:69 +iyr:2014 eyr:2022 pid:174789690 hgt:157cm byr:1961 ecl:hzl +hcl:#a97842 + +hcl:#7d3b0c pid:658134059 hgt:65in byr:2005 ecl:#2dcb50 iyr:2012 +eyr:2030 + +eyr:2027 +hgt:68in ecl:oth hcl:#888785 iyr:2016 pid:181577931 + +iyr:1997 byr:1994 +hgt:189cm +ecl:gry pid:564165515 +eyr:2029 hcl:#ceb3a1 + +hcl:#602927 eyr:2024 +cid:130 +iyr:2015 ecl:blu +hgt:184cm byr:1996 +pid:897871188 + +ecl:oth hcl:#623a2f +iyr:2016 pid:012591439 byr:1937 eyr:2022 hgt:176cm + +eyr:2020 +byr:1965 +iyr:2013 hgt:193cm +hcl:#ceb3a1 +ecl:hzl pid:177120440 + +byr:1934 iyr:2015 hcl:#341e13 +pid:370860309 ecl:oth +eyr:2028 hgt:157cm + +ecl:brn +byr:2001 +iyr:2010 +eyr:2028 hcl:#866857 hgt:183cm pid:194361427 + +hgt:182cm pid:449667574 ecl:amb +byr:1958 iyr:2017 +hcl:#efcc98 + +iyr:2020 ecl:hzl eyr:2030 hgt:185cm byr:1969 hcl:#ceb3a1 pid:157651787 + +pid:893956434 eyr:2027 hgt:185cm hcl:#a97842 +byr:1944 ecl:oth + +byr:2011 +iyr:2018 +hcl:#623a2f hgt:159cm ecl:blu pid:174cm +eyr:2030 + +ecl:grt pid:520129782 eyr:2020 +byr:2020 hcl:z cid:50 iyr:2017 +hgt:156cm + +iyr:2015 +ecl:grn hcl:#83b224 eyr:2021 pid:554994156 hgt:179cm byr:1994 + +ecl:gry byr:1971 pid:772131254 +eyr:2027 cid:201 hcl:#602927 + +cid:125 +byr:1943 hgt:168cm ecl:hzl pid:418786991 +eyr:2020 iyr:2016 +hcl:#cfa07d + +pid:825704567 eyr:2032 byr:2024 +iyr:1926 +hcl:d31139 hgt:190in + +cid:243 hcl:#cfa07d byr:1951 ecl:oth pid:382615614 +iyr:2018 eyr:2030 hgt:64in + +byr:1925 hgt:187cm ecl:oth eyr:2023 hcl:#888785 + +eyr:2028 iyr:2013 ecl:brn byr:1923 cid:174 hcl:#b6652a hgt:154cm pid:274036240 + +ecl:brn hgt:183cm iyr:2016 +byr:1922 +hcl:#efcc98 eyr:2030 + +hgt:188cm +byr:1979 +ecl:amb +eyr:2025 hcl:#b6652a cid:130 +pid:646985829 iyr:2019 + +hgt:76cm hcl:z cid:112 ecl:zzz +pid:953385473 eyr:2020 +byr:1943 + +ecl:#12c807 +byr:1954 eyr:1934 hgt:73cm hcl:#ceb3a1 iyr:2015 pid:704621520 + +hgt:188cm hcl:#733820 eyr:2024 ecl:grn +iyr:2018 byr:1982 pid:522812862 + +hgt:68cm ecl:blu +byr:2023 pid:875418461 iyr:2021 eyr:2020 hcl:#623a2f + +byr:1967 +pid:313706535 ecl:amb hcl:#888785 +iyr:2012 +eyr:2026 + +eyr:2026 +pid:288363970 cid:70 byr:1932 hgt:157cm iyr:2016 ecl:hzl hcl:#ceb3a1 + +byr:1992 pid:539896055 +eyr:2023 +cid:189 hgt:70in ecl:oth iyr:2019 +hcl:#866857 + +hgt:158in +ecl:gry byr:2028 +eyr:2036 cid:188 +hcl:#cfa07d +pid:044279141 + +eyr:2024 hgt:170cm ecl:hzl +byr:1939 pid:851235247 iyr:2013 +hcl:#fffffd + +ecl:hzl hcl:#c0946f +hgt:167cm +eyr:2024 byr:1936 pid:463230636 cid:297 +iyr:2016 + +pid:291401545 ecl:grn hcl:#b6652a iyr:2014 +hgt:185cm eyr:2025 byr:1947 + +eyr:2029 pid:612595763 +iyr:2018 ecl:gry +cid:290 +byr:1991 hcl:#733820 +hgt:150cm + +hgt:151cm +pid:667532675 cid:134 +byr:1930 +hcl:#efcc98 iyr:2012 +ecl:oth + +ecl:gry +hcl:#888785 hgt:161cm +eyr:2023 +pid:467759498 cid:274 + +eyr:2023 byr:1956 hgt:188cm iyr:2014 hcl:#b6652a pid:382721925 ecl:brn + +byr:1947 ecl:gry eyr:2020 +pid:874004905 hcl:#602927 hgt:161cm iyr:2029 + +pid:164334257 +iyr:2014 cid:286 eyr:2020 +hcl:#733820 +ecl:gry byr:1959 hgt:165cm + +hgt:59in +pid:#5b1362 +eyr:2028 iyr:1980 hcl:z byr:2030 +ecl:utc + +pid:604128460 iyr:2016 byr:1952 hgt:152cm ecl:grn hcl:#7d3b0c eyr:2021 + +pid:7483106309 eyr:2005 hgt:158in byr:2024 iyr:1935 hcl:z +ecl:#158994 + +hcl:22207f eyr:1994 +cid:166 pid:#d8e64c ecl:utc +byr:1966 hgt:70cm +iyr:1980 + +iyr:2012 pid:045892410 hgt:70in ecl:dne hcl:1a323a byr:1920 eyr:2022 + +hcl:#18171d iyr:2019 eyr:2026 +hgt:191cm pid:514596186 cid:327 byr:1938 ecl:grn + +pid:904148746 hcl:#a97842 hgt:161cm +cid:181 +iyr:2012 eyr:2020 ecl:oth + +iyr:2028 +eyr:2034 +cid:276 pid:#0e7ee2 byr:2020 +hgt:63cm ecl:gry +hcl:z + +pid:4270554593 eyr:2031 ecl:lzr hgt:72cm +iyr:2027 hcl:ffc210 cid:132 +byr:2008 + +iyr:2018 pid:174cm cid:144 +ecl:#10b2ed byr:1931 eyr:2040 hcl:z hgt:68in + +pid:446746712 +iyr:1957 +ecl:oth cid:213 hgt:184cm byr:2008 hcl:z + +hcl:#7d3b0c iyr:2012 ecl:hzl +eyr:2023 pid:270148060 + +pid:832184923 +eyr:2023 hgt:180cm +byr:1965 ecl:hzl cid:189 hcl:#a97842 +iyr:2016 + +pid:688867083 +iyr:2011 hcl:#733820 cid:147 eyr:2021 +byr:1986 ecl:oth + +hgt:166in ecl:amb byr:2014 +pid:169cm hcl:#cfa07d iyr:1976 + +hgt:64in byr:1987 hcl:01f3d7 +pid:553206412 eyr:2027 ecl:grn cid:336 +iyr:2012 + +cid:336 +ecl:oth byr:1975 +pid:296100726 hcl:#6b5442 iyr:2016 hgt:180cm eyr:2029 + +hcl:#ceb3a1 hgt:181cm pid:364719801 byr:1922 eyr:2029 +iyr:2010 cid:346 ecl:gry + +hcl:#1c7f1d cid:205 +hgt:184cm +byr:1928 +pid:694275035 iyr:2018 ecl:blu eyr:2023 + +eyr:1970 +hcl:z byr:2001 +pid:9244596 iyr:2030 hgt:187in ecl:blu + +hgt:96 +byr:2030 ecl:zzz eyr:1920 pid:115437655 hcl:z +iyr:2017 +cid:344 + +iyr:2018 +eyr:2023 +hcl:#888785 hgt:188cm +ecl:amb byr:1992 pid:602211075 + +pid:848099019 hgt:168cm iyr:2016 +eyr:2026 ecl:amb +hcl:#866857 byr:1981 + +iyr:2013 hcl:#623a2f hgt:151cm cid:135 byr:1974 eyr:2026 ecl:gry +pid:313553018 + +hcl:#733820 +byr:1986 hgt:182cm +ecl:brn eyr:2024 iyr:2017 +pid:676008782 + +eyr:2030 pid:833874339 iyr:2011 byr:1949 hgt:159cm +ecl:brn hcl:#602927 + +hgt:182cm hcl:#6b5442 pid:131549376 eyr:2029 iyr:2012 +ecl:gry byr:1926 + +cid:55 ecl:amb iyr:2015 hgt:192cm hcl:#a97842 +byr:1944 +eyr:2027 + +iyr:1944 eyr:2038 hcl:a2adf2 cid:99 byr:2006 hgt:67cm +pid:154cm +ecl:dne + +eyr:2005 hcl:#1495bd ecl:grt byr:2028 +iyr:2016 hgt:155 pid:182cm +cid:326 + +hgt:136 +pid:599182089 eyr:2020 byr:1945 +iyr:2012 +ecl:oth hcl:#18171d + +pid:4695182580 +iyr:2012 +ecl:brn eyr:2039 byr:1936 +hcl:#cfa07d + +ecl:hzl byr:1949 cid:133 hgt:159cm hcl:#b6652a pid:9833212692 iyr:2011 eyr:2030 + +eyr:2020 +hgt:175cm +cid:140 iyr:2014 byr:1980 hcl:#7d3b0c +ecl:grn pid:400508366 + +pid:#100a75 iyr:2016 +hgt:65 +eyr:2037 ecl:hzl +byr:1962 + +eyr:2024 pid:180cm hcl:#6b5442 hgt:154cm +iyr:1964 + +byr:1986 hgt:159cm ecl:brn +pid:856817592 hcl:#cfa07d eyr:2024 +iyr:2017 + +hgt:166cm +byr:1996 hcl:#410645 +ecl:hzl iyr:2010 cid:178 pid:337713295 +eyr:2026 + +iyr:2017 byr:1964 hgt:167cm hcl:#7d3b0c cid:298 ecl:brn pid:371416367 + +byr:1929 iyr:2011 hcl:#fffffd ecl:blu +pid:013408674 hgt:187cm eyr:2021 + +hcl:#cfa07d byr:1986 cid:331 +iyr:2010 ecl:gry pid:616063053 hgt:150cm +eyr:2028 + +pid:013835033 iyr:2017 byr:1991 +hgt:154cm hcl:#efcc98 eyr:2020 + +byr:1978 eyr:2024 +hgt:155cm iyr:2012 hcl:#694989 pid:914726069 +ecl:amb + +ecl:blu pid:139464317 hcl:#fffffd eyr:2024 byr:1970 hgt:72in iyr:2012 + +byr:1965 hcl:#ceb3a1 ecl:hzl iyr:2019 pid:910593212 eyr:2029 + +byr:1994 cid:228 +ecl:grn hgt:171cm pid:538884417 eyr:2025 iyr:2011 hcl:#6b5442 + +cid:264 hcl:#623a2f +hgt:186cm iyr:2012 ecl:brn eyr:2024 pid:304101929 byr:1954 + +hgt:183cm byr:1987 hcl:z ecl:gry eyr:2020 pid:384983241 iyr:2015 + +pid:#885c1a +byr:2012 eyr:2034 ecl:#8ea705 iyr:2028 hgt:61cm hcl:z + +eyr:2023 hgt:156cm byr:1939 hcl:#cd2220 ecl:brn pid:484163297 + +hgt:158in +byr:2000 ecl:lzr +iyr:2014 +eyr:2033 pid:50157400 + +byr:1974 hcl:#c0946f +iyr:2018 pid:285451524 cid:299 eyr:2029 hgt:184cm ecl:hzl + +byr:1974 hcl:#602927 hgt:151cm iyr:2013 pid:322935162 ecl:amb +cid:209 +eyr:2026 + +hcl:#341e13 iyr:2015 +ecl:gry byr:1970 +hgt:186cm +pid:330151070 eyr:2034 + +ecl:gry eyr:2023 +hgt:160cm hcl:#c0946f +iyr:2011 byr:1926 pid:727347794 + +iyr:2012 +byr:1974 hcl:#866857 +eyr:2025 +pid:933155590 hgt:167cm +ecl:grn + +iyr:2015 ecl:gry eyr:2029 +byr:1967 hcl:#f9f576 hgt:170cm pid:439696954 cid:173 + +eyr:2029 byr:1935 ecl:brn pid:165587982 +hcl:#6b5442 +iyr:2020 + +eyr:2029 ecl:hzl hcl:#866857 byr:1994 +pid:308548232 hgt:162cm iyr:2012 + +byr:1924 cid:274 +pid:028266367 eyr:2025 iyr:2017 hgt:169cm +hcl:#cfa07d ecl:gry + +eyr:2025 byr:1995 +ecl:brn +hgt:160cm +pid:819047484 +hcl:#602927 iyr:2011 + +pid:660383456 +iyr:2016 eyr:2022 hgt:158cm byr:1942 ecl:amb cid:334 hcl:#efcc98 + +hcl:#6b5442 iyr:2024 cid:180 ecl:grn pid:167cm hgt:169 + +eyr:2024 iyr:2017 hgt:165cm hcl:#7d3b0c byr:1920 +ecl:amb pid:236377188 + +pid:063113952 +ecl:grn hcl:#341e13 hgt:166cm +byr:1977 iyr:2017 + +ecl:amb hgt:174cm +eyr:2028 byr:2002 +hcl:#7d3b0c +pid:428826816 iyr:2017 + +byr:2025 ecl:dne hgt:167in pid:706379338 +iyr:2019 hcl:240e75 eyr:1971 + +eyr:2021 +hcl:#efcc98 iyr:2014 +pid:358236477 +byr:1923 cid:73 hgt:165cm ecl:amb + +eyr:2030 cid:267 +ecl:brn +pid:282023612 hcl:#c0946f iyr:2018 byr:1989 +hgt:72cm + +ecl:utc hcl:ea4b34 byr:2013 +pid:#d58d54 +hgt:107 iyr:2027 cid:296 eyr:2038 + +byr:1946 eyr:2024 iyr:2012 +hcl:#341e13 +pid:765835791 hgt:159cm + +hcl:#341e13 byr:1927 +ecl:grn iyr:2011 +hgt:175cm eyr:2023 pid:638808763 cid:339 + +eyr:2030 cid:160 byr:1994 hgt:163cm ecl:hzl iyr:2016 hcl:#623a2f pid:569304871 + +byr:1965 +eyr:2020 hgt:157cm hcl:#a97842 +cid:271 iyr:2014 pid:326802068 ecl:#a16571 + +byr:1965 +ecl:hzl eyr:2029 iyr:2010 hgt:157cm +hcl:#7d3b0c pid:617693914 + +pid:547158528 byr:1956 +ecl:gry hgt:189cm +eyr:2029 +hcl:#602927 +iyr:2011 + +hcl:#efcc98 +ecl:#1ecd0e pid:160cm eyr:2027 hgt:183cm byr:2027 iyr:1963 + +hcl:#fffffd eyr:2021 iyr:2014 byr:1959 ecl:amb +pid:102521439 hgt:190cm + +cid:112 hcl:#fffffd byr:2025 +pid:016603375 +eyr:1942 hgt:145 +iyr:1994 + +ecl:xry +pid:#5be367 +hgt:171cm cid:144 iyr:1946 eyr:2034 hcl:z byr:2022 + +ecl:oth +iyr:2014 hcl:#7d3b0c +cid:316 +byr:1936 pid:088295340 +eyr:2029 + +iyr:2019 +hgt:183cm ecl:brn hcl:#efcc98 pid:821190245 cid:251 eyr:2023 +byr:1993 + +ecl:oth iyr:2018 +cid:131 +hcl:#524e2e byr:1981 hgt:183cm eyr:2022 pid:037981572 + +hcl:#18171d byr:1934 eyr:2020 hgt:62in +cid:64 +ecl:oth pid:343039563 iyr:2010 + +hcl:#733820 pid:374199356 +hgt:169cm eyr:2026 byr:1994 iyr:2015 ecl:brn + +pid:394267581 +hcl:#a97842 iyr:2010 byr:1988 +hgt:185cm ecl:amb +eyr:2022 + +ecl:#be3b70 iyr:2025 +hcl:z +eyr:2010 +byr:2023 +hgt:65 cid:220 pid:#d6af49 + +eyr:2029 +hcl:#a97842 ecl:amb hgt:159cm +cid:228 byr:1946 iyr:2012 +pid:805319194 + +hcl:#c0946f eyr:2020 hgt:171cm ecl:oth iyr:2010 byr:1958 pid:276122958 + +iyr:2017 +hcl:#da47a1 byr:2007 ecl:utc +eyr:1945 cid:327 hgt:192cm pid:549704477 + +iyr:1923 hgt:174in hcl:z byr:1974 +eyr:2026 +ecl:xry pid:158cm + +iyr:2022 +ecl:#ae10f9 +hgt:108 +eyr:2035 hcl:z byr:2019 pid:#1f4f7c + +eyr:2021 pid:959352732 cid:306 hgt:178cm ecl:amb +iyr:2012 +byr:1953 + +byr:2016 ecl:lzr eyr:2021 hcl:z iyr:1977 hgt:181cm cid:164 + +cid:242 byr:2008 hcl:#866857 hgt:172cm iyr:2011 +ecl:blu eyr:2026 pid:350658669 + +hgt:67in eyr:2030 +ecl:gry pid:156329184 iyr:2010 byr:1936 hcl:#efcc98 + +cid:110 hgt:76in iyr:2018 +eyr:2029 pid:474249956 byr:2002 hcl:#866857 +ecl:oth + +iyr:2016 hgt:193cm eyr:2029 +byr:1934 hcl:#b6652a pid:901756621 +ecl:brn + +eyr:2017 hcl:z pid:#2f9848 iyr:2024 +hgt:170cm + +hgt:60in eyr:2026 byr:1922 hcl:#18171d iyr:2016 +pid:921038878