Solve 2021/08
parent
64337c6479
commit
50812b3890
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day08"
|
||||||
|
version = "0.1.0"
|
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "day08"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
@ -0,0 +1,124 @@
|
|||||||
|
https://adventofcode.com/2021/day/8
|
||||||
|
|
||||||
|
## \--- Day 8: Seven Segment Search ---
|
||||||
|
|
||||||
|
You barely reach the safety of the cave when the whale smashes into the cave
|
||||||
|
mouth, collapsing it. Sensors indicate another exit to this cave at a much
|
||||||
|
greater depth, so you have no choice but to press on.
|
||||||
|
|
||||||
|
As your submarine slowly makes its way through the cave system, you notice
|
||||||
|
that the four-digit [seven-segment
|
||||||
|
displays](https://en.wikipedia.org/wiki/Seven-segment_display) in your
|
||||||
|
submarine are malfunctioning; they must have been damaged during the escape.
|
||||||
|
You'll be in a lot of trouble without them, so you'd better figure out what's
|
||||||
|
wrong.
|
||||||
|
|
||||||
|
Each digit of a seven-segment display is rendered by turning on or off any of
|
||||||
|
seven segments named `a` through `g`:
|
||||||
|
|
||||||
|
[code]
|
||||||
|
|
||||||
|
0: 1: 2: 3: 4:
|
||||||
|
_aaaa_ .... _aaaa aaaa_ ....
|
||||||
|
_b c_ . _c_ . _c_ . _c b c_
|
||||||
|
_b c_ . _c_ . _c_ . _c b c_
|
||||||
|
.... .... _dddd dddd dddd_
|
||||||
|
_e f_ . _f e_ . . _f_ . _f_
|
||||||
|
_e f_ . _f e_ . . _f_ . _f_
|
||||||
|
_gggg_ .... _gggg gggg_ ....
|
||||||
|
|
||||||
|
5: 6: 7: 8: 9:
|
||||||
|
_aaaa aaaa aaaa aaaa aaaa_
|
||||||
|
_b_ . _b_ . . _c b c b c_
|
||||||
|
_b_ . _b_ . . _c b c b c_
|
||||||
|
_dddd dddd_ .... _dddd dddd_
|
||||||
|
. _f e f_ . _f e f_ . _f_
|
||||||
|
. _f e f_ . _f e f_ . _f_
|
||||||
|
_gggg gggg_ .... _gggg gggg_
|
||||||
|
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
So, to render a `1`, only segments `c` and `f` would be turned on; the rest
|
||||||
|
would be off. To render a `7`, only segments `a`, `c`, and `f` would be turned
|
||||||
|
on.
|
||||||
|
|
||||||
|
The problem is that the signals which control the segments have been mixed up
|
||||||
|
on each display. The submarine is still trying to display numbers by producing
|
||||||
|
output on signal wires `a` through `g`, but those wires are connected to
|
||||||
|
segments _randomly_. Worse, the wire/segment connections are mixed up
|
||||||
|
separately for each four-digit display! (All of the digits _within_ a display
|
||||||
|
use the same connections, though.)
|
||||||
|
|
||||||
|
So, you might know that only signal wires `b` and `g` are turned on, but that
|
||||||
|
doesn't mean _segments_ `b` and `g` are turned on: the only digit that uses
|
||||||
|
two segments is `1`, so it must mean segments `c` and `f` are meant to be on.
|
||||||
|
With just that information, you still can't tell which wire (`b`/`g`) goes to
|
||||||
|
which segment (`c`/`f`). For that, you'll need to collect more information.
|
||||||
|
|
||||||
|
For each display, you watch the changing signals for a while, make a note of
|
||||||
|
_all ten unique signal patterns_ you see, and then write down a single _four
|
||||||
|
digit output value_ (your puzzle input). Using the signal patterns, you should
|
||||||
|
be able to work out which pattern corresponds to which digit.
|
||||||
|
|
||||||
|
For example, here is what you might see in a single entry in your notes:
|
||||||
|
|
||||||
|
[code]
|
||||||
|
|
||||||
|
acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab |
|
||||||
|
cdfeb fcadb cdfeb cdbaf
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
(The entry is wrapped here to two lines so it fits; in your notes, it will all
|
||||||
|
be on a single line.)
|
||||||
|
|
||||||
|
Each entry consists of ten _unique signal patterns_ , a `|` delimiter, and
|
||||||
|
finally the _four digit output value_. Within an entry, the same wire/segment
|
||||||
|
connections are used (but you don't know what the connections actually are).
|
||||||
|
The unique signal patterns correspond to the ten different ways the submarine
|
||||||
|
tries to render a digit using the current wire/segment connections. Because
|
||||||
|
`7` is the only digit that uses three segments, `dab` in the above example
|
||||||
|
means that to render a `7`, signal lines `d`, `a`, and `b` are on. Because `4`
|
||||||
|
is the only digit that uses four segments, `eafb` means that to render a `4`,
|
||||||
|
signal lines `e`, `a`, `f`, and `b` are on.
|
||||||
|
|
||||||
|
Using this information, you should be able to work out which combination of
|
||||||
|
signal wires corresponds to each of the ten digits. Then, you can decode the
|
||||||
|
four digit output value. Unfortunately, in the above example, all of the
|
||||||
|
digits in the output value (`cdfeb fcadb cdfeb cdbaf`) use five segments and
|
||||||
|
are more difficult to deduce.
|
||||||
|
|
||||||
|
For now, _focus on the easy digits_. Consider this larger example:
|
||||||
|
|
||||||
|
[code]
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
[/code]
|
||||||
|
|
||||||
|
Because the digits `1`, `4`, `7`, and `8` each use a unique number of
|
||||||
|
segments, you should be able to tell which combinations of signals correspond
|
||||||
|
to those digits. Counting _only digits in the output values_ (the part after
|
||||||
|
`|` on each line), in the above example, there are `_26_` instances of digits
|
||||||
|
that use a unique number of segments (highlighted above).
|
||||||
|
|
||||||
|
_In the output values, how many times do digits`1`, `4`, `7`, or `8` appear?_
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
0: 1: 2: 3: 4:
|
||||||
|
_aaaa_ .... _aaaa aaaa_ ....
|
||||||
|
_b c_ . _c_ . _c_ . _c b c_
|
||||||
|
_b c_ . _c_ . _c_ . _c b c_
|
||||||
|
.... .... _dddd dddd dddd_
|
||||||
|
_e f_ . _f e_ . . _f_ . _f_
|
||||||
|
_e f_ . _f e_ . . _f_ . _f_
|
||||||
|
_gggg_ .... _gggg gggg_ ....
|
||||||
|
|
||||||
|
5: 6: 7: 8: 9:
|
||||||
|
_aaaa aaaa aaaa aaaa aaaa_
|
||||||
|
_b_ . _b_ . . _c b c b c_
|
||||||
|
_b_ . _b_ . . _c b c b c_
|
||||||
|
_dddd dddd_ .... _dddd dddd_
|
||||||
|
. _f e f_ . _f e f_ . _f_
|
||||||
|
. _f e f_ . _f e f_ . _f_
|
||||||
|
_gggg gggg_ .... _gggg gggg_
|
@ -0,0 +1,2 @@
|
|||||||
|
acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab |
|
||||||
|
cdfeb fcadb cdfeb cdbaf
|
@ -0,0 +1,20 @@
|
|||||||
|
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
|
@ -0,0 +1,200 @@
|
|||||||
|
dcga cadgbfe gecba cbfde eda cdbea gbadfe fegcba bedgca da | bgefdac bdace ad agcd
|
||||||
|
fe ecf fdbagec dcgfab defbca efbcga daceg cfdea bfed fdbca | aefdc fbde abdefc dcgae
|
||||||
|
fbg cgafe bf bfdc ebdcag fgcdba gbdecaf bcfag badgc gdefab | bfg bf bf bdgeca
|
||||||
|
bgedf gecabd cd cadbgf agcbe aedcgbf ecgbd ecda agfecb gcd | bdacfge cd cade dcae
|
||||||
|
cedabf gcfab cad abegcd fcbedag aedbf gbedaf dc ecdf bdfca | cad dc dc bedacfg
|
||||||
|
ed gfdcbae acbdfg ecgd cdfeag fbdage dfcae fbaec eda gdacf | dae fadgbc ecgd aedcgf
|
||||||
|
dgb gb dfaeb beadg cdaeg bgdfae bafg cdgfeb aebfcd gcaebdf | aefcbd bgaf afgb dgb
|
||||||
|
fdabc ef cfaed daebgc fgebda fde dceag gfce cbgfdea eacfgd | adceg edbcagf edf fe
|
||||||
|
dagebf bdc bc afecd daceb cgbe dabceg edbag dfcagb cefgbad | dbc dabge abdgce cegb
|
||||||
|
dfgeb ebgfc dcabef gcab bc gaecbf cdfega cgfae bce efabdcg | cgfae cb gcdebaf efgca
|
||||||
|
afc gcdeab gdbfac bceafd becad ebaf fa faecd gfadebc cedfg | cgdfe afc acf af
|
||||||
|
dcgba gfabdc edgbfa gfdab bdc acfegdb bc adgec bgfc eadbcf | fdaegbc gfbc bdc cb
|
||||||
|
adg gbfac acdfbge fedca cdgfa ecafbg aegbfd gd cbdg gdfabc | bdfgac fcabedg agd dfbgcea
|
||||||
|
fdcgba bfc cfadb aebfd acgb cafgd fgdceb gcdaef cagbedf cb | bcag dfeba agbc cbag
|
||||||
|
gedaf afbcdeg ecgadb cbgafe dc efgcd dce cgefb cgdbef fbdc | bcgef efgabc dc degfcb
|
||||||
|
abdgcf abefc fd gfbacde gcedb gedf cfd edgacb fegbcd febdc | cefdabg bacef fcd fegd
|
||||||
|
faegbc dfcabg afgbed daebc eg gfec afcbg acedgbf ecgba egb | eg eg bgadfce baegc
|
||||||
|
edfba bcgafd edbg bgadf ed adefcg gfebda ecagdbf efabc edf | daegbf ebfad ceafb bgde
|
||||||
|
fcebad gcfebd agcdbfe daefgc gdabf cdg becg cfbde fgbcd gc | cg gafdbce cbdgf gfdab
|
||||||
|
bfceadg dfe geadb cgfd edfgb gdcfeb cabgef fd cfgbe aefdcb | cgdf df agbde edgcbf
|
||||||
|
age becfad cfbeg eagdfb dfecgab acfeg efdac dgac cgadfe ga | gfeca aecgfd eagcf fadcbeg
|
||||||
|
gabed efabgd egafcd afgecbd adefb bafcd gbedac febg fe fea | gfeb fe badge adfeb
|
||||||
|
edcgf adgf afgcbe ecfbgd dcegaf af dacbe efacd afc cafdgbe | fa edbcgf dcgfe adecb
|
||||||
|
dgabfc dbagc cbdgea ge decagf geba gcbfdae dge bdgec ecfdb | abcgd dcabg dgbafc eg
|
||||||
|
gadfe fgbcde afgdbc ecfb cf edgcb defcg dbagce fcbgdea dfc | dbgec adgbcf dcefg fc
|
||||||
|
gfeda abf bgfd ebdfgca gaefb debafg fbeacd fb gcdafe aebgc | gdfb fdbcaeg gdfb bf
|
||||||
|
ea eab ceabg deac daebcg gedafb bdagcfe efdcbg cgbfa bgced | gfaebdc acde caed dbafge
|
||||||
|
eg cafde gdfe aedcgf fagbcde baefcg adcgb eag cfdeab acdge | bfdcaeg eg ega ge
|
||||||
|
ed dcgbe fbcadg gde bcagd gdbace dbea eacfdg feacbdg bfgec | ged gbadfec cdeafgb acbfged
|
||||||
|
gcbdfe bead da ebfdc adebcf ecfdbga dcfbag cad decaf eafcg | egdcbf dac bcgfde cbgedfa
|
||||||
|
cgafedb cabfdg deagf gacdeb eb cbdaf bdafe aeb bcef afcebd | becf dagef befc dbfae
|
||||||
|
ad gdebcf dabcgf afbce dbga ecdafg adc bgcfd cadbf decagbf | da fdcab cda dac
|
||||||
|
cebfd ab cebadg fadgec agdb eab caged bcdea fegbac dbcfega | bae ebdfc ebgcad bdefcga
|
||||||
|
adegcfb edfba abdgef afcbd dbagc edfc efbdca fc fac abgcef | bdeaf gebfadc faecgb dabfe
|
||||||
|
bgfecda dbceaf gabedf gdf fg cgeda bgef cfdgab fdage aebfd | badfe egbf efgb gfecbda
|
||||||
|
deafgb bcdge df dacf gfacb cfagbe bagdcf gcbdf ecabgdf dfg | fbdgca dgf dfg gfadecb
|
||||||
|
dbcafe gebcfad fagcdb gecfb cgdeb adeg cbeagd cdaeb cdg gd | edfacb gecbf dcg dcbafe
|
||||||
|
facdeg cbefgd bed cdebfa egfb gfecd ecdbgfa be dgbac ebcgd | ebfg cebdaf cabegfd gfecd
|
||||||
|
bacfdg cdbaegf caed fcbge cgebad gbafde cgbda egcab ae aeb | gaceb edfabg cdfbag cfbeg
|
||||||
|
adfgc fgecad gdabf acbg gdafcb fcdabeg gdb gb dgecbf ebfad | abcdgfe gcba fdabe gb
|
||||||
|
dfbc df adecg def dfeca cafbge eafdbg bdcgafe cbefda bfcea | adefc df efcda aecgbfd
|
||||||
|
aeg gefcabd agdcb dfgcba egbdfa bfeca edcg ge bacge cegdba | gae cdbga gea eg
|
||||||
|
cdegb bfgc bgd ecdag dgbfae edcfb bg dafbce edfcbag dcfgeb | fcgb efgcdb bcdeg gb
|
||||||
|
gdef dbafceg cdbeag ade gfcae fdabc de fedac efcbga ecgdaf | aed dea gface agebdc
|
||||||
|
gdeac ab bga baef eacgb gbcafe bcgef bedcfg dgfbca gacedbf | gab ebcgfd fgdeabc ab
|
||||||
|
efa ebagd debagf gefb fe ebdagc gfdea egfcbda dgacf dbfcae | afgdc gfbe efa bdegca
|
||||||
|
daefgbc afecgb fd cfbdg fdg abcfg cgebd abgefd fcadbg dcfa | dgf df afcd dfg
|
||||||
|
agf dgfcea ecfg bdfgaec fg dfaecb abgcfd dfgea baged acdfe | fg efcg fag dafeg
|
||||||
|
aedcfg gfcae cdebg gab ab abegc bfae aegcfdb bfaecg dbfcga | dbgfac dbgce ceagfdb ba
|
||||||
|
bd afegcb bedcfa adb dgecabf fdeb bfeca acdbf fcadg bcagde | ebcgfda db ecdabf daebgc
|
||||||
|
bdf fb dbefcga edfgc fbga edabg fabecd edfbag gefbd acbdeg | cedgf edbacgf fbag gdbea
|
||||||
|
bfc cfeabd gfaeb cgbfe fcdge efcagd bdcg bgadfce bc dcfgbe | cdgbfe gcbd cb cfb
|
||||||
|
gfbde fdgec efagcd ebcg ebd eb gdfba ecbfgd deabgcf becdfa | gcdfbea gecb febcgd gbce
|
||||||
|
acf cbgfad gabecd bcfd bdagfce aebgf fagcb cadgef dagbc cf | dbcf afgcedb edcfag cfbd
|
||||||
|
fbcag ec gacfeb efgc ecb gdfaebc aebdf gbecad dacfbg cafeb | ce cgfab cgdfba cbe
|
||||||
|
abdcgfe gfadce fcgbe fgadbc gcb gb debg gdecf bceaf bcdgfe | gb dgecfb gaefcd bcg
|
||||||
|
fdbca adbfe dabfgc ebcdaf efagb dcefga de becd dae bafcedg | cedabgf de de ed
|
||||||
|
ge bcgfa eacdgbf aegc efg cagfbd fgcbe dbfaeg aecgbf bcedf | ecga ecga gfe debfacg
|
||||||
|
geda gfaeb agcdebf agcfb cgfdbe ebcadf gfe fbdeag efdba ge | dgea egad eg aegd
|
||||||
|
bgfecd cdegb ecgdba bagce eag dcfegab dfceag ae cbagf bdae | fdbecg abcfg gbcfa ae
|
||||||
|
adfbc fdbaeg bce bcaegd gbdcfea adceb ec dcegbf aceg daegb | ce dgbaefc bdcae fgcdbae
|
||||||
|
faedb bef fdcbae cfbd ecgadfb bf gabefc fegad bcdgae edbca | bf cebdfag ebdfca fb
|
||||||
|
badfg acdfgb dbgae fegbdc agfe afcedgb aebcd eg edg egfadb | eafg eg gdcbaf cdabfg
|
||||||
|
gacdf cegfd acdegf dbgfec ad fbgac dgfaecb dgea bafced afd | agbdefc agde ad da
|
||||||
|
cfbdg fcadgb fbg gcab fbcde gb degbfa dcfag edgcaf cdbgfae | fdbcaeg bagc bdegaf cfdbg
|
||||||
|
fgeab abegc afdecb cdgbef fg gfda beadf gdefab bdaefgc gef | feg fg bgfcde dfga
|
||||||
|
fgcab becdfg dfec dcabeg daebgf gbfcd fd dgebc ebcfdga dfg | eadfbg edfc ecdgb fecd
|
||||||
|
gfcd fbaeg df begdf fdb gcedb adbgec fdcbge cbfdea acfgbed | gbcaed cbged degfcba dfb
|
||||||
|
adgfb eagf bfade dgbaef bcdgf dga bcfdae ag gecadb edbgfca | ga abgefd ga geaf
|
||||||
|
cdg bfcdeg dagbc dc eacgb ceafdbg abgfd gefabd cfdbag cadf | bdacg gcd acdf dcfa
|
||||||
|
caefd dg efbgca gfaebdc bdeacg acegd debg fdcbag cbeag adg | fdcea gd degb dag
|
||||||
|
gfd cfbeag dabfe dgce dbfge fbgce cfagdb bcgefd bgecadf gd | gd ecgd dfbea cfedagb
|
||||||
|
cgabe dbefga egdfbac bdcfe acgd ebcdg gbaecd gdb dg ecgafb | dagc badfegc dgac gdb
|
||||||
|
ebfc cf cbdaf bdacef acdbg dbeaf dbecagf gadfce abgedf cfa | caf dcfeba debfca ecgdfa
|
||||||
|
gc cadeb cbfedg egabf ebacg badgce gfbadec ecg defbac gcad | cbgdae cagd ecagbdf cgedafb
|
||||||
|
eadgb cgdeafb df aefdg ebcafd cdgbea dagfeb acfeg dfa bdfg | agcef bfagedc gacfe fd
|
||||||
|
cbafeg gedcf fdgecb fc cfg gebdf bgfeda bcdf caged bcefdga | cbdf fecdg bgedfa bcaefg
|
||||||
|
bafcg ba fadbcg dacb fab bafdge becgf fdcga gafdbec efcgda | afb gfabcd bgfca ba
|
||||||
|
dfbgae egbc cfadbe dbeagc ec ace ecgafbd edgba afcgd adegc | dgefba dfcga aecbdf ebgc
|
||||||
|
caeg fdbcg decbfa dbefag gbadcfe gef gefacd cfegd ge aefdc | edgacf fdegc cfged egf
|
||||||
|
fad fedbg dagbc dafbcg gebadc afcb dgafce dafgb fa fdcebga | bgafd fabc fcbgaed edagbc
|
||||||
|
febdc fgde fgecbd ceg aefcgb ge bcadg dbegc faebcd gdfbace | dcgafeb bcfdge dcfeab cge
|
||||||
|
edgfac bfagcd ageb bedaf ea fgabd gaebdfc fbecd aef gefabd | ae gcfedba ae fae
|
||||||
|
adgbfe fcbad fbgdec be efadg adfbe edgacf ebf debcagf egba | geab aefdb cdafb eb
|
||||||
|
ebgfa afbcd cedagbf aebdfc fbgad gbdfac gd defcgb acgd gdf | gd dgf dfg gd
|
||||||
|
facdeb egab ebdgac ecdab cadge eg bdagfce gcfbde gde acdgf | efabcd edgcfb dge bgea
|
||||||
|
cdbage bgdefac gacf dagec feadgc ecfda bdcef fa afe bfegad | fa bgcdea eaf cfgade
|
||||||
|
ebac dfegb dcb bdcfea cbfgda ecadf gecdbaf cfedb daecfg bc | gdefb gfcadbe facdbg aegcdbf
|
||||||
|
cfbead cbdagef egdc bdc bfegc dcbgf cd gabefc ebfdgc bdafg | fdcbg bcgedaf bcd efbgc
|
||||||
|
cfebg bgca fbgdae gefcd cefba dbeafc gbe bg afegbc gbafdec | bg bg ecbfa abcg
|
||||||
|
acgfed cbeaf dgbe gabecdf gbfdae fdeab adfcgb abd bd efgda | defab bdcgaf dgbe dbfgea
|
||||||
|
abfdc cdabef dbgfac fbcg gedac bg ebgdfa gab gbdca fagbedc | gb cbgf fdcbea abg
|
||||||
|
ecdafg abcg dgb gb bdefgc bagcde degac adfeb egdab cgbdefa | baged eadbf bg gfecda
|
||||||
|
cbge eb egfab efdacg bfagec agdbf cedabf gbadecf abe cefag | afbcegd gebc abe abe
|
||||||
|
fbgaec eg bgdfea gcbfda bdcefga fbdce caeg abgfc gef ecgbf | cafbg acbegfd eg cfabg
|
||||||
|
caf bafgd bfgec baec ac dgceaf fbagce badfceg ebdcfg cgfab | bagfd bagdf cdbagfe cfa
|
||||||
|
egdac edbcgfa acbefd bfgea agfebd abceg febgac bc ebc bfgc | cbe bgcf cgaeb cegba
|
||||||
|
fc acbdef fdbae fgeabdc dbcef gefdba bcf efacgb gcdeb cfad | efdab eafbd cafdbeg fc
|
||||||
|
aegfcdb gfceab cegadb gfedb gbaec fa bfa fcga dcbfea efgba | baf gcadbef bfa dbgfe
|
||||||
|
gfacbd gcbafed edcbfa bd acdfg abd daecfg agbfe bafgd bdgc | agcdbf bgdc cdgb bda
|
||||||
|
fegdb afd bfgdae aebfd gaecfd gdab da baecf dbgcfe dbgacfe | dfbega abgd dfecbag gfdeb
|
||||||
|
cf dabce bedcaf fca beafcdg gdecaf cfbea afgeb decgab dcbf | eacfdb acbef cfa bdcf
|
||||||
|
aegcfb gadfec bgfce bfdae fac gacb ca abcgefd edbcfg febca | cagefb fca ac fegbdc
|
||||||
|
de dbfcega dbecga deg dcbe afcbgd bcgda efcadg gdaeb ebagf | gaebcd gde bcde bcde
|
||||||
|
dbgaf gae cdgbfa gafbced acgfde abef cgdeb gdefba ae dgeab | bcdge cfbaegd ebadg feba
|
||||||
|
bde dgea dcgbf fbdge de dafgbe efbag bfeadc fecabg fdbagce | de dbe feabdgc gdae
|
||||||
|
agdec bdgec gecafbd bcedfg ad fgbacd dbae degbac caegf adg | fecga adg gcdebfa cefgadb
|
||||||
|
bceadg ag cafgbde fedbg gab dbcfag ceabd agbed gaec befcda | ga ag gace agdbcf
|
||||||
|
aecdbg agbef abc becfagd agfcb ca cfbdg fadc dgcabf bcdgef | ca fbdegc dcaf gcfab
|
||||||
|
cedg agfedcb fecagb baedf ebagdc ec bec dagcfb eabcd dcagb | bce gdec cdge bagdc
|
||||||
|
fgdca cg cdgbef gdbfa cbag fdeac adfbcg cdg ebcgdaf eabdgf | cdg gbafd gc cabdegf
|
||||||
|
gdbc bacfge dfbeca gc gcf febcd gfade cfedbag fdgec bdefcg | cgbd edgfa cbdg afged
|
||||||
|
feb cefag fdabc ecgb gdeabf cfgdae facbe eb becafg dgbcfea | egfdac acfdeg dgecfba fcdab
|
||||||
|
faedgc aecdb afcb defgbac bae eadbcf fabged fedca degbc ab | ba fadce gadecbf ba
|
||||||
|
edfg egfcdb eg dfecb geb cbgaf dcgaeb acbedf cfbge fadbcge | ge befgdca fcebd cfgeb
|
||||||
|
fcagdb ebdcgfa fdaebc gafce gebcad fab fb cabfg bcgda gfdb | fba caefbd fb gfcab
|
||||||
|
cfegbad gcdabf cdgebf fe bgeac gdbeaf bgefa efda gfe agfdb | gebac ef agebdfc edaf
|
||||||
|
ecbdg aec febdca bgecaf eafd agdfcb cadgfbe edacb ea bafdc | efda cagefb defa aec
|
||||||
|
efagdb cfgbda gfdbcae edcbfa cadgb dg dag dgfc ebcag bcadf | dg cagdb gdabfc dag
|
||||||
|
dgcfeb dfebgca fbga afecd gaecb cfb bcafe eacbdg fb cfgeab | bf aecbg gbfa dgaceb
|
||||||
|
de dbcgfa fgdace acbdg abced gaebcd gebd fbcae afbgdce ced | edc gdbe bcdae fbagdec
|
||||||
|
gfdbce bgda dfcab abfgce cdfgbea dbf decaf gdcbaf bcfga db | bfedgc gcdbaf bd agdb
|
||||||
|
befacd bcdeg gfad begfa edfgba dbf debfg cbgafe fd fcebadg | fbecga dfegbca fd bfgaed
|
||||||
|
acgeb adebfcg febadg beafc aegcbd aef gcfe acgbfe acfbd ef | dbcefag afe bcega eaf
|
||||||
|
fcaegd bg dbagfc gbce gbedfc edbcfag bfged fcegd bdg fbade | dcbagef afecdbg ebcdafg gb
|
||||||
|
fbdcga da fdabcge fad dbag gbdecf gcafd gbcfd cdbafe aecfg | ad agdb dcfebg gadbfc
|
||||||
|
db bdg gadfc gdfcb dbecfg efdb gbeafc ebgfc gdcfaeb bacedg | gbd fgbdc dfgabce gadfc
|
||||||
|
bfeadg eafbcg fbage ed edfgac fed agcdebf dabe dgcbf fdebg | fcgdaeb fdebcga abfecg fgceba
|
||||||
|
cgfd eagdc afg afegbd faebc cdfega abegcd gdebfac fg gafce | afgebd gfa bedagf gfdc
|
||||||
|
efagd fgcbeda bfgac cegd cd edgafc fedgba bdecaf cda cfgda | dc cd aecbfd dfaebcg
|
||||||
|
edabf eacdb gcdfba fdbaeg ca gcbfdea cdbeg cad dfaceb ecaf | ca debfa cfedab baedc
|
||||||
|
ecafbg bd afdbce deb gedcbfa bfad cegad cgfdbe febac dbace | bed bde bd ecadg
|
||||||
|
bafgd agfbdec daegbf dgecb cbfgad adcbfe afeg dbfge ebf fe | dabfgc fbegd fe edcbfa
|
||||||
|
bdegf bd cedfg gecfda fbd fbaeg cefbdag acdfgb dbec dbfcge | bd bd cbaefdg fegab
|
||||||
|
dgfcae agd afbedg eagb daebf fgedbac afbedc dafgb fgbcd ag | fbeda aecbfd gbfcd fbadeg
|
||||||
|
ecgdfa cbgde bdafegc fg ebcfad fbace fbag egcbaf efg bfgce | gbefca ecfagb fagb cegdb
|
||||||
|
afgedcb fabce gae ecbag fedgba efcabg bdafce ge bcgad cefg | age gea egfc ega
|
||||||
|
fadgb fdgeabc bcefdg cdfeba fcdgb gbedc egcf cf baedcg dfc | dgcbf gafebcd cdf bfdaceg
|
||||||
|
ag gebdca dgbfc gefdcab fgcab eagfbc ecfab eacbfd faeg bga | bga ga gab bcfdgae
|
||||||
|
bdgcea gd gecd fcgadb gad egcba gcbaef eafdb dbaeg cfebgda | dbacgf dceg gdfecab gd
|
||||||
|
bgdcfe bda adbec edfacbg ad dgca bcefa becdg dacegb badgef | da adb egbafdc adb
|
||||||
|
ebafd fbgcae begfadc fcgbed feabc cgfa bdegac cabge fc ecf | cfe fgebac gedcafb cf
|
||||||
|
gcf badecgf fg bcefgd fbgac aegbc afgd acbdf bcdeaf gdfabc | gcf abcfdg fg cbfad
|
||||||
|
dbgace afcgdbe fdce baefd gbcaf abcdf dc bdc dfceba efagbd | dc dc acgfb cd
|
||||||
|
bdafegc cb becg becadg abc edbca dfabgc beadf ecdafg edgca | dbfcage ebdaf bca bdeac
|
||||||
|
bfdacg degf ef abcde fgdac cgafde aef cfead abcgfe edgafbc | efa fcbgae dfeg bgacfd
|
||||||
|
dcafbge aedbc abdcge gebac dabg gb cbg daecbf cgfae cgdebf | cbg agdb aefcbd agceb
|
||||||
|
cfgaed ec fcdgbe egdba gdfac becadfg dacge feac dec bagfcd | ce ecd egfadc gdeca
|
||||||
|
gbdcf ba ebacfg cagbd fadb gdeca bgfeadc bfdcga cbdegf bga | ba dfab ab ecbdgf
|
||||||
|
gdcabf bcfde cfdea dca eafdbcg ecagf ad gcefda bacfeg aegd | dca acd afcgebd efacg
|
||||||
|
ebafc egfb ecb be gcbfea cfegad fbcda dbfgaec gceaf ceabdg | abcdf gbef ceb ceb
|
||||||
|
decbf ecdbga adbce bac gfacbe ab aecgd badg fdbagce eafdgc | ecabgf ba dcaegb cfebag
|
||||||
|
fcbdga be gfbca cbeafd bgfea bagcef aeb bcge defgcba faged | aeb bea ebgc be
|
||||||
|
cgb abgcdfe afcb bc aedbfg gfcbd gdecf fdbag fagbcd dgeabc | efabgcd bdgfc debcgaf ebcfgda
|
||||||
|
cdafeg bgfedc edabc bdgea ac defcbga abfc dac abecfd bdecf | dbeag afbc abfc ca
|
||||||
|
egd efgbac cadgefb edafg gd dfbgea gfbd eabgf dagbce dfcae | fcaed cgbfea dfbg bagefc
|
||||||
|
abc fgaecb fedba cebgdfa gacdf aecfdg abgfcd bdgc fbcad cb | fecadg cbgd dfceag fcgead
|
||||||
|
bdec cgb abefcg bgdcf bc fgacbde gdeafc dbegfc fgbda gcedf | afgdb gecfadb cbegaf cb
|
||||||
|
dfeg gcadef fcega cbade fbcaeg defac fd afd afdegcb abfcdg | fad gafce badec afdegcb
|
||||||
|
gdbea ec becag ebc bgefcd ecad ceabdfg gbafc aegdbc defgba | bce gdecfb ceda ec
|
||||||
|
efcbag dcagfe cde ecgfd dgefb efgdacb gbdcae cfgea dafc cd | cdfa fdac agfcebd fcdgea
|
||||||
|
bgacde fgdc bfdcge afgcdeb acbfe gf gef ecdgb dabgef cebfg | cfdg bfcea aegdcb gef
|
||||||
|
gfcea agfd dfe cdgfea fedgc egcbaf df fdacbge cebfad cgbde | edcfab dfgcae dfga df
|
||||||
|
ebga egacdb fdagbc dabcg aec dcgfae bdaec gfbdcae ae cefbd | gaeb dcaeb eabg acfgebd
|
||||||
|
aecfdb agcdb facgb bged fecbadg adbgec bd cdgae eacgdf bcd | dcbeafg cfedabg egdb degb
|
||||||
|
aedb cfaebg adegfb gbafd da debcagf facged dgcbf afd faegb | ad bdae bfeag aedb
|
||||||
|
beagfc fcagd fbcgd egdacb efgacd fead acefdgb dgaec acf af | fagdc dfae fagecb dcgfb
|
||||||
|
bacd gcaeb agd begdf bgdea gdbaec fcageb cegdfa afebdgc ad | egdab edgcfa ad bgcafed
|
||||||
|
degacfb dfgab ae cgbde ebgad eda cebdaf gafe fabcgd aegbdf | gafe aebgd ae baegd
|
||||||
|
fdaebcg cegadf ecag gdcfb fedca dabfeg ge aefbcd fge dfcge | edfca fge egf agec
|
||||||
|
dgebaf cafeb ga cbfeda fgbac ecagfb bgdcf gfa cgae facgdbe | gecafb cfdgb agf gfa
|
||||||
|
fdageb bfcd gdeca eagfcb cbfaed bd ebd beacf gbcafed dbcae | bfeac ecdag fbdc fdcb
|
||||||
|
ebfd cfe cbaed bfcag dfagbce ef dbaefc ecafb eacgbd fadceg | abcfed cfbga fec efc
|
||||||
|
gfe gfbac ef fdce edcgab aegfdc bgcdaef dagec fgcea afdebg | ebdgac gacfe efg feg
|
||||||
|
efdgac afd cabdeg defb df cgfab badec dfcbgea fabdc fbadec | badce efbd deacb daf
|
||||||
|
fg cfdg fga ebafgc cdebag fbgdcae aebfd faegd adgefc daceg | gf fga defba gf
|
||||||
|
fecabd cfadbg cdebgf gfdcb bedcg eb gdeca begf ceb dfaecgb | egbf cbefdg gcfeabd bgfaecd
|
||||||
|
gf fbegd bcfg gcbde dcefga aecgbd ebcdfg bdegfac dgf bedaf | bedgfc fg dfg eadbfcg
|
||||||
|
edfcga efbcad eba dabceg ba dfbeg agfcdbe dface eabfd bcfa | dgeacb ebdcagf ba facb
|
||||||
|
cbgead beagf dbcge fdcebag fecbg dbfgca gfc efdc dfbecg cf | fcg decgab efdc cf
|
||||||
|
dfbgc caf abecfgd dcea edafgb ca gfdae acbgef acfgd cafdeg | aegfcdb adec agedcf ca
|
||||||
|
fe edbgac fagcdbe egdbc aedfcg edcfb dfe cdbfge dcbfa ebfg | edbcg gadfec bdacf fde
|
||||||
|
bag dgefb eafg eabdg bfdcag cebdfg ga dgfabce agbedf ecbda | gfea bag fdgeab ga
|
||||||
|
dcegf bcfega bcadfeg gfdeb fbg cfgaed becdgf fb dbfc agbde | dagecfb bdfc fcgeda bceagfd
|
||||||
|
ecgdba cefdba bacfgd bcdeagf gd degbc gbcfe eadg ebadc gdc | cebgda efcbg edag dgecb
|
||||||
|
dbeafc cgbd cfb cfegd cb edfacg bcgfe gabef adgcebf edcgbf | abcfdge fbc bc efgcb
|
||||||
|
gcefda fgba fa eaf beadc fgbade gdebfc dfgbe fgdcbae fabed | defbg dcefagb af aebdc
|
||||||
|
fdaec gbfadc bedgfca egfdc gdcfae gd cebdfa ecbgf dgf geda | gdf cfadbg acebfd fcaegd
|
||||||
|
gdbefa ecdfg dgeabc gfabce dbaeg cbg bc cedgb cabd cadgefb | bc cfedg edfabg geabd
|
||||||
|
gba dafgcbe edabcg fdcabe gcfbe abdegf aebgf fdabe ag afgd | befcda fecgadb cgebad dfga
|
||||||
|
dafgeb cgde cfadegb agfec gcafb cafed cagefd ge dcaebf eag | fgace cbefad eafcg ge
|
||||||
|
dfabegc cabedf cbe fced dbeacg ebfda bdfeag ec bgcaf fcabe | ecb fecd cgaedb ebdfa
|
||||||
|
ecf fedabc afcdg fdbcag efgdcab cbega fdge fe feagcd fegac | gafce cfe cdgabf gacefd
|
||||||
|
fabeg gdf gcfabed gbaefc dg dgabef degb gfbad egdcaf acdfb | defgca dgf caefbdg begfa
|
||||||
|
eabfgd edfab ebcfag egdafbc afd edfg fageb df fgdbca acebd | gbfea dbfgea aebfgdc dcgfba
|
||||||
|
cg dfecb cegdb dgbceaf dfcg bgfdce fbaceg dabeg egc bdfcea | edgab cg ecg gec
|
||||||
|
db dceag abecgf bdc bfegc beacdf gbdf bcedg bfacgde efbcdg | gbced bdacfge fcgeab fgbd
|
||||||
|
gfecd gdeacb cdfaebg bgf dfebg fabd fb gdbae gefabc bdeagf | bagde bfg egcfd bf
|
||||||
|
fc dbagef bfedcag fcda ebcgd fgdea dgefac efgabc defcg fce | afegcd facd eagfbdc fce
|
||||||
|
eacgb gfdaecb eafb egfdbc acgfb fb dcebag fbg fdcag abcfeg | beaf egabdc gbedcf gbf
|
@ -0,0 +1,232 @@
|
|||||||
|
use std::collections::HashMap;
|
||||||
|
use std::collections::HashSet;
|
||||||
|
use std::io::stdin;
|
||||||
|
use std::io::BufRead;
|
||||||
|
|
||||||
|
const SEGMENTS: [char; 7] = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
|
||||||
|
let arg = std::env::args().nth(1).unwrap_or("part2".to_string());
|
||||||
|
match arg.as_str() {
|
||||||
|
"part1" => part1(),
|
||||||
|
_ => part2(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1() {
|
||||||
|
println!("Part1");
|
||||||
|
|
||||||
|
let mut lines = Vec::new();
|
||||||
|
|
||||||
|
let mut cur_line = String::new();
|
||||||
|
for line in stdin().lock().lines() {
|
||||||
|
let line = line.unwrap().replace("_", "");
|
||||||
|
cur_line += &line;
|
||||||
|
let last_char = line.chars().rev().nth(0).unwrap();
|
||||||
|
let is_wrapping = last_char == '|';
|
||||||
|
if !is_wrapping {
|
||||||
|
lines.push(cur_line);
|
||||||
|
cur_line = String::new()
|
||||||
|
} else {
|
||||||
|
cur_line.push(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg!(&lines);
|
||||||
|
|
||||||
|
let mut count = 0;
|
||||||
|
let interesting_lengths = HashSet::from([2, 3, 4, 7]);
|
||||||
|
for line in lines {
|
||||||
|
let second_part = line.split('|').nth(1).unwrap();
|
||||||
|
let count_interesting = second_part
|
||||||
|
.split_whitespace()
|
||||||
|
.filter(|s| interesting_lengths.contains(&s.len()))
|
||||||
|
.count();
|
||||||
|
count += count_interesting;
|
||||||
|
dbg!(second_part);
|
||||||
|
dbg!(count_interesting);
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg!(count);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2() {
|
||||||
|
println!("Part2");
|
||||||
|
let mut lines = Vec::new();
|
||||||
|
|
||||||
|
let mut cur_line = String::new();
|
||||||
|
for line in stdin().lock().lines() {
|
||||||
|
let line = line.unwrap().replace("_", "");
|
||||||
|
cur_line += &line;
|
||||||
|
let last_char = line.chars().rev().nth(0).unwrap();
|
||||||
|
let is_wrapping = last_char == '|';
|
||||||
|
if !is_wrapping {
|
||||||
|
lines.push(cur_line);
|
||||||
|
cur_line = String::new()
|
||||||
|
} else {
|
||||||
|
cur_line.push(' ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dbg!(&lines);
|
||||||
|
|
||||||
|
let sum: i32 = lines.iter().map(|l| identify_numbers(l)).sum();
|
||||||
|
dbg!(sum);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn identify_numbers(line: &str) -> i32 {
|
||||||
|
let mut number_map = HashMap::new();
|
||||||
|
number_map.insert("abcefg".to_string(), 0);
|
||||||
|
number_map.insert("cf".to_string(), 1);
|
||||||
|
number_map.insert("acdeg".to_string(), 2);
|
||||||
|
number_map.insert("acdfg".to_string(), 3);
|
||||||
|
number_map.insert("bcdf".to_string(), 4);
|
||||||
|
number_map.insert("abdfg".to_string(), 5);
|
||||||
|
number_map.insert("abdefg".to_string(), 6);
|
||||||
|
number_map.insert("acf".to_string(), 7);
|
||||||
|
number_map.insert("abcdefg".to_string(), 8);
|
||||||
|
number_map.insert("abcdfg".to_string(), 9);
|
||||||
|
|
||||||
|
let mut possibilities = HashMap::new();
|
||||||
|
|
||||||
|
for segment in SEGMENTS {
|
||||||
|
possibilities.insert(segment, HashSet::from(SEGMENTS));
|
||||||
|
}
|
||||||
|
|
||||||
|
let words: Vec<String> = line
|
||||||
|
.split(&[' ', '|'][..])
|
||||||
|
.filter(|s| !s.is_empty())
|
||||||
|
.map(|s| s.to_string())
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let mut word_cycle = words.iter().cycle();
|
||||||
|
|
||||||
|
let mut last_hint = 0;
|
||||||
|
let mut unclear: usize = possibilities.values().map(|set| set.len()).sum();
|
||||||
|
while unclear > SEGMENTS.len() {
|
||||||
|
let word = &word_cycle.next().unwrap();
|
||||||
|
dbg!(word);
|
||||||
|
if word.len() == 2 {
|
||||||
|
let should_be = HashSet::from(['c', 'f']);
|
||||||
|
let should_not_be = &HashSet::from(SEGMENTS) - &should_be;
|
||||||
|
let word_chars: HashSet<char> = word.chars().collect();
|
||||||
|
let word_inverse = &HashSet::from(SEGMENTS) - &word_chars;
|
||||||
|
for a in word_chars {
|
||||||
|
for b in &should_not_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for a in word_inverse {
|
||||||
|
for b in &should_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if word.len() == 3 {
|
||||||
|
let should_be = HashSet::from(['a', 'c', 'f']);
|
||||||
|
let should_not_be = &HashSet::from(SEGMENTS) - &should_be;
|
||||||
|
let word_chars: HashSet<char> = word.chars().collect();
|
||||||
|
let word_inverse = &HashSet::from(SEGMENTS) - &word_chars;
|
||||||
|
for a in word_chars {
|
||||||
|
for b in &should_not_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for a in word_inverse {
|
||||||
|
for b in &should_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if word.len() == 4 {
|
||||||
|
let should_be = HashSet::from(['b', 'c', 'd', 'f']);
|
||||||
|
let should_not_be = &HashSet::from(SEGMENTS) - &should_be;
|
||||||
|
let word_chars: HashSet<char> = word.chars().collect();
|
||||||
|
let word_inverse = &HashSet::from(SEGMENTS) - &word_chars;
|
||||||
|
for a in word_chars {
|
||||||
|
for b in &should_not_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for a in word_inverse {
|
||||||
|
for b in &should_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if word.len() == 5 {
|
||||||
|
let should_be = HashSet::from(['b', 'c', 'e', 'f']);
|
||||||
|
let should_not_be = &HashSet::from(SEGMENTS) - &should_be;
|
||||||
|
let word_chars: HashSet<char> = word.chars().collect();
|
||||||
|
let word_inverse = &HashSet::from(SEGMENTS) - &word_chars;
|
||||||
|
for a in word_inverse {
|
||||||
|
for b in &should_not_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if word.len() == 6 {
|
||||||
|
let should_be = HashSet::from(['c', 'd', 'e']);
|
||||||
|
let should_not_be = &HashSet::from(SEGMENTS) - &should_be;
|
||||||
|
let word_chars: HashSet<char> = word.chars().collect();
|
||||||
|
let word_inverse = &HashSet::from(SEGMENTS) - &word_chars;
|
||||||
|
for a in word_inverse {
|
||||||
|
for b in &should_not_be {
|
||||||
|
possibilities.get_mut(&a).unwrap().remove(&b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last_hint += 1;
|
||||||
|
let new_unclear = possibilities.values().map(|set| set.len()).sum();
|
||||||
|
if new_unclear < unclear {
|
||||||
|
last_hint = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
let clear: HashSet<char> = possibilities
|
||||||
|
.values()
|
||||||
|
.filter(|set| set.len() == 1)
|
||||||
|
.fold(HashSet::<char>::new(), |acc, ele| {
|
||||||
|
acc.union(ele).copied().collect()
|
||||||
|
});
|
||||||
|
for val in possibilities.values_mut() {
|
||||||
|
if val.len() > 1 {
|
||||||
|
for c in &clear {
|
||||||
|
val.remove(&c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unclear = new_unclear;
|
||||||
|
|
||||||
|
println!("{:?}", possibilities);
|
||||||
|
if last_hint > words.len() {
|
||||||
|
panic!("Loop detected. Cannot deduce segments");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("{:?}", possibilities);
|
||||||
|
|
||||||
|
let signal_map: HashMap<char, char> = possibilities
|
||||||
|
.iter()
|
||||||
|
.map(|(key, set)| (*key, *set.iter().next().unwrap()))
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
println!("signal map: {:?}", signal_map);
|
||||||
|
|
||||||
|
let mut num = 0;
|
||||||
|
let mut multiplier = 1;
|
||||||
|
for word in words.iter().rev().take(4) {
|
||||||
|
let mut signal: Vec<char> = word.chars().map(|c| *signal_map.get(&c).unwrap()).collect();
|
||||||
|
signal.sort();
|
||||||
|
let signal: String = signal.iter().collect();
|
||||||
|
dbg!(&signal);
|
||||||
|
let digit = number_map.get(&signal).unwrap();
|
||||||
|
num += digit * multiplier;
|
||||||
|
multiplier *= 10;
|
||||||
|
dbg!(digit);
|
||||||
|
}
|
||||||
|
dbg!(num);
|
||||||
|
return num;
|
||||||
|
}
|
Loading…
Reference in New Issue