From 4da4fa3cbfbf8603651ad0155616b048c2e7bc7e Mon Sep 17 00:00:00 2001 From: Gard Spreemann Date: Tue, 14 Dec 2021 18:28:04 +0100 Subject: Day 8 --- 08/Cargo.toml | 15 ++++ 08/input.txt | 200 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 08/src/bitfield.rs | 109 +++++++++++++++++++++++++++++ 08/src/part-1.rs | 23 ++++++ 08/src/part-2.rs | 112 ++++++++++++++++++++++++++++++ 08/test-2.txt | 2 + 08/test.txt | 10 +++ 7 files changed, 471 insertions(+) create mode 100644 08/Cargo.toml create mode 100644 08/input.txt create mode 100644 08/src/bitfield.rs create mode 100644 08/src/part-1.rs create mode 100644 08/src/part-2.rs create mode 100644 08/test-2.txt create mode 100644 08/test.txt diff --git a/08/Cargo.toml b/08/Cargo.toml new file mode 100644 index 0000000..644d264 --- /dev/null +++ b/08/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "day-08" +version = "0.1.0" +authors = ["Gard Spreemann "] +edition = "2021" + +[[bin]] +name = "part-1" +path = "src/part-1.rs" + +[[bin]] +name = "part-2" +path = "src/part-2.rs" + +[dependencies] diff --git a/08/input.txt b/08/input.txt new file mode 100644 index 0000000..dd0e4d9 --- /dev/null +++ b/08/input.txt @@ -0,0 +1,200 @@ +ecfdbg decfba aegd fdcag fagecd gd gcafb efdac cbgeafd dfg | bgacf afdebc fceda cabfg +cfdabeg cda bcgad bedfac aefbgd bfgcad dfbga egabc dgfc cd | gdbefac fgabcd dcbefag aedgfb +aedbfgc gcaf ebgfca bca edgcfb adbge gebac fbegc ac afdcbe | ceafbg acb egbad gfaebc +gaeb cafdbg aedfc ecfgdb ab cdaefgb cgbdae bdecg cba eacdb | gfacdeb gabdec begcd adbce +fcbgea fbedg bc cbefg befgcda cfgdab gbc efdgca fecag aceb | faecg cb cb fecbga +fdebcg bag gdefa ceadgb fcab ebagfc ab fbegc fcaedbg fbeag | cfegb bga edfga fgbec +fg fcagb dfgceba edgacb fagd gfb dcgba agcfdb gecfbd ceafb | facgb fbdcge gf gfabc +eabfd dfb gbcfad ebdag fagbce gefabdc edcf aecfb cbdafe df | egbcdfa afdebcg aecfbd acefb +fbaec bfegad bga deacbg gb fbdg acgdef deagf fgabe gabecdf | fgdb gefba gcdafe bg +bfdea agfbc gbd faecdbg gd efgd cdgeab efadbg faebcd fabdg | cdbgea fged cfabed bgd +gfedac cgaef gab ceba ba afcdgb gdefbac fegbd bafeg abcgfe | gcbadf egafb ebafg ab +bgda agfcdbe agfde faegb baedgf fcdaeg fdbeac ba bcegf bfa | bcefg eagdf ab bacefd +dfgbac fdcaeb cbgeda bfdea dcabf ebadcfg gfbea dbe fecd ed | ebd cdfe bgeaf cdbfea +efdba edb eagbcd bacef bd bcfd becfagd begcaf cbaefd aefdg | fdage edbgac cgaebd bed +gfecbd gbadf fabged gbf cbdage fagcd feab edgcbaf fb aedbg | agdcf bgfda afdgc afdgb +gfaedc caefb badcfge dgfe acdgbf eag eg fgacd gecfa ecbdag | acdbgf cbegad cgdaf eag +gfebda fgacd dfbag bg geab gcbdeaf eacbdf cedbgf fbg abfed | aedfb gb eafdb dbafe +ebadfc efdbga bega fdgcae dbgaefc edfab fag ag dagbf cfgbd | efacgd dbefag fadebg bgfad +bf fbd cgbdaf dcfbae fgbcd gcbadef gafcde bfag cebgd dcafg | afbedc gcdeb fbgadc dbf +gfecab fageb cgb acgeb gdfeab ecbafdg gfca aecbd gc edcgbf | afcg cedba aecdb cgeba +cdge abfdge cgfeadb bdc gbacd cd cdaebf bgeda cgdaeb acfgb | baecdg fcbag dfeagb gcde +efabdgc ecafg dacgbf ecgfd dfe gbfdec ed bedc cfdgb gedafb | egcaf cfgae efcgd de +bfagdc dbagef gbedcf afdeb ab edgfb gdebfac fdeca baf eagb | bfa bgadfc adcef ab +cfdbae dgefc fcaeg geafdc dfag fd cegbd daefbgc cfd cefbag | efgcd cgdfe cefdg cdf +cbged feabc fdgb egf ecfdbg dfgcea gabfdce ebcdag bgefc fg | fbgec bgdf efgcbda cbedg +ebcdfa ef cfe cadbfge becfd dgbeac dafe gbdfc cefgba ceabd | bfcaeg gfedcab acbfge fe +fbdage bf acdgb cabf gcfed gdcfbea fgbdc fbd fcbadg bgedca | bcadeg bf facbdeg gdabef +gfacdbe fga gbdaf gadbc dfeagc fg bcgf eacgbd acdgfb debfa | gdcab agcbd dafbecg gfa +gadbcf badfe bae cfaed abfdg adfecbg eb bedgaf ecfagb egdb | bdaef egfdcab eb be +dbgecaf gacd dfbac dbaefg dba bfgced cafbdg cbfgd faecb ad | degbcf baegdf gaedbf dfegbc +afgcd dabgf gedfba agc bdfgac gdefc bcaf cfeadgb ac ecdbga | gfadbec fgcda edgbac fbagd +acbegfd cgeb dagbef gbaed caebdg gc dafgec adcbg cdbfa gdc | bdaeg bdfac bdfac bcgad +gfab agfbde fa edbgf cbedfa decga cdagefb degbfc egfda afd | daf fa afd efacbd +caegdbf daefg fbgac be fgaeb cbea bge cdfagb dgecfb abecfg | gebaf aceb gfdecb befga +efcgda bd efgdcab afbec bgcd fdagc dgabef dab dafbc cfdagb | dba dcgb ecbdfga abfcd +abdge fd fda fecd bfcage fecdba fdgbcea afbde acdbfg cfbea | fedc fced adebf fbacde +acfdbe egcadb gfbacd acfbd bagefcd bgfa cefgd gac cdagf ag | ag bcadeg dgcafb cefdg +eabdfc fcaeg fecad bcfda dcfbge ebda de ced fdacbg dfbcega | gcebfda gdecfba dbgfec defca +bfc gdfceb cf eafgbd edcab ebcfa gfeacb acgf adcbgef fabge | bafgecd fgabe aegbcf badec +gfbc gaced fg bfcda fgd fcgad dgefbac bcafde dgcfab edgfba | bcgf bdceaf dbfaec bdacf +acbdgf dfcgb dcfeg egbd aedfc fcebag ge gef cfegdba fgbdce | gcbfea fceda dcfgb dfgbc +agcfd fga fecda gadebf dbgcfe fcbdga dcfgb ga gbac cbfgead | fdeca gbcdf cfdgb afg +eba ebdc gbefda dcbegaf fbaced afgec be dcfba ebacf dfcagb | eb eab bea be +bfcge bfead edgfacb edcfag abegfd becdf dacb cd cde bfdcea | adefgc cdab fbead dcba +bacegd gafcbe begfa bcfad ed gedf ebgfda bdefa ead fegdbac | geafb fedba dbcage egdf +df fbgdc fcd bfgce abfd cdfgba cgefad cgbad ecadgb egbfacd | bcdgaf cedfga dbgafc dgfbc +dfabge bcfdg egfbca bdaefcg decbfg ebfgd fgdca cb cbde cbg | beadcgf dgacf adfgc bc +fgda dafecgb egdbf gef dbgec agebcf gf edgafb fcaedb bafde | fg fecdab bdefg bgfde +abfgecd eabgf fcdabe gbdafe acebg dfecgb gf gfb fgad dafeb | efdacb efadcgb dagf dfabe +ceafbg dfcabe gcfea gbac fgead gc cbdgef egc aecfgbd cefba | badecf badefgc bfaec cbeaf +cadfb caefbd cbfega fdbga cad dc edbc aefbc egbacfd dfgeca | cefdab cdfage bacdf dbafc +gfcb cf ecafdg fcbed dfbagce fbgeda gdfbec cef eacbd ebdfg | gbdaef caedfg cf gbdefc +gd cgd ebdafgc cfbega gcbfde bcfdg badfc bgaced bcefg gedf | gfed fcbgd cdgfbe cfbeg +bfga dabge befacd agbdce fb aegfbd fcged dbegf ebf ebgdcaf | bagf ecfdg fbe bedagc +beac ea ade gefcd ecgbad cbagd badgcfe ebfgad acgde gcfdab | ea gceadb gcbad cbdga +cadfbg bcgafed cbedf afeg abegdc adf gedca efacd acdgfe fa | daecg fdecga edafc adbgce +egd ed egacd cgabfed efcd degfca dagbfc dcagf bgfdea abecg | dge egcad ged cgdfa +cgdeaf fcbdeg fgc dgcea cadgbe abdcfeg gf cafbe gadf cfega | aecgfd bfaec gf dceabg +caegd cbfgae dafg egd gd ecafg gfabdec cafdge bacde bdfecg | gedfcb edcagfb cdega becgfd +badgfe ed dcge fgdceb cebfd cbfedga dabcf efd ecgafb cgbef | dgec dfe ecbgfa cebgaf +dgabcef bcd cfeadb degfca bgace gcebd cegfd gbdf bd begfdc | acbeg dbc gdfb gfdb +edafgb bagf acedb dbg fcgdabe bcdgfe gb bgead dfaecg faged | gafb dgafeb gbaf fadegb +bc abcegf bfcgd gdcbef dcbe gcb cafegbd aegdbf dfagc dbegf | cbg cbg cfedgba dgcfabe +be ecgbf cbafg ebg bagedc fbae degfabc fgcdab dgfce cabfeg | gfcde dgfbca dcabgf bacegd +af dbacge efa abegfdc gfdce begcfa aecfg afbced fgba ecabg | ecadfb gfeca efa gefdc +acbedg edfacbg begd cdfabe dagcb eacdb gfeabc bg gba dfgac | cegbaf ecfdba cgbda dfebca +dcbgaef bca abed cbgad gdaec fecbag edgbca geadfc ab cdgfb | beagcd dgbca eabd ceabgd +cgabe gfcbe cfegba fdbgc fe fdgebca aedcbg gfea bfdcea fbe | feb gaef badgec ecgabf +afecdg dfbc cd dcg aegcb baedgf becgd becfdg eacgbdf ebdgf | gbedf edgbf bcdeg gfadbe +gfdba adbefc ebcdfag bcgaf bfdaeg dg adbfe egbacd bgd dfge | gbd bgd bcgfa fbgad +dfaegb fe bcgde face afgbdc acgebdf agfcb cgbef fcgbea gfe | acef afedgb bgdfcea fgedab +abdcef gdfea cbaef gaefb cagebf agfdbec agdbfc ecgb fbg bg | aebfc egcb acfgbe gebc +bcf gbadec bf bgaf fcdea cgbda gebdfc dgefcab fcabd bdagcf | edacf bf cfb gadcb +cdafgb bgdf gacefd cdb bd ecfadbg cdafg cdebag bfadc ecafb | bcefa cfdba agdfc fabdc +egb dgbf bgdeca febag fbadge ebadf aecfg gb geacfdb fbacde | fdbg bg caegf egfab +ac eagfbdc bgacf cbdgae gabdf acdf gdfaeb acg dbgafc gbfce | gdbeaf agbcf dcbagf fgadeb +ef eagf bfegcd gbaefd fbe eafbd dagfb abced agcfbd abcefdg | ef ef ecdgfab deafb +fdgbc efbgd aedbg dfce bcagdf fe fegcab cdgabef efg cgdfbe | efgcdb efg agcfeb dgfabc +fe dbefgac baegc eagfc ebgf acdgf aedbfc bgafce cef bcgdea | agbdce aecbfg cdgaf ef +fbgcd bdf dfbega dfcga abfdcg db dabc cfebg feadgc ecgbdaf | fcbeg gcdfb cgbdf acfdg +bac cdbeagf abfd bcfea edcfba abdcge edacf gcbfe gcdefa ba | cegfb cafde ba fegdcba +gcabfd acdg cg gfdbcae ecbgfa cbg bfegd gdcfb cedafb fadcb | cgfbd cfgdb fdegb cg +fcdaegb gdefcb dgfacb dcgea eb dgcbf afcegb bgced bdef bec | ecdag eb befd dabcfge +defcb eabcf bca abfeg ac cafbge gfac dbaecg fcbegad bagedf | bfgae cfga ecabf aegbcf +gdcfea adgcf cbged bgadfc gbf gfdbc cfegdba bcfa bf dgaefb | fgadc bfg fb bf +bdgcaef adg egbca cdabg eadbcg eadc cgdfb efagbd ad ebfagc | da dace dga gedfab +cade afgecd fgedc cbaegf efbgd gdfcabe ce fec cadgfb dcgaf | ce adefgc cdea fce +efgcba ged gcdbea acgeb decag cdgaf egbcafd bdae fgcbed de | adeb edg cgadf agdec +agfce af febgc ebgadc cadeg dafg faegcd bceadf bfaecgd efa | egbcf fbgec acedg af +cbgdae debcfa becadfg agecb gcde cfgba ce begda bec fdaebg | bec eadgb eadbg badefgc +bagedf ecf ec dbefc cbedfa edca dfbcg edbfa eabgfc aefgcdb | fec dafebc cfe aefdb +aef bface dabefg ebfdgac caeg bgfac fcegba fcbed ae cfgbad | efcba baefc afbcg gbcfa +dfeca fdagcb feagc adcbef fg gefd cabge fgdbace cegadf cgf | fg decfab cfdbga baecg +gbaefd agedbcf cagbe fb cgbeaf baefc bfgc bgeacd efb dcfae | gcbaed fb bgfcae bcfg +cegf bcedg bgacdef gbedf fg ebadf ebgdcf dgcfba debgac bfg | bdfgca bgf fgdbce becfadg +decafgb acgbd fegdab cefag dfcga gdf fd aecfgb dfecga cefd | gcebfa fgacbe fgbdae fcde +faebc acb bdfgca afgedcb ab daeb fcbge afcebd feacd cafedg | fbgdca ab afedgc ceafbd +gfeb ebgcdfa dfgca abfdg agebd bf abf bceafd dabgce dbfgae | fgeb gadbf gcafd bf +ecbdfg gecdfa efcadgb ebdac deabf fbga bf dbf efagbd dfgae | adfbe cfdage efdcga gfab +fg cedbgaf feacbd dafgeb fag gfecba acgde febac cfega fcgb | decbgfa fg ecgad afdbgce +cfbgde aegcdf daefbc dgceb fcged gafdecb cbfg bc ceb gebad | dafecbg eagdb bec begdc +cdefga fbgcade fgdca cd bafdec adc dbgeaf cafgb efgda cegd | afcgb ecdg bcfag caedfg +agfbc af deagfbc fecbg gfa fcegbd cfae bgafec edagbf bcadg | agf ecfa becfg af +bdgf afceg adcfeb egbaf afgbde afb fb cegbfda daebg adgbec | fba ceadgbf bf fb +efgb eg aecbd ecbdg daecgf dcgfb fbagdc egfadcb gce ecbgdf | afbegcd fegdac cebad bgafdc +acgbd eb dbace bdafgc fabdge bceg gecdba edcaf aeb bagcdef | fdgabc fegadb dgbcfea egabfd +cadfgb acefdg fcb fbea fb ebdfca ebcdf degcb dfaec cbdefga | aefcdbg cdegaf gdbec dcfae +fcdab edc cfeb gdfcae dcaeb ec gdcbaf fdcabe debga efbgadc | fcbe gbaed fcaedb acedgf +gb gefca acbfge bdgaecf bfcag bdfca abg aedfgb gebc agfecd | cgafb ebcg aecfg efgbac +dgabcef fbdgea fb cdbf cebfg bdaegc dgceb egcdfb bfg acgef | cbgde faegc befgdca cbdf +cfaebdg fg fgcead agedb fge ebcdf gebdf dfeagb dbgace fgab | gfba eagdfcb dcabeg cegafd +fbe egcba bgefdca bgdafe afdgb fdbgac dgcbfe fbega defa fe | ebf egafb fbgdac egafb +gdc acfdeg geabc dbfg dabcfe dbeafcg dg bedcf edcgb efcbdg | agcefd cbdfe dg bcedf +bafgcd febdgca abgcf bcgea be edgac aeb cbef afebgd ecgbfa | bea eb ecfbag abfcg +cdae cbd gacbe fcbdge cefbag bagcde gcabd bdafg dc fdgebca | cegdfb gbeacd cd cabdge +dac dfgae fcdabg agbc dcfbg gfedbc fadcg bfaegcd ca eadbcf | cfabged ac cbag dfceab +egbdcf bdeagfc aegcb bafec fdceb edgafc caebfd aef fbad af | efa adfcbge dfba ebgac +ebadg fcaeb dc acdg becgfd adecgbf dbc dbeafg dbaec bedagc | cdb bdc dc aecbd +cfaegbd agbdce edca badgf edgfbc ebagd ed gde aebfgc ebcag | cbeag edca gdbea fbedgc +fgb dfagceb cabgdf gf afge ecbaf deabcf cbdeg bgefc gfceba | bgecd gf bacef fg +abd fgcdaeb gfeabc gdfacb fcbea faebcd dcbeg badce ad dafe | adecb gfaebc fdcbga aecdb +fcgdeab eabgf feagd dge dg cdaefb acedbg cdfg gcaedf efadc | cfade cbeadg bgfea dg +fegcb fcedag badgce fcbdgea afg gafeb af dbgefa degba fadb | fbegc fabge af dcgabe +abcdfg dcbfea bagd cegfb bd dbf cgafde edgcbfa fgdca bcdfg | fdabce gbcfd cbefda ecabdf +afgbd fbgde dcfageb ag gba gfdcab eadgcb cfag daebfc cdbfa | ga ag bdaefc ga +egf ecabfd fg ecdfb cfgb cbegadf dgbfae begcfd agcde cgdfe | gbdefa fedgc cafedb cfdge +bafcdge dgbace cgbad cdafe bedcfg be abge cebad dcfabg bed | dbe gabfced cgbedf cbadg +becagf fdec debafc afedb adbgc bgdfea dabcf cf cabegfd afc | bagdc decf fca dfbae +dcagb gfcade cgdebf fdbeag gdfeabc efdcg ecfb deb egbcd eb | eb edagbf ebfc eagdcf +ebcdaf fgdc gbeac dgfae efadbg cd gcefda dgace fbgedac cda | aegdc dfabge gcade daceg +fgdcb adceb fcgeabd acedbg af fba aebgdf efac dcabfe adbcf | cdbaf cgeadb bdcae bfgaed +fcb fc fcdgb dabfg eabcfdg cbged cefg begdca gcdbfe efdacb | ecfg fabgcde gdecbaf bacged +gfdabc ad bdfgea fegbdac gbaecf bfega adg adbe afged egdcf | dcfgab bgcefa gad gafcbd +bgdcfea afb gabfcd adbfeg efdba bgdfe dfgbce eafdc bage ab | ab dgefb baf bgaedcf +geabd adecfgb cg ebcdfa agfbdc fdcg dabcf dcbag faebcg cbg | dagbe fgdbeca cbagdfe fcbeda +bdfa dafbge fgedb bfceg bdg afdebgc bd bdaecg defcga gfdea | bagfdce dcgafe fegbc dbegca +aedcgb fb gdbaf dgabe acdfg fabgde fadecgb gbf edfb facegb | agdcf badeg fb fabcge +dfbce gafed ba eagb gfdbca aefdb fecdag fagbedc abf egadfb | eafdb edfcbag dcfbe ba +afdec fcegda edgabc bgdfc faebdc ba bac dcfebag fadbc fbae | deafc acb fbgaecd cfdea +gecd dgf eabdf gd gfdeb fgcadb gcbfae cefbg cedfbg cfeabdg | gd edfba fgbce fbgec +adfge bcgfde baecg dcfgaeb bafdge gdeac dagcef dc cdg acdf | cgd dgcae gcead cd +efgac agbfedc aecbfd agbfde dcbg fdbag gacdfb bc fgbac fbc | bc afdegb bgdc edbafg +be cbfgad acegdb agefd dabgc cebfgad gbce bdega dfbace bed | bagde eb egcb edfbac +gf fag afgbe ecbaf geadb eabgdf egdf dagbfc ecagdb cbgdeaf | cbefa fg bdega gfacbed +bag defba gcfdae cgbd gb eabgfc gcfabd dfagb gcdfa ecbgfda | begacf agb cgfade fcdga +adgfcbe egd fgadeb cgbdae acdgb cgedb deca de efcbg acbdgf | cfbdag dcgba geabdf eadc +cagdebf dgebcf edc abecfd egfadb fabed ec gadbc efca dabce | dec fbadec debac edc +fcedg dfgbae eg deg egcb fgcebd efacd gfdcb gbfecda gdafbc | efacd ge cfgabde fagecdb +dbag aefcbd gbc gcdbf bdcfa bg dfabcg ebadgcf cfgeba dgecf | bfaced gedcf dbag cgbdaf +cdgfbea gd bdag gebca bdcgfe dgc fcagbe gabedc afcde cdaeg | abgcde ebcga dagb bgcefa +cedgbfa ecabgd cdafeb bafcg cegdbf cae gdae gabce ae edcgb | aec cageb ecdgfb egda +eacgbf afbdg gdecaf gafbcde gfc baefc bcge fcabg fdcbea cg | agfdb cgfba bgafc eacgdf +fgebd fed bfea cbdeg decfga fe cfdgba defbgac dfgba afdbeg | fgdba abegdfc bcadgf fbegd +adbfcg fagdbe bagec dc fbaedcg bdfag gbdca fcgedb dcfa cgd | fcad bfdgae dgc eagbc +fgbaecd fgecd cafeg feacbg fdgcb fgaecd acdbge ed adfe dge | cfgdb gcedf deaf cfdbg +gedab afdcbeg decabg bfedcg dgefab ef aedf cfgab gbaef efb | abcgf cabgf feagdcb cdbaefg +fdb ebdgfc bd adefgcb efgad gbcd dfbge afcgeb fecgb dbeacf | bfd cgfdeba cafdeb gedfa +abgde bdefa fagdbe fbadceg dgecab dfe ef edfgca bfdac fbge | fegb cagdeb ecdgab bdagefc +febad bacged fge cdbeg cfebdag fgdc gf debcgf bdefg cfebga | fg egf beafd efg +agdcbf bdefcga cbgefd dcagb gbedac faedc gfc bfag gfcad gf | bgfa dbagc bfgdca bcgad +bdce gafbed gaecf bcefdag gbc dacbeg fcbgad egdab cb cegba | eadbgc cb ebadgf debc +ac afgceb eagbf befcagd abcg degcf aefbdg ceagf edbacf acf | abecgf bgac gacb ceadbf +abcg fcaeb gfdcabe ab befdc cfage gdbfea gecdaf efcgba bfa | bgac bcga cagb efgbda +fbdeg gb fcdeb dfecbg eafgdbc edgfa eagbdc baedfc cbfg beg | adbgce dfcaeb bgfc abcged +afg afdbec cbdgaf afcgedb bedgf cdagef ga afcdb gbca gfbda | cfagdb edcafg cbfgda bgfed +edgafcb fdeab dgabcf cbgf gdfeac dgfab gdeacb acgbd gfa gf | gaf bcgf ecbagd agf +dcbfa gfbace ebfca efcg bgfeadc abgce gbafde ef beadcg fbe | egcf fabdc adebgf bdcage +gc cfdbe fgcebd bcgef ceg fdagceb ecadbg fgdc fageb bedcfa | adgcbe aefgdcb gabfe gc +fgead bcdafg ba bcae edafb bcefad dbcfe cafbgde gbcdef adb | dcfeb gecdfb caeb bacdfe +gfeab abc bc ecbf gdebaf gebac gdcea gecdfba acdfbg fbgcae | cbdagf gbcae bc edgbaf +aecgf acbf cgadef fecbg bc ebc dcegba befdg aebgcf afdebgc | ecb bcgfe bgedf abcf +fg facg efcagd eadfg cebfda feg daegb bdfcge afced cfeadgb | acdfe fgeda fg cdbegf +gefda fed edfbgc fgeab cfad cdeag fd cebgad dcefabg fagdce | faegdc eafdg fd cgbfdea +ebfad cf befca gabedc fac cabeg dcaefg abfecg fbacged gcbf | bfade fcbg fc cgbf +aegbf cbdfega adbfg ef cebdgf dfcbga gebca fadgbe afde gfe | fdae afcbgd bgcedaf gef +cdgab cg edgbac gbedfa gebcdaf dcebfg gcd degba aceg dacfb | gdc cgdba cdg gbadc +daebfg fcebgad db gacbf feacdg gafdb eafdbc dgaef dfb bedg | cefdbag gedfca gafdeb befcda +ecfd fcdgba cebgf fge bgafed febdcg cbfegad cabeg fe gfdbc | ecgdfb edfc gebdaf fecd +fac gbeaf bcdga adgbcef febcda cfgba gefbda bagcfe cfge fc | gcfe gbcaf acfbeg acdgb +afegdcb fdgba bfgacd fdcg fd cbfga adf ebcagf dcfabe gbdae | df bcaefd cfagb df +cdbgef bgef ge ged badec agfdcb adgecf cgdeb cbgdf fdbceag | dcfgb gcebd egbf dcegb +dfbea gb cfgea bag fgbc debcga acdbgef afcgbe gfeba cfdaeg | beafd bag cbgf gba +fdgcab cd ebdaf baecdgf cda bcgaf cfebga acebgd cbdaf cfgd | aegcfb cdgf cdgf afegbdc +fcbga cbeagf dcabg da dfabcg bdaf begcd dca fdagce bcgfdae | acgbd dbceg acd cfbga +degacbf cf dcgfba adegbf efgab gfce acfeb dbeca caf gcebaf | bacfe abfecg ebafc debac +bcaefd gbce dcegfb gcbadf dgfaecb fbdce dgcfe cg agfed fcg | dbgfec gc acdgfb efbcd +cdfag dgebacf bdfagc fba acdgef fcdab bfdg baedc gbfaec fb | cedbafg fb dgfeac cadbf +bcdgf eafcbgd bd adfb dcabeg gebfac gcfba gfdacb fdgce bgd | cfbga fgcab db fcegd +cdgafe deg bedfc dfgb cgdbe dg dcefba efdgbc cagbefd cegab | bgdf abfdec egd gedbfc +bg febdca edgcb cdeab gbc edgbca gdab beagcf cdegf debacfg | bcaedf dgcef badg fecadbg +dbca cgaedb gcfbe cea fadbeg gabce ca edcafg degab abfedgc | fdebag beacg abcd adcegb +gcdfe adbfgec cbafge dgbaf ebf gfbced eb adcgfe becd fgebd | ecgfba gcbfde dbec cdafge +dbgeafc dacbg badfge abfce ed eda dcfe decba dcfeab gfbeca | febcda defc beacf fdgabe +efcd bfcadge fcdba egabf bfdcag dcefba deagbc fabed ed edb | gbeacd fdeab ebcfad fageb +dcgf fegdab bcaeg dcegaf dga gd dcfbea fcdea aedcg bdefgca | cbegdfa eabcfd adfce cbefda +bf edfbgc cegbf bcadefg ebf acbfde gcedf feadgc gbcae gfbd | feb dfgb egbcdfa dfegc +efgba eacd efadcg dcgefb gacdf dbcfgae efd bgcdaf edfga ed | cfbgda dgcfa gcfead eadfg +afgdc fbg cdgaef fagbdc bgcefa cdbf bgdaf bdaeg fb dgabcfe | dagfc cefagb egcabf fcbd +cadgfe acbed cfabgde fdbcge cfga fad fdeabg fa dcaef dcfge | fad bafgecd cfegad adbfcge +agdefc cfad bdgecfa gadfe aefgc ad ceadgb gbafce bfedg agd | dag ad fcage cgbafe diff --git a/08/src/bitfield.rs b/08/src/bitfield.rs new file mode 100644 index 0000000..8c513cb --- /dev/null +++ b/08/src/bitfield.rs @@ -0,0 +1,109 @@ +#[derive(Clone, Copy, Eq, PartialEq)] +pub struct Bitfield { + pub data: usize +} + +impl Bitfield { + pub fn new() -> Self { Self { data: 0 } } + pub fn set(self: &mut Self, i: u8) { + self.data |= 1_usize << i; + } + pub fn unset(self: &mut Self, i: u8) { + self.data ^= 1_usize << i; + } + pub fn get(self: & Self, i: u8) -> bool { + (self.data & 1_usize << i) != 0 + } + pub fn pop_count(self: & Self) -> usize { + self.data.count_ones() as usize + } + pub fn swap(self: &mut Self, i: u8, j: u8) { + let mask_a = self.data & (1_usize << i); + let mask_b = self.data & (1_usize << j); + let mask_c = (mask_a >> i) ^ (mask_b >> j); + self.data ^= (mask_c << i) | (mask_c << j); + } + pub fn permute<'a, I: std::iter::Iterator>(self: & Self, it: I) -> Self { + let mut ret: usize = 0; + for (i, &j) in it.enumerate() { + let x = self.data & (1_usize << i); + ret ^= (x >> i) << j; + } + Self { data: ret } + } +} + +impl Default for Bitfield { + fn default() -> Self { Self { data: 0 } } +} + +impl std::ops::BitOr for Bitfield { + type Output = Self; + fn bitor(self, rhs: Self) -> Self::Output { Self { data: self.data | rhs.data } } +} + +impl std::ops::BitOrAssign for Bitfield { + fn bitor_assign(self: &mut Self, rhs: Self) { self.data |= rhs.data } +} + +impl std::ops::BitXorAssign for Bitfield { + fn bitxor_assign(self: &mut Self, rhs: Self) { self.data ^= rhs.data } +} + +impl TryFrom for Bitfield { + type Error = &'static str; + fn try_from(c: char) -> Result { + match c { + 'a' => Ok(Bitfield { data: 1 << 0 }), + 'b' => Ok(Bitfield { data: 1 << 1 }), + 'c' => Ok(Bitfield { data: 1 << 2 }), + 'd' => Ok(Bitfield { data: 1 << 3 }), + 'e' => Ok(Bitfield { data: 1 << 4 }), + 'f' => Ok(Bitfield { data: 1 << 5 }), + 'g' => Ok(Bitfield { data: 1 << 6 }), + _ => Err("Invalid character for Bitfield.") + } + } +} + +impl From for String { + fn from(x: Bitfield) -> Self { + let mut ret: String = String::new(); + if x.get(0) { ret.push('a'); } + if x.get(1) { ret.push('b'); } + if x.get(2) { ret.push('c'); } + if x.get(3) { ret.push('d'); } + if x.get(4) { ret.push('e'); } + if x.get(5) { ret.push('f'); } + if x.get(6) { ret.push('g'); } + ret + } +} + +impl TryFrom<& str> for Bitfield { + type Error = &'static str; + fn try_from(s: & str) -> Result { + let mut ret: Bitfield = Bitfield::new(); + for c in s.chars() { + ret |= Bitfield::try_from(c)?; + } + Ok(ret) + } +} + +pub fn parse_input(s: & str) -> ([Bitfield; 10], [Bitfield; 4]) { + let mut halves = s.split(" | "); + let mut all_digits_it = halves.next().unwrap().split(' '); + let mut output_digits_it = halves.next().unwrap().split(' '); + + let mut all_digits: [Bitfield; 10] = [Bitfield::new(); 10]; + for (i, w) in (0..10).zip(all_digits_it) { + all_digits[i] = Bitfield::try_from(w).unwrap(); + } + let mut output_digits: [Bitfield; 4] = [Bitfield::new(); 4]; + for (i, w) in (0..4).zip(output_digits_it) { + output_digits[i] = Bitfield::try_from(w).unwrap(); + } + + (all_digits, output_digits) +} diff --git a/08/src/part-1.rs b/08/src/part-1.rs new file mode 100644 index 0000000..e477335 --- /dev/null +++ b/08/src/part-1.rs @@ -0,0 +1,23 @@ +mod bitfield; + +use std::io::{BufRead}; + +use crate::bitfield::{Bitfield, parse_input}; + +pub fn main() { + let mut stdin = std::io::stdin(); + let mut handle = stdin.lock(); + + let mut count_1478 = 0; + for line in handle.lines() { + let (all, output) = parse_input(& line.unwrap()); + for x in output { + let n = x.pop_count(); + if n == 2 || n == 3 || n == 4 || n == 7 { + count_1478 += 1; + } + } + } + + println!("The numbers 1, 4, 7, 8 occured {} times in the output.", count_1478); +} diff --git a/08/src/part-2.rs b/08/src/part-2.rs new file mode 100644 index 0000000..a11e7b9 --- /dev/null +++ b/08/src/part-2.rs @@ -0,0 +1,112 @@ +mod bitfield; + +use std::io::{BufRead}; + +use crate::bitfield::{Bitfield, parse_input}; + +// This is embarassingly inefficient, and full of completely needless +// allocations. I just wanna get day 8 done! +fn perms(x: Vec) -> Vec> { + if x.len() == 1 { vec![x] } + else { + let mut ret: Vec> = Vec::new(); + for perm in perms(x[1..].to_vec()) { + for i in 0..x.len() { + let mut tmp: Vec = Vec::with_capacity(perm.len() + 1); + tmp.extend(& perm[0..i]); + tmp.push(x[0]); + tmp.extend(& perm[i..]); + ret.push(tmp); + } + } + ret + } +} + +const DIGIT_0: Bitfield = Bitfield { data: (1 << 0) | (1 << 1) | (1 << 2) | (0 << 3) | (1 << 4) | (1 << 5) | (1 << 6) }; +const DIGIT_1: Bitfield = Bitfield { data: (0 << 0) | (0 << 1) | (1 << 2) | (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6) }; +const DIGIT_2: Bitfield = Bitfield { data: (1 << 0) | (0 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (0 << 5) | (1 << 6) }; +const DIGIT_3: Bitfield = Bitfield { data: (1 << 0) | (0 << 1) | (1 << 2) | (1 << 3) | (0 << 4) | (1 << 5) | (1 << 6) }; +const DIGIT_4: Bitfield = Bitfield { data: (0 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (0 << 4) | (1 << 5) | (0 << 6) }; +const DIGIT_5: Bitfield = Bitfield { data: (1 << 0) | (1 << 1) | (0 << 2) | (1 << 3) | (0 << 4) | (1 << 5) | (1 << 6) }; +const DIGIT_6: Bitfield = Bitfield { data: (1 << 0) | (1 << 1) | (0 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) }; +const DIGIT_7: Bitfield = Bitfield { data: (1 << 0) | (0 << 1) | (1 << 2) | (0 << 3) | (0 << 4) | (1 << 5) | (0 << 6) }; +const DIGIT_8: Bitfield = Bitfield { data: (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) }; +const DIGIT_9: Bitfield = Bitfield { data: (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (0 << 4) | (1 << 5) | (1 << 6) }; + +fn decode(x: Bitfield) -> Option { + match x { + DIGIT_0 => Some(0), + DIGIT_1 => Some(1), + DIGIT_2 => Some(2), + DIGIT_3 => Some(3), + DIGIT_4 => Some(4), + DIGIT_5 => Some(5), + DIGIT_6 => Some(6), + DIGIT_7 => Some(7), + DIGIT_8 => Some(8), + DIGIT_9 => Some(9), + _ => None + } +} + + +pub fn main() { + let mut stdin = std::io::stdin(); + let mut handle = stdin.lock(); + + /* + println!("{}", DIGIT_0 == Bitfield::try_from("abcefg").unwrap()); + println!("{}", DIGIT_1 == Bitfield::try_from("cf").unwrap()); + println!("{}", DIGIT_2 == Bitfield::try_from("acdeg").unwrap()); + println!("{}", DIGIT_3 == Bitfield::try_from("acdfg").unwrap()); + println!("{}", DIGIT_4 == Bitfield::try_from("bcdf").unwrap()); + println!("{}", DIGIT_5 == Bitfield::try_from("abdfg").unwrap()); + println!("{}", DIGIT_6 == Bitfield::try_from("abdefg").unwrap()); + println!("{}", DIGIT_7 == Bitfield::try_from("acf").unwrap()); + println!("{}", DIGIT_8 == Bitfield::try_from("abcdefg").unwrap()); + println!("{}", DIGIT_9 == Bitfield::try_from("abcdfg").unwrap()); + return; + */ + + let mut sum: usize = 0; + + for line in handle.lines() { + let l = line.unwrap(); + let (all, output) = parse_input(& l); + let mut decoded_output: [usize; 4] = [0; 4]; + + for perm in perms(vec![0,1,2,3,4,5,6]) { + let mut all_digits = [Bitfield::new(); 10]; + for a in 0..10 { + all_digits[a] = all[a].permute((& perm).into_iter()); + } + let mut seen_digits: Vec = std::iter::repeat(false).take(10).collect(); + for a in 0..10 { + if let Some(digit) = decode(all_digits[a]) { + seen_digits[digit] = true; + } + } + /* + print!("Decoded: "); + for a in 0..10 { + if seen_digits[a] { print!("{} ", a); } + } + */ + if (& seen_digits).into_iter().all(|&d| d) { + println!("OK!"); + for a in 0..4 { + let descrambled = output[a].permute((& perm).into_iter()); + decoded_output[a] = decode(descrambled).unwrap(); + } + break; + } + } + + let line_answer = decoded_output[3]*1 + decoded_output[2]*10 + decoded_output[1]*100 + decoded_output[0]*1000; + println!("Answer: {}", line_answer); + sum += line_answer; + } + + println!("Sum: {}", sum); +} diff --git a/08/test-2.txt b/08/test-2.txt new file mode 100644 index 0000000..c6216dc --- /dev/null +++ b/08/test-2.txt @@ -0,0 +1,2 @@ +acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf + diff --git a/08/test.txt b/08/test.txt new file mode 100644 index 0000000..c9f629b --- /dev/null +++ b/08/test.txt @@ -0,0 +1,10 @@ +be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe +edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc +fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg +fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb +aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea +fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb +dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe +bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef +egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb +gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce -- cgit v1.2.3