Day 8. I wonder if this wouldn't have been a good excuse to find a Rust/SMT binding.
This commit is contained in:
16
Cargo.lock
generated
16
Cargo.lock
generated
@@ -6,9 +6,25 @@ version = 3
|
|||||||
name = "advent2021"
|
name = "advent2021"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"itertools",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.32"
|
version = "1.0.32"
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ version = "0.1.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
itertools = "0.10.3"
|
||||||
thiserror = "1.0"
|
thiserror = "1.0"
|
||||||
|
|||||||
200
data/day8a.txt
Normal file
200
data/day8a.txt
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
caebgd dagc eabgd aebfgc fbdacge edg dg dbgcef eabfd cgeba | gbcdae dagc acgd gd
|
||||||
|
fgcbed bcedga cafb acgfd cgabd cgf dfaeg dfbcga bceagdf fc | cf gdfea fdagbc dfacg
|
||||||
|
gaed egcbdf edagcf fcaegdb facge afg ga ecbaf fgced fgdabc | cgeaf gfa ga efbac
|
||||||
|
cbdeg cbgeadf cgdfa cgdbae decgf efg cebf egbfdc fgbead ef | fge gfe dcegabf gdcfe
|
||||||
|
bacd cgdbe ecgbf cd cde degba cfaegd gfadbe gbdace baegcdf | cfgdea dce bacd cabd
|
||||||
|
gdbafc cedagb cebga bc edcb gbdefa cebgdaf agfce acb bgdae | afgedb bdce dabeg dbec
|
||||||
|
fadce bad edafbc cgbfa edcagf dacbge dfabc bgecadf edbf bd | efbd baegdc dab db
|
||||||
|
fcaed eb afcdge cfbae gacbf edab becgdaf gcedbf efb bdecaf | be gadbfec eb cedfa
|
||||||
|
cdgbea ebcga feacb age ge afcdgb faegdc acbgd agcfdbe bdeg | gedcab dcagb gea edbg
|
||||||
|
eda bgeaf eabdcg ad ebgdacf egdfac ecdbfg dcfge acdf dagfe | ad ad da beagf
|
||||||
|
cegfa bf ecfabd fgcb egcafd ebfga bgade afb eagbfc dgfbeca | bcegaf fcgb adgbe bcgf
|
||||||
|
fegacb dbagc gdcae fbcd bc dfbgca gdbfa cgb adefbg ecdabgf | cgb fbgdac cabfdg acdeg
|
||||||
|
gfbead cfbgea cfeb bf agcfb baf cdgaf begacd aebcg acgdfbe | fab gdcbeaf afcbeg bfa
|
||||||
|
df acgbf bedag gecbdf dgefacb fdagb gfadeb fbd abgecd efad | bcafg cafdgeb bdf fd
|
||||||
|
defbc dg gadc caebdfg bceagf gecba adegbf ebagdc gecdb dbg | bfgdea aefbdcg dgb dbceg
|
||||||
|
cegbd cafegb gedcab gcebdf ecdf dfbag fbgde ef efg fbaecgd | fedc ef fdec ebagcf
|
||||||
|
dbfag gabdcf dfgbeac efdcag gbcfe ed efbadg efd bade efbgd | bagfd def ed efgbda
|
||||||
|
gafbcde gfbdc fc geafbc cgf ecdfgb cfde dbgac gdfeb gedabf | fced gfc cdbag gfc
|
||||||
|
ef adbefg efdbc cfabd fcea fbe cebdg cbfgda abecfd dagbefc | degcbaf ef fecdagb dafebc
|
||||||
|
acdbf abefgd ea dgcfe acedgf agec faedcgb afe gcbdfe fecad | geca gebadfc fgeabcd efdca
|
||||||
|
agfecd acbg aefdb bg gdcfa gdafb cebdagf gfb dgcafb cgbefd | fbg dgafc fbg bafdg
|
||||||
|
db ebafd dcafeg bcedag eafgb bcdf ecafd adb eabdfc cdbgaef | bgafe dfbea bd daefc
|
||||||
|
egfacd cegfa afbdg facgbe de dfegbc cdae edafg egd ecdfbga | edg defcga aegfc de
|
||||||
|
abdgfce begca egcbf ag gdafbc afge fbdcge daecb cefabg cag | gbfced ga cgedbfa ag
|
||||||
|
faed abcedf eafdbcg aebcf cbagf cgebda ef fbe cbgfde bdcae | afbcg dafe fbe fbe
|
||||||
|
bcea cfdae dcafeb ab cfbdg dgeabf afbcd baf fdacge gacfdbe | baf decgfab fab abce
|
||||||
|
dbeacg agefcd agbefdc cagfe ae aeg aedf gdafc bfceg bacdfg | gea begcf fdcage ea
|
||||||
|
cagdeb ca bcfgad badgef cbaf cgbefad adc fcdga gdfec bfagd | aecbdfg afcb ac bcfa
|
||||||
|
bc begda gebfcad bfcd dbeac abdfce dcafe cbe cafdge bgcfae | bcdf ebdga gbfecda bce
|
||||||
|
dfacgb edbcg gfedab egfab bac begac fcea ca dgfcabe ebacfg | bac cba bgcde ca
|
||||||
|
fgacbe dgeba agebf afb fbcaed eafcgd fb dfegacb bgfc cfgea | cfegabd ceafg bf cbadef
|
||||||
|
fgcab ceabdgf fdabc da gdabcf gdcaeb ecfbag fadg cdbef acd | fagd gfad fcbgae adgf
|
||||||
|
afbgecd cedga cdfb ebgdcf gbfade bcfeag cedgb efgbc bd gdb | fedbcg cefdbg edcag dgb
|
||||||
|
bfcga gfadb egcadf cbeagfd bdfeag bcfegd bd edgaf dbae dfb | bfgadec dfb bfd cbfga
|
||||||
|
cbegad bacde eafdb bcgea cad cfgadb cd gced fgedcab bfecag | fdgbeac eacbdfg acdbe abdfe
|
||||||
|
cebaf dcegbaf edfgab cabgfe bafeg cgaf aegbdc cea febdc ca | ac ac ca cfga
|
||||||
|
db bfd ecdfg febdc debfac egdfab cadb efgacb defacgb bcfae | edbcagf bd debfac fdb
|
||||||
|
egfdcab dcgbe dacgef fbad bafcge ab degfa ebfgad gbdea gab | ba fabgecd ab agedbf
|
||||||
|
afbc efadc efcgabd dfbeac ac bdgeac cfgbed afgde cfdbe dac | ac fegcdb afedc facb
|
||||||
|
acbde cgfdea cdbge cfbdea abd ab gacbdfe fdcgab acefd fabe | fbae dagefbc aefbcgd dba
|
||||||
|
cedbfga dabecf afbge fab ecbfdg gedfba fbgde cbeag dfag af | beafg acbfed fa gdaf
|
||||||
|
ecbgfa eab agdfebc adbg gdfbe dfgecb dabfe afced bagfde ab | bdag gdba dfbge gbda
|
||||||
|
egfdac eadbg gfdab bcdega ae egabdfc cdfbeg dae gcbed bace | dgbefc gadefc ea eacb
|
||||||
|
bgacf dgfcea cbfgeda fdab fa fag fbgadc gcbef cdabeg bcgda | gfa fag afg aedcbg
|
||||||
|
egafdcb dcega dgfbc egdbaf ebdcg dbe eb cabdeg ceab fcdaeg | bed edcfag gadefc fcdbg
|
||||||
|
dgcab afgb bcg dcaeb dbgcaf bg ecfdgba gafced fbcdeg cfdga | cefgdb gacfbed afdgc gbcdfa
|
||||||
|
cgeda bafcg cgdfa dgfcae bceagd bdgface adf fd feabcd efdg | edfg gdeca cgbdfae dcfgaeb
|
||||||
|
dbefga eadcgb gbaedcf daebc geadc bd bcgd bafec bad gaecfd | edagc abcef fceba aecdg
|
||||||
|
bcegf cfbega bgedca befca gabecdf bgc gfca gebdf cg dcfabe | efdbg bcg acgf fecbadg
|
||||||
|
gfcdeba dbaec ecgaf gde agedfb bcafeg gdfc dgeac dg cadefg | egfca fegac edg daebgf
|
||||||
|
bea geadbf be efcad afecgb adfcbg cbefa fcabg gecb egbdfca | eab cbfae gbcafed cbeadgf
|
||||||
|
adgfec bgea fbcdg be fdceba bgedc edb acged bfdceag dgbcea | decfba efcdba gbdface aedgfc
|
||||||
|
ebgfc dcb dc ecfd fecbgd debcg bgfacd defcgab bacgef dgabe | dc adfbceg befgc cfed
|
||||||
|
cbgdea gafc fcegd eagdfb bfdce egc efdag gdafec cg gfbceda | cg ceg dgfea cg
|
||||||
|
fgdab egacbfd decgaf eaf edcfgb ea efdcb aefcbd eadbf abec | fdbea ea acefdb ea
|
||||||
|
bdegcf aegfb eacd ec acfgd gfdeca fce adcfbg begafdc gcaef | acde gbefcd adce fec
|
||||||
|
cdgfbe fdacg cegdf cebd cbeafdg efgcb aegcbf bgfead efd de | fcegdba cbde gbcadfe fed
|
||||||
|
adfge efgbda gacfde gecfba ce feacd adbfc cgde fce dfabgce | fgcaed cgde gfaced fdeac
|
||||||
|
ga cgaefdb dcebfg fbegac gbda acdef cdgeb gbaedc ecadg cag | bagd bgfdce cbgde dbfaecg
|
||||||
|
gec efdabg bfgdcae dfebc agbc aefbg afgbce agecfd cg cegbf | acfdgbe cbdef abcg afbedcg
|
||||||
|
ebcgaf cagdf afbdeg fbcda dcfbeag beacfd befca bfd bd cebd | dfb dbf feacbg gfdaecb
|
||||||
|
ecgdfa afe gbafd bfgdac ae decbf dgebaf afbed abeg cedabfg | egab cgeabfd eadgbfc ebag
|
||||||
|
agcfdeb fdabe gfcaeb edf cegfad badce gdbf fd gbafe fedbga | efd bfgd daecgfb cabefg
|
||||||
|
bcdef gefcadb fdeba fdega ba bgea bgdafc efbagd dfcgae dba | ba ba edafb ebga
|
||||||
|
acgbe age ga agebfd afcebg bdegc acfeb fgca cefdba cabegdf | ag eag afgc ag
|
||||||
|
bacfd feb gfea dabge fegadbc adegbf fe aefdb cbdgae gdcbfe | ef ebdfcg fgdeba efb
|
||||||
|
efgca fadbc daecgf ecbfgd gd daeg dfcagbe agfdc bafecg dgf | fgd cfeagb afegc dfg
|
||||||
|
cgeabd cdagf dfab afcbgd dceafbg adgbc cfd df efdgcb afgec | cdf cfabdg abfd df
|
||||||
|
bgacef acegf adgce cgbfaed dgbec gcdefa afed ad badcgf cda | ad egadc degbfac efcagd
|
||||||
|
de ceafb bfedacg decf cbeda aed gdefab dfacbe gadcb gecbfa | acefb eda edcf ead
|
||||||
|
fdebga dgbcef baf af caefb debcf baecg cgdfaeb dafc facdbe | af fdac fgceadb efcba
|
||||||
|
dgbfac cabdefg ag gda dgcbf gafdb dfaeb bedgcf cafg adcebg | fgadb egfbcad fgca gfbda
|
||||||
|
egcbfda fagbde cb egbcf fbc dcgb cdbafe fgdbe dcefbg ceafg | bfc gfcebda bcf bcf
|
||||||
|
cfeba ag fecag feacgb eag defgc egabfd gbcafed agcb bdacef | gcfabe efcadgb ga gabc
|
||||||
|
fgeadb gbfdace feacb ed bacfde fdbcg edca ecbdf cebgfa def | ebcfa acebdgf efd aced
|
||||||
|
fcgad aegfdb ea bdfcea dea egfbd aebg cgbedaf begfdc fedag | geba egbfd fdagbe dcbaef
|
||||||
|
faebdg efbca fadce bgefa fcbgae dbecfag bgcf cb ecb dgaecb | cadebgf ecb gcfb cb
|
||||||
|
ecdf begca cbagfd ed edb dfebacg cdgfb bcedg cgbfed edagbf | de dfce gedcbf de
|
||||||
|
badfec dfgcab gdbeafc cbf defc acefb ebdgaf cf abedf egacb | cdfe cdef fedc fc
|
||||||
|
afcgbd fdcg fbc bgdac acbgef cf fcabd gdebca fbaed fcdageb | cf fbc cf gfcd
|
||||||
|
cefba dbef fe gdafec dbcae fdebac bfadcge fec gceabd abcfg | gacedb debac bcaed gacfdbe
|
||||||
|
bagfe db bdf gafdc bfgda cgefbd cafedg fcgabd fdeacbg dacb | gabdf cdgbfa bd egfbdc
|
||||||
|
dbcaef bacfd begfcd gbafc cedbf da eabd gecdfa cda fbecgda | aedb cda efcdb adcfbe
|
||||||
|
faebgd afcbdg gf dbacfeg gdf degfa dcfea gebda dgaceb gfbe | bgfe decaf gf edgfa
|
||||||
|
fg aecgbfd ebcfa efabg adgeb fge egcbdf bedagf dbcaeg fagd | fg dfga gfda gafd
|
||||||
|
cedgabf dcba ab cedaf bae cabefd fgaced fdaeb fabgec dfgeb | bedfac ab fecbga debfcag
|
||||||
|
dec ce fcabde daefb fgabde aefc bdagc dcgfeb efcdabg caedb | gadbfec ecfa baefgd ce
|
||||||
|
egcaf ed adbe afbcd dgfecba acbdgf edf decfab edcaf egbcfd | dgecfab eabdfcg fbdaec abed
|
||||||
|
fea febcg eacgf ecda cdgfa agcedfb edgfba ae agcfde cbadgf | fcegb fgbaced dcafg caed
|
||||||
|
gebfd ec dec eabc bafcged debgc fecgda fdgabc dcgabe cgadb | adegbcf gbacfed bfgcdea ce
|
||||||
|
egfdab cad bcgad cd bcfga gfdbcea dgcaeb cedg defbac beagd | cadbfe decg cd cadfeb
|
||||||
|
cge gadebfc fbcgae gc dagec agdeb dcefga cgdf afbecd ecfda | ebgcaf dbeag fgcdbae dgcf
|
||||||
|
bdegca ecbdaf bfae cgdfb ebafdgc ba dfabc bac feagcd fdcea | bac ebcfadg ba ab
|
||||||
|
gceda eab agbfedc eafcdg ab gbac bgdef gacbed dgbea cfaebd | bgfcade ba abgc bae
|
||||||
|
gbfe eg gcfdeb daebcg bcdef cgefd cdfag fbdeac egcadfb gec | ge befgdc gce egc
|
||||||
|
bga gbeacd cbgde gdefcab cagbdf ab beda cfbegd aecgf agecb | agfce daeb bead agb
|
||||||
|
fedgba agecbf bc bcdf cgb febdcg ecgfabd gcade dgbec efgdb | bgedfac cb bc bc
|
||||||
|
gfaeb bcdfe cea gfca bdacge aecbdfg fegbca ac dfgbae caefb | cfga agcf cfga cbgade
|
||||||
|
cgeab fbegda adb dagbfec eafgbc bd bgcd adecf cegdba daebc | efbcdag gdcb bd deacfgb
|
||||||
|
bcagd cbgde gbfad eabdgf cda ceabfd fcag cdgabf agcbdfe ca | ca ca ac cda
|
||||||
|
agdce dageb eacdbf ecgdaf bafgd dgfacbe dgbaec bceg bea be | gceb bgdcaef edgac aedgc
|
||||||
|
bceadf adcfeg ga dfag geacd cabegdf ceafgb gca aecfd edcbg | ag acbfde gdfa ag
|
||||||
|
fdcegb abdfce cdega bgcad gfea cae ae bcafged fagedc fgdec | gfdce bafcde gfcdeb ae
|
||||||
|
egbcda cebadf bfe ef bedcg bgfda fgec fedbg begcfad gdbcef | bef gcbeda ef ecgf
|
||||||
|
egfdb cgd gdbfea cgbdf fdcba fgbdaec agbdec cg fecg cgdbfe | abgfedc fbcgd cegf gc
|
||||||
|
cfbegd ab gbacfd agefd ceab baf acfgdeb eafbgc bfegc bagef | ba abf beca baf
|
||||||
|
fcega fecda cbgaef fgaedb gbfc geadbc fag ecbdgaf eacgb fg | ecdfa bfgc dgebaf gcabe
|
||||||
|
aefdcg gfdcab ab fagb dbaegcf adb faecbd gcadb fcgad ebdgc | gadcef bfdaecg fgba fgecad
|
||||||
|
eabfc cdebf bgfca ecfbgad fbdceg aeb gceabd afde ea cbfade | abcdgef eabfc abe bdcfae
|
||||||
|
cd dgfceab dec cbegfd gedaf adfgec ecbag fgadbe cadf cgdea | fgedbc edc dce adcgfeb
|
||||||
|
agcdbf ecdgf adfcg agfcbed ef ecdfab efc agfe cgebd defagc | eadcfb cfdbega cef geaf
|
||||||
|
cdbafe deacf ga dbecag fecdagb bcfge gfda caedfg gae eagfc | ga eag gfcebad cfgae
|
||||||
|
ceadfg bdf gfbec adbe fbegd abgdfc bd gdefa gdfeba dgacefb | bagedfc facedgb fbd bd
|
||||||
|
ecdba ecdagb gcfeda fbdaeg cfedb befcdag ca agedb abcg ace | cea fbaged eca bcag
|
||||||
|
gfedc gdaf gaefc dcf bgcde gdeafc fcgadeb gecabf cdafbe df | fd gcaef df egfdca
|
||||||
|
afegb cefgb eadcbg cgfbad dbecg cfde aegbcdf fcb gdebfc fc | fbcged bcf gbced aefgdcb
|
||||||
|
ca bfeda cae ecdfgb edgcf dgceaf gbaced afcg gbeacdf aefcd | ac dfcebag cagf ace
|
||||||
|
begcad efdagb fbgeadc fedcba aec abedg fcegb ca cgda abegc | abcfgde fgebadc bagedf gdca
|
||||||
|
aegb cfeadb acdgf decgbf ecgdb gcfedab bgdcea ba gbdac bad | bgceda gdafc fgadc dafcbe
|
||||||
|
fgecba aec adfe deacb ae abegdcf bcdag ecbfd gecdbf dafceb | gdcab ae edfa daef
|
||||||
|
agfde eacg adebfg fdgcb cafdg fgdeca cfbaed ac gcadfbe acf | fca gdfae acge dbeacf
|
||||||
|
fbagce de deg edfa fcbdg gbdcae aegfb dbgfe dgacbfe gefbad | edfa de ged bdgcf
|
||||||
|
bacfdg cdeafgb aecbfd daefb agedc afc abdefg cebf deacf cf | gbdafc efbc cfead fc
|
||||||
|
cegfab cdag bdc dc febad gfdbce dcaefbg gfbac dcafbg cdabf | dgafcb cdag dcbgeaf gaefdbc
|
||||||
|
dagefb acefg afdcb gd dgfaecb facbgd bcdg gda badcfe fgacd | fbecgda cfadb gbdc fcaeg
|
||||||
|
gfbd cfeda gabcfe db dba baefg beafd bcgdae fedcbag efbdag | dba bad ebgaf dbegfca
|
||||||
|
cf fbdega aefbg afbcedg edgca dgbcfe gfaec febcag ecf afcb | aefbg gcaefb dbcegaf cef
|
||||||
|
gebdaf abgd cdabfe gacefbd agfed dg ged fegac aebfd fbdcge | egd abdegcf gadb afbgde
|
||||||
|
gcdf efdcb acfebd beagdc gd bdefg ebfcgd bdg fbega geabcfd | dgceba ecadgb adgfbce edbgf
|
||||||
|
fdcaebg efbdgc bgdacf dcae cbdge gebaf abd edgab da bgaedc | cebagd ad da gebcda
|
||||||
|
bfgcae cbd bcfea aedcb gbefcd cd adecfb adfc cagdfbe dbega | fcad cdabgfe dacf dcb
|
||||||
|
becg gfbace egacfbd acbfg acdfgb aec ce bdfea cgedaf fbcea | afcbg fedagc befac aecfgd
|
||||||
|
befa cgfed cfadb gdcfba acdfe ace edgbac fgcdbea ceafdb ae | feab eacdf bcdgafe bfae
|
||||||
|
bcdefag dafeg fgec dgeafc gea gdfbca cgdaeb bfdea eg dgafc | eg aefcdgb ecdfag gea
|
||||||
|
gfadb gedfb bdecgfa adbefg dcgaf abf gdcefb aebg ab bafced | gdbfe gbfed ebag cabgfde
|
||||||
|
dbegfa acgbdf eg gcfbed gdafb bfacegd ebg aged fageb bacfe | ge gefcdba ge bgdfa
|
||||||
|
adbgec fdceg afdgc bedf cfe fe gaecbdf faebgc gcbed fcbedg | acfdg gdeabc debf ef
|
||||||
|
dfgbe da ecbadg dafeg fadb gfdbea dagcfbe dbgfec cfgea dga | befdg agd eafdg fabd
|
||||||
|
bedc aefbc ceadfb fdb cbagfed fecgab dcfba gaebdf cfagd bd | db bfd bfcae adgefb
|
||||||
|
cabedgf edbfgc gedcfa bacegf fde dgbf baced fd fedbc fegbc | fcdeb adbgefc adecgbf fde
|
||||||
|
fged egafc ecafgd efcda dfa dfcabg becfag fd agcdfbe ecdab | dgef fd dgfe df
|
||||||
|
deafgb gbfdc dg dbg agdc dbcafg cadfb bafced fgbce daegbfc | gbfdac afdgcb dgb gdcfb
|
||||||
|
dfecb fabdge cegbaf fdca faecb aefcdb bdf gdbce afgcebd fd | dbf fbd edcabgf fadc
|
||||||
|
cbf egabfdc fdcgba fabecd cf dfagb gfac adbegf cdegb bcfgd | acfg afgbed cgdfab fc
|
||||||
|
ebdfagc bcfa gecfdb af daegbf fgcbd bcdfag egcda fgdca gfa | fcab gafcdb dbfega acfb
|
||||||
|
adfbg eacb abfcg ecafbg gface ecfgad bc degfbc cbg gabdefc | cb gabefcd cagfebd agcbfe
|
||||||
|
ebgad bef gacfe gceadf fb efcagbd eabfcd cegfab gbfc ebagf | cefadg fcgae fgbc ebacdgf
|
||||||
|
dcg aged efacd cfgdae edacbf edfcg bcagdef gd fecbg dcfbag | cdeabgf gd gcd adge
|
||||||
|
fecgda cdabefg gabfc gfacbd ecgabf cbafe bcdef ea ace bgea | egba gabe beagfdc fbcag
|
||||||
|
bacdgf eafbd cagde becad afgcedb bc fbegad cfbe cba fcdaeb | fcbe abc dbecaf edcba
|
||||||
|
ecbdf dagfceb abcfde cbade aebgc adb bfgead debfgc cafd ad | bad dcaf begac da
|
||||||
|
gbae deafb fdgbea cegfd ag cdaefb cgabefd degfa dag dfcgab | baeg agefdb bcdafg cbdfga
|
||||||
|
ebcdf gdeafbc cdgbfe eaf cdfa deafbc gedab aecfbg ebadf af | befacd ebfda af af
|
||||||
|
cfab dcb gfedbac bc cgaedb fbdge cbfdg acgbdf gdcaf acgdfe | bc fcab afcb dbc
|
||||||
|
edbag gebdc bedfag eacdbg bcedgfa ecab ec gaedcf bdcfg cge | ce ceab ec bdegcaf
|
||||||
|
fedcba fbgca cbafge ef gbdacf efbgcad gefca befg ecdga afe | fea adgfcb fcage bcdfae
|
||||||
|
da edfgc cgfdba adfecgb gfaeb dcefga fecdgb gad gdeaf ecad | cedfg dbfcega gfcaed abdcfeg
|
||||||
|
fcgbed fcbedga cafbe gdceba bcafge bfe fagb fb eacbg facde | cdfbeg fb ebgcadf fgcedba
|
||||||
|
fecdb fdcbae afdeg cdfea aec efgbadc ca cbfa dcagbe gbefdc | facb fabc fcdbega efadcb
|
||||||
|
dagcf gadfeb ad dfegbc cgdfba dbac abgecfd dcgfb cfgae adf | fgadc cbda ad cfagd
|
||||||
|
fdgcb agedbc cdbef feac efb ef febdac afdegb abced edgafcb | fe bfecd dcebf cafe
|
||||||
|
cafdbg eaf fe gebf befcag cfbga cgaef fdaecbg edcga febacd | gfbe egbf aebgcdf faceg
|
||||||
|
bfc febg cdfga dafbec cegbd fb cdbgfe cbfgd cadegb gbefdac | dcefgb dbfcg deafbc gbdec
|
||||||
|
bacgd cedfbg cf aefc dfc aecgdf adfcgeb gafed cafgd baefdg | dgafc fc dfc gfbced
|
||||||
|
bcge fgc efcdab ecgafb cfeab fabgd fagbc bgcdeaf efcagd cg | cbeg bdagf bcgaf fgc
|
||||||
|
cdaeg fbaec ceafd fd cfd adfceb bgaecf dbcegf bdaf cgeabdf | df cdf fdagbce cbedaf
|
||||||
|
dgcbf gecfadb gbdecf gfdbca fbagde ad cdgab dag afcd caegb | cgbedf dfac bdacfeg cafdbg
|
||||||
|
defacg bd cdbegaf cfaeb dbf cbefgd cgdaf cfbgda facbd gabd | gfadec bdf gbad adgcef
|
||||||
|
bagdce deagcf bcdf cfa abgfdc cf geacfbd afgeb bacfg dcagb | cf cdbf aedcbfg fbdc
|
||||||
|
fbceda bedcf dg gefcdb aefbgd gdf cgde gfacb bdcfg dfcegab | dfbagec dfg cabdfeg gd
|
||||||
|
gda cfgbde dgbfc fgabdc fcagd cagfe baecgdf faebdg ad adbc | efgdcb dag dacb ad
|
||||||
|
dagec eca fgeacd cdefab gfdacbe afged dabgfe ac dcebg afgc | bdgce ecdga eagdc ca
|
||||||
|
da bda gadc dbafg fabgc faedcb dfcbgea agcfbe bedgf gfbadc | acbfegd gfabdc bad da
|
||||||
|
gdce aebfdg faebc fcdabg acgfedb eacgdb adc adgeb cd daceb | cd cgbadf cad edcg
|
||||||
|
caedb agbed gfbcad eca fdce gbface baefdcg acfdb fbedca ce | eac cebadf fagcdb cae
|
||||||
|
fcbadeg fcae bfdca ceb ec cdebaf ecbdf gcedab bgdfe dfagcb | geabcd acef agbced gdbeafc
|
||||||
|
cbdef degba efbad eafc dbcfge ecdafb af fcbgad edfbcag baf | gbdea ecaf eacf egfcdab
|
||||||
|
fcde gabfd cdgeba fac fc dcabe bfaced dacbf ebgfac cgfbeda | adcfb fca gebdfca fadbc
|
||||||
|
fdceg cbd edcgfa cb cdgfeb gdebac edgcafb fceb agbdf bgcfd | adfgce beacdgf bc cedfbag
|
||||||
|
fcbegda dbcefg gcebad gbfc cdb gfbaed bc cebfd ecdfa bdegf | dcb gabedf beafdg bc
|
||||||
|
cfaed bacdg egd aegcdf gcef gedac cdbefga afdgbe bdfaec eg | gcade cefad bdgfea gaedc
|
||||||
|
ac dbeacg ace defba fcaebdg dabfce abfedg dcaf cbfae efbcg | fegdba cfbae cea dbacfe
|
||||||
|
dgcaef bgcaef cfdgeb gd fgecb dcgfbae gebfd bgdc adebf fdg | gdf dafgbec dfg adfeb
|
||||||
|
ag cadg cgfed aefbc bcegdf agdfbe agf egfca gefcdba gdfeac | dgca dgcaef cdga adebcfg
|
||||||
|
dfcgbe badg aedgc eabfc dfcbega cgdafe eagbc aegcdb gbe bg | acfdge bge adbg bg
|
||||||
|
bcfage adcefg dfagc fgaec cdf abcgd dcbgafe df dfae fgcbed | df cfd eacgf fdc
|
||||||
|
cbadfe bfg cfgebd cbdg edfgbca bg egbdf feagcb fedag cefdb | fgdeb gfb fbdeca bgcd
|
||||||
|
bcde fdcgba abfcde dbfac abefc befga aec ce acfdge afdegbc | fcbad eac ec becd
|
||||||
|
ce cbagdf gdcbf cfaebdg gcbe acfdge fcdegb dbaef cef bcefd | acbgdfe cfebd gcebdf ec
|
||||||
|
ecgbd eacbf cgadeb edf ecafbdg afgebd dcgf ecfbd fgcbed fd | bcfea edf efgabcd df
|
||||||
|
dgbf egafcd cfedbag cgb abcef dcefg ebcfg cgeadb bg cgbfed | adfgebc egbcf cfeab gaefbdc
|
||||||
|
gecbfd gbedc dgabcef baefgd abegc dbfce bfdace dg gdb dfcg | dfgc bedfac dg dbg
|
||||||
|
acbdgf daeb gcbeaf gdfce adefg fbdga cbdfega fae fgdbea ea | ea fcdgaeb ae gecfadb
|
||||||
|
ga bdgafe bcaed dcgaebf bacfed acedg gbadec edgfc agd bcga | adg dga agcb fdecgab
|
||||||
|
ebdcfg cfbdg ecgabf gcd edfc fdcbeag ebcdag dabgf dc cgebf | cd gcd gacbde cd
|
||||||
|
egdfac bf afebdg baf bfdeca bgdf fedga egacb gecbafd gbeaf | bfa fb gfdb fb
|
||||||
|
gcafb dc gecd fecbgda cfdbg dfebgc cdf fbegd dcfbea fgedab | edfcbg dgbcf cd dcf
|
||||||
|
badf fcagd agcefb dfgcab ba dcbeg cedabgf abgdc acegfd abg | ebfagc dfab ab fcbdeag
|
||||||
|
cfgbad gdbfe fe efgdacb cbdge dabgfe egdcaf befa bdgfa egf | decagfb eabf baef fe
|
||||||
|
dbfea bcaefdg dcfgeb ag bfceag egfcda becfg fgeba gcab ega | agbfecd aedfcgb gcba ga
|
||||||
10
data/day8t.txt
Normal file
10
data/day8t.txt
Normal file
@@ -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
|
||||||
312
src/bin/day8.rs
Normal file
312
src/bin/day8.rs
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
use itertools::Itertools;
|
||||||
|
use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
const TEST_DATA: &str = include_str!("../../data/day8t.txt");
|
||||||
|
const DAY8_DATA: &str = include_str!("../../data/day8a.txt");
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
struct ProblemInput<'a> {
|
||||||
|
signal_patterns: [&'a str; 10],
|
||||||
|
output_values: [&'a str; 4],
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a str> for ProblemInput<'a> {
|
||||||
|
fn from(x: &'a str) -> Self {
|
||||||
|
let (signals, outputs) = x.split_once(" | ").unwrap();
|
||||||
|
let mut signal_patterns = [""; 10];
|
||||||
|
let mut output_values = [""; 4];
|
||||||
|
|
||||||
|
for (i, val) in signals.split(' ').enumerate() {
|
||||||
|
signal_patterns[i] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i, val) in outputs.split(' ').enumerate() {
|
||||||
|
output_values[i] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
ProblemInput {
|
||||||
|
signal_patterns,
|
||||||
|
output_values,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn problem_input() {
|
||||||
|
let input =
|
||||||
|
"acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf";
|
||||||
|
let parsed = ProblemInput::from(input);
|
||||||
|
assert_eq!(
|
||||||
|
["acedgfb", "cdfbe", "gcdfa", "fbcad", "dab", "cefabd", "cdfgeb", "eafb", "cagedb", "ab"],
|
||||||
|
parsed.signal_patterns
|
||||||
|
);
|
||||||
|
assert_eq!(["cdfeb", "fcadb", "cdfeb", "cdbaf"], parsed.output_values);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_file_data(input_file: &str) -> Vec<ProblemInput<'_>> {
|
||||||
|
let mut retval = Vec::new();
|
||||||
|
|
||||||
|
for line in input_file.lines() {
|
||||||
|
retval.push(ProblemInput::from(line));
|
||||||
|
}
|
||||||
|
|
||||||
|
retval
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
|
||||||
|
enum Segment {
|
||||||
|
Top,
|
||||||
|
TopLeft,
|
||||||
|
TopRight,
|
||||||
|
Middle,
|
||||||
|
BottomLeft,
|
||||||
|
BottomRight,
|
||||||
|
Bottom,
|
||||||
|
}
|
||||||
|
|
||||||
|
const SEGMENTS_USED: [&[Segment]; 10] = [
|
||||||
|
/* 0 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::BottomLeft,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 1 */ &[Segment::TopRight, Segment::BottomRight],
|
||||||
|
/* 2 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomLeft,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 3 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 4 */
|
||||||
|
&[
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomRight,
|
||||||
|
],
|
||||||
|
/* 5 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 6 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::BottomLeft,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 7 */ &[Segment::Top, Segment::TopRight, Segment::BottomRight],
|
||||||
|
/* 8 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomLeft,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
/* 9 */
|
||||||
|
&[
|
||||||
|
Segment::Top,
|
||||||
|
Segment::TopLeft,
|
||||||
|
Segment::TopRight,
|
||||||
|
Segment::Middle,
|
||||||
|
Segment::BottomRight,
|
||||||
|
Segment::Bottom,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
fn recognize_number(segs: &[Segment]) -> Option<usize> {
|
||||||
|
for (result, digit_info) in SEGMENTS_USED.iter().enumerate() {
|
||||||
|
if digit_info.len() == segs.len() && segs.iter().all(|x| digit_info.contains(x)) {
|
||||||
|
return Some(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn reasonable_assignments(assigns: &HashMap<char, Segment>) -> bool {
|
||||||
|
let mut tester = HashSet::new();
|
||||||
|
|
||||||
|
for value in assigns.values() {
|
||||||
|
if tester.contains(value) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tester.insert(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build_local_iterator<'a>(
|
||||||
|
input: (&'a char, &'a HashSet<Segment>),
|
||||||
|
) -> impl Iterator<Item = (char, Segment)> + Clone + 'a {
|
||||||
|
let (c, set) = input;
|
||||||
|
set.iter().map(|x| (*c, *x))
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ProblemInput<'a> {
|
||||||
|
fn unique_outputs(&self) -> usize {
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
for v in self.output_values.iter() {
|
||||||
|
let len = v.len();
|
||||||
|
|
||||||
|
if len == 2 || len == 4 || len == 3 || len == 7 {
|
||||||
|
result += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn find_letters_for(&self, len: usize) -> &str {
|
||||||
|
for x in self.signal_patterns {
|
||||||
|
if x.len() == len {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panic!("Couldn't find letters for size {}", len);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn possible_assignments(&self) -> HashMap<char, HashSet<Segment>> {
|
||||||
|
let mut result = HashMap::new();
|
||||||
|
|
||||||
|
for label in 'a'..='g' {
|
||||||
|
result.insert(label, SEGMENTS_USED[8].iter().copied().collect());
|
||||||
|
}
|
||||||
|
|
||||||
|
let one = self.find_letters_for(2);
|
||||||
|
let four = self.find_letters_for(4);
|
||||||
|
let seven = self.find_letters_for(3);
|
||||||
|
|
||||||
|
for letter in one.chars() {
|
||||||
|
result.insert(
|
||||||
|
letter,
|
||||||
|
HashSet::from([Segment::TopRight, Segment::BottomRight]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
for letter in four.chars() {
|
||||||
|
if !one.contains(letter) {
|
||||||
|
result.insert(letter, HashSet::from([Segment::TopLeft, Segment::Middle]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for letter in seven.chars() {
|
||||||
|
if !one.contains(letter) {
|
||||||
|
result.insert(letter, HashSet::from([Segment::Top]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn assignments_validate(&self, assignments: &HashMap<char, Segment>) -> bool {
|
||||||
|
let mut found = HashSet::new();
|
||||||
|
|
||||||
|
for input in self.signal_patterns {
|
||||||
|
let segments: Vec<Segment> = input
|
||||||
|
.chars()
|
||||||
|
.map(|x| assignments.get(&x).unwrap())
|
||||||
|
.copied()
|
||||||
|
.collect();
|
||||||
|
match recognize_number(&segments) {
|
||||||
|
None => return false,
|
||||||
|
Some(x) if found.contains(&x) => return false,
|
||||||
|
Some(x) => {
|
||||||
|
found.insert(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn compute_output(&self, assignments: HashMap<char, Segment>) -> Option<usize> {
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
for output in self.output_values.iter() {
|
||||||
|
let segments: Vec<Segment> = output
|
||||||
|
.chars()
|
||||||
|
.map(|x| assignments.get(&x).unwrap())
|
||||||
|
.copied()
|
||||||
|
.collect();
|
||||||
|
let value = recognize_number(&segments)?;
|
||||||
|
result = (result * 10) + value;
|
||||||
|
}
|
||||||
|
|
||||||
|
Some(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn solve(&self) -> Option<usize> {
|
||||||
|
let possible_sets = self.possible_assignments();
|
||||||
|
let possibles = possible_sets
|
||||||
|
.iter()
|
||||||
|
.map(build_local_iterator)
|
||||||
|
.multi_cartesian_product()
|
||||||
|
.map(|x| HashMap::from_iter(x.iter().cloned()))
|
||||||
|
.filter(|x| reasonable_assignments(x));
|
||||||
|
|
||||||
|
for assignments in possibles {
|
||||||
|
if self.assignments_validate(&assignments) {
|
||||||
|
if let Some(result) = self.compute_output(assignments) {
|
||||||
|
return Some(result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn count_unique_outputs(inputs: &[ProblemInput]) -> usize {
|
||||||
|
inputs.iter().map(|x| x.unique_outputs()).sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn sum_outputs(inputs: &[ProblemInput]) -> usize {
|
||||||
|
inputs.iter().map(|x| x.solve().unwrap()).sum()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn regression() {
|
||||||
|
let example_input =
|
||||||
|
"acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf";
|
||||||
|
let example = ProblemInput::from(example_input);
|
||||||
|
assert_eq!(5353, sum_outputs(&[example]));
|
||||||
|
|
||||||
|
let test_data = from_file_data(TEST_DATA);
|
||||||
|
assert_eq!(26, count_unique_outputs(&test_data));
|
||||||
|
assert_eq!(61229, sum_outputs(&test_data));
|
||||||
|
let real_data = from_file_data(DAY8_DATA);
|
||||||
|
assert_eq!(519, count_unique_outputs(&real_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let real_data = from_file_data(DAY8_DATA);
|
||||||
|
println!("Part #1: {}", count_unique_outputs(&real_data));
|
||||||
|
println!("Part #2: {}", sum_outputs(&real_data));
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user