diff --git a/02/input.txt b/02/input.txt new file mode 100644 index 0000000..e3e528f --- /dev/null +++ b/02/input.txt @@ -0,0 +1,250 @@ +icxjubroqtunzeyzpomfksahgw +ibxjvbroqtunleyzjdmfksahow +icxjvbroqtinleyzpdmflsahnw +icxjvbnoqtunleyvpgmfksahgw +wcxjvbroqrunleyzpdmfksahge +icxjtbroqtjzleyzpdmfksahgw +icxjvbrohtunleyzpdmfkbahsw +xcxjvbroqcunleyzpdmfksaxgw +ycxjvbroqtunleyzpowfksahgw +icxfvbroqtunleyzpdmfksncgw +ixxjvbuoqtunleyzpdvfksahgw +icfjvbroqtunleyzpdmfksadgt +icxjvbroqdunleyzpdafksqhgw +icxjvbrobtunlelzpdmfkuahgs +ujxjvbroqtunleyzpdmqksahgw +icqjvsroqtunleyzpdmfksahuw +icxjvbroptpnleyzpdmfksangw +ipxjvbroqtunleyzpdmfesahgi +icajvbroqtunltyzpdqfksahgw +ickjvbroqtuzleyzpdmfgsahgw +icxjvbroqtunledzpdmwksahgz +icxjvlroqtsnleyzpdmfksvhgw +icxjvbroqtunleyzpdsfysahvw +icxjvbroqtunwnyzydmfksahgw +ionjvbroqtunleyzpdmfksahgj +icxjvwriqtunleyzpdmfksahgi +ocxjvbroztunleyzpdmfksapgw +icxjvbroqtmnlewzpumfksahgw +ucxjvbroqtunleyzpdmzktahgw +icxgvbroqtunleyztdmfktahgw +icxhvbroqttnleybpdmfksahgw +icxjvbroqtugleyzpdxfkeahgw +acxjvbroqvunlexzpdmfksahgw +icxjvbroqglnleyzpbmfksahgw +icxjvbriqtnvleyzpdmfksahgw +icxjvbreqtunlakzpdmfksahgw +gcxjvbuoqtunleyzpdmfksawgw +icxjvbroqtunleyzpddfkyzhgw +icxjvbjoqtunleyzpdmfqsahhw +icxjvjroqtunleyzpnmfksajgw +ycxjvbroqtunmeyzcdmfksahgw +irxkvbryqtunleyzpdmfksahgw +isxjvbrlqtunleyzpdmsksahgw +icxjvbcoqtunleyzpdfkksahgw +ixnjvbroqtunleyzpdmfkqahgw +wcxjvbroqhunleyzqdmfksahgw +icljvurmqtunleyzpdmfksahgw +ibxjvbroqtayleyzpdmfksahgw +arxjvbroqiunleyzpdmfksahgw +iuxjvbroqtunluyzpdmoksahgw +icxjvbrmqtunleyzpdmfosahew +isxjvbroqtunleyrpdmfksrhgw +icxjvxrpqtunleyzpdmfkdahgw +ichjvbrogtunllyzpdmfksahgw +icxjvbeoqtunlryzpdmfksakgw +icxjvbroqtcnemyzpdmfksahgw +icxjvbroqtybledzpdmfksahgw +icxjvbrqqtunleyzpdmfksgngw +icgjvbroqtunleyzmdmfksabgw +icxjtbroqtunleyzkdmfksahww +icxjvbfoqtunleyzpamfqsahgw +icxjvbroknuyleyzpdmfksahgw +icxjvbroqtujleyzpdmaksaigw +icxjvbroqtnnlmyzpdmflsahgw +icxjvbroqtunlefzpdmfsfahgw +icxjvdroqtusleyzpdzfksahgw +icxjvbioqtunlsyzpdmfkshhgw +icxbvbrodtunleyzpdmoksahgw +icxjvbroqtuvleyzpdmfkbahmw +iyxjvbroqtunljvzpdmfksahgw +icxjvbroqtudleynddmfksahgw +icxjvwroqtnnleyzpdmfksahgz +ichjvbroqtunleyzjdmeksahgw +icxjvbrostunluyrpdmfksahgw +icfjvbroqtunleyxpdgfksahgw +nhxjvbroqtunlerzpdmfksahgw +icxjvbrothunlexzpdmfksahgw +icxjvbrzltqnleyzpdmfksahgw +icxjvbrhqtunleyzpdmfksajgy +vcxjvjroqiunleyzpdmfksahgw +icxjfbroltunleyzpdmqksahgw +icxbvbroqtunleyzpdofasahgw +icxjvbkoqtunveyzpdmfksaqgw +icxsebroqtunleyzpdmuksahgw +icxjvbroquunlpyrpdmfksahgw +icxhvbroqtunjeyzpdmrksahgw +icdjvbroqtunlzyzpdmfksangw +jcxqvbroqtvnleyzpdmfksahgw +icxjvxroqtunleyrpdmfxsahgw +icxjvnroqtunleyzpdmfssyhgw +icxjvbraptunleyzpdofksahgw +icxjvbroatunleyjpdmfbsahgw +icxjvbroytlnlryzpdmfksahgw +iaxjvbroqkunleyzpdmfcsahgw +ucxjvbroqtuileyzzdmfksahgw +icxjqbroqtcnleyzpgmfksahgw +icxjvbloqtunleyzadmfksaqgw +icxjvbroqtunleyzkdmnksakgw +icxjvbroqtunleyjpdxfksahvw +iqxjvbroqtujleyzpdmfklahgw +icgjvbroqtunleyzpdmfksbhgb +icxjzbroqtunleyzpdmfkdahgg +icxjvbrobtunloywpdmfksahgw +icxavbroqtunleyfpdmfksahgd +icxjvbroqtunleyophmfksahkw +icxjndroqtunlyyzpdmfksahgw +icxjvbroqtjnleyppdmvksahgw +icxjvbroonfnleyzpdmfksahgw +icxjvbrqqtlnljyzpdmfksahgw +icxjvbrzqtunlelspdmfksahgw +icxjvbooqtunleyztdmfkfahgw +icajvbroltunlnyzpdmfksahgw +icxjvbroqtunleyzidmdkschgw +icxjvbroktupleyzpdmfksahyw +icxjcbroyeunleyzpdmfksahgw +icxjvbroqtunlezkpdmfksahsw +icxjvbroqtunlejzpcmfksrhgw +icxjvvroqtunlsyzkdmfksahgw +icxjnbroqtunbeyzpdmfpsahgw +itxjbbroqtunleyzpemfksahgw +icxjvbroqtunlrkzpdmfksshgw +rcxjvbroqtujlbyzpdmfksahgw +icxjvmroqtugleazpdmfksahgw +icxjvbfoqtunleylpdmfkeahgw +icnjvoroktunleyzpdmfksahgw +icxjvbroqtunlvyzpdmfkfahgr +icxjvbroqtgnseyzpdmfxsahgw +scxjvbroqtunleycpdmfksdhgw +icxhvbxoqtunleuzpdmfksahgw +icxjvbruqtunleyzpnmfksfhgw +icdjvbroqtunleyzpdmfksahup +ihxjvbroqtunleovpdmfksahgw +icxjvbroqtunleyzxdmfksahzv +ocxjvbioqtunleyzpdmfzsahgw +idxjvbroqtunlyyzpdofksahgw +izdjvbroqtunleyzpdtfksahgw +icxjvbrnqtunleyzpdmfksbhgb +icxjvbrjqtunleyhpdmrksahgw +icxjvbroqtunleyzpdbflsahgg +icxjvbmfqtunleyzpdmfkaahgw +idxjvbroqtunlsyzpdffksahgw +bcxjvbroqtunleyzpkmfkswhgw +ivxjvbroqtdnleyzpdmbksahgw +icxpvbboqtunleyzpdmfksahtw +ibxjvbroqtunlehzpdmfkmahgw +icxjvbboqtunleyzpdmfkaahgv +icxjlaroqtuileyzpdmfksahgw +icxjvbroftunleyzpdmfqsahew +ichjvbroqtunleyzpdmiwsahgw +icxrvbvoqtunleyzpdmiksahgw +icxjvbroqtunldydpdmfksahgl +icogvbroqtunleyzpdmfnsahgw +icxjvbroqtunleszodmfkswhgw +icxjvbrontunleyztemfksahgw +icxjvbrovtunleyzpdvkksahgw +icxjvbroqqucteyzpdmfksahgw +icmovbroptunleyzpdmfksahgw +icxjvbqoftunleyzvdmfksahgw +icxjvbdoqtunleyzpdmfkadhgw +icxjvbroqtunlgnzpdmfksaqgw +icxjvbroqtunieygpdyfksahgw +acdjvbroqtunleyzpdmfkwahgw +icxjvbroqtunleyzpdmfkfahlj +icxjvbgoqtunleyepdmvksahgw +icxjvbpobbunleyzpdmfksahgw +icxjvbroqtunleurpdmfktahgw +ipxjvbzoqtunleyzpdmffsahgw +icxjtbroqtunllyzpdmuksahgw +icxjvbroqtunbsyzadmfksahgw +ihxjvoroqtuqleyzpdmfksahgw +idxjmbroqqunleyzpdmfksahgw +wcxjvbdoqtunleyzpdmfksahgr +icxjvbroqtunleygptmfksahgj +ipxjvbrsqtunleyzpdmfksghgw +ycxjvbroqtunluyzkdmfksahgw +icxjvbroxtuulejzpdmfksahgw +icqjvbroqtunlwyypdmfksahgw +ioxjhbroqtunleyzphmfksahgw +icxjvbgoqnunleyzpdmfksahaw +mcxjvbroqtunleyzpdmfksihgh +icxjsbroqtunlqyzpdmfksawgw +icxjvbroqtuoleycpdmftsahgw +icxjvbroqtunleyzgdifksahlw +icxjvbmoqtunleyzjfmfksahgw +icxjvbroqtunlezopdmfksahge +icxjvbroqtbnlefzpdmfosahgw +tcxjvbromtunlevzpdmfksahgw +irxjgbroqtunleyzpdmfksthgw +icxjvbrojtunleyxpdmoksahgw +icxrvbroytpnleyzpdmfksahgw +icxjvbroqtunfeyupdmfksasgw +ihqjvbroqtunleyzpdmftsahgw +icxjobroqkunleozpdmfksahgw +icjjjbroqtualeyzpdmfksahgw +icxjvbroqtunaeytpdmfksahvw +icxjvbroqtunzeyzpdmfkshhxw +icxqvbroqtucleyzxdmfksahgw +icxjvbrogturleyzxdmfksahgw +icxjvoqoqtunleyzpdcfksahgw +iuxjvbroqtunleyzpdmfksopgw +icxjveroqtunleyzptmfksalgw +icxjvbroqtunleyzpdmfwcahhw +iwxjvbroqtlnleyzpdmfksyhgw +ectjvbroqtanleyzpdmfksahgw +icxjvnroqtyhleyzpdmfksahgw +icvjvhboqtunleyzpdmfksahgw +icxjtbroqtuzleyupdmfksahgw +icjjvproqtunleyzpsmfksahgw +icdjvbroqtutleyzpdmiksahgw +icxjvwroqtujleyzpdmfksahgc +icxjxbroqtunleyzpdwhksahgw +icxjvbqoqtunleyzpdmvfsahgw +icajvbroqtusleyzpdmfksaagw +icxjvbroqtunbtyzpdmfksmhgw +kcxjvbroqtxnleyzpdmfkskhgw +icxjvbqogfunleyzpdmfksahgw +icxjvbroqtubleyzpdmfdswhgw +icxjvprlqtunleyzpdmffsahgw +icxjxbroqtucleyzpdmfksakgw +dcxrvbroqtunleycpdmfksahgw +icxjvbrobtunleyzpomfksahgu +ocxrvbroqtunleyzpdmfssahgw +icxjvbroktunlejzpdmfksahzw +icxjvbrovtunleyzmdmfkhahgw +icxjvbroqtudleygpdmfksfhgw +bcxjvbroqtubllyzpdmfksahgw +icxwvbrontunzeyzpdmfksahgw +icxjvbroqtunleysjbmfksahgw +icxjvvroztunleyzpdmfksjhgw +ivxjxbroqtunleyzpdmfksahew +icxjvbroqtunleyupqufksahgw +icxjvmrcqtunleyzpdmxksahgw +icxjvgroqtunleyzpdgfkuahgw +icxjvbroqthnqeyfpdmfksahgw +icxjsbuodtunleyzpdmfksahgw +iuxjzbroqtunleyzpdrfksahgw +icxjvbrobtunlelzpdmfksahgs +icxjvbroqtzhljyzpdmfksahgw +inxtvbroqtunleyzpdmeksahgw +icgjvbroqtunleyztdmfksahgq +icxjvagoqtugleyzpdmfksahgw +icxuvbroqtunleyzpimfkyahgw +icxzvbroqtfhleyzpdmfksahgw +icxjjbroqtqnleyzpdmnksahgw +icjrvbroqtunleszpdmfksahgw +iexjvbroqtunlgyzpdmfksacgw +rcxjvbkoqtuoleyzpdmfksahgw +icxjvbroqgunlwyzpdmfksqhgw +icxjvbroqtunleqzpsmfksqhgw +icxjvbroqtubaeyzpdmfksaugw diff --git a/02/solve.py b/02/solve.py new file mode 100644 index 0000000..91f96e1 --- /dev/null +++ b/02/solve.py @@ -0,0 +1,62 @@ +import sys + +def load_words(filename): + words = [] + with open(filename, "r") as f: + for line in f: + words.append(line[:-1]) + return words + +# PART 1 + +def has_n_chars(word, n): + count = {} + for char in word: + count[char] = count.get(char, 0) + 1 + return n in count.values() + +def count_words(words): + twice = 0 + thrice = 0 + for word in words: + if has_n_chars(word, 2): + twice += 1 + if has_n_chars(word, 3): + thrice += 1 + return twice, thrice + +def checksum(words): + twice, thrice = count_words(words) + return twice * thrice + +# PART 2 + +def differ_by(a, b): + count = 0 + for x, y in zip(a, b): + if x != y: + count += 1 + return count + +def find_ids(words): + for i, a in enumerate(words): + for b in words[i:]: + if differ_by(a, b) == 1: + return a, b + +def common_chars(a, b): + result = [] + for x, y in zip(a, b): + if x == y: + result.append(x) + return "".join(result) + +def main(filename): + words = load_words(filename) + print(f"Solutions for {filename}") + a, b = find_ids(words) + print(f"Part 1: {common_chars(a, b)}") + +if __name__ == "__main__": + for filename in sys.argv[1:]: + main(filename)