From b2faced8a9835d9af6d2d032fa1df079ae084b39 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Thu, 21 Jan 2021 07:54:09 +0100 Subject: [PATCH] day06 --- day06/day.go | 57 +++++ inputs/6 | 572 ++++++++++++++++++++++++++++++++++++++++++++++++++ inputs/6_test | 16 ++ main.go | 3 +- 4 files changed, 647 insertions(+), 1 deletion(-) create mode 100644 day06/day.go create mode 100644 inputs/6 create mode 100644 inputs/6_test diff --git a/day06/day.go b/day06/day.go new file mode 100644 index 0000000..1e031b0 --- /dev/null +++ b/day06/day.go @@ -0,0 +1,57 @@ +package day06 + +import ( + "math" + "tools" +) + +func getCharCounterSet(input []string) []tools.CounterSet { + charcounts := make([]tools.CounterSet, len(input[0])) + for i := range charcounts { + charcounts[i] = tools.NewCounterSet() + } + + for _, line := range input { + for i, c := range line { + charcounts[i].Add(byte(c), 1) + } + } + + return charcounts +} + +func Part1(puzzle tools.AoCPuzzle) interface{} { + transmission := puzzle.GetInputArray() + answer := make([]byte, len(transmission[0])) + charcounts := getCharCounterSet(transmission) + + for i, s := range charcounts { + maxCount := 0 + for _, c := range s.Keys() { + if s.Get(c) > maxCount { + maxCount = s.Get(c) + answer[i] = c.(byte) + } + } + } + + return string(answer) +} + +func Part2(puzzle tools.AoCPuzzle) interface{} { + transmission := puzzle.GetInputArray() + answer := make([]byte, len(transmission[0])) + charcounts := getCharCounterSet(transmission) + + for i, s := range charcounts { + minCount := math.MaxInt16 + for _, c := range s.Keys() { + if s.Get(c) < minCount { + minCount = s.Get(c) + answer[i] = c.(byte) + } + } + } + + return string(answer) +} diff --git a/inputs/6 b/inputs/6 new file mode 100644 index 0000000..fe6bcdf --- /dev/null +++ b/inputs/6 @@ -0,0 +1,572 @@ +lhyrnfkp +bdxpggwq +owtzswtq +obxtfotk +hvdshmol +kpjqpftg +odyagvec +vqlbxrft +htwenegq +pcfoxgwm +bmnqzuiu +xidteswq +wiizqpqh +vnlueoku +hgzntafs +kfeswcad +lqskhvrj +uguljfpd +dfbmduuu +gajujozo +dckmgouu +hebcfxov +uwamfjjb +fjpuapzj +ygxbvkfm +erbfbfld +rsspowgs +zfxrshqw +gafegcak +lfcluytl +aqmvtdoc +dnjwbcit +jztgwbnc +tcwuxhjh +fpfhkcqo +kachowxl +zlwqlobd +qfbucjco +hsmibqak +ogilflqz +ivgyuvsc +flzagyss +oiiboban +awhilrmt +ayubmyyr +utxexzay +dhmokgfu +rkkbvaev +fvxlzlze +wwdlexhb +yedagwrr +hhlqfqsh +ltudvrke +exhlcdsz +yivivatl +iwtfslic +jwvfrjrv +cxxmyjwc +scmmaybm +btiofois +bhwtwamw +rfukzzou +qeyteivm +ukahvjgq +bgupxqrk +auftcjcm +yjqhlsnq +fnwgotrw +sxlumijz +hcfzkmwn +kcadgqti +qfcjrzdj +eqydvbir +fdobphcp +xekmnluy +clithgmp +ljstbcqd +vxjldlan +mgsggpdd +pjnosake +qqzturnb +leheznzo +ybfofjsq +zoenlucn +gymggaxt +zckaufca +pmedrmhx +msewtqrf +eiplbtmg +oewlpxmw +uunrjsdm +mawiiqul +ixglpexk +fcynrfxy +bzexbifa +mowgbeem +gwfyujhp +jwpuyebl +avtcspem +urrvrlvr +qgvgsknr +opjkhrao +hoxrpptx +qhounvgg +csvdrqqs +csnbvhvz +gpcilcdi +noqqbkxy +smgtokde +rpgdqnyr +qbrogtby +sibulura +ycwjyxep +luoyiblx +otqmbbxz +lupxuwfd +qbinsygw +ywvjhhes +xbmxqhyr +nbkxytyk +orqhztoz +crxujqbz +xodnlvhi +tykaiqin +xozmhtae +xuxnomin +eacuruti +zkkcbhbn +tctjwsog +htgyerci +sgmgiowl +vkawsetx +voynmlmc +fnevibkh +shvbilhc +xracdkcd +fcrdzbbl +sulzfapg +icdtfcqd +bqjkzydz +tablhoxv +xspyzhwx +zwlvjfnh +qnfrpjyb +zvtpcwsy +ucdbrczy +uncwjsxx +ybmlntib +zfhsohus +hahcyiwz +nkfwapvp +dlztazjm +vsbmddos +dxtycpao +cycasgeg +olhbpcvc +ngwsrotj +zcxqpkmi +wshterwt +pbigbqrt +sejncntd +lzfgcsns +husizvtu +rprjazgp +beuzgqlw +tljkixdi +zbyenvlj +ffgyvrbk +lwjuypvf +exnykvdw +mnnvdqay +uefjovqd +zkywlypt +xuwhirkd +hrdnxbrf +eozjuiwn +uxrjjtid +firfnhfa +zzojxpnq +nvurxucq +vdcujaxw +arssafhy +vvsfhzee +ciapvfdc +qdhlukys +ksovlkej +pxrwiwzx +zzfiwfvr +ayoereac +ulpvcnro +rnoikeya +ovhwczvr +ftqdelxp +tlbnplxk +lkgdahfx +mggihwml +ksjwayke +ttuuzpek +eluymfyk +vdxlaxeu +wuvfemmu +yenquvzq +paezsssc +oqippwok +itczzoph +bsccydfh +tushtlcv +rfdmmnmd +hshmdvsj +vvbrlkrw +ugiswkuu +kjussibm +xzsgsnib +upayqkgu +wlzpjyiz +laypqoee +uapvdsne +tthkhvdr +iwqovpna +kfdcmiye +njvzsbvm +srhatweg +jsnkvxpl +zswwzeif +agbamkem +djbqhvbv +vlkjggfu +hswvkmrj +jbysaclf +dzwvvziv +rfczoqnx +nefkqmww +uxjobclu +zwjoigln +hbozuyos +bdozmqbn +vhqqedwc +ljgokudj +zodxojtk +nsulycdw +cxzptacm +cfysgnvq +dyesppsp +tkzkmlvh +oqsdxnkf +ejgaimum +rjmtdinr +vpzintix +gqhymakz +nwvmscpi +hqunkejv +eyhyrcpi +iaflkwqe +tdxrtdhg +hfknwepa +gdxemuby +mkrajouk +ajtitfdq +dwcwpggi +ngimhicq +udxxyuab +zwtszrur +plexfxyv +wazqfmww +vpognhbz +vtifgeio +jldhmfav +uspahejn +likckhyf +jbisjfup +oftrdcwr +jyqefbhm +kvdohlkp +zrumcnji +nmpaanya +sggpmlpb +cegbqkqg +arnnqzsh +saahxqsp +izdwddgg +hfohuypm +yjvknxyf +bvlwdrmj +trqabrzq +pociqnxb +bmjnhhlx +msinoxjy +fooxyuex +pbykwjvs +cjwhfsgq +djzxxxjh +bmjsuoxs +vtzwpjkf +ogwnrdzx +zcnjymzg +pzsfqqex +yqyfsdyw +eekchxvn +ctwktbkp +whqbkrij +tqrtysfa +ymndxpzg +nbiyqgzv +ekstohsw +rljlxgpb +lmrqphro +ouxjemvj +brrhaful +enzzllkv +unmhtfbz +kjraowee +jvvuoahh +tfjcyxok +szgefjvx +rjsmlsly +aznbtehx +idgfmhps +wxhcjufd +rpkutkqw +yyettepo +lflhbnqs +sdobnamv +lpxuusdt +nnlyjlxd +puiriksn +jmaieiag +sklextax +nmznoyfh +ryaeiofl +snluyzji +ppnyiohv +qadwkbhu +ymuksnww +yzrplymh +bdlboxvb +kiefctje +lwvgitsa +urudiexs +tkcxoseq +mqqzubnu +pvrfzuyi +yofpwinb +dvehcoei +xmpjtcgq +eyhneuyt +peronjzx +cveyxrsp +jeybgxfh +aqabkslx +mslqlvuw +tcprsuco +bhuuwrhc +dqxqdqrt +qupeywul +mvhlcjmv +ghtpieve +xiifboln +mcxhnbib +oixetmpu +xmpgndni +bjqdnvrt +lutqzgkt +glegjyov +qtqeqsvf +adbjbzxh +tevysrxy +wjwvsawn +iutrrjqw +nmnpjusp +iybibkla +qvnewyit +nmailspe +wtlydtcs +ghormkll +mfvxauyb +eaqgafon +raygyorv +krmjzdqa +waofjzzp +ufcveijp +gzqrvyhl +rirdkmvf +miubcwxg +yuvsrfgp +izeizudk +incwrrjq +ereewgbm +bmvormqn +parghyrt +vhttgvgd +dhasugne +mgbzfmpu +mybpdtrg +szjzhabk +rpkzqopr +jpqmwony +reneqkqz +xnocadlb +mmcauasf +ngdfnobk +adleanyx +dcncwdwh +gnpybbkq +aulbasht +njjpuptw +poxmnfuy +qnzqruza +vtkgllko +avewkizl +iocvvprq +qcqsdczw +ehnoydws +wmlnznpe +arjqeqqe +gnexqzsj +tijgmcig +pbfsvwux +gugnfhbo +qmyqyvkm +fgtckaac +zoeazigt +qxpizwxb +poovcaos +aawpkglf +fhsdishc +hxyujvgl +hbmpgqdy +xuvopjga +mrfqakoj +gbhoepag +fxgqxppa +rlnyrcnq +idgaetyt +yiknwvkb +dsveccnf +grldsgay +ydlhxzbg +zxcrqglb +szmfqqog +siukuawi +qjpfebjv +gyixkejo +pqmsfrpp +zbmxowwd +okohvtgz +prltqpac +rdlzijcf +kbcxibir +yqgolykj +avkdphjz +cuccogmn +ihokkctr +neqbogzz +cpsqlwff +nxufhdhw +fepxflir +rafrmamv +xoqiyxoz +jtskidty +djervlek +jahstrlh +ityywfmz +ukkwnapa +mxwktajk +vnfnneqe +webgudjj +cxtwfeul +tnzwvzvv +oxgxwsau +ihivmxwd +xoatylxh +wdcaatlt +cqopcsvz +zwdmmndm +gogrwieu +mqsdxygv +sqpcymua +jmazibct +yknevica +ehzldixx +dyjoghsf +ikakjhau +cuwcflmn +dqxjbpws +hbtgfrfd +bksloymh +wdhpbuyy +wlyulitl +glgpckqa +wbyolght +ccajptsy +cpaitxsf +aczruvmp +yktaqanj +sftudeog +fnpajmtc +avbddclh +ktmfntzj +qykluqnl +whvdmwsi +nsitvglv +pypxhjfc +fnmwqzrq +etnoezmk +uvsspzfl +igdiwpjw +doajkjck +jwiwvwot +wkbkruzo +thfeynyj +kenadzbr +jthejixe +gwlzgutb +lwmjqqah +xtkxdnoj +kohmprey +obqzhykf +bzvkkedg +mrmdmdou +kiacwglo +xnmfwghi +crmeazdo +hirvjnhc +bcghamtz +dgfxbelb +jrtrcvio +dyfvttud +kkvxqzjm +rcydrpri +llamtmut +rwdhzdur +iikojxou +xvillkbg +jorzdbqp +tjryewvm +jlkvxdmm +mdsaatua +shrxrfdp +fpbvqxch +emujcgto +gzbrndna +viqcxvhf +gpvbnigj +wpztmzdi +jpatgigc +ozrmpbyl +apbfznky +wkzvbnof +nhbcplqc +edehgyfa +xgdotibf +tytmwmjd +jxkqfkce +ferkxtgn +cyppemii +vzszchcr +fiyqcfzj +kqsjswts +xxmfvbnb +kpditjko +qsdseuur +wfergpjs +vmwkuxhi +qkogsmfn +batcpncv +llpvhscr +izuikdze +szujrspz +kgocdjgb +euqheofn +kyzbxxqo +oyislbdo \ No newline at end of file diff --git a/inputs/6_test b/inputs/6_test new file mode 100644 index 0000000..573a180 --- /dev/null +++ b/inputs/6_test @@ -0,0 +1,16 @@ +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar \ No newline at end of file diff --git a/main.go b/main.go index b3b06bc..06fb1c2 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "aoc2016/day03" "aoc2016/day04" "aoc2016/day05" + "aoc2016/day06" "flag" "fmt" "os" @@ -28,7 +29,7 @@ func initDayFunctions() { 3: {1: day03.Part1, 2: day03.Part2}, 4: {1: day04.Part1, 2: day04.Part2}, 5: {1: day05.Part1, 2: day05.Part2}, - // 6: {1: day06.Part1, 2: day06.Part2}, + 6: {1: day06.Part1, 2: day06.Part2}, // 7: {1: day07.Part1, 2: day07.Part2}, // 8: {1: day08.Part1, 2: day08.Part2}, // 9: {1: day09.Part1, 2: day09.Part2},