From 6aa821c6f47bffae269ae49389d95f7a5c078356 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Sun, 6 Dec 2020 08:16:26 +0100 Subject: [PATCH] day 6 + central testing --- aoclib/inputs.py | 21 +- day01.py | 14 +- day02.py | 10 +- day03.py | 10 +- day04.py | 14 +- day05.py | 16 +- day06.py | 44 + inputs/6 | 2093 ++++++++++++++++++++++++++++++++++++++++++++++ inputs/6_test | 15 + main.py | 30 +- 10 files changed, 2204 insertions(+), 63 deletions(-) create mode 100644 day06.py create mode 100644 inputs/6 create mode 100644 inputs/6_test diff --git a/aoclib/inputs.py b/aoclib/inputs.py index ffd59b5..814b4aa 100644 --- a/aoclib/inputs.py +++ b/aoclib/inputs.py @@ -23,24 +23,29 @@ def getInputAsArray(day, return_type=None, test=False): return input_array -def getMultiLineInputAsArray(day, return_type=None, test=False): +def getMultiLineInputAsArray(day, return_type=None, test=False, join_char=None): """ - get input for day x as array, but all lines are concatenated, - except if split by an empty line + get input for day x as 2d array, split by empty lines """ lines = getInputAsArray(day=day, test=test) + lines.append('') return_array = [] - input_line = '' + line_array = [] for line in lines: if not line: - return_array.append(input_line) - input_line = '' + if join_char: + return_array.append(join_char.join(line_array)) + else: + return_array.append(line_array) + line_array = [] continue - input_line = (input_line + " " + line).strip() + if return_type: + line_array.append(return_type(line)) + else: + line_array.append(line) - return_array.append(input_line) return return_array diff --git a/day01.py b/day01.py index 94e0c83..bcf23a2 100755 --- a/day01.py +++ b/day01.py @@ -1,8 +1,9 @@ -#!/usr/bin/env python3 import aoclib import itertools DAY = 1 +TEST_SOLUTION_PART1 = 514579 +TEST_SOLUTION_PART2 = 241861950 def getProductOf2020Sum(input_lines, combinations): @@ -19,18 +20,11 @@ def getProductOf2020Sum(input_lines, combinations): @aoclib.print_execution_time def part1(test_mode=False): - my_input = aoclib.getInputAsArray(day=1, return_type=int, test=test_mode) + my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode) return getProductOf2020Sum(my_input, 2) @aoclib.print_execution_time def part2(test_mode=False): - my_input = aoclib.getInputAsArray(day=1, return_type=int, test=test_mode) + my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode) return getProductOf2020Sum(my_input, 3) - - -if __name__ == '__main__': - assert part1(test_mode=True) == 514579, "Part 1 TEST FAILED" - aoclib.printSolution(DAY, 1, part1()) - assert part2(test_mode=True) == 241861950, "Part 2 TEST FAILED" - aoclib.printSolution(DAY, 2, part2()) diff --git a/day02.py b/day02.py index 20f60ee..6d25ff3 100755 --- a/day02.py +++ b/day02.py @@ -1,8 +1,9 @@ -#!/usr/bin/env python3 import aoclib import re DAY = 2 +TEST_SOLUTION_PART1 = 2 +TEST_SOLUTION_PART2 = 1 splitter = re.compile(r'([0-9]+)-([0-9]+) ([a-z]): (.*)') @@ -30,10 +31,3 @@ def part2(test_mode=False): valid_count = valid_count + 1 return valid_count - - -if __name__ == '__main__': - assert part1(test_mode=True) == 2, "Part 1 TEST FAILED" - aoclib.printSolution(DAY, 1, part1()) - assert part2(test_mode=True) == 1, "Part 2 TEST FAILED" - aoclib.printSolution(DAY, 2, part2()) diff --git a/day03.py b/day03.py index 9dd89e9..f5ee381 100755 --- a/day03.py +++ b/day03.py @@ -1,7 +1,8 @@ -#!/usr/bin/env python3 import aoclib DAY = 3 +TEST_SOLUTION_PART1 = 7 +TEST_SOLUTION_PART2 = 336 def check_for_trees(right_step, down_step, treelines): @@ -34,10 +35,3 @@ def part2(test_mode=False): tree_count4 = check_for_trees(7, 1, my_input) tree_count5 = check_for_trees(1, 2, my_input) return tree_count1 * tree_count2 * tree_count3 * tree_count4 * tree_count5 - - -if __name__ == '__main__': - assert part1(test_mode=True) == 7, "Part 1 TEST FAILED" - aoclib.printSolution(DAY, 1, part1()) - assert part2(test_mode=True) == 336, "Part 2 TEST FAILED" - aoclib.printSolution(DAY, 2, part2()) diff --git a/day04.py b/day04.py index 0d54555..deee8d7 100644 --- a/day04.py +++ b/day04.py @@ -1,8 +1,9 @@ -#!/usr/bin/env python3 import aoclib import re DAY = 4 +TEST_SOLUTION_PART1 = 10 +TEST_SOLUTION_PART2 = 6 required_fields = ['byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid'] # 'cid' possible, but ignored re_color_match = re.compile(r'#[a-z0-9]{6}') @@ -73,7 +74,7 @@ def verifyPassportData(passport_data, verify_data=False): @aoclib.print_execution_time def part1(test_mode=False): valid = 0 - for passport_line in aoclib.getMultiLineInputAsArray(day=4, test=test_mode): + for passport_line in aoclib.getMultiLineInputAsArray(day=4, join_char=" ", test=test_mode): passport_data = getPassportData(passport_line) if verifyPassportData(passport_data): valid = valid + 1 @@ -84,16 +85,9 @@ def part1(test_mode=False): @aoclib.print_execution_time def part2(test_mode=False): valid = 0 - for passport_line in aoclib.getMultiLineInputAsArray(day=4, test=test_mode): + for passport_line in aoclib.getMultiLineInputAsArray(day=4, join_char=" ", test=test_mode): passport_data = getPassportData(passport_line) if verifyPassportData(passport_data, True): valid = valid + 1 return valid - - -if __name__ == '__main__': - assert part1(test_mode=True) == 10, "Part 1 TEST FAILED" - aoclib.printSolution(DAY, 1, part1()) - assert part2(test_mode=True) == 6, "Part 2 TEST FAILED" - aoclib.printSolution(DAY, 2, part2()) diff --git a/day05.py b/day05.py index 857ce75..f6f2fea 100644 --- a/day05.py +++ b/day05.py @@ -1,7 +1,11 @@ -#!/usr/bin/env python3 import aoclib DAY = 5 +TEST_SOLUTION_PART1 = 820 +# sadly there's no real test input for part 2 +# so just check for the expected outcome with the test set +# which has nothing to do with the problem description; it's just min(seat_id) + 1 +TEST_SOLUTION_PART2 = 120 rows_predefined = list(range(0, 128)) columns_predefined = list(range(0, 8)) @@ -65,13 +69,3 @@ def part2(test_mode=False): for seat_id in seat_list: if seat_id > min_id: return seat_id - - -if __name__ == '__main__': - assert part1(test_mode=True) == 820, "Part 1 TEST FAILED" - aoclib.printSolution(DAY, 1, part1()) - # sadly there's no real test input for part 2 - # so just check for the expected outcome with the test set - # which has nothing to do with the problem description; it's just min(seat_id) + 1 - assert part2(test_mode=True) == 120, "Part 2 TEST FAILED" - aoclib.printSolution(DAY, 2, part2()) diff --git a/day06.py b/day06.py new file mode 100644 index 0000000..0917fc1 --- /dev/null +++ b/day06.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 +import aoclib +import numpy + +DAY = 6 +TEST_SOLUTION_PART1 = 11 +TEST_SOLUTION_PART2 = 6 + + +def getAnswerCount(answer_line): + return_dict = {} + answer_line = ''.join(answer_line) + for answer in answer_line: + return_dict[answer] = return_dict.get(answer, 0) + 1 + + return return_dict + + +@aoclib.print_execution_time +def part1(test_mode=False): + my_input = aoclib.getMultiLineInputAsArray(day=DAY, test=test_mode) + yes_count = 0 + for answer_group in my_input: + answer_count = getAnswerCount(answer_group) + yes_count += len(answer_count) + + return yes_count + + +@aoclib.print_execution_time +def part2(test_mode=False): + my_input = aoclib.getMultiLineInputAsArray(day=DAY, test=test_mode) + + yes_count = 0 + + for answer_group in my_input: + answer_buffer = list(answer_group[0]) + for answer_line in answer_group: + answer_line = list(answer_line) + answer_buffer = list(numpy.intersect1d(answer_buffer, answer_line)) + + yes_count = yes_count + len(answer_buffer) + + return yes_count diff --git a/inputs/6 b/inputs/6 new file mode 100644 index 0000000..73ff341 --- /dev/null +++ b/inputs/6 @@ -0,0 +1,2093 @@ +lqhksfnerg +negsc +snage +engs +sneg + +ctfzrdbsapql +srldfatzqcpb +qsntlprfdbza +ldptswouqbxzafr + +ncjolhqfbp +gphonqbflxj +jepdmfhsqtonz +cqpihonjbgf + +abytu +ayu +ayu +uhodlay +uay + +kzx +xjwk +kxfhsdc +xjk +jkx + +rwxckmfn +xpcrkft + +ntaf +lacuserbk + +sxwdfmnpl +xpsmnwlfd +lpxmwsndf +xfdmlwnps +pwlnmdsxf + +gjvcfamuty +uqfmjgzatpvyc +yfcjtavghm +amqfjkpgvyct +svgcenmylotjafbx + +yepqgs +nsfqwghce +segvq + +mi +l + +eirgvuadbphcfsmyqnzotxjlk +qjeintsxubmfchoavpyzglrkd +fdjeyhbxgqclsnaimoptkvruz +iexuntjgmvfhqykspzbdclrao +hkjgpqlyaxdtcnvobmrzifuse + +i +nl +on +zbp + +aqpjnkeowivfbdhgr +pgiojefhvrqdawknc + +ugmsibf +msbigfu +csgfimubj +mfisbgyu +nsmvuigfbe + +demjnxcwbsri +aypesftqhzluko + +ecoxhl +lochex +chelox +xhcoel +cholxe + +xntubrdemhylsoi +gfjihrutbaewzpoxlys + +iuqkewnyv +uyptkn +nyupsk + +e +f + +bxrsntkjdwivceapq +cqbakpimsvetnjxwrd +knvxqwpasurcodietbj +xvrqbdjiwsacykpent +npsavtbqxijkewrczld + +pk +qpwsk +zpk + +qdchnb +qwxbcdhyir +jhbdcq +hnecdbq + +tdryep +th +vxg +bre +e + +f +d +d + +rspjhlqocixnw +xicoqjpnlwsh +lxinqphjoscw +jhlowspincxq + +qptb +btpq +guqhbtpd + +nzloqtcxmfgdbj +tcfdnbmzgqlxo +bqkgnxazecltidsoymf +wtzmxcpflbongdhvq +zfroctngqdbmxl + +kcyhtoendvzwafbmuj +eltymcnhaowbkdzvuf +sfkmvobdnteuychzaw + +wetrpdnqab +qrpkenabgwtdl +nahwtbrpdsef + +hqbtefp +xslnrykmvau +zghcqtojidw + +gqsyhx +vcent + +pazioqhkbd +qnopbmrahdyk +dxbmkhaqotp +vkhaofqcdp +kqpzhaod + +ytljngqdmxfck +tcjmkfnqlgydx +mfctkldxqpjuynvg +ldtfnycxqkmjg +lndxtfkymgjcq + +elrfwpobjxa +mtpfoarbsdj + +qigtfkwhobpvrcyzjuelnd +zcawdbogrhqnlieyufpkt +hqlzcnrikfypswutoxbegd +butncgpyovzrlfwideqhk + +ozdnivyjlwkp +venpbsuzlodyw +xfdqnzhwyopvltcr +aizdgmlywponv + +tqg +qt +rqs + +whm +vadomyl +wmnqh +gwmps +mcnu + +loav +zdl + +vsleinyhgo +kshrxvaymptw +cqsubvf + +ofd +fod + +pdjrszhgkfe +dfshzegk +edhzfkgs + +wti +ftcwib +iwtoz +wiut + +joebqrhgxvst +alkgprwetohvznqdmcb +vbrgeoqhyjtix +thrfequgbxvo + +ejx +ezfmnx +iderjhxc + +hfrqe +rjambh + +ytsdznehwg +dwrohqyvmscgjz + +xdatzefv +kcxwhypoanlr + +tbvdcol +tblcodv + +kg +kyg + +wxtezyuomkfdhspqjcn +xuoqwtphyckfjndzsme +ouzwykhqfcndmspejxt +ncemfpxsquzwyhdtkvoj + +dyfvmobrspnlguqaw +vhalnuwbypod +xjuawvbptnyohld + +bmytkawjszl +jaystwzmkl +msatlkwzjy + +vghcafoer +graecvhzo +uavrcoheg +rhgvcaoe + +nvjga +avgni + +g +a +g +g + +otxj +xtjqo +xtoj +jxntoy +ltqjxoa + +i +ji +i +ai + +w +pw +qutdebyio +w + +camyzohlbrgd +ygcalmzbrdoh +hrbycdzmalgo + +hgsltxvwmc +loxsntghvdc +sgxclthv +ctvxlshg +yxcvsgthlf + +ekizadqujopgx +zuagvjsirokwpx +uoykijgpqaxzc +gqkoixpyabdjuz + +qjygvhmlkdbzsifcwapuonxrte +desvfncpryjamkzhgutwoi +nifhzpertsgmycjwauokdv +swohafgetuyvicpzjrnmkd + +dybpeckxz +zucgeyipqdnl +wspyefczlnhd +prevcytzod +pheyjdwzc + +vbpfnedqyoawhcr +qrhcewvabfopdnmy +afrvebhdocniykqpw +foqeawrbvyhpdcn +ncwaphbvoqdrfey + +dwj +wdzj + +mr +rm + +idnkmufx +demjykixo +kjdmxiov + +ukbflqhomzrwastyjgpex +voqkyihjufmxswgrztbc + +tjn +njv + +ruika +irkua +wairlkszu + +rfgphcezl +zcreg + +mce +mec +qsme +mpeyf + +wjcxoftvnr +zomvfjnyw +nywjofvtm +kvwhfunajolsigq + +y +n +n +y +oe + +nvjkryifxace +ziehtgnjfbyrlvka +xnpvjismakeyfr + +g +g +g +g +g + +vwgnj +ivoj +ugjv + +myzrbf +ymczfr +vmwroxhfj +mlfdr + +ajqerszpbdyvoufwlmgcnitxk +wmzuftgdkavjrlibenpoqxcys +gnpmcsxlwzvfateqdirkyujob + +bnfudi +inay +iuncv + +trqlgxaeouy +uvoqxktwejyr +otqeuxyr +xogreiyqut + +ficdymxhuboq +dvwiuexfc + +zbhndug +ugsdwphnv +nugdwh +dughnjio +jgsyuhnd + +f +qrcvkfu +f + +yvf +yfv +yfv + +qtnc +cbqn +qnc +tcqn + +rxyhizgjklumv +fidxgjlkyhvr +avncxqrjbkgplhiy +zrdkxtlgjvyhi + +zjq +f +u +prgot + +hrgktyczsvnmiolewbf +gbowmtzvynferksichl +svgbrzmcolkieynfhtw +vehwtyrmgsnickfozbl + +lbucxdo +jlcgdxiu + +hvtafpnwzex +vnxzwftehp +hezxvnpfwt +tnehfxvpzw + +wbmyejlv + +gevqi +eigv + +unogtlfwvcyjdr +jcuvlftdgnwroy + +kdlm +pklw +klfay +lk + +somjqeuvdk +rzaqodkmvxsj + +g +g +g +g + +ceihqtrjpbxso +xohipcersbqj +pibhoxsrjeftcq +pbcqvosehrjix +icbqhosrpejx + +jvldsruex +oktrdvslcujx +xdurvpjsl +mxesdiujvrl + +rgcdsax +alqsbd +fdavzs +ijsutahdpye +baqdsz + +jxcabgpuimtekqsy +iduqmetsognaybxp +yqwaburlxps + +ulesvzoijdnpfhkacwmxbrty +zvxrdjskefbthimwnpayoul +ihdnlkxrpgwjbyevozuatmfs +yixowledpbvrthjkzufsmna + +hxibvuzdowysmflpkqjgacnr +bhctimdakyqlsvxwjprounfg + +xolza +axzl +xazld +lzoax + +vjpdirbzwmcyeqtfgoulhsk +shzpugkqlobmridvjyewfc +ybufwljhrcdegsiozqvkmp +ucnbokilmgvqwjzsfphaeryxd + +fzwiyxutvmdpbqkgrj +vmqludbfywzkxpijtg +qwkuzbfxyjmdptigv +pmgifdkjtbuzywvqx + +jvxwlqr +rqfjmsveoaw +ptbyhvjqw +qwkvjxg + +qnaxrduhpfvoyjbksgw +qjnwieaoxrsfpzdhk + +nrcmyksodhaztijuwblv +ksxrufaqhwbcnme + +sqx +sjbql +gsqnpwk +sq + +cpgkrjvqx +vgkpqcxjr +qjxckapvorg +xjvqckprg +gkqrcpvxj + +ojyziuqkbe +fvuceart + +qpgyknd +kfvyjtd + +phfmqdwxnuvgo +ouxdblhnmpgq +amxnpihkdusoqr + +run +dnx +vnc +ponklq +nur + +ixoytfqugrvjzcdwlhkbesmp +qalryztjxumhevifnobpcgdw +bothiuxqjzefcglpwymdvar +lgfjctrixhzudaqmebpvoyw +zlwfoituxvdpqbejhycgrm + +lrwvkj +jqwc + +awvyst +vtysa + +ugxys +x +x +x +x + +ismv +mfi +ihofm + +lijwuxcbrfotekpangzmsvyd +onmsdklutybrcqavegwfxijp +vnyarmslcetoxjkwuqgdipfb +jtrsdmfcnwiveyxlobhukgpa +msatlerkovjnfgdicuywpxb + +xmyen +enymx +myxen +xyemn +xymen + +oaustqdifyxepkrwh +kbcvmrjn + +uqv +qrvw +qv +vqtmu +qv + +lo +l +l +t +l + +aoqujemitxrszgnywvlc +lauzwhvr +akulrbdzwv +lrwdpvhauz + +jhwycgso +trshda +hs +sh + +oydxjrhetainw +nbwdxloetyiar +entcioxrwadyh +tonyexrpdawi + +bkdrqlnjwshi +nkidbwshrqlj +hrqvfldjinsbkw +khdbsnwrjilq +wjnipadhqkrlbs + +iusqovtzgajpndcwl +icstgzpurhbwqnvjoka + +hvwcue +chwnejv +cxwvath + +yroksb +tbs +swb +sb +sb + +vgixnfosrpetb +rwpndfevylg + +alytpjgxn +styjnkmegil +npfyakjgxlt +vzdhtlonwygbjq + +dp +dp +pd +dp +pd + +cav +i +ac +chzu + +kdv +fld +dwq +qds + +x +wanxl + +cfborlazjq +pfcloajrwqbz +btonaqzidlfrgjc +lcfjzqsroba + +o +n +kwl +s +f + +oylasgwtbnu +wstxylzug +ikjvuqwltyhgs +ultbomgwnsyax + +iotqspcwuhr +uplinrgcvhews +tduspchwrim +sihrcbquotwp + +qjdnkl +ldnqa +qdiknl +qdmnlv +sltxwbqnyd + +rnzmybp +zfnwc +nkazdqg +uzesvmjn +vzn + +emp +epm +pem +mep +mpe + +zxhde +demhz +jadu +ckrpvglsw + +pegn +gnep +pgne +engp + +hjkeoyrglpcitbva +ubtzsmvakoly + +u +b + +ksanb +sbk +sbk +skvxdb +bkfs + +z +z +zo +wuqmz +gz + +jwbyaugknetqrmoxh +axwnmobetrjqkdyuhg +omvjbyhngureqxkatw + +lqdiban +ifbazln +bafzinl +ifsbanl + +dovkxjylabqmtizw +pawvoxdmbyizqtj +vwubiayopgxcjzqdtm +qbjtvowdnzsixamy + +ykpusjaqclowb +kjsclynwqapobu + +zasypunbwitorjvmeglqxhkdcf +bvlirhqwgskftxedonymuapcjz + +ezxghwr +rzgxnewh +erwxzhgv + +nkfvplstgaybmhorewzu +lakohrfuznjdsqvgmywp +tuyshcfwkpabzomglrnv +clnsrgvowhufamykzp + +gbrln +pb +b +bsw + +ugcnskomzepjvxifrtwq +vpmkutefjzgwrbsoncxiq +cmkesufoxvqprwidzgntj + +rpsheibkg +bokwgjeh + +sfwgbm +jmfgbws +sgfumwb +bfmgws + +qfxderyt +ikwyln + +nsrjpbtxuvcfgl +putvcjfrdlsonxegb +vgbjtrlsfxcpun +lnbgctvmsjrxiufp + +cnawzexsdlubpm +bufnvdiaxptlcmse +lbyugexmdncspa + +xtvpcfsdzewmgaqb +felcxvdpiqnuymow + +xoqt +tqxp +gtfqjkvbu +tqa +qta + +jplacdti +apfliojtcb +ilcapjtk +atcjilp +tuipnjleyasc + +by +by +yob +by + +m +mp + +kenjrtgyvxiqwmazchfbup +dezplgiwyxrq + +ra +wa +aw + +qldpihtceyfoksa +cfsopeatkilynqrdv +xctlfjsoapiguyqdke +syiupwbjlacefokqdt + +sc +twsq + +ewc +ce +ce +ceiaf + +wnqfklygehirdxazup +vqgepxnsziakrw +eznxgqwpriak +irnqvzwkpaxbeg + +gu +au + +ujvidwoe +jekiubdov +idunjveo +eidvunjo +evinoyduj + +irytzs +jhnr +r +mnrjdb +rnv + +ug +gu +ug +ug +ug + +ifndua +rafyduin +ufhvnadi +dyguamifn + +aihwljuqkezp +wzaiqlp +iplagzwq +qwizmpla + +pvedlxntwjf +veldpnftwj + +xvglbzusemwqihn +vkdbefxrtimp + +spcwi +pjewi +idpyfb +ivp +pwzioj + +e +v +za +z +g + +mjvxyaguoc +qlhypbgw +qegylr +gklyrniw + +tv +l +l + +tmrzoldvsiu +owzpglsidvtmu +hmtjvlodxsubyzi +tuvilzdoksma + +yenvdmsagq +nihfbxaymg + +hcylanqdjmwrpixbo +qmwxybpcdalohn +mxwoazyphndcblq +wzbydamnoqxhcpl +mnlcadybwxpqoh + +miupnhbvj +uwpnbhxjqiv + +rqgta +awkxo +hzjsdb +awfu + +gskncrox +npulc + +iugzcseolh +gshioluezc + +jqbi +pjqi +bqj +njoqv + +eitjbcr +lpskbhyfrgxuzoiawv + +fejdyanx +cyfjekxdon + +gqzniubejkx +zjingbqhuexk +gknzxqcuijeb +uxjnzvergikybq + +wub +w +tarx + +ghpi +hiasg +ahip +yicd + +brysq +hkgfbnmacr +wprtbyqls + +lzfqot +qolfz +lqfzkor +qopmzdeflcx +toqflz + +vhremdpywtabokuilx +oryhfcztaixlvmdwup + +mwvqzngluxpcoeidk +ufcgnxjvmdzqikhlpw +lwvkxmciuepndgqz +glmzpqknieudvxcws + +ibrduwhlcxtsnpyvamekzjf +zmuevtynhpfskralcwjxibd + +rvdpebnwsiugmaqzxj +sidlbyakwrhvgmjoef + +q +q +q + +jofkmbcunaxet +elqngabhskmy +wkmxacenib + +ezfpogadrbulys +sbamgenyopfzu + +utagkdzvwoqemchb +zthluvqinacgb +qcjhvutilznabgy + +gduwcpj +bcxgdswpurj +pujdwmcg + +zxcagirye +uzrljgq +gwtzhfrb +dxrgze + +m +m +m + +mzf +zfm +zfm +mfz +zfmo + +ovdqzm +dmqvoz +zmdqvo + +bisprlndef +abvltrnkxd +rndbyl + +zmglywve +lyvegwz + +gtmrhpujzfqskoxavydie +typwiahqfnkdumvgoxresz +qzevtxauogipcksyrhfdml + +rcova +pjcab +upacjb +alc + +kzp +kpz +yz + +aivymnlux +myuxvlias +lmyauixv +viumlxay +iyavulrdexm + +smgjbqifah +bixgqsfmha +gsfqpnmhbilae + +yb +fy + +hfvcgd +hfkxcugdo +fhemcdgo +hgqfxdcy +begthcfrdqi + +gcwtjyluzvbsnrkopmeai +uzbtyinrqmofsjdkcvwega + +s +s +s + +dsvpg +gdp +ndegr +digp + +jiylzgcomkurtvqpa +yvmjtapingcruo + +auijcbwfqkxyshl +xwhcyqukbislfaj +yiqcljkxfasruhbw +cjlfkxyqwuhiasb +iayklqhucsjwxbf + +z +s +s +si + +brayc +cykwbra +rxbcva +ckdabrh + +rlfvawcqemhub +ctuqfsbaehm + +wbrzpyacqhi +bmpalyhzgrc +vbazpnyshk +hzyijfacbp + +wgjohx +sxhjgwo + +alhkqy +dahfmjlcy + +g +g +g +g + +lpsbynokvrudcgzqmtijhx +snuhqjlokypfrbvcmidxg +yhwbjmxopvirguqscnldk + +mwzsclu +yuwslzm +alsumwz + +maj +mjxal + +asgryznlwqjdfcpkehbm +knehsopgjdrqa +dnapshekjgvqr +ajendtksguqphr + +puznxmqsrtfdckvyijbalg +kcgytbmsxvrunqjzlfaip +yuikxpqtafvbnszgjmcrl +qkvagxcjslbytnifpumzr + +pglvfdihqa +pntwkbzeco +ep + +fpjmzitnlkvbd +qdbknvtjfilrzm +bijznpmlkdtfv +otbjfznlmvdhsik + +x +x +gx +xk + +b +qge +kycnzjw +pixlb + +cpzgaufikyltmbqvesoj +fusibtgoayvjqkpe +ovtfbasiekjugryqp +iubyfkjqvsoepgat +akofugibyqetpdsjv + +yirboahn +ozvha +oah +hoav +aehco + +hspqcxmjrbfyktngi +sptqigfklmadncxrvybh + +wdksztumeroaplhxqbyvjfin +tadflskombxyhqewjrvipzn +afrejdkobnhstqyilpmxvwz +vzynhwtafpdqlkjoirxmebs +kqjpwxrdvtizfmlhenysbao + +wonxesaihurqkymd +sxyqkmwdbnljrgueiao +whenxordaumqksyi +krouemnawsidyqx +rmsukxeyqonwida + +ckywportslfhdaqixvmjn +gkvlapqwfscjzruoy + +dtevjz +feqndzgxlvrtboc +zteuvkd +dszvuheti +tvdewz + +ehaqfwylskdbzvmpgt +vagbfeqwptszykhmld +arpzbsvmweytfugjdchqlk +gpmvqkawhdstzlyebf +btaesiwkvpfdhzymlqg + +hozuack +yuaznf + +ozvmpady +paydovmz + +gtmbeikr +breigtmk +gebkritm +kmibgert + +jm +m +ml + +frexcnogyv +nrvgyzilodxufeh + +btvzjpu +zjvtubap +btzujpv +jdeptzvub +bvzpjqut + +fkdcirhqt +cidhrkvfq +icqdhrfvk +vktrchidfq +ldqascokxrhfig + +tlgjdsoapmciey +gitdwojaeslmynpc +dtycalegpmosji +mydoitvespcjlga +gladijvyoctfsemp + +hwieujqgsxc +sgxebjhnuqwc +kqgcxwuhtvesj +qgecmsjxwhu +cwjqmugeshx + +qjwldfsri +iqgbedvlsfrh +ujnldiksfqmpyrw + +a +a +a + +spotgrheckwqan +shwvnatgpkqcyoerz +hcgasrpewnoktq +tkewponscaqhrg + +bjrsxkeiucnpoz +xrkczspbfeu +kqcuytdsrhvgplbxa + +at +ae + +x +x +v +x + +ds +dr +xemdno + +bvpdiocu +pzvhuyxci + +a +u + +d +d + +rplowaxqj +rqvowa +yrombawnsteq +acujvqowr +wrxloaupq + +s +k +k +k + +zmn +pfgseobimq +mdkza +mzyvd +kwhmr + +uqmtreg +twleuoqm + +hm +mh +whm +hm + +ydegnjfmkr +kvglzrfs + +kovgzemjf +kfyighomzelj +fkzxtueogjm +fxkjozgmue +zofbvejmgk + +zatrhwfjiopulke +satohknewfuipjlzrv +ekioxurwfljpztah +lgqzopirjkhwaufte + +xgbozwltnevidfrjuhcysk +gwsmtbkroyfinadpjhevcxq + +x +dx +mxzr +x + +kaof +kodf +ofk +fko + +rkuoazney +azyrqhtdo +yalobrzcw +xioayfrze + +cusyzmjhqloftdpakegin +lmnjipdyogkfahuqstcze +mneocjwgilpfxzthsayqudk + +m +hwyug +ymna +drptzijlc +wm + +pg +pg + +lrobg +orqfnsv +nqao +ojmwdecz + +jmxlkan +mlauxtj +olcwmeaxqjnk +jxbpmltar +mljxdiszyagfv + +sgriuf +ugmpoxvyq +dgzcuqwnh + +m +e +m +y + +dqkh +qdhk +hkdq + +znfwuiodcryqsmbpvejg +xnqwcjrdebpzmgovysi +pihmyewrcgnjzqvdabsuo +tqdsnjwzovrbcgeiamfyp + +meztpcwrsnojquxkg +mekurwxtncojsqg +ktjwqocsnugxerm + +eplzc +ezpcl +lzypec + +jmlrkseozxdunqf +dknseojuqzmlx +nsxqljdeukbmiz +sqmvnxubokizlejd +ctqsjmlkpwxzdunghe + +klqgxyrdt +toykrdqgl + +fwkzcuvmogxjrbelthi +zfhtgbqnomvwxku +fuozbthvwkqgmx + +s +x +x + +pefqgwzlimyjncouh +qaduwhmysxjopieftrl +ojfphequiwmnykl + +ksfb +sbkf +sfbk +fbqvks + +eomabw +wemarv + +ghldr +iw +yj +po + +lpihfvqersujkzyb +vjlfrebkiq +jblqifrevk + +zgr +zg +zg +zg +gz + +hfvydluaxgipsq +otqcbfurygsvempk +ljnqdswvgpufy + +gdxbjivufyolq +usmbflyxiqdv + +kpfy +yrfpk +fpyk + +oencuyp +uceypoi +cypueo + +orcfsjhvxaqynibuk +cbixuyokaqvrnhsjf +qcoyfjxukrsnhavbi +fkyuhbvojnsxaqrci +vrcshuqxyfniakojb + +mvgbupxhfesodnzwjcq +dcjxzqyuepnvhfbsmgo +kpmzrsfebgaovnhcxu +npxgivuohmwsjefcbz + +xaujvbesdqgnz +augndvqbcjfzs + +eoyhpnrcldjbqfvtiua +laoyrgqzbuhndxwpvf + +pxfnblvuzijhdq +hdkljpbz + +jphqxmkwgsycurietbadzfv +vweygbzashxqcdji +wcbjdniysvhqeaxgz +dqxwhvbozjaiysgce +zwxghisaqbycjevd + +bzqgcuerktfsavwhnoydi +rbvyqdsiokcuganewhtzm + +tom +to +to +to +to + +rkfmtd +vkcunbq +rk +kf + +pkmifxjtwnz +kmsfanxteihjp +nmaftdji +ybqimuvojntf + +ns +r +r +cvhm +wnias + +mfsxucvboyj +cxomsbyvfj +fsbvomjyxc +mjhcvysbofx +xmfjcybovs + +quxomeysk +uqtokyxsm +yqohxbkm +uyoqkaxm + +br +rbi +brj + +paqhkzmcwfrsiubtvjnx +zktiqbucarpwnxmyhj +aikmgtyucrjnpqwhxzb +jkabpxztcrwhuqnmi +mnxzwbaitqrkujhpc + +szbanq +oegiflu +as +qpt +t + +qsu +faqiu +qsui +uroqckjv + +ufkcrahgitoyj +xknlcfujagd +gjcklauf +jkwafgcu + +gdmxn +boiygrca +hgs + +ybwclvjfkumxso +nvmkyowedlijuxcfsb +lzmqscybvxfukro + +fiprvjsgcenhtmalxzqo +phcgntoqmeviajfxlszr +zsxqctnevliohrpagmjf +sqgipcuanmtxlrvjehozf +vlczqjgoipafetmrnhxs + +ypwbf +pfwytb +pyfbw +btfwpy +ybpgwf + +wrzhafdpmx +tzspfhxnd +dkfhzwst +bgelqjdcyfizvhou + +peubvwgaqiclkfdxmsyjtr +kuwpsvlxbjrditgmqeacyf +btxejuiqcrpgslmadvfywk +gwalifqpdusrvmtjybcekx + +qvmhulrt +wcpzdsifex + +pohq +hqop +opqh +oqhp + +en +iws +tpr +qs + +lvfinmpcbzx +hkcsblgz +tcgzbkl +cblzw + +rsjie +ewjribms +ijers + +knizwxycoqe +dnqocbk +pkgsanof + +hravnysejobwi +nlfusgdxtpqmaki + +kuvboax +kjvohxa + +qwm +mwq + +xowbafsitjz +lawm +aylmw +wanur + +qcdsao +dqaos +opaksqd + +p +p +p +p +p + +wl +d +l +n +rwa + +rdi +dri +dir +ird +rdi + +ei +e +e +e +e + +favclpbni +icbfalnpv + +uokmvxgafizceprnydsht +pkeaonhzruqxgvdfmscytil +fpxhsgcrutovzykaenimd +aszthkimoyxdufvcregpn + +fgibsklo +dsokalnriegjzbf +kvwlocuys + +icnortpmfwy +vnqrofpmycit + +yaiempzjbvkgnrfco +tozadmejkbgqfcsiw + +crgtkhbajzdmlp +epnsvfhib +pvbhn + +fglxtqrb +uigxvbft +wxflbyg +xbpzndhfegj + +jiolrqxfapuwdngybhktzcv +bnerupsdkflaqjzvitcmxo + +znjus +qzsjna +znjs +uzjsn +zjxnks + +snwj +w +w +pw +w + +i +p +cd +qs + +f +ofm +f +f + +dv +av +cxkuo + +rbxieoyczljtuqvm +gnphsrckqifzeljw + +h +h +h +h +h + +exghrdkbivqsmcwal +vhicaqdmlbrywxsgek +mrvcbskheadwliqxg +yrmckldaqeghisvwxb +algoshwxzmbrqjdevcik + +omtswbxujpvfzd +yntcbxwl +aqtxyewb +tiybhgrkxw + +srkxfjlgtpedai +digtrkjsxyapq +djxrgapiktse + +fzlagmcnjwbd +chlzbgunwfj + +qszghewkntxaomu +xekowrasunz +xnksoeawzu +wjxaoduensbzfk + +oacfnvhugekystwp +ftncaykejwhbomz + +abrcsi +xctrvokbsg +yaescfbr + +vjwbpsleug +ghlwjekpbusv +jpuelswvfbg +yjwpvbeslgu +uwjegbpsvl + +jkvqesnto +kjot +jkot +jotk +otjk + +elf +nlg +vzl +yl +yl + +rgbf +yrzmhbn +rbv +btrp +fzrb + +uyetaqw +wheyaut +ateuyw +awyeut + +swuaon +usnwao + +udcyfksltzeqb +bkuycfstdqzel + +gjmbfxieklohpc +oglhiuyxjekcmfpr +okelfixjpgmch + +zixq +ziq +qgiz +iezq + +sdbjl +vyjsdb +glkdnjb +hdefnbj +opjbmd + +id +d + +l +l + +dsnze +senzd +dzesn + +cegqnbzyhtm +ovaksmjwrdbpicxul + +fzjxbck +ndjp +heyrsgaqm +tzof +xvdn + +kxtimcjayh +syavicktmxh +mpxcfatihky +kyxitmcah +taxhmyickv + +xlwjibshfgontek +njeixkslbogfhwt +hiwlbojxnktgfes + +udsygjltikqrmv +tulkrgijvm +teumkjvlgir +vgjkulrimt +rghkmlvpejtiu + +oegptdlksbixhcwqavjun +jacqedxslunipgh +enjgslzcmxupaqdih +zcndhlaqsepxugij +nqajehxpilcdgsu + +shdieqwxflurjzby +wmtajifoqcupgnkb + +xwck +ao + +zkpfgvda +kdgya +qwnbiheos +jr +muxfjcl + +wamxpysnl +qpydmrnj +nmypsl + +k +xtvweuplk +aykc +kyf + +uryfiabjvelptkmnsxow +pfcaoerluxdtnwjqbskm + +wqenhkxgypc +dnltwxzaofs + +srxmeabuodzq +oaeqdrubmzk +kdeaurobzqm + +rfungq +gfunqr +rqgufn +nftougqr + +jqthdmlfacp +liqumfdcj +qtjmglcskaf +lrbzwqyxoenmfjc + +dgz +fj +x +g + +qnhwlzjoac +wlzoajhcqn +jwqzcanohl +mwlzqonhjac + +asqtlpwnrm +nparsmd +sarnmpf +nspamxr + +ot +ozt + +cuokwgjmhxzidteslq +ytfqwpieraosbjn + +czoxdyvhasnit +zaxiovcynhts +juoyhvxatbnsiz + +owsjger +oerwgjs +rwsojeg +ojswgre +ewjsocrgv + +cmexibr +yxbir +irbx + +nbgpodvsxmzfqiteuj +mnvtqbpxuszjod +jtsqpovbxndmzu +spxbzqmodvjtun +oumjnpsvztdbqx + +vrwytk +kglvfrw +zxwusdonikph +mwgkj +warykt + +rkdijofslupwqgtvaxhy +jzdsuprykoiwfvlxaq +wfboijqpurvslkxdya +skylwcmauoexpijdvqfr + +pe +ep +e +eb +e + +uzrmjehfktblxsivqpo +rovklpubzdsfiheqxmt +ekzuprvbtisxoflhqm +imuhkftvbrepzslqxo +fmrtxblpzeosuvikhq + +oauifsgwqbtvkzxjycpml +kqmgzxjbwcoyiuvlatfps +pwjmqczoytaxgksvbiful +yqwsazxilvutcmbjopkfg +qtfdpxkmbzwacsgoiluyjv + +ykcjafmxlbehuqtiwvs +zqxudnmysc +ngrpcymsqxu + +qlyp +plqy +pqly +lyqp +yqlp + +dtszxekb +sxrgbztedm +wsdnyxobqtl + +oqmxabwknfy +mxyofkbqwaj + +xfqrjeh +hfqrjex +qbfxrhje +xhjeqfr +oqhrixfjcse + +pjaoerbtkqslx +fxkelnithrspa + +tdrpcbksa +daksbcptr +abskdptrc + +clidq +fqkmil +bioje + +wjetbyvxhoumkp +bfyenwakpvotxm + +adlqkrzvg +vlzaqgdr +zqdvryagl +lzarqgvd +arvlfqgdz + +xfsb +xbfs +xgbzsjf + +pbtrqilmkfwv +mkwflp +pkwflm +wfklsmup +wpkflm + +qkjhnsczmueftdpbrgvixw +kdejtqhfswnbmupcgxvzri +ghxwkqupdtbvscrmnzfeij +fbmrgtkxjqevhywsdzcnupi +enskiwxgdtpbquchvrjfzm + +u +u +u +u + +fitcw +dfvzabyu + +saewhufodzlxbjcrqivygmpk +jqxiopdmyluwkctsfzegbavr + +zsdfpajrnvqk +bkaxzpsrndvqj +danpsvrqjykz +ujspgrndaovkzq +tljnarpzvekwqsdmhi + +wyuemtvkdixl +direvlmytpnowauk +eigvlkwumyctd + +jcrpnzalft +jacrutndpeixz +jczvantrepk +ergcajnptzv + +iagonws +awings +wgiasn +anwsig +sngaiw + +qogitsbfzmxk +kefoxbiqtzs +tisfzvxobqk +castjxbqpifozk +okbfsnidqtzxe + +gocwh +otmhge +ogsh +ogh +sgho + +e +y +ixmds + +rtkcgwfx +tjxzckfhgbiw +aenyvmcfg + +ngspdqwv +hziq +qx +yqtf +qjz + +exgirhuwyjt +rxtuepwhgjisy +xtwyghrjeui +getuyijwcxrh +ughtwyxiejr + +vdh +devh + +y +y + +m +m +mpv + +ptvlsonebiqjwraxckumhzgf +lqtvbihsowmgeunckzjfapxr +xglbifczovtwrpqnmajeuksh +eoivpuqfcbhtnagjwkrzsxml +nubpeofjwmqvxgircahksztl + +uyltcxrzjegmfwbkio +tgpxmuvsobicfej +esvgjxcfmuotib +xifognqmbtdujeca +bxhfmiejcgout + +djaz +dajn +edja +tawdh + +hyp +yhvp +ydph + +z +z +z +z + +jeixykzcrfd +zexmdjk +xkzdje + +auih +uial +uia + +ucwkeiadhgsr +ihswgkrudea +gwezhskryadnuoi + +lvhmuranicfqpbt +bqhrlotfnzgacmu +fhdcslqwymbrutan + +u +bj +pkb +pj +i + +yg +mlyxo + +q +p +u + +yibeaxjpkcwsfm +ixpekjcaswmyrfbl +ecmbikjptafwyzsxq +sxfacbmiekjwyp + +vyzhmwginr +scjl + +s +c +h +s + +qxhngcyijptvazme +gdiwlszqfbtvcpxnejhy +eghzaniykvpqotmjuxc + +yasrbcwju +rzbacjug +abuzkxjcr + +yjdgutwfreslm +jlutewfdgsmry +tglyjcefrswmud + +cf +m +mn + +zbwlnqrc +zwrpc diff --git a/inputs/6_test b/inputs/6_test new file mode 100644 index 0000000..0f5b3bc --- /dev/null +++ b/inputs/6_test @@ -0,0 +1,15 @@ +abc + +a +b +c + +ab +ac + +a +a +a +a + +b diff --git a/main.py b/main.py index cb4e4fd..87801c0 100755 --- a/main.py +++ b/main.py @@ -27,13 +27,27 @@ for _, _, files in os.walk(aoclib.BASE_PATH): for lib in sorted(imported): day = int(lib[-2:]) - if flags.part: - aoclib.printSolution( - day=day, - part=flags.part, - solution=getattr(globals()[lib], "part%d" % flags.part)(test_mode=flags.test), - test=flags.test - ) - else: + if not flags.test: + if not flags.part or flags.part == 1: + test_part_1 = getattr(globals()[lib], "part1")(test_mode=True) + test_solution_1 = getattr(globals()[lib], "TEST_SOLUTION_PART1") + if test_part_1 != test_solution_1: + print( + "TEST FAILED for Day %s Part 1: Expected %s; Got %s" + % (day, test_solution_1, test_part_1) + ) + + if not flags.part or flags.part == 2: + test_part_2 = getattr(globals()[lib], "part2")(test_mode=True) + test_solution_2 = getattr(globals()[lib], "TEST_SOLUTION_PART2") + if test_part_2 != test_solution_2: + print( + "TEST FAILED for Day %s Part 2: Expected %s; Got %s" + % (day, test_solution_2, test_part_2) + ) + + if not flags.part or flags.part == 1: aoclib.printSolution(day, 1, globals()[lib].part1(test_mode=flags.test), test=flags.test) + + if not flags.part or flags.part == 2: aoclib.printSolution(day, 2, globals()[lib].part2(test_mode=flags.test), test=flags.test)