diff --git a/input/08-test.txt b/input/08-test.txt new file mode 100644 index 0000000..c9f629b --- /dev/null +++ b/input/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 diff --git a/input/08.txt b/input/08.txt new file mode 100644 index 0000000..3840ef7 --- /dev/null +++ b/input/08.txt @@ -0,0 +1,200 @@ +cfgeda afcbg fbcdaeg gbdfa fdgcba cbdf becga cf gcf gbdefa | bfcd acgdfe cfabg dcbf +ge gbafde gbafc bfagdc cdebf fabegc egbfc ebg dbgacfe ecga | bge cfabdge fgeabc gcea +dce ecdbfa bacdg gfdabc egda gecbd ed dcabge bgecf cgadbef | eabfdc degacb ecfbg cgedb +bdae bfcedg gecadf gdaefcb bfcag egafb fdbeag edgfb ea eaf | gedbf abed bcafg gdfbe +cefgdab ba efdacb gfeabd abfg cagedf bcged eba egadb fdeag | eab afgb afgb fdeag +fecbdg edcgba cef gfacbde ebfa fcbead acdeb cfdag ef dafec | adcef ef fe fadgc +agefb dbfgca dfgea afgcde cfdbea agcfd gced def ed fbgedac | ed dgecafb cabdgf fed +gcafed ecabd bfa fdaebg bf febg efdba fgacdb aedfg dagecfb | defgacb bf bf dfeag +gcfabe gbdc bgdacfe gbecdf ebgfc bcdfe dc degfca ced befad | bdgfeca dceagf cefdga ebdfa +cfaeb bafg bcg dgefc fcbeg gb defcbag eafgbc adcebg cdbafe | bfag afgb gbc cgfeb +agcef fgdbeca bc efagbd cfbea cebfda bfdea dbac ebc gcefbd | acfge ecabf acdb bc +dacfbeg cegfb aecf cegbd fabdge bgafe agbcdf bfgcae fc gcf | cabdgf efcbg bgecf gdeacfb +daebg cgdabe afgde fbagcd eb cbagd baefcgd edb dcaefb bgec | edb begc egdacb eb +dbcfea dbfac adg gbac dbeagf bgafdc bdaegcf gdafc ga cgfde | ebdafg gacb agd dga +gcdf cda ebagfd egcfbda cbega aegdf eadcgf bcedfa eacgd dc | dcgfae cda bfgcaed acbeg +gcdbea cf dgeac gacefd bgcdfa fegc beafd fcd decaf egfdcba | geacdb cf gfec egfadc +aced fedcg efa cfgdeb fcadeg afcbge efadg ae bgecfad gdfba | fegacb bcagedf geacbf eadc +fdegca faedcb aecgd cfgde cef fe fgcbd fgea ebgdac bfeadgc | cgade dfgec fe fe +egdbac dbfcga egfadbc abe dcae dgfbe ae gabed bgcad acegbf | efabgc bdcag aeb gadcb +da dca dbfeagc gcdfb dage eagbc adcbg fadbce badegc ebfcag | gcabde egfcab adc dca +ecabd gc cbg befadc egdacfb edbfg edbgc cbeagf beadgc agcd | eacdb gcebd cadg cdeba +gcfdae bdgcefa acbge edbfgc aegdcb gdceb bdae cagfb cea ea | ecagdbf dbecg gbced dcageb +gdac gd ecbgdfa dagbe ebdgcf baecd begaf deg bdgace ecdabf | ebafg cdga dg dg +ca decabf dbgae ace dbacfeg cbafge ecbdgf defbc dbcea adfc | dabec bcdfe egbcadf eca +gfaed dgbaec gbf bf cfegba fgabd cfdb adgcfb dbcag dgacbfe | fcdb acbgd fdagb gbf +dceagf cge dbgacf eg fged afcdg eadcg cbgeaf cdfgaeb ebdac | gce cge agcedbf fadcg +cfbae edafc cb fbc fegab cfegdb dabc bfcdega efbadc deacfg | cedfa gdefbc adcb cfb +afbgdc acgbed gdae eabcf cda da gbcde bdcea gdacbef dgcbfe | aedg bcgde bfgdca da +gdbfaec aebcg egacf bcgd cegadb ebc badge aebfgd bc bfdaec | ebc bc fgace bc +fa cdeab fegbda beadcg gfedc cfade facb adcgbef fad dcebaf | dbgecfa dafcbeg cbadge cbead +egacf bdegfa df daf cbaged bgdf efbcad cebafdg daegf dbeag | badeg dbcgaef gedaf ebagcd +dcagbf gceba ecgadf dfeb cef afceb ef cebfda adcebfg afdbc | ef bcadf egdfcab cfegad +acbdf gbae feadg eb egbdfc ebfgcad efbad deb fgdbea adgcef | ebd eb bcadf fbdac +fde daegbfc fgabd deacfb egad gfceb gafbdc gbedf ed abegfd | bfadce cefbg fbgcad fabgd +cbade eab becfad acfbdg dbgcaef gdaec gfadeb eb cafdb bcef | edbca fbcdaeg fcdgeab afcbd +dacg gaf fbcdg bcgaf bdgeaf fcagbd fbeac ag gbcefd aebgcfd | cdbgf fga ebcfdag fgcadb +bed db dcageb gbdf dfgceb cebfg fcdae cbefd gebfac afgdcbe | egbcdf begdcf dfgceba bd +egcfd gbde defbagc cebafg dcg gd edcfa bdfecg fegbc gcdbfa | bcegaf cegdf fcabgd fdecg +fb fbeg egdcaf cbf efgcd fagbedc ecdbf cbgefd cfadbg bcead | fdeacg faegbdc gbedcf bcf +abefd bcgfeda bcage acbde ebacgf cd dcb ecdfbg dceabg dgca | gacd agcd dc debfa +cdbgaef cfd cf dfega edfgab dfegac ebfdcg fdagc gbacd caef | cegdfa fc feadg afce +afdgcbe gef bcafeg gfbad gecda ebdf ef gdefa bafedg fdbagc | fdbe ef egfcab dgbcaf +cageb gfebcd adfg caegfd cfdbaeg bdcfea ead ad agced dgfec | gecab bedacf efgcd gfad +bed bdfaec bgcedf bgadfec ed fgecb dcgeb dgcab gefd abcgfe | cegfb cgbdef gdef dacbfeg +gfbce ge egf dfagbc degcaf efacb bcgfd afebdcg bdegcf gebd | egbd fadgce gbed gbcef +bcgedf fgde dgebfac fg gfbdc dbcgea gfc decbg fcbad gcebfa | cbdgf fgbdc cbfdgea fgc +baecfd dfge agecfbd bgdae bgafcd fgadb ed cgabe deb defbga | dfbag degf eadbg fged +cbfadg gbec acebd cgfead bc beafd baedgc cbd cegad gefdacb | gacde dcfagb egdca aebcd +agef dea edcbfg dcgba dcefg cedgfab ecgda ea bfeadc cfadge | ecbdgaf bcdeaf dbacg bedgcfa +aegcb cbgfda gaedbc afcdebg ecdg ec facbde ceb efbga cgadb | cgbeadf cged egfdacb dfceab +bedfc dfegbc gcbad cbeagf egdf fdgcaeb ge cgdbe geb abcefd | eg cabfge efbacd gebdcf +dacef fegbadc bc cbfg dagbf dfgaeb afbgdc fcdab bgadce acb | cfbg gcbf afdec fdcae +ebgaf be bge fgbda afbcdeg cgaef bcdagf fbaedg efbd agebdc | afdgcb efbd gbe adbgf +agbdecf acgfeb cgbae fcae ae egfdba agbcd egbcdf ega gefcb | cfgeb cageb ea eag +cbe fdgbe ebdfag cabdefg ec fbdce cegdfb gcef gcadeb cdbfa | acfgdeb gcfdbea cbefgd gfadbe +gdcfeb bf bdf edgabc fgbc gbdce ecdbf gdeafb dfeac ceagdbf | fcgb gbdce fbedacg gfbdea +bag gbfacd egafc afcbed cdbg gadfbe fdcba gb becagfd afbgc | cagfdb bga fgcea bdacegf +gadbf cbaedgf dfeacb fg defba dfg fgeb gedbaf dagbc gecfad | degafb cefgda gdf dgafec +dbfaec fg degab bgfcde ecfagd fgaed dfg cafed bgafced agcf | gdaefcb gcaf acebdf gf +ebgfc eagdc eadf agbfcd gfa feacg cdegbaf dgbaec fa cfdega | edcagf gcdabef geacd fdae +gabcdef fadg aedfb dcgbfe afbecd egd aedgb cbega afebdg dg | bafed dgaf gbeac deg +fbgecad badfce eb befa efcda aedcb gfcedb edb bcgad afdecg | aefb facde cadgb bed +fabcdg bfc adbf cgdaeb fdgec acgdfeb gbecaf gcfbd fb bdgca | fb acbgde cabdgf bf +fdgcea ca bdfag cbdfgae acd bcdgea bdegc beca agdcb dgfbce | fdecag adc cad cdgeb +gfcb abgef deafbcg aebdcg ebgcaf caefg gb fdceag gba afdbe | eagcfd bgcf adgcfe bcfg +dfbcga ebdfac fcge bfcegd adbeg fg gfd beafdgc fdebg bfdce | gfacedb cbfagd ecfg afbced +gfecabd dacefg bade aeg bfgea cebfg ae fdbga bagcdf eafdgb | adbe beda edab degbfa +dbc cdbeaf gedbfa acdeg cb abcf edfba cfbegd aedcb defgacb | bc aecdg aefbcd egdca +fcbed cdg agbcf bgedcf gd cbefad bgdcf gbed gefadc badgfec | bcfgd bged dcg fdebc +fgdc egbfac eafdg gedac dgefbca ecdabg dbfae gdafec gaf fg | fdabe aedgf bdeaf gfdc +dg cdafebg cfgaed gbda gcbead deg cfbeg cdeabf gebcd adbce | dg bcgde gabd gde +cgb cbegd cg fecgab febcd gaedcb fadbeg gebad dgca efdbagc | cg bcg dgaecb ecdbga +egfbda dbeca fd gcbaf bgafedc fbd efcd dgecab bfadc ecdfab | eagbfd dbcea edcbga cfed +fceadgb beadf bdefca gfebcd bfca edafc fc cfd bgafde gcdae | acbf cf ebcdgfa daecf +eacdgb gbdcfae gdfe cfbea gedcbf cfdagb bfd df gcebd fdecb | df bcfea dcabeg gfcedab +ebgca bdfcge degbac dfbca gfbaecd eadg acgfbe de bde edcba | abgfced dbcgef adeg caegb +acebfg bfdecga dea cafdg gfadbe bdeg bfcdae egbfa de fdeag | de dfcbgae fcadg fadcgeb +aegcfb dbefg ebdc edfcg gfbeda agfcd cedbafg ce cfe decfbg | acbefg bgeadf dgefc faedbg +eadgb bdcae bc acbg fgbecd gfdeab ceb cdafe agbecd gaebfcd | bcaged bc gbca bedca +abfgc dbgeaf fc gdbfa dacf bgdfac gacbedf fcb egacb gdcbef | bcadfg cdaf fc bagce +fbde gdafe de dbfeag bdceag fgace gafcbd fbadg cfdeagb gde | edfb eacbgd efgda deg +cedaf ecfgbd dcg bdagef gbedf gc dcgbfa cgbe aecbdfg cfgde | cg cedfg cg dcg +fbe bfgda ef dfgebca gbedfc bgcde daecbg efcg fgdbe fedcab | fbadg fbe bcaefd bef +cega aefcb eabfg debfgca gfdba aefcgb bge fbcdge ge bdeafc | dafgb ebg fbcae fgeadcb +fb dgaecf bdgec gacdf edacbf bfc cdgbfa bagf adgfecb cgbfd | fgba bf bgfcd cebdg +facd cgbfd afdgbc agbfed af gaf acfbg becag cdgefb fgcaebd | gfbcad dafc dcfabg begfcd +cfaged cdgfe efdca aedcbf fgca feg fg cdbge egbfad febgadc | gef cdefg becdg gfbead +ecgdaf dbefcga bfg fbedga abcf cgfeb gbecd aecgf aebfcg fb | eacgfb cbaf caegfb gfb +bec caed aefcb eacgdbf agbdcf ec faedcb cafbd aebfg bfcdge | fagdcb fbcad ecdgfab abegf +gdecab cdaegf acgfb efbd bd edgabcf fgcdb gefdc gbd cebfdg | db cbgfa ebgcfd gcdebf +fbced cdaefgb ae abgced dcgab dae cbgafd acefgd acedb geba | agdcb deagcb ae baeg +adcef db ecgba gbfcde dabg fagbce bde cadebg cdabe gdbefca | edfca dcafe fdcegb dbga +cabed ecagdf fcadgb cbagd bgde fecdbag de acefb gcdabe dec | gbdfac de begd cdeba +dcegaf gc dbgfa dcbg dcgfab acbef edagbfc daegfb abcgf gac | gbcafed cg agdfb dcafbg +eag gfdab fgecda bcgdef deca fdaeg efcgab gecdf ae cfgbade | eagfcb ae fagcde aecd +aceb eadfcg gcadeb ea bgcda bagde dbfge badcfge gdbfac aed | ceabdg ead eda abec +fcdg bgc bdcafeg abefdg gfcbad cgabd cdbea fcegab cg gafbd | efacbg gdcba dcaeb cgfabd +gacbfe cedbga adecf ebcad abdcegf db cgaeb abdefg dcgb dab | bda ebcgfa acdbeg cedabfg +dceabf acefgd cgfe dabgc dagfe dec egdca ce abcgdfe fegdab | gcfade gefc gacfbde degcfa +aef gcbafe bgcfead gdaefc fgbe bceaf dbagcf abdce gcfba fe | gfeb ebgdacf efa fe +cebafdg cagedb eg gecaf facbg daecf cge fdge bafcde efdcga | gdcaef bcgfa dfge efcda +gfadc gbecf efagc cgdaeb gea cagedf ea fagdcb fgdacbe fead | bgcfdae ae daef gafec +gcd cdea cgafbe dfgce dcgaef dc debgf edbgafc bgcdfa cegaf | cdg cdg acde caegfdb +dbfgac gdabce fcdgb gbcefad adgecf edbcf bfag gbd gb afcdg | dbg agdcef ecfbd gfcaed +bdcae fcabed gafdecb fbdeag bafed bceag cd fgaecd dec dcfb | dbfc fabedgc gfebda eacdb +acgfd agcdbe bcfe gef afcgeb gdfeab ef gbedcaf beagc acgef | dcaegfb ef gdfceab efg +fadegc egd gd egafcb afdeg fdeab agfec fgedbca dcebag cgfd | faegc agfce dcgefa dg +fdgbeca bfecd becda gcdefa dagbfc edfbgc bfge fbd dfgec bf | fdbce fbcdag gbfe fbd +afeg gfecda bfgdc dfecab af gdfac gdecab cdaefbg afc ecdag | fega bdcgf afc agedcf +badec bgae fcade feadgbc becadg bfcagd be cabdg edb ecdfbg | gbea ecfad abdcg bcgfdea +gfbea cabedg ed dabcegf eabfcg deb fabdc egfd abfde febgda | aefbd fgde degf fdeabg +acdfeb fd gafcb egcfbad egadc gdfb caebgf fgadc fcgdab fad | fcgabd adf fd cfgba +eabfcd bcadg aceg gabfed ag aecdb cdfbg dabecg gcebafd agb | cbade bga ag gcbdf +fabgcd agefb cb dbefgc acefdbg fcgaed fabgc dbac dgafc cfb | bcgdfa fdbacge edgfca afedcgb +dbaeg efcg beagfc fg bfgae gfabcde bdefac dgcabf bgf ceafb | eafcb aegfb fg fbg +bdfeg af fcabged ecadg gbcaed fcadgb dgcfae faged dfa caef | deagc dfa gdafe fda +df acgbfe bcfdg bcgdaef edfg gbdac dbaecf cdf ebgfc ebdgcf | gfcdb cdf fegcb eagdbfc +daefb afcdg dbgecfa bgca dcbegf feadgc gb gfbcad gdbfa bgd | dgb gb fbeda gadcfb +efacg febdc dfgbce acdbge acebgfd bfdg dg cdegf dgc aedbfc | bgdf gafec dg dcg +fdgbe cbg gdfbc efgdba cbed bc bgafce cgafd bgcfdea gfedcb | bc gfcdb edbgf dfbgc +bgdce bfgae efbcgd deafcbg cdegaf ebgfd gecbad dbfc gfd fd | df df agfcde ebcdg +gcbda debga be gedcfab fbedga efbd fgaed bea gfaebc afgdec | aefdg adefgc acefgd abe +egbdfc fbac bc dcage bfeagdc ebafd baedfg dbcae faedbc cbd | adcfeb fgdceb fdcgeb bacf +ebfgd facedg begaf afbegcd def df dfgceb edgcab dbcf cbedg | fdcb fed dfcb bfceagd +dbgec ebad gbcdfe ceadgbf ceadfg gacbf bcdage adg cadbg ad | cgbde cbgde gcbfa gabcf +aebgdf fabeg da bgad cbfde bcagef cafbgde edfab fecgad ade | fdabe gafdbe edfab dea +bda ad bgaef ecbfag cdefb faedb badgef gabecd dagf cbeagdf | bad fdgbcae egbafd gdeabf +gf eabgd begfca bcgdae aebcgfd gaf gfed fbadg cbdfa dbeafg | fbcda fdabg acfbd fdeg +agdbce dcbfg gcefda acg ebdca defacgb fedabc egab ga gcbad | bega abge gac fceadb +ebfcdg afcbed bad dafge ba gacfbd gcebdaf dgabf abgc cbdfg | acbg bfgdec cgebdfa gfcbd +gabedf adfe bacgfe fgadb adbgecf fa gdaeb fdcbg gcdaeb afg | acegfb fa gaebd gaf +fegca afg gebfdca fa daef cabdge dceag dcfgae acbdfg efbgc | aefgbcd gebdca fga afdgbc +dagfe cfabgd dgefc gacedfb ga baegdf gfa bdafe egba fbedac | fbdagc egba cgdef gfa +bfadce fdagbe fgbde cgdfbe da ebcga badeg dbcfage fagd ead | fgdaecb dabgefc adgf ade +adbecg ab abe cdgeb dafec cgbdafe badce gcfeab cgbedf dbga | dgaefbc adbg abdgecf dabcfge +ebd abdec gbdafe bdgc bd ebfca gcdea gadceb cfabedg fcegda | bdcae bd aegdfc eadgcfb +ce cge bgfeacd fcbge cgdbfe aefbg dgacfb fced badegc bcdfg | gfabe dagcbe adfebgc cdaebfg +gecadb fb gbf gdbfeac acfgb eafcg bgadfe gdbac fcdb fcbgda | fdbc cdaefbg bf edcbag +ce cde bcdfgae abdfe fcagd bdgcae dagbfc dgafec egfc dfeca | cbadge bgfdeca dfeagc ecd +abcegd dagfc fgbdc fadecg agbf dcgfab fgdacbe bdg bg fbdce | bfcgaed ecdbag fabg dagecf +dafbe edgabf dcb cb fegcd becfda cbagfd aecb acdgbfe ebfcd | efabd aceb bdc dgbceaf +edgbcf bfacd efgb dabcge cdgef bg facdge fbcdg bagcdfe gcb | cefadg bgc cbdgfe bcg +dfbce baec gfbecda fbegdc cefadg edbcfa ea gdfba ead aebfd | aecb ea aceb ead +bfcaeg fag af egdcba egbdacf cbfa gfabde gceab ecgdf aecfg | bcega bcaf ecdfg dfbcage +ebadcgf eaf gdfbe baegdc fgac dgeaf af dgfcea acdebf aedcg | fdecga edfga efadg cdegfa +decagfb bdgfac efcba gfcdbe dbacf bec cdae ec becafd begaf | cefab bdecaf bcfdae cefgdb +eagdcbf abfde abcde daf dcbafe geabcd bgdfe fa gafecd cfba | af eagbcd ecdba defbg +cgfdab fdbe bdfcg cgfde de gaedbc egdbcf cedgbfa cfaeg deg | ecgdfb ged bedf bdcfg +afbgc egafd gdb gbfdea afdgb db edafgc dgcfeba debfcg abed | gdb cfgbde db db +degcbaf acfd fc gfbac dfcgbe eagbc degbaf dabfg fgc cabgfd | gdfbcea acdf eabgfd egacb +decaf eadcbf fcbgd ab facdb aecgbd efgacd cfadgbe abd feab | bdeagc cadfe beaf dcagbe +faecb adecf fbeagc gbec cbf cbadfeg bc bcfdag geafb fbdega | cgbe eacgfb edcfa cfb +bacdgf cfabe cdaegbf bacfeg cgdbae bf bcf ecfda bfeg aebcg | gebf bf cdfae cefad +bdgcfa bgcfd eb cgaefb adceg bfde ceb cbfedg agfbecd dcegb | dbfe fcdagb cgfeba bce +edfabg badge egbdf gbcdea fde befgacd fe aefb dbfcg cgadfe | gefbd gdbfe edf fbdeg +eaf gdecaf febacg egacb ef dcfab bgfe cgebad egafcbd cbeaf | fae fbacd cgabe agfcbed +ed egdf edafb efcab fgbdae eda cfagbd cabgefd debacg bdagf | eda ade fgde dgef +fcade be bgafc cedbafg caefgb bea dfbgea bfcae cbeg dbacgf | aecfb aeb ebcaf beafc +cfg bgdfeac bcdfe abfgd fdgbc adgfcb cg acdg gfceba fbeagd | bafdg cdebf acgbfe ceadgbf +gbecadf cadgbf dgefba bgcfe ga abg afbgc dcafeb dgac adcbf | bfgdac agcd bga agb +befdga ce gbafc baecdgf egc bedgac gfdecb bgead gcbea caed | ecg daebg ce aebcgd +edcag eacdf dfcba fe dcfgea degcab bacfeg cfe gefd agfbdec | gfecba ef fdeg edgf +ceafd cafbge df afd cdbea dfagce bgcedfa bdfaeg gface fcgd | feagbc cdgf cdfg ceafg +cfebg gcbdae bdaefgc ea gabdc eag fcabdg cdea abgec fegdba | bdcagf ceda feadgb ea +bacfe dbafe gbedac bfaged df fdb fadg edcgbf adbeg gecfdba | fgabde gdcabef efagdb egfcbad +cbafedg dcefa adgcb gabe degac gfbcad acedgb ecfdbg egc ge | gcfadb dabefgc aegb eg +bdaec gdeca dbc ecdbgf fbeagdc fbeadc afebc db gfbcae afbd | gbfecd gcebdfa fedacb gebcdf +cdgba agfcb cgfebd fb fcega gbecad cbf decafbg cdfagb fabd | fb gcdba badgfc cgbafd +agdeb adgec edcgba cegabfd cdfaeg afbgd dbe eb ebcg dabfce | cadgfe eb gdcbea deacg +gbdaf fgebda bda fgaecd fdgea dcbeaf bgea ab befcadg gdcbf | gedbafc ab cbdgf adb +bdfga fdcbeg bgcefa deafcb begdf fcbed agdbefc ge gced bge | fcbaeg ge fdceb ebg +agecf fedcbag fd ecbgd afcdeb fceabg gdfa daegfc cdgfe dfe | agfd gfecd dgcfe gfecd +bcfa egdbf eagcdf dbfec acfdgeb cdfea becfda bcd acedgb cb | cbd bdc edabcg bdefac +cgbf aegdc gdfeabc acfbed fec debgf fagbed dfecg fc febgdc | abcfed febdg cf bfecad +dfcbe dbcfgea cgaef gecfab bae bcga ba ceafb gefacd debafg | acbef fdcbe ab eba +aecfb becgdf cf fcag bdaec agcfbe agbef debafg cefbadg fce | cef cfe aecbd efc +fcgbad ebg fged eg gabef cbafe gbeadf fgdceba abdegc dbgaf | dabecg gedf gdaebfc bfeagd +fegbca cegbf cag bcafg ga gadbefc fdcega edbgfc fcdab geab | ag dbafegc ga acbfg +abcd dgacf fcedgb bfd db cfdbaeg agbfe fbcadg bfadg ecgadf | fdb dgecfba bfgda bcad +fbgde efbda bea adbfeg acdgefb eafg fecgbd ebdgac ea abcfd | abfde fbcagde edfgb abe +dafgbc adgec cbaegd bgdafec bgeac gbed dg edacf dag eagbfc | debg fbedgca edgb gda +eb abce bafge fgdbce ceabfdg agcbf fbcage cfgabd ebf gadef | fadeg cdegbf fcabdg gcbfea +gc dbcae aebgfc cbg gbeaf ecfg egfdab afebgcd cafgdb aegcb | fcge cbg fegc gfbea +fbegda bfd bfdace gceabd cfbga edgf bedfacg debga bgfad fd | bgfade acbdfe feabcd eabdgc +eadfbg ge cdaegbf bfgdc gcadbf ecfbg ecfab fbcdge egcd fge | fbace ceafb faceb degabf +gdba cbagfde gb fecdg gedbfa acbgfe dfgbe bafdce gbf adefb | dbefa dfbae decgf bedgf +fbe agfce ebadcf fbcdga fedagbc gfcdb egbfcd fbegc bged be | egafc gebd bgafcd edbg +bfcge efacg ae fdgac cea cbfdae bfgadc gfdcae gdae adfecgb | efdcab gface fcgbda gfebc +eagfc dacbfg cgefb cdfgea ebgafcd acde ae fae cgafd aefbgd | egcfa agcdf befgc gbacdf +gfecab gfdbac efcgdba cfabd gac dcbag ag cdebg dafebc fgda | gacebf adcbf bcgde cag +gbfcd cadeg cfbgde cfab adf af edbgaf dfgbca adgcf aefdbgc | adf afd fda fdacgb +cbg defgbc geafb bcda gdefcab cagfd cfaedg gfbac bc bdgfca | fcgba fbdcge cb gafeb +ca ebcgdf gadbec cda aedfb gfdbc baecfdg bacdf cfag adcgbf | cfga efabd ca badfc +cgabdf da fdca cebag bcdag cabdfeg fbgcd dab bedfag fdbecg | dba cdaf gbdfce eacgb +cbgf becfag cegad febadc afc gfcae becdfga adbefg cf gefab | afbdgec aegbf eagbf acf +bg edgfa dgcb dgbcfa fbagd dabcf edfcgab agb efacbd ebafcg | acdfb fdcab fdcba gb +de cged feadg fabedc cafgd fbage dfe edcbgfa agbdfc dgafce | gcde gfeab gafcd gabfe +abec fgbcdae gfcab ebfag cgaedf ae ceabfg eaf gabfcd gfbed | gfbaced bgfca ae gdbfe +fcdgba cagdfe cfbeagd bcfg afbdg cga cg gbadfe badgc cdbae | fdgeab cg dfgace gdabf +gfbdac dcfeag edfgcb dbc cb bdagc cbaf cdfag aebgfdc bdeag | gafdc bcd gdcaef bc diff --git a/src/bin/08.rs b/src/bin/08.rs new file mode 100644 index 0000000..9652f32 --- /dev/null +++ b/src/bin/08.rs @@ -0,0 +1,118 @@ +fn main() { + println!("First solution: {}", part1()); + println!("Second solution: {}", part2()); +} + +fn part1() -> usize { + input() + .iter() + .flat_map(|p| &p.challenge) + .filter(|s| matches!(s.count_ones(), 2 | 4 | 3 | 7)) + .count() +} + +fn part2() -> usize { + input().iter().map(Puzzle::solve).sum() +} + +type Digit = u8; + +/// Parse chars a to g to bit flags. +fn parse_char(s: char) -> Digit { + match s { + 'a' => 1, + 'b' => 2, + 'c' => 4, + 'd' => 8, + 'e' => 16, + 'f' => 32, + 'g' => 64, + err => panic!("invalid digit '{}'", err), + } +} + +fn parse_digit(s: &str) -> Digit { + s.chars().fold(0, |a, b| a | parse_char(b)) +} + +#[derive(Debug)] +struct Puzzle { + hints: Vec, + challenge: Vec, +} + +impl Puzzle { + fn solve(&self) -> usize { + // Easy numbers have unique numbers of segments + let one = assert_single(self.by_segments(2)); + let four = assert_single(self.by_segments(4)); + let seven = assert_single(self.by_segments(3)); + let eight = assert_single(self.by_segments(7)); + + // Only three overlaps one + let three = self.by_segments(5).find(|&n| n & one == one).unwrap(); + + // Only nine overlaps four and seven + let nine = assert_single( + self.by_segments(6) + .filter(|&n| n & four == four && n & seven == seven), + ); + + // Find zero. It has 6 segments, is not nine and overlaps one. + let zero = assert_single(self.by_segments(6).filter(|&n| n != nine && n & one == one)); + + // six is the only 6 segment number that's not nine or zero + let six = assert_single(self.by_segments(6).filter(|&n| n != nine && n != zero)); + + // To get five, join one and six. That is a single segment that only five and three have, but we know three. + let five = assert_single( + self.by_segments(5) + .filter(|&n| n & one & six > 0 && n != three), + ); + + // Only two remains + let two = assert_single(self.by_segments(5).filter(|&n| n != five && n != three)); + + let nums = [zero, one, two, three, four, five, six, seven, eight, nine]; + + // We can now decode the challenge + let mut result = 0; + for &d in &self.challenge { + result *= 10; + for (i, &n) in nums.iter().enumerate() { + if n == d { + result += i; + } + } + } + result + } + + fn by_segments(&self, n: u32) -> impl Iterator { + self.hints + .clone() + .into_iter() + .filter(move |d| d.count_ones() == n) + } + + fn from_str(s: &str) -> Self { + let (digits, test) = s.split_once('|').unwrap(); + Self { + hints: digits.split_ascii_whitespace().map(parse_digit).collect(), + challenge: test.split_ascii_whitespace().map(parse_digit).collect(), + } + } +} + +fn assert_single(mut it: impl Iterator) -> Digit { + let result = it.next().unwrap(); + assert_eq!(it.next(), None); + result +} + +fn input() -> Vec { + include_str!("../../input/08.txt") + .lines() + .map(Puzzle::from_str) + .collect() +}