diff --git a/2018/02-test.txt b/2018/02-test.txt new file mode 100644 index 0000000..46a5a08 --- /dev/null +++ b/2018/02-test.txt @@ -0,0 +1,7 @@ +abcde +fghij +klmno +pqrst +fguij +axcye +wvxyz \ No newline at end of file diff --git a/2018/02.rkt b/2018/02.rkt new file mode 100644 index 0000000..1c224be --- /dev/null +++ b/2018/02.rkt @@ -0,0 +1,37 @@ +#lang debug br + +(define fp (open-input-file "02.txt")) + +(define ids + (map string-trim (port->lines fp))) + +(define ((cluster len) chars) + (for/or ([group (in-list (group-by values chars char=?))]) + (= len (length group)))) + +(define (★) + (define charss (map string->list ids)) + (define twos (length (filter (cluster 2) charss))) + (define threes (length (filter (cluster 3) charss))) + (* twos threes)) + +(define (differ-by-one? id id2) + (= (length (common-chars id id2)) (sub1 (string-length id)))) + +(define (common-chars id id2) + (for/list ([c (in-string id)] + [c2 (in-string id2)] + #:when (char=? c c2)) + c)) + +(define (★★) + (list->string + (for*/first ([id (in-list ids)] + [id2 (in-list (cdr ids))] + #:when (differ-by-one? id id2)) + (common-chars id id2)))) + +(module+ main + (require rackunit) + (check-equal? (time (★)) 6696) + (check-equal? (time (★★)) "bvnfawcnyoeyudzrpgslimtkj")) \ No newline at end of file diff --git a/2018/02.txt b/2018/02.txt new file mode 100644 index 0000000..420afc0 --- /dev/null +++ b/2018/02.txt @@ -0,0 +1,250 @@ +bvhfawknyoqsudzrpgslecmtkj +bpufawcnyoqxldzrpgsleimtkj +bvhfawcnyoqxqdzrplsleimtkf +bvhoagcnyoqxudzrpgsleixtkj +bxvfgwcnyoqxudzrpgsleimtkj +bvqfawcngoqxudzrpgsleiktkj +bvhfawcnmoqxuyzrpgsleimtkp +bvheawcnyomxsdzrpgsleimtkj +bcdfawcnyoqxudzrpgsyeimtkj +bvhpawcnyoqxudzrpgsteimtkz +bxhfawcnyozxudzrpgsleimtoj +bvhfdwcnyozxudzrposleimtkj +bvpfawcnyotxudzrpgsleimtkq +bvhfpwccyoqxudzrpgslkimtkj +bvhfawcnyoqxudirpgsreimtsj +bvhfawcnyoqxudzppgbleemtkj +bvhzawcnyoqxudqrpgslvimtkj +bvhfawclyoqxudirpgsleimtka +bvhgawfnyoqxudzrpguleimtkj +bvhfazcnytqxudzrpgslvimtkj +bvhfawcnygxxudzrpgjleimtkj +bxhfawcnyoqxudzipgsleimtxj +bvhptwcnyoqxudzrpgsleimtmj +bzhfawcgyooxudzrpgsleimtkj +bvhjlwcnyokxudzrpgsleimtkj +bvhfawcnyoqxudbrmgslesmtkj +bvhfawcnysixudzwpgsleimtkj +bvhflwcnymqxxdzrpgsleimtkj +bvifawcnyoyxudzrpgsleimtvj +bvhfawcnyofxudlrpgsheimtkj +bvhbawcmyoqxudzrpggleimtkj +bhhxgwcnyoqxudzrpgsleimtkj +bvhfawgnyoqxbdzrpgsleimfkj +bvhfawcnyoqxudcrngsleimykj +bvhfawcnyofxudzrpgslebgtkj +bvhfaocnybqxudzapgsleimtkj +bvhxawcnyodxudzrpfsleimtkj +bchfawcnyoqxudrrtgsleimtkj +bvhfawcqyoqxudzdpgsltimtkj +bvhfawknyoqxudzrpnsleimtbj +cihfawcnyoqxudirpgsleimtkj +bvlfawpnyoqxudzrpgslgimtkj +bulfawcnyoqbudzrpgsleimtkj +bvhfajcnyoqkudzrpgsoeimtkj +bvhrakcnyoqxudzrpgsleimjkj +bvbftwcnyoqxuvzrpgsleimtkj +bvhfhwcnyoqxudzrpgslelmtbj +bvhyawcntoqxudzrpgsleimtuj +xvhuawcnyoqxuqzrpgsleimtkj +pvhfawcnyoqxudzdpglleimtkj +bvhfawsnyoqxudzrpgvlefmtkj +bvhfawcnyoqxudzrpgepeiwtkj +bvhfawcnyoqxudzrphsleittkr +dvhfawcnyoqxudzrpkslzimtkj +bvhfawpnyoqxudzrpgmlcimtkj +bvhsawcnyzqxudzrpgsaeimtkj +bdhfawcnyoqxudzrpasleiwtkj +bvhfawbnyoqxpdbrpgsleimtkj +mvhfawwnyoqxujzrpgsleimtkj +bvafawcnyoyxudzrpgsleidtkj +bvhyawcnyoqxudztpgzleimtkj +besfawcnyoqxudzrpgsleimdkj +bvhfawcnyoqxudrrpgsjeimjkj +xvhfkwcnyoqxudzcpgsleimtkj +bvhfawcnyeqdudzrpgzleimtkj +bvhfuwcnybqxudzrpgsleimttj +lvhfawcnyoqhudzdpgsleimtkj +bvhfawcnyoqxudzrpgslevwtnj +bvhfadcnzoqxxdzrpgsleimtkj +bvsfawcnyoqxpdzrpgileimtkj +bzhfaycnyoqxudzrpgsxeimtkj +bwhfdwcnyoqxudzrpgsleimtkz +bvhfawcnyoqxudzrpgsjlimtkm +bvhfawcnyoqxudsrwgsleimtlj +bbhfalynyoqxudzrpgsleimtkj +bvhfawcnyeqxudzrpglleimtkr +bvhfawnnboqxurzrpgsleimtkj +yvhfawcnyoqxudzrpgslzimtpj +bvhfjwcnyoqxqdxrpgsleimtkj +bthfawcnyoqfudzrpgslhimtkj +bvhfawchuoqxudzqpgsleimtkj +bvhfawcndoqxudzrugsleimrkj +bvhfawcnnoqxjdzrpgsleidtkj +bvhpawcnyoqkudzrpgsleimtzj +bvhfaiinyoqxudzopgsleimtkj +bvhfawcnyxqxuizrigsleimtkj +bvnfawcnyoqxudzqpgsleimbkj +bvnfawcnyoeyudzrpgsleimtkj +bvhfawcnyoqxudarpgsieimtoj +bthcawcnyoqxudlrpgsleimtkj +bvhfnwcnyozxudzrpgsleomtkj +bpwfawcnyoqxudzrpgskeimtkj +bvhfapcnyoqxudnrpgsxeimtkj +bvhfdwcnyoqxubzrxgsleimtkj +fvhfawcnyoqxjdzrpgsleirtkj +bvhfawcneoqxudzrvzsleimtkj +bvhaawcnyoqxudzrpgsleimtex +bvhfawcnyojxudvrpgsleimckj +bvlfawcnyoqxddzrpgsleimtko +bvhfawclfoqxudzrpgsleiktkj +bvhfawciyobxudzrpgkleimtkj +bvhfpwcnyoqxudzrpgsqeimtkd +bvhyawcnyyqxudzrkgsleimtkj +bvhfawcncoqxudzrphsaeimtkj +bvhfawmnyoqxudzrpgifeimtkj +bvhfawcjyoqxudzjpgszeimtkj +bohfawcnwoqxudzrpgsleimwkj +bvhfaucnyoqxudzrpgfluimtkj +bvhfawlnyoqgudzrpgwleimtkj +bmhfawcnyoqxndzrpgsleymtkj +bvhfawcngoqxudzrpzxleimtkj +bihfawcnyoqxudrrpgsleimokj +lvhfawcnylqxudzrpgsleintkj +bvhfawcnyoqvugzrqgsleimtkj +bvhfawcnyoqxudzgpgslqimtij +bvhfawcnyoqludzrpgslnimtcj +hvhfawcnyolxudzrpgsmeimtkj +nvhfawcdkoqxudzrpgsleimtkj +bvhfawcnyoqxkdzrggsneimtkj +bvhfawnnyoqxudzrpgqleibtkj +bvhfawyuyoqxudzrhgsleimtkj +wvhfbwcnyoqxtdzrpgsleimtkj +bvhfawcnyoqxedzzpgoleimtkj +bvhfawcnioqxunzrpgsleimtnj +bvhfawctyoqxudzrpgsldkmtkj +bvhfawcnyonxudzrpgsleitpkj +bvefawcnyoqaudzhpgsleimtkj +bvhfawcnyxqxudzrpgslelmbkj +bvhfamrnyoqxudzrpgsleimgkj +bvhfaqcnyoqxudzrpgsaeimekj +bvhfawcnyoqcidzrpgsleimvkj +bvhfawcnnorxudzrpgsmeimtkj +bvroawcnyoqxudzrpgsleiwtkj +bvhfwwcnyoqxudzrpaslewmtkj +bvsfawcnyoqxudzcpgszeimtkj +bkhfmwcnyoqjudzrpgsleimtkj +bvtfawcnyoqxudzrcgslecmtkj +bvhfawcnypzxudzrpgsleimtkv +bvhfawcnyoqzudzrfgtleimtkj +bvhpawcnyoqxudhrpgsleimtko +tvhfawcnyoqxudzxpfsleimtkj +bvhfawccyofxudzrpqsleimtkj +bvnfawtnyoqxuzzrpgsleimtkj +bvhfamcnuwqxudzrpgsleimtkj +bvhfawcfyoqxudjrpgsleimrkj +bvhpalcnyoqxudzrpgslexmtkj +bvhfawcnjsqxudzlpgsleimtkj +bvhfafcnioqxydzrpgsleimtkj +bvzfawcnyxqxudzgpgsleimtkj +bvhzawcnyoqxudzrpgslewctkj +bvhiawcnhoqrudzrpgsleimtkj +bvhfawcnyoqxuszrggslenmtkj +bvhfowcnyoqxudzrptseeimtkj +behfawfnyoqxudzrpgsleimlkj +lvhfawcnyoqxudsrpgvleimtkj +bvhfawnnyaqxudzrpgsqeimtkj +lvhfawcnfoqxvdzrpgsleimtkj +svhxawcnyoqxudzrpqsleimtkj +bvhfawqnfoqxudzrpgsleimkkj +bvhfafcnyoqcudzrpgsleimtcj +bvhfyfcntoqxudzrpgsleimtkj +bvhfpwcnyoqxudzrpgsleimumj +bvhfawccyoqxudzrqgrleimtkj +bvhfawqnyoqxudzbpgsleimkkj +bvhflwcnyoqxudzrpxsleemtkj +bvhfawcnyoqxuezrpgslehrtkj +bvhfawceyoqxudzrpgsleimswj +bvhfawcncohgudzrpgsleimtkj +bahfawcnyoqxgdzrpgsleamtkj +yvhfawcnyoqxudzrppslrimtkj +fvhfawcmyoqxudzrpgskeimtkj +bvylawsnyoqxudzrpgsleimtkj +bvhfswcnyyqxedzrpgsleimtkj +fvrfawcnyoqxudzrpgzleimtkj +bvhfawcnyoqxuvzrpgslermtks +bvhkawccyoqxudzcpgsleimtkj +bvhfaobnyoqxudzrprsleimtkj +bvbfawcnyoqxudirpgsleimhkj +bvhfawcnyoqxudzvpgsueimtgj +bvhxawcnyoqxudzrpgsleimtgi +svhfawcjyoqxuszrpgsleimtkj +bvnfawcnyoeyudzrpgsldimtkj +bvhfawcnyoqxuhzrpgsleimcki +bvhfvwcnyoqxudzizgsleimtkj +bvhfapznyohxudzrpgsleimtkj +bvhfaelnyosxudzrpgsleimtkj +xvhfawcnmoqxuhzrpgsleimtkj +bjhfawcnyaqxutzrpgsleimtkj +bvhfawcnyohxudzrpgslgnmtkj +bvhfawcnyoqxudzrppsreimtkx +fvhfapcnyoqyudzrpgsleimtkj +qvhfafcnyoqxudorpgsleimtkj +bvhfawcnyoqxedzrwgsleimtvj +bvhfawgnyoqxudzupgqleimtkj +bvhfowctyoqxudzrpgbleimtkj +bvhwawcnyoqxudzapgslvimtkj +bvhfadcnyoqxudzrugsleimtuj +bvhfawcnyosxudzlpgsleamtkj +bvhfawcnywqxuqzrpgsloimtkj +bvhfawcnyoqxumzrpgvlfimtkj +bvhfawcgyoqxbdzrpgsleomtkj +bvhfahcnyoqwudzrfgsleimtkj +gvbfawcnyrqxudzrpgsleimtkj +svhfawcnyoqxudlrpgsleimtkx +avhfafcnyoqxuhzrpgsleimtkj +bvhfawcsyoqxuazrpgsleimtej +bvofawcnyoqxudzrpgsteimtkf +bvhfajcnyoqxudzqpgszeimtkj +bvhfawcsyoqxudzrmgsleiktkj +mvhfawcnyoqxudzrpgkluimtkj +bvhfawcnhoqxudzrpgslwhmtkj +bmhaawsnyoqxudzrpgsleimtkj +bvhfawcnyoqxudzhpgsleimhyj +bvhfxwcnyoqxsdzypgsleimtkj +bvhpawcyyoqxuczrpgsleimtkj +bvomawcnyovxudzrpgsleimtkj +bvhfawcnjvqxudzrpgsleimtkt +nvhfawcnyqqxudzrpgsleittkj +bvhiawcnyzqxudzrpysleimtkj +bvhdawcnyoqxukzrpgsleimtuj +bvhfawcnyyxxudzrpgslzimtkj +hvhfawcnyoqxudzupgslemmtkj +byhfawknyoqxudzrpgsleimtkb +bvhfawcnyoqxudzrpasleihakj +bvafahcnyaqxudzrpgsleimtkj +bkhfawcnyoqxudzrpgllepmtkj +bghfawcnycqxuzzrpgsleimtkj +bvhfawcnyoqxudzrbgeleimtkl +bvhfascnyoqgudzrpgsveimtkj +bvhfawnnyoqxudzrpgsleimtdl +bvhqawcnyoqxudzrpgsleimgrj +bvhsawdwyoqxudzrpgsleimtkj +bvhfawcnyoqxudzrpgaleipttj +bvhfawcnrlqxudzrbgsleimtkj +bvhfdwcnyoqxudzqpcsleimtkj +bvhfawcnyoqxudzopgslexmokj +bvhfawcoyoqxudzrpghlewmtkj +bvhfozcnykqxudzrpgsleimtkj +bvhfawcnyoqxuvzrpgslrimtkr +bvhfrncnyoqrudzrpgsleimtkj +bvhfawcnyocxuizrpgslefmtkj +bvhfawywyoqxudzrpgsleimxkj +bvhfawcnyoqxugzrpgslrimtij +bvtfawcnyoqxudzcpgsleimtfj +bvhfawcnyoqxuzzspgsleimtkz +bvhfawcnzoqxvdzrpgslsimtkj +bvhfzwcnyoqxudzrpgslenmhkj +bvhfkccnyoqxudzrpgzleimtkj +bvhfawcnyoqzudzrpgslhimwkj +bzhfawvnyooxudzrpgsleimtkj \ No newline at end of file diff --git a/2018/stub.rkt b/2018/stub.rkt new file mode 100644 index 0000000..b5723bf --- /dev/null +++ b/2018/stub.rkt @@ -0,0 +1,12 @@ +#lang debug br + +#;(define (★) + ) + +#;(define (★★) + ) + +#;(module+ main + (require rackunit) + (check-equal? (time (★)) 454) + (check-equal? (time (★★)) 566)) \ No newline at end of file