Skip to content

Instantly share code, notes, and snippets.

@suspectpart
Last active December 3, 2018 01:10
Show Gist options
  • Save suspectpart/79400c42990c583d1749e415c7fa38c3 to your computer and use it in GitHub Desktop.
Save suspectpart/79400c42990c583d1749e415c7fa38c3 to your computer and use it in GitHub Desktop.
Advent of Code 2018, Day 2
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