Last active
December 3, 2018 01:10
-
-
Save suspectpart/79400c42990c583d1749e415c7fa38c3 to your computer and use it in GitHub Desktop.
Advent of Code 2018, Day 2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import difflib | |
import itertools | |
import string | |
def check_sum(box_ids): | |
"""Advent of Code 2018, Day 2, Part I""" | |
counts = [Counter(id_).values() for id_ in box_ids] | |
twos = sum(2 in c for c in counts) | |
threes = sum(3 in c for c in counts) | |
return twos * threes | |
def prototype_fabric(box_ids): | |
"""Advent of Code 2018, Day 2, Part II""" | |
for a, b in itertools.combinations(box_ids, 2): | |
distance = len([_ for _ in difflib.ndiff(a, b) if _[0] != ' ']) | |
if distance != 2: | |
continue | |
blocks = difflib.SequenceMatcher(None, a, b).get_matching_blocks() | |
return "".join([a[block.a:block.a + block.size] for block in blocks]) | |
if __name__ == '__main__': | |
data = [ | |
"jplenqtlagxhivmwmscfukzodp", | |
"jbrehqtlagxhivmeyscfuvzodp", | |
"jbreaqtlagxzivmwysofukzodp", | |
"jxrgnqtlagxhivmwyscfukwodp", | |
"jbrenqtwagjhivmwysxfukzodp", | |
"jbrenqplagxhivmwyscfuazoip", | |
"jbrenqtlagxhivzwyscfldzodp", | |
"jbrefqtlagxhizmwyfcfukzodp", | |
"jbrenqtlagxhevmwfsafukzodp", | |
"jbrunqtlagxrivmsyscfukzodp", | |
"jbrenqtlaguhivmwyhlfukzodp", | |
"jbrcnstsagxhivmwyscfukzodp", | |
"jbrenqtlagozivmwyscbukzodp", | |
"jbrenqwlagxhivswysrfukzodp", | |
"jbrenstlagxhuvmiyscfukzodp", | |
"jbranqtlhgxhivmwysnfukzodp", | |
"jbrenqtvagxhinmxyscfukzodp", | |
"jbrenqtlagdhivmwyscfukxody", | |
"jbrenqtlagelavmwyscfukzodp", | |
"jbrenqtlagxhtvmwyhcfukzbdp", | |
"jbrenqwlagxhivmwyscfutzopp", | |
"jbrenqtlavxhibmtyscfukzodp", | |
"jbronqtlagxnivmwyscfuzzodp", | |
"jbredqtlagxhppmwyscfukzodp", | |
"jbrcnqtlogxhivmwysxfukzodp", | |
"jbremqtlagehivswyscfukzodp", | |
"jbrenqolagxhivmcyscfukzokp", | |
"jbrehqtlacxhgvmwyscfukzodp", | |
"fbrlnqtlagxhivmwyscbukzodp", | |
"zbrfnqtlagxhivrwyscfukzodp", | |
"jbregqtlagxnivmwyscfhkzodp", | |
"jbrenqtllgxnivmwystfukzodp", | |
"jurenqtlagxhivmwyscfulzoup", | |
"jbrenitdagxhivmwyxcfukzodp", | |
"jbrenqtlagxqivmwyscvuszodp", | |
"jbqenqwlagxhivmwyscfckzodp", | |
"jbrenqtlagxhivmwxscqupzodp", | |
"jbrenqtlagxhivmwysciuqiodp", | |
"jbrjnjtlagxhivmwyscfukzode", | |
"jbrenqtlagxhuvmwqscfukzods", | |
"jbrenqtlagxhuvmuyscfukzudp", | |
"ibrenqtlagxhivmwyscfuktokp", | |
"jbsenqtlagxhivcwyscfuksodp", | |
"jbrfnntlagxhivmwnscfukzodp", | |
"jzrenqulagxhivmwyscfukzodx", | |
"jbrenqtqygxhivmwyscfukzwdp", | |
"jbrenqtlagxfixmwyscfukzcdp", | |
"jbrenqaoagxhivmwyshfukzodp", | |
"jbrenqtlazxhivmworcfukzodp", | |
"jbrenqtlagxhicowyscfukrodp", | |
"jbrqnqtlagxhivzwyzcfukzodp", | |
"jbrenqtlalxhuvxwyscfukzodp", | |
"jbrenqtlqgxhhviwyscfukzodp", | |
"jbrenqtuggxhivmoyscfukzodp", | |
"jbrenqtlagxpivmwyscfukkodw", | |
"zbrenqhlagxhivmwyscdukzodp", | |
"jbrenutlagxxivmwyscfukzoqp", | |
"obrenqtlagxhivmwxscfuszodp", | |
"jbrenqtlagxhlvmwyscfuixodp", | |
"rbrenqtlagdhixmwyscfukzodp", | |
"jbrenqtlagxhivmwescfyszodp", | |
"jbrfnqtlagxhivmwyscaukzhdp", | |
"jbrenqtiagxhivmbyscfuxzodp", | |
"cbrrnqtuagxhivmwyscfukzodp", | |
"jbkenqtlagxhigmwysufukzodp", | |
"jbjewqtlagxhivmwyscfuqzodp", | |
"jbrznqtlagxvivmwyscfukzovp", | |
"jbrenttlacxhivmwyscfhkzodp", | |
"jblenqtlagxhivmwylcfukaodp", | |
"jbrenqtlagxhivmqysiftkzodp", | |
"jbrenqtlagwhikmwyscfukqodp", | |
"jbrenqtlegxhivmwvsckukzodp", | |
"jbrenqwzagxhiamwyscfukzodp", | |
"jbrenqtlagxhivcwyscfgkzodc", | |
"jbrenqtlagxxhvmwxscfukzodp", | |
"jbrenqtlngxhivmwyscfukoowp", | |
"jbreomtlagxhivmwpscfukzodp", | |
"jfrenqtlagxhivmwyscnumzodp", | |
"jbrenqtlagphipmwyscfukfodp", | |
"jvrenqtlagxhivmwyscfmkzodw", | |
"jbrenqtlaxxoiemwyscfukzodp", | |
"jbrenqtlagxhivmwyscemkzpdp", | |
"jbrenyjldgxhivmwyscfukzodp", | |
"jbrenqtlagxhivfvyspfukzodp", | |
"kbrenctlakxhivmwyscfukzodp", | |
"jbrmhqtlagxhivmwyscfuizodp", | |
"jbjenqtlagxlivmbyscfukzodp", | |
"jbrenqtlaaxhivmmyshfukzodp", | |
"jbronqtlagxhirmvyscfukzodp", | |
"jbcrnqtlagxwivmwyscfukzodp", | |
"jxrenszlagxhivmwyscfukzodp", | |
"jbpenqtlagxhivmwyscfukkody", | |
"jbrewqtlawxhivmwyscfukzhdp", | |
"jbrenqylagxhivmwlxcfukzodp", | |
"jbrenqtlagxxivtwywcfukzodp", | |
"jbrenqtlagxhcvgayscfukzodp", | |
"jbrenitlagxhivmwiscfukzohp", | |
"jbrenutlagxhivmwyscbukvodp", | |
"nbrenqtlagxhivmwysnfujzodp", | |
"jbrenqtlagxhivmwyqcfupzoop", | |
"jbrenqtrarxhijmwyscfukzodp", | |
"jbrenqtlagxhivmwysdfukzovy", | |
"jbrrnqtlagxhivmwyvcfukzocp", | |
"jbrenqtlagxhivmwyscfuvzzhp", | |
"jbhenitlagxhivmwysufukzodp", | |
"jbrenqtlagxhivmwyscfuwzoqx", | |
"kbrenqtlagxhivmwysqfdkzodp", | |
"jbrenqtlagxhivmwyxmfukzodx", | |
"jbcenatlagxxivmwyscfukzodp", | |
"jbrenhtlagvhdvmwyscfukzodp", | |
"jxrenqtlafxhivfwyscfukzodp", | |
"jbreaztlpgxhivmwyscfukzodp", | |
"tqrenqtlagxfivmwyscfukzodp", | |
"jbrenqgllgxhwvmwyscfukzodp", | |
"jbrejjtlagxhivmgyscfukzodp", | |
"jbrenqtlagxhivmwyscvukzoqv", | |
"jbrvnqtlagxsibmwyscfukzodp", | |
"jbrenqttagxhuvmwyscfukvodp", | |
"jbrenqteagxhivmwcscfukqodp", | |
"jbrenqtsabxhivmwyspfukzodp", | |
"jbbenqtlagxhivmwyscjukztdp", | |
"jnrenqtlagxhiimwydcfukzodp", | |
"jbrenqtlagxhfvmwyscxukzodu", | |
"jbrenqtluyxhiomwyscfukzodp", | |
"jbrenqvlagxhivmwyscuukzolp", | |
"ebrenqtlagxnivmwysrfukzodp", | |
"jbreeqtlatxhigmwyscfukzodp", | |
"jbrenqtvxgxhivmwyscfukzedp", | |
"jbrmnqtlagxhivmwywcfuklodp", | |
"jbreeqtvagxhivmwyscfukzody", | |
"jbrenptlagxhivmxyscfumzodp", | |
"jbrenqtlagxhivmwysgfukzfsp", | |
"jurenqtlagjhivmwkscfukzodp", | |
"jbrenntlagxhivmwtscffkzodp", | |
"jbrenqglagxhivmwyocfokzodp", | |
"wbrenqtlagxhivmwhscfukiodp", | |
"jbrenqtligxhivmqascfukzodp", | |
"jbrenqtlagxhivmwxscfukpojp", | |
"jurenqtlagxhivmmyscfbkzodp", | |
"jbrenqtmagxhivmwyscfrbzodp", | |
"jcrenqtlagxhivmwysefukzodm", | |
"jbrenqtlagxhicmwywcfukzodl", | |
"jbvanqtlagfhivmwyscfukzodp", | |
"jbmenqjlagxhivmwyscfdkzodp", | |
"jbrenqtlagohivvwysctukzodp", | |
"jbrenqtdagxdivmwyscfckzodp", | |
"kbrefqtlagxhivmwyscfuazodp", | |
"jbrwnqtoagxhivmwyswfukzodp", | |
"jjhenqtlagxhivmwyscfukzorp", | |
"jbgsnqtlagxhivkwyscfukzodp", | |
"jbrynqtlagxhivmsyspfukzodp", | |
"jbrenftlmkxhivmwyscfukzodp", | |
"nbrenqtxagxhmvmwyscfukzodp", | |
"jbrunqtlagxhijmwysmfukzodp", | |
"jbrenqtlagmaivmwyscfukzowp", | |
"jbrerqtlagxhihmwyscfukzudp", | |
"jbrenqtlagahivmwysckukzokp", | |
"kbrenqtlagxhirmwyscfupzodp", | |
"jbrrnqtlagxhivmwyecfukzodz", | |
"jbrenqtlavxhivmwyscfusiodp", | |
"jnrenqtlagxhivmwyhcfukzodw", | |
"jbretqtlagfhivmwyscfukzrdp", | |
"jbreoqtnagxhivmwyscfukzopp", | |
"jbrenbtllgxhivmwsscfukzodp", | |
"jbrenqtlmgxhivmwyscfuwzedp", | |
"jbnenqtlagxhivbwyscfukzokp", | |
"jbrenqslagxhivmvyscfukzndp", | |
"jbrenqtlagxzivmwuscfukztdp", | |
"gbrenqtlagxhyvmwyscfukjodp", | |
"jbrenqteagxhivmwyscfuszedp", | |
"jbrenqtlaglhivmwysafukkodp", | |
"jbrenqtlagxhcvmwascfukzogp", | |
"jbrenqtlagxhsvmkcscfukzodp", | |
"jbrenqslbgxhivmwyscfufzodp", | |
"cbrenqtlagxhivkwtscfukzodp", | |
"jbrenqtltgxhivmzyscfukzodj", | |
"jbrgnqtlagihivmwyycfukzodp", | |
"vbrenqauagxhivmwyscfukzodp", | |
"jbrqnqtlagjhivmwyscfqkzodp", | |
"jbrenqtlakxhivmwyscfukvobp", | |
"jcrenqelagxhivmwtscfukzodp", | |
"jbrrnqtlagxhlvmwyscfukzodw", | |
"jbrenqtlagxhivmwkscaumzodp", | |
"jbrenqdlagxhivmiescfukzodp", | |
"jhrenqtlagxhqvmwyscmukzodp", | |
"jbrenqtlaghhivmwyscfukkoyp", | |
"jowenqtlagxyivmwyscfukzodp", | |
"jbrenitaagxhivmwyscfqkzodp", | |
"jbrenqtlagxhivmwyscfnkbudp", | |
"jbyenqtlagxhivmiyscfukzhdp", | |
"jbrenitlagxhibjwyscfukzodp", | |
"jbrenqtlavxhjvmwpscfukzodp", | |
"jbrenqyaagxhivmwyscflkzodp", | |
"jbrenqylagxhivmwyicfupzodp", | |
"jbrenqtlagxmevmwylcfukzodp", | |
"lbrenqtlagxhiqmwyscfikzodp", | |
"jbrenqtnarxhivmwyscfmkzodp", | |
"jbrenqtlamxhivmwyscfnkzorp", | |
"jbbenqtlavxhivmwyscjukztdp", | |
"jbrenqtlagxhivmwyscfnliodp", | |
"jbwenetlagxhivmwyscfukzodt", | |
"jbrenatlagxhivmwysmfujzodp", | |
"jbrsnstlagxhivmwyscfukgodp", | |
"jbwvnitlagxhivmwyscfukzodp", | |
"jbrenqtbagxhkvmwypcfukzodp", | |
"jbrlnqtlafxhivmwyscfukdodp", | |
"jbrenztlanxhivmwyscjukzodp", | |
"jbrepqtlagxhivmwudcfukzodp", | |
"jbrenqtlagxiivmwdscfskzodp", | |
"jbrdjqtlagxhivmwyschukzodp", | |
"jbrenqtoaguhivmwyccfukzodp", | |
"jdrexqjlagxhivmwyscfukzodp", | |
"jbrenqtlagxhovmwysckukaodp", | |
"pbrfnqblagxhivmwyscfukzodp", | |
"jbrenqtlagxrivgiyscfukzodp", | |
"jbrelqtgagxhivmryscfukzodp", | |
"jbrenqtlagxhicmwjscfikzodp", | |
"jbrenqjlagxhivmwyscfmkjodp", | |
"jbrenqtlagxpivmwzscgukzodp", | |
"jbienqzlagxpivmwyscfukzodp", | |
"jbrenqvlagxhivmwdscfukzodx", | |
"owrenqtlagxhivmwyicfukzodp", | |
"gbrenqtlaathivmwyscfukzodp", | |
"jbgenqtlafxhivmwysqfukzodp", | |
"jbrenqtlagxhivtwsscfukzokp", | |
"jbrnnqylanxhivmwyscfukzodp", | |
"ebrenqolagxhivmcyscfukzodp", | |
"jbrenqtlarnhivgwyscfukzodp", | |
"jbmenqtlagxhivmvyscfukzgdp", | |
"jbrevqtlaglhivmwystfukzodp", | |
"jbrenqplanthivmwyscfukzodp", | |
"jbrenqtlagxhivmkyscbukzosp", | |
"jbrenqtlagxaivmwyscfugzodo", | |
"jbrenqplagxhnvmwyscfjkzodp", | |
"jbrenqtlagxhivgwyscfusrodp", | |
"cbrenqtlagxhivmwysmfukzody", | |
"jbrenquwaexhivmwyscfukzodp", | |
"jbredqtlagxhdvmwyscfukzoup", | |
"jbrxnqtlagxhivmwysczukaodp", | |
"jbrenqtlafnhivmwyscfuczodp", | |
"jbbdkqtlagxhivmwyscfukzodp", | |
"ubrenqtlagxhivkwyucfukzodp", | |
"ebjenqtlagxhivmwyscfukzodj", | |
"jbgenqtlugxxivmwyscfukzodp", | |
"jbrenqtoagxqivmwdscfukzodp", | |
"bbeenqtlagxhivmwyscfumzodp", | |
"jbfeeqtlagxhivmwmscfukzodp", | |
"jbrlnqtlagxhiimwescfukzodp", | |
"jbrenqtlagwoivmwyscfukhodp", | |
"jbrenqtlagnhivmwyscfuszovp"] | |
print(f" I) Boxes Checksum: {check_sum(data)}") # 8118 | |
print(f"II) Prototype fabric in: {prototype_fabric(data)}") # jbbenqtlaxhivmwyscjukztdp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment