diff --git a/py/2016/04/input.txt.decrypted b/py/2016/04/input.txt.decrypted deleted file mode 100644 index 2a06153..0000000 --- a/py/2016/04/input.txt.decrypted +++ /dev/null @@ -1,337 +0,0 @@ -rampaging projectile rabbit training-837[dmvbi] -consumer grade flower acquisition-171[cptzd] -colorful bunny purchasing-813[gnehk] -unstable basket customer service-271[thigj] -radioactive plastic grass workshop-318[mucil] -international chocolate receiving-295[evzfk] -rampaging dye user testing-143[rtaef] -classified rabbit development-224[oscdk] -weaponized dye shipping-190[ahwfv] -cryogenic rabbit technology-886[amceg] -unstable flower workshop-940[kahno] -corrosive flower training-391[qhndm] -classified candy storage-428[goqrs] -magnetic bunny analysis-926[xkcis] -unstable flower training-711[ecikr] -corrosive scavenger hunt analysis-384[ygktx] -classified candy coating department-168[obhqr] -cryogenic candy storage-325[pabel] -projectile scavenger hunt engineering-122[mvoqz] -magnetic military grade egg storage-229[lfjnw] -fuzzy cryogenic basket laboratory-500[ilsun] -fuzzy plastic grass user testing-147[bcadi] -unstable flower design-745[nbuwa] -international rabbit customer service-480[fhswb] -military grade biohazardous candy technology-451[rfipu] -fuzzy basket user testing-341[bpqrw] -unstable dye research-637[refna] -classified dye storage-621[hvdgl] -consumer grade chocolate training-458[bkmox] -magnetic jellybean development-697[jqsfr] -projectile candy coating containment-952[xdmko] -top secret projectile plastic grass research-582[uhijs] -colorful bunny department-148[vbcmt] -rampaging military grade candy coating operations-822[ksbqx] -biohazardous jellybean development-385[jfqtg] -top secret jellybean research-823[nabcj] -cryogenic bunny research-374[dhsuo] -magnetic plastic grass management-714[oabgh] -military grade chocolate purchasing-805[bdjsf] -top secret chocolate marketing-396[nyiwl] -fuzzy candy research-927[ahijl] -weaponized jellybean shipping-216[wafhd] -rampaging scavenger hunt reacquisition-616[iqvmo] -military grade flower marketing-323[gptxa] -biohazardous plastic grass training-448[ucmla] -classified rabbit operations-930[ogyhk] -magnetic candy coating workshop-782[almye] -international scavenger hunt marketing-422[hnuyc] -projectile scavenger hunt acquisition-916[cyhnw] -fuzzy scavenger hunt acquisition-684[afmkl] -rampaging chocolate design-116[oubcq] -unstable basket marketing-291[ovzfi] -magnetic consumer grade basket user testing-828[iwxek] -biohazardous plastic grass customer service-928[aizkm] -unstable weaponized chocolate receiving-562[okmsx] -consumer grade rabbit receiving-563[anrjk] -fuzzy flower receiving-433[naior] -colorful basket storage-829[rdhou] -top secret basket financing-266[hnycm] -international egg laboratory-330[ibvwz] -corrosive basket user testing-441[ftsuj] -rampaging jellybean sales-775[fjqls] -international plastic grass sales-272[gobhw] -consumer grade scavenger hunt training-218[dhuqw] -magnetic flower workshop-177[tbjwf] -top secret candy deployment-373[vkefg] -cryogenic basket financing-886[lagce] -biohazardous dye design-954[laimq] -corrosive rabbit sales-246[fgcop] -cryogenic scavenger hunt design-287[dmbfh] -cryogenic rabbit workshop-662[cfpqw] -rampaging scavenger hunt acquisition-464[emrkg] -radioactive bunny purchasing-569[dlqfu] -magnetic plastic grass logistics-673[vldfj] -biohazardous jellybean engineering-524[ajewc] -weaponized chocolate department-228[kguzi] -international plastic grass containment-640[xdksc] -rampaging classified plastic grass acquisition-365[hrzbf] -international dye purchasing-482[zmudf] -weaponized rampaging bunny receiving-354[xoskq] -consumer grade weaponized rabbit user testing-456[qdefm] -unstable chocolate acquisition-697[fhnty] -weaponized egg containment-557[ctdip] -unstable flower sales-756[cjqyd] -cryogenic basket management-817[tcpbi] -consumer grade flower customer service-826[kxiuy] -military grade fuzzy candy user testing-552[clnsu] -weaponized egg logistics-751[hjlrv] -rampaging chocolate logistics-405[lnrtz] -magnetic scavenger hunt laboratory-722[gktxz] -rampaging rabbit technology-946[qwdeh] -consumer grade rampaging chocolate research-773[hlyjn] -fuzzy basket analysis-653[pxvwb] -classified egg services-534[equos] -biohazardous cryogenic rabbit research-687[gpdqr] -weaponized jellybean containment-958[iremp] -fuzzy bunny deployment-138[fqmrw] -magnetic chocolate research-210[acyfm] -consumer grade candy engineering-484[oxbqk] -unstable flower storage-888[ahkno] -international basket analysis-509[lydet] -magnetic plastic grass workshop-241[ltbhi] -weaponized candy storage-590[imlvw] -biohazardous plastic grass technology-340[mqyae] -projectile dye laboratory-864[ilyfn] -consumer grade basket research-815[vijrt] -top secret scavenger hunt technology-410[kzitu] -cryogenic dye deployment-674[gaefp] -fuzzy candy coating reacquisition-729[hbmzn] -fuzzy weaponized basket user testing-465[hcvwd] -cryogenic plastic grass management-725[dfhjq] -cryogenic jellybean customer service-608[ushbd] -consumer grade candy user testing-679[bkopa] -consumer grade chocolate department-248[qadfm] -unstable candy coating reacquisition-552[chunw] -cryogenic rabbit financing-298[bwqfo] -cryogenic scavenger hunt laboratory-103[sbdfo] -international chocolate purchasing-846[mzafo] -weaponized candy department-361[hdgqs] -corrosive candy shipping-830[kepqr] -cryogenic colorful candy coating operations-900[ymxbk] -fuzzy dye sales-162[mstyf] -classified magnetic plastic grass management-115[phtxb] -corrosive plastic grass reacquisition-680[eonkw] -unstable bunny workshop-638[zaegn] -corrosive unstable chocolate shipping-243[fjtvz] -cryogenic chocolate analysis-894[seqbd] -magnetic classified candy operations-747[hpjlu] -rampaging plastic grass containment-150[gtmoy] -fuzzy scavenger hunt design-696[ktafm] -unstable flower logistics-954[atbmq] -colorful jellybean department-556[budeh] -international candy design-621[qdlgh] -radioactive projectile plastic grass development-239[zdovg] -international basket laboratory-472[wpjkn] -radioactive magnetic bunny management-967[ivzdh] -projectile plastic grass analysis-965[pxfib] -cryogenic jellybean sales-704[cjalq] -unstable corrosive scavenger hunt analysis-830[ucgpt] -military grade jellybean training-940[ewahj] -corrosive chocolate reacquisition-335[rflhu] -colorful bunny laboratory-978[ybvei] -biohazardous dye department-606[svwgj] -projectile bunny technology-250[oxydi] -fuzzy rabbit development-821[pekma] -top secret candy coating research-968[wylnu] -rampaging jellybean technology-987[bfhmo] -projectile plastic grass technology-152[gipsw] -international basket customer service-129[fubjo] -international scavenger hunt deployment-225[wncja] -radioactive plastic grass sales-989[rzhbd] -classified basket development-896[sghor] -magnetic basket storage-224[dkocq] -rampaging egg storage-542[keivm] -fuzzy unstable dye management-506[sboah] -rampaging dye storage-300[msdqa] -biohazardous rabbit user testing-481[efgno] -classified fuzzy plastic grass receiving-957[nxfhj] -classified plastic grass customer service-353[dnptc] -cryogenic rabbit services-443[bdhqa] -biohazardous dye user testing-613[dpcef] -top secret bunny research-351[reafg] -colorful basket customer service-892[wgjku] -cryogenic rabbit laboratory-296[heqrj] -radioactive candy management-902[imvbk] -northpole object storage-984[sixve] -projectile dye user testing-387[hwluv] -military grade scavenger hunt management-596[cgpio] -classified dye design-471[abfpc] -colorful basket analysis-147[bjuxa] -cryogenic dye workshop-440[qaegt] -cryogenic basket marketing-590[mbiko] -colorful egg deployment-644[kruma] -projectile candy coating engineering-630[hycaw] -colorful rabbit services-509[cdmnp] -projectile candy coating operations-665[zelnp] -radioactive basket development-611[rgnbi] -projectile flower analysis-159[biflo] -military grade chocolate development-517[hdorw] -top secret basket containment-698[xireg] -fuzzy flower engineering-647[hqcij] -fuzzy flower operations-915[jamuz] -rampaging basket storage-530[qwhij] -biohazardous dye financing-723[fnsit] -international candy coating laboratory-259[bopuj] -magnetic egg containment-847[yeprl] -unstable scavenger hunt financing-184[lcyae] -fuzzy plastic grass containment-410[gtyzf] -projectile chocolate deployment-641[nxclu] -unstable candy coating financing-684[fsaul] -weaponized plastic grass sales-313[rzdhk] -weaponized scavenger hunt analysis-836[ajwoe] -unstable rabbit analysis-248[menfu] -weaponized military grade rabbit research-670[gkxoh] -projectile candy deployment-204[icghp] -rampaging military grade plastic grass research-847[lcdrt] -biohazardous candy coating development-340[mybcl] -military grade magnetic rabbit sales-931[fnjwy] -weaponized bunny purchasing-827[sfjnu] -top secret unstable flower operations-733[zjomn] -cryogenic dye department-122[mbgkl] -magnetic flower shipping-118[ubqsz] -weaponized basket marketing-989[dzhjm] -unstable bunny training-654[jepqw] -unstable military grade plastic grass development-928[imabt] -radioactive jellybean research-765[tpgar] -unstable chocolate technology-174[wbkmt] -colorful candy storage-275[zclnw] -military grade chocolate containment-828[exgim] -weaponized candy workshop-793[bacjn] -unstable egg research-266[yalmu] -colorful projectile plastic grass engineering-613[pctwd] -top secret scavenger hunt purchasing-752[geptu] -colorful jellybean management-421[gzivh] -weaponized chocolate sales-440[gcqen] -corrosive dye engineering-399[veizf] -rampaging candy coating laboratory-792[obcfu] -cryogenic scavenger hunt analysis-680[jaowy] -magnetic egg management-489[jlfrs] -projectile basket logistics-294[aklwd] -unstable bunny reacquisition-772[vcqab] -fuzzy plastic grass management-849[jbcin] -military grade scavenger hunt containment-968[hnuyc] -unstable flower operations-883[fpbmo] -radioactive rabbit customer service-201[lpyah] -corrosive egg logistics-507[bftve] -corrosive egg design-811[bzdjm] -consumer grade classified candy coating financing-761[gbtvl] -rampaging top secret flower shipping-269[givxz] -corrosive chocolate user testing-807[dnbqr] -magnetic dye training-282[mreik] -biohazardous scavenger hunt purchasing-865[tagkl] -military grade weaponized rabbit storage-245[pgtxi] -unstable scavenger hunt storage-378[qefmz] -classified candy containment-725[qdflg] -projectile basket engineering-245[tcxgi] -military grade egg deployment-563[npach] -international egg operations-576[jaekp] -consumer grade chocolate marketing-876[mikwz] -military grade egg workshop-417[fqdhn] -consumer grade jellybean training-388[gpcti] -unstable scavenger hunt customer service-133[bpkoq] -weaponized scavenger hunt containment-704[lcrya] -projectile scavenger hunt containment-829[hqwfd] -unstable egg customer service-152[iwgkv] -military grade candy coating containment-632[fsalu] -magnetic candy coating deployment-684[flsuw] -fuzzy top secret jellybean deployment-222[qfkxa] -international flower user testing-233[foujs] -unstable jellybean user testing-593[jqsxy] -radioactive dye engineering-348[uydhq] -consumer grade biohazardous bunny customer service-951[cpdfz] -weaponized bunny analysis-644[tgeko] -colorful chocolate services-142[cqszf] -radioactive dye design-860[bcgya] -projectile chocolate laboratory-773[vahjl] -international dye research-132[clpyg] -biohazardous plastic grass analysis-700[cuknq] -magnetic scavenger hunt deployment-685[vekdr] -unstable rabbit deployment-250[dlokv] -military grade rabbit receiving-205[ludhe] -colorful bunny containment-490[rsgpx] -colorful chocolate deployment-862[khayp] -top secret egg workshop-283[hrjsu] -biohazardous dye deployment-109[jyztv] -magnetic candy coating development-872[qzfmo] -projectile chocolate logistics-326[aofqu] -radioactive egg workshop-219[dgptv] -international scavenger hunt research-574[clpyr] -fuzzy egg logistics-640[qcjsd] -magnetic dye financing-641[wrjln] -weaponized candy coating financing-187[idvxb] -magnetic classified plastic grass marketing-705[fpxbd] -consumer grade chocolate workshop-521[nbdqg] -classified candy operations-680[eowaj] -colorful scavenger hunt containment-721[uajlv] -magnetic dye engineering-293[xgbzf] -rampaging flower sales-246[ofgsu] -projectile egg financing-434[moqvk] -weaponized scavenger hunt department-227[luahk] -corrosive colorful chocolate financing-215[hvbeg] -top secret jellybean operations-809[blqik] -consumer grade bunny deployment-570[gpafo] -colorful bunny services-680[ahjkn] -consumer grade plastic grass shipping-918[kahjs] -weaponized candy coating laboratory-774[gutei] -biohazardous jellybean marketing-603[vzdgi] -classified chocolate user testing-522[cqagr] -consumer grade rabbit development-804[gtcdf] -unstable egg workshop-402[cgsub] -biohazardous basket shipping-619[fnxgm] -projectile egg operations-164[wgahj] -colorful dye financing-431[ynqtw] -rampaging plastic grass purchasing-838[uamcj] -magnetic basket marketing-955[ahlnp] -top secret candy customer service-937[dbqrs] -weaponized flower engineering-781[dmhfn] -military grade bunny containment-368[jepwa] -projectile plastic grass operations-974[gcdfh] -magnetic weaponized candy development-213[zivyd] -fuzzy cryogenic dye engineering-556[udowy] -international flower storage-158[clmpr] -corrosive plastic grass workshop-291[njmdk] -corrosive consumer grade candy coating reacquisition-541[hntwf] -top secret weaponized egg research-886[cpaem] -cryogenic dye research-805[fdszb] -fuzzy bunny technology-372[fqgmr] -biohazardous flower department-788[gjswl] -biohazardous candy development-614[knoyx] -colorful candy user testing-319[eghkl] -projectile scavenger hunt analysis-500[yhmuc] -corrosive egg reacquisition-239[djmzb] -international plastic grass research-698[evwim] -unstable flower shipping-241[begil] -projectile flower technology-333[jtqhw] -rampaging plastic grass workshop-541[fxluw] -cryogenic dye user testing-246[sbfgh] -corrosive candy reacquisition-786[cilwh] -magnetic plastic grass reacquisition-795[tdlen] -fuzzy basket reacquisition-452[yijkp] -rampaging dye services-798[maioq] -unstable plastic grass development-517[hvdow] -biohazardous radioactive basket design-507[nvbfq] -colorful candy coating laboratory-245[dpagr] -colorful scavenger hunt services-748[kixya] -classified candy coating design-209[hbcmr] -radioactive egg financing-973[xcpvr] -top secret jellybean user testing-596[gvunp] -magnetic rabbit technology-107[qbdfk] -biohazardous bunny shipping-978[sxcek] -magnetic candy customer service-713[rtbcg] -colorful basket engineering-140[udbeh] -international flower design-721[ulpah] -classified cryogenic scavenger hunt training-894[dysuh] -colorful candy receiving-337[dfjmo] -plastic grass research-636[gfoqs] -weaponized egg receiving-379[prtya] diff --git a/py/2016/04/solve.py b/py/2016/04/solve.py deleted file mode 100644 index 4d95c20..0000000 --- a/py/2016/04/solve.py +++ /dev/null @@ -1,78 +0,0 @@ -import re -import sys - -# PART 1 - -ROOM_RE = r"(.*)-(\d+)\[(.{5})\]\n" - -def load_rooms(filename): - rooms = [] - with open(filename, "r") as f: - for line in f: - match = re.fullmatch(ROOM_RE, line) - name, sector, checksum = match.groups() - name = name.split("-") - sector = int(sector) - rooms.append((name, sector, checksum)) - return rooms - -def checksum(name): - name = "".join(name) - freqs = {} - for char in name: - freqs[char] = freqs.get(char, 0) + 1 - - top = freqs.items() - top = sorted(top, key=lambda x: x[0]) - top = sorted(top, key=lambda x: x[1], reverse=True) - top = list(top)[:5] - top = map(lambda x: x[0], top) - return "".join(top) - -def sum_correct_sectors(rooms): - total = 0 - for name, sector, chk in rooms: - if checksum(name) == chk: - total += sector - return total - -# PART 2 - -def shift(s): - new_s = [] - for c in s: - if ord("a") <= ord(c) <= ord("z"): - new_c = chr(ord("a") + ((ord(c) - ord("a") + 1) % (ord("z") - ord("a") + 1))) - new_s.append(new_c) - elif ord("A") <= ord(c) <= ord("Z"): - new_c = chr(ord("A") + ((ord(c) - ord("A") + 1) % (ord("Z") - ord("A") + 1))) - new_s.append(new_c) - else: - new_s.append("?") - return "".join(new_s) - -def decrypt_name(name, sector): - for _ in range(sector % 26): - name = map(shift, name) - return " ".join(name) - -def decrypt_names(rooms, filename): - with open(filename, "w") as f: - for name, sector, chk in rooms: - if checksum(name) == chk: - name = decrypt_name(name, sector) - line = f"{name}-{sector}[{chk}]\n" - f.write(line) - -def main(filename): - rooms = load_rooms(filename) - print(f"Solutions for {filename}") - total = sum_correct_sectors(rooms) - print(f"Part 1: {total}") - filename_2 = filename + ".decrypted" - decrypt_names(rooms, filename_2) - print(f"Part 2: see {filename_2} (search for 'northpole object storage')") - -if __name__ == "__main__": - for filename in sys.argv[1:]: - main(filename) diff --git a/py/2016/04/test_input.txt b/py/2016/04/test_input.txt deleted file mode 100644 index 1d296af..0000000 --- a/py/2016/04/test_input.txt +++ /dev/null @@ -1,4 +0,0 @@ -aaaaa-bbb-z-y-x-123[abxyz] -a-b-c-d-e-f-g-h-987[abcde] -not-a-real-room-404[oarel] -totally-real-room-200[decoy] diff --git a/py/aoc/__init__.py b/py/aoc/__init__.py index 5e57164..45deed6 100644 --- a/py/aoc/__init__.py +++ b/py/aoc/__init__.py @@ -2,7 +2,7 @@ import sys import argparse from pathlib import Path -from .y2016 import d01, d02, d03 +from .y2016 import d01, d02, d03, d04 from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09 from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11 from .y2020 import d10 @@ -13,6 +13,7 @@ DAYS = { "2016_01": y2016.d01.solve, "2016_02": y2016.d02.solve, "2016_03": y2016.d03.solve, + "2016_04": y2016.d04.solve, "2017_01": y2017.d01.solve, "2017_02": y2017.d02.solve, "2017_03": y2017.d03.solve, diff --git a/py/aoc/y2016/d04.py b/py/aoc/y2016/d04.py new file mode 100644 index 0000000..49c853e --- /dev/null +++ b/py/aoc/y2016/d04.py @@ -0,0 +1,83 @@ +import re + +# PART 1 + +ROOM_RE = r"(.*)-(\d+)\[(.{5})\]" + + +def load_rooms(inputstr): + rooms = [] + for line in inputstr.splitlines(): + match = re.fullmatch(ROOM_RE, line) + name, sector, checksum = match.groups() + name = name.split("-") + sector = int(sector) + rooms.append((name, sector, checksum)) + return rooms + + +def checksum(name): + name = "".join(name) + freqs = {} + for char in name: + freqs[char] = freqs.get(char, 0) + 1 + + top = freqs.items() + top = sorted(top, key=lambda x: x[0]) + top = sorted(top, key=lambda x: x[1], reverse=True) + top = list(top)[:5] + top = map(lambda x: x[0], top) + return "".join(top) + + +def sum_correct_sectors(rooms): + total = 0 + for name, sector, chk in rooms: + if checksum(name) == chk: + total += sector + return total + + +# PART 2 + + +def shift(s): + new_s = [] + for c in s: + if ord("a") <= ord(c) <= ord("z"): + new_c = chr( + ord("a") + ((ord(c) - ord("a") + 1) % (ord("z") - ord("a") + 1)) + ) + new_s.append(new_c) + elif ord("A") <= ord(c) <= ord("Z"): + new_c = chr( + ord("A") + ((ord(c) - ord("A") + 1) % (ord("Z") - ord("A") + 1)) + ) + new_s.append(new_c) + else: + new_s.append("?") + return "".join(new_s) + + +def decrypt_name(name, sector): + for _ in range(sector % 26): + name = map(shift, name) + return " ".join(name) + + +def decrypt_names(rooms, filename): + with open(filename, "w") as f: + for name, sector, chk in rooms: + if checksum(name) == chk: + name = decrypt_name(name, sector) + line = f"{name}-{sector}[{chk}]\n" + f.write(line) + + +def solve(inputstr): + rooms = load_rooms(inputstr) + total = sum_correct_sectors(rooms) + print(f"Part 1: {total}") + # filename_2 = inputstr + ".decrypted" + # decrypt_names(rooms, filename_2) + # print(f"Part 2: see {filename_2} (search for 'northpole object storage')")