Compare commits
11
Commits
feca3062c8
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
743f6984ce
|
||
|
|
96b018581c
|
||
|
|
75b7a367fe
|
||
|
|
49734821e9
|
||
|
|
d8afaac4f2
|
||
|
|
5dd0fc2862
|
||
|
|
7e5ea237db
|
||
|
|
eb92ccc919
|
||
|
|
b283c88975
|
||
|
|
cd0c64b152
|
||
|
|
d1dcb5134a
|
No files matched your search
@@ -1 +1,2 @@
|
||||
/target
|
||||
/flamegraph.svg
|
||||
@@ -9,3 +9,8 @@ edition = "2021"
|
||||
anyhow = "1.0"
|
||||
cached = "0.26.2"
|
||||
itertools = "0.10.1"
|
||||
|
||||
[profile.release]
|
||||
lto = true
|
||||
codegen-units = 1
|
||||
panic = "abort"
|
||||
@@ -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
|
||||
+200
@@ -0,0 +1,200 @@
|
||||
dbcfeag cgaed fe bfgad aefcdb efa efgda gcef dcaebg dfeagc | fae cfge fae baefdc
|
||||
ea bfecadg bgafcd deac ebcag eab debfag eabgdc bcgfe bagdc | cdbagf fagbcd bae fcegb
|
||||
fbgdec cbgeaf cbfag bd bgda cgbfda dbf fecda bfadc cbedagf | gecfdb cbfga bacgef dfb
|
||||
geabdf cfbge dcbeaf aebdf dgea acdgfbe fag gfbea ag cabdfg | dfeabc dbaefc fdaebc fga
|
||||
gcae cefdg abdcgfe cg fcg afcegd dbgfea agdfe dcafbg bcdef | gc caefdg gcf egdcf
|
||||
efgcb fbac dbefg bce efacg fbgcdae cb egfbca dgfaec dcgbea | fgecb bcfa bc efcag
|
||||
efcgdb da bdefg dfegba fbacg gbcdea dbafceg adb feda fadgb | da ad cgabde cebdga
|
||||
ca fcabegd facd agbed acg cfadeg acdeg agcefb cdfgeb efcdg | cdeafg cag efgadc gacbfe
|
||||
fdacgb cfa cfage gabce dfagce edagfb dcbfeag fc fced gfdae | gabdef fdegba gaedcf fac
|
||||
acgdbf faedcbg fa cbgdae fgbdae aedbg adf fbea cfdge fedga | fad egdcf feab bfcagd
|
||||
ged cadgf gcdafeb cabgfd cgedf aedc ebfcg faebgd ed fcadeg | dfgca gabefd dafgc ecfgd
|
||||
bcedga dceba gcadfbe dfec adcbfe fda fabge df fbdae bcfgda | adgcfbe fbgae dgebafc gacedb
|
||||
fgcabde edbcfg efcdga dfbcea dbaeg fea fa dbaef acfb dbfec | aecbfd aedcfb bdaef abfc
|
||||
cfbd gefad dce fdeac dc ecabfd dgabce gabdecf afbce fagceb | bdfc bcgaed bgdace afegd
|
||||
acfgde egdfb dcaf gecfd ecdbgfa gcdbae cefgba dcg gcefa cd | eadcbg cdfega fdgeac dgc
|
||||
cadfgb edcgbfa dc cgd fegcb dfabg cdaebg dafc fcbdg gbdeaf | afdc adcf befdag gfcdb
|
||||
deafg ebafdcg gcdfba bge eb fgcbd gbefac bdce fdebg gdcfeb | cbdagf bdce gdfeb fgead
|
||||
acbdef bg agebdf afbcg fgbeca edafcgb eacfb gba ebgc fgcad | begdaf gcbe ebdfag dabefg
|
||||
ga agc bdegcaf gefbc cfdea dafgec fagce dgebca aefbdc gdfa | acfedbg bfaecdg gca facedg
|
||||
abdg ad egcabf ebagf afd gdfceab dcebf dagbef cdgafe deabf | bfedc cbedf gdab afd
|
||||
efbadc cafbd eba fegda fcbe dbefa efcbdag adbcge badfcg be | be agdfe cedbag dcbeaf
|
||||
adegb cgafb badgcfe fged fgaebd eabgf bceafd eaf eacbdg fe | bdgeac adgbfe bdgae acfgbed
|
||||
dbfega befag gbfdec gacfed fcgdabe bgf deagf bf dafb bceag | bdfa cagbe gceba agbdfe
|
||||
fecagd cbfeagd fdecb fg fgbde ebgda cagdbe fge gfab agefdb | geabcd gdbea ebgafd egdab
|
||||
ab agdcfe dcfgb cba adefcb adfbc bdae ebacgf aegbdcf fcade | gfecda dfabc edab bfcad
|
||||
bcfae ebd gefdacb fdceg dbaegc gdbf gcefbd cedfb adfgce bd | gebdcf bd dgfb ebdcgf
|
||||
gbcafde cdaef dfe ecbf egcda fadgcb bfdac dacfbe bgefda ef | dcgafb dfaebg fbec agbdfc
|
||||
fe cfedab dcfgeb gdbef gadeb cegf fgcbd fbe abdcgf ebacgfd | debfg abecfd adbefc gdcbfe
|
||||
ad cbfeda acegfb gdcaeb adcgfbe bda abefc dcabf fgcdb afde | gdcbf cedbaf dbagec becfa
|
||||
acegb efcgab edcfgab aebdc gce ge fage egcdfb agfbc cbdfga | eg cafegb fcbeag acbgef
|
||||
bcaf agefdc bcegaf eaf bdgfe agfdecb efgab af abegc dgacbe | defbg dgaebc eaf cebga
|
||||
edabcf bdeg gd cadebg dgcab gfcaed febdgca cdg beacd cagbf | befadcg fbgca afdecg bgceda
|
||||
gadfeb ag gfda cbeda fbeacg bgdcaef dgfeb eag gbdea fegcbd | cabefg degbcf gdbef bcdgef
|
||||
efbcda cgfd dgefac dfcgbae degaf adg debacg aedcf gd aebgf | ecfad cgbade aegdcb gfbae
|
||||
bdc cdfgb cabgf gabd fdebagc eabgcf bd abdcef gfcabd fgedc | faecdb fgecd cbfdag bcfadg
|
||||
dfagbec ceg egfad fdeabg acedg afedcg gc bcgaef eacdb fdcg | gcfd eadbc dbegcfa eabcd
|
||||
gfb egfba eadcfb gf adfg dgebfa dacfegb eagcb cbedgf fadeb | edfba afgebd adbegf efcbda
|
||||
fec caegd efgb cgaedfb gfbdec gfdbc ef cfdgab fdcge fbaedc | abcdef gcfbd bfegdac gcead
|
||||
gefdba abcef ead gedcab ad bfdecg cbged ebcad cafbdeg cadg | defcgb ade bgecd ceabf
|
||||
cabg adgefbc cb ebafg febgc fbc gdcfe cafedb egfabc aebdgf | bcdafeg ecbafd adbecf fbcge
|
||||
acged febgd agdcfb bdceg gdbecf bc bgc cfeb cfgbaed bgefad | dceag efbc cbfdeg ebcdfg
|
||||
gab adgcbef cebfg abdce dcbefg bafdgc abefgc aegf ag cgbea | gaceb aegf fgcbe cgebf
|
||||
fa baf cadfbge dbgef ebacgd dfceba adbec fdeba cfae dacgfb | dabcef dafcbe acgdbe ecdfab
|
||||
fgeca gecadfb aecdfb fb gcbed dfgb cgdbea ecfgb gfbdec efb | abcedg bf bf agedcfb
|
||||
fg aefgd bafcde gcfe bdgae gfa fedca cagdfb cfaedg ebgacfd | dcfgab dgfea gf cafdgb
|
||||
afbcge debgc cafdbg ae eadf afdgb gbdeaf aeb cgfebad abgde | deaf cbafge cbegd aedbg
|
||||
fbc afcegb fadgc fbeda cbed ecdafb cfdab cb fegdcab bdaefg | cgfad ecbd edafb cgafd
|
||||
fegbcd abcf gfabedc bgcad gfacd gedab efdagc dfgcab cdb bc | fbca cdbag cdfgab cgedbfa
|
||||
gfca gbdef eadcfg ebdcag dcg afecd gc decafbg fcegd bcfade | gcefd bcdafge cdefg edfgc
|
||||
gdae ad gecfd dcfaeb dfegcb gdcaf fdacge adf agbcf cebfgad | dgebafc edfgc da cbgafed
|
||||
ceg febgdca bfgdea gc adcfge cefbag agdc edfcb dfgce gadef | ceg ebdagf agdfe afbgce
|
||||
dabegcf bcdfag gdecb gdbeca gaebd fbdce bdagef cg bgc ecag | dfcabg abfdge gadbe cg
|
||||
dacefb efc gfaebc gbfe egcda agfbdc beadfcg fe fbcga cgafe | ef fbaedc ef efc
|
||||
cbgae faedbg fegab agc ebdgc eacf bgeafc ca cgdbafe gadcbf | eagfb aebgf gcbfad gfeba
|
||||
dcf dacbg bdcaef dfeacg gacfe cdfag fgde faecgb daebcgf df | fcd fecadb egacf deabcf
|
||||
egdfa dfaec gdab ga agf dbefga dgebf afbgecd bgafec bgefcd | fegbd gdfbe begdfc efcbadg
|
||||
cfd edafbc afbd cadbeg fgecbad gcaef dacef df dbcae efcdgb | adbf cabde baegdc cgbeda
|
||||
cbag gc cdgbe defbg agebdfc becda dbgcae cdg efacbd fecgad | fcegabd abgc dacbe cdaebg
|
||||
bf dacgf dfb befc fbedcg gebdc dbacefg abdegf gcdfb bedacg | bfec feagcbd egdcb daegbf
|
||||
aebgfdc gadcf gcdfeb dagce agdeb acfe bgacdf dec gfecad ec | ceadg edcag fdcga cdbagef
|
||||
befdgca dgcbf fedagc be bfe dcefb ecfdba acfed ebca ebgfda | dfbcae bafgdce bgcdf egbdfa
|
||||
bfa bdagfc dbega bfgea eagfdb dbgace bcefg dcbgeaf fa defa | ebcgdaf aecgdbf fgcadb fa
|
||||
agcdeb cgf agbdcef bgdfe efac cgefb abefgc cagdbf fc gebca | fegbc acfe becga deagbc
|
||||
adbfce agebd eadcbfg ega abedf fgab dgebc dgfcea ag agdebf | gdfcabe ebadf ga bfag
|
||||
gcebfd feacdbg acegfb afgce gbac geb cdaefg daefb gb fgbae | agefb gb adfbe efabd
|
||||
gadbfc ebgad dgecba fgae eacgdbf af ebcfd afd bdeaf gadefb | fa bdgaef gdbacf af
|
||||
bfeacd edgcabf dg gcabd cdaeb acfgb bcgdae dgae cgd bgfdec | bedac acbed abcdfge dgc
|
||||
cdage dgabec cbadg ge acfde edg becfagd gbec adbcgf fbeadg | cdbgea cgdaeb cegad gdeac
|
||||
ab gbaf cdegba fceadbg gfbecd bca eadcf fgeabc becfa cebfg | cagfeb cefabg fcbeg eadcgb
|
||||
afdec bcaefg ca abcd efcdg aec aebdf cdafbe begdaf eadgbfc | cdfeg afdce edfac gdfabe
|
||||
faebd fed df bgdcaef cbdega gdbeaf fbecgd badge afebc fadg | dcebfg dgaf fd cdegfba
|
||||
abdgf efg fe gdeabf cdbge cfadeg gdbef cafgdeb fbea bgcadf | bgdfe fabe gbfadc gbfcda
|
||||
agdfe cfbd dgfca cd abgfc cdgbea gbecfa gbadcef cda dfgbac | cegfba fbcd bfdc dca
|
||||
acdb bdcega dbfcge aedfgb dec fcega dc adegc fgceabd gaedb | badeg bdecgf cd cdageb
|
||||
abe ab dbecfag adgec agbf eadbg cbeafd fbcegd gadbfe bfgde | ebgfd efdgb gceadbf ba
|
||||
dgfceba egbcaf fgc bfgdca cbgfe cg faebc agce gdfeb debcaf | bedfac edbfg aegc eabcdgf
|
||||
bdfac dcfeb dbcefa dbgcaef fbae egdcb fgaecd fec cdbafg ef | bdfagc dcfabg gdbfeca eabf
|
||||
gfca dbcaf bfcgd fcgdeab degcb abcedf cbagfd gfb fg fdgabe | gcaf bfg fbg gf
|
||||
efcagd dbag fgd defgacb aebfg dbgfe bdeafg edfbc gd fgecab | fbeag ecgfabd degacf debgfac
|
||||
efcbg bacfe gbdce fge acegbdf cgdf aebdfg dgbcae ebcdgf gf | caefb cbfdage ecfgb bgedc
|
||||
fgdeb dcbfg fgae fbeagd edbfa aegdbc egb gafecdb bfdeca eg | dgbcea bdaef gfbde dfgbea
|
||||
bdcaf gdafc cbf bdefa cb fgceda bdfagc fcbgde afcgedb cbga | gbca fbdca cegfdb fcagd
|
||||
cfebgd cedgfa dcfabge dbfgc dgeb ge fcegb gfe abfdcg fecab | fge fabec gfbadec bfceg
|
||||
aeb ab gebfd abcdef edcag cdegaf gaedbc bgfecda debag gbac | beacgd bdfeg afgecd gedbf
|
||||
ab gebfadc acfge edafbc abegc dcegab gbecfd gbda cab ebcdg | dagb cegfa bca bac
|
||||
gaedb ebcd fgcea cba dcgafb febadg egcab adcbge efgadcb cb | dfcagb cbed bagce dbce
|
||||
ca dgfceb bfeacd fcbgd bdgca cfag gaedb abc fcbagd fgecadb | cgdfab cfag bac cbfegad
|
||||
gade gafcb bfgecd bge ecbda gdcbea eg beacg fdaecb agfbecd | dgae bgfca abegc cfdebg
|
||||
eac cdbef ac gfdae dagc afcedgb dcfae dafcge dbfega caebfg | gafceb dbeacgf cdga fbcde
|
||||
dbagfc bgedca df afgec daf beagdfc aefcbd bedac acfed dbfe | bedca cdaef baecfd befcad
|
||||
fdacb baedc acedfb bacedg fd gfcab ecdf daf fedgba befgdac | egabcd cedab eabdfg adf
|
||||
efdgc dfecga adfbe ac cage adc gfbdec cagbfd efdabgc caefd | efdab efdgcab ca cedfg
|
||||
ca acgf cadbgfe egfcab gefab cea defbc fecab edbcga fbgdae | cfeba efdcbag dacebg agefcdb
|
||||
bcedfa agecd ebgf fcbdg fde cgfed acgbfd cagfdeb ef cgbdef | fgeb bcfdg def ef
|
||||
bfcdea ga fbdegac gecdf cfdab bcgadf facdg aegbcd gac afgb | cbadfg facdb afbg dfecba
|
||||
fdcae afeg fa bceda dfebcga afcgdb dgecf acf fgceda cbfdeg | fa bdfcga fcbegd efacd
|
||||
efgbcd cf bdgace fgbad dfc fceabd dbaegfc bdcgf becdg gfce | bcedaf adbegc badgec bgcfd
|
||||
efcba ebdfga fda gdefbc da facde dacg fgedc gfeabcd acdefg | da bgafde cegfd edafgb
|
||||
daegb cbge bgcaed afgced ge cdabe fdbcaeg fcbeda bgfda eag | gae egcb egbc egdafcb
|
||||
cefda fadg bfedac bedfacg dgecfa eag ga fegcb becagd gcefa | dcfea eag cedfa bgfcaed
|
||||
dcfe gbeafd df bdcaf ebfcag fcedagb cdbag dcfaeb eabcf fbd | dfce geacbf cefd ebdacf
|
||||
efgbc agbd gd eadgcf becdfa bdace dge debgc adecgb bfdgcae | bgcfe bedcg abgd gdba
|
||||
cdbf edbfgc feadg cd ced gaecdb degfc efcgb fcbgaed befcga | cfabgde fgdcbe efacgb abgcef
|
||||
ae caegfd eadgc fedgba fecgd gbacd efac aed afcbged cgdbef | ae eacf abdegcf eda
|
||||
fc afcge dbgecf adcgfe eafbg gdebacf eagcd gfc aecdgb afcd | cfg dgeac afbge edgcba
|
||||
aedcg gfd cafgebd fg eadbgc adfcb cefg gabefd dacfg efcgda | dgeca afgedb cfdga aefgcd
|
||||
bfgaed facedb fbec dbgca cagfbde egcfda efdac acbfd fbd fb | efbc agcdb fagdbe bacdf
|
||||
fac dcae fgbda fagbce bdfac cbdfe ca cadbfe aegcdfb cebdfg | cdea cfbdeg ac afdcb
|
||||
geabcfd gfcaeb gcbead eba facbg fdgcab ea bgafe fdgbe caef | bagef cafgb afbeg cbgaf
|
||||
gcfdeb ceg fabcge edbag fcabdg bcgaf ceaf ec agefbdc cbega | bgafc baecgdf bcfged gbdfeac
|
||||
cf adgef cfgbaed bfdc gfc egcdfb dcgaeb degbc fcedg ecagfb | fdbc cgdbe gdabce gfdce
|
||||
bc afgcb cfdga dfcb cbdgea bgc efcgdab cfedga beafg bagcfd | bc bc cbfadg adcbge
|
||||
egdfb fa agfbe eacf befagc fba fbedacg cadebg agcbe cfgbda | bagfec bcdgaf cbfgad dgcbfa
|
||||
acgbde acgdbef cba ca bcgfd cade egdafb aebgfc agbed adgcb | fdgbc gbadef gfcdbae edfgab
|
||||
egbac efacgd gfbd fbcdag fecbad dgc badcf gfcebda dbcag dg | bacdg facbegd cgd dfcgae
|
||||
adgcf fbgcda efcgda dcbea fedg cfebag fae ef acdef gecbfda | fcagd gcadf gcefdba gefabc
|
||||
fegdba ba cedgaf gbade bfad egfda gba cadbgef gbced fcaegb | gedaf bdega abgde bafd
|
||||
gbacef gdab defgc bagfdc dfb afgcb efdbac bd dfbcg befcgad | cdgef bd gbfac ecbgfad
|
||||
fgacd ef dagfce ecdfa fae adfbgc cegf febdga ceabd bgacedf | abcgfed gfce fae efacgdb
|
||||
fbgdc afedg gcbafd gfedbc cfdag acd fbdeacg acbfde cgab ac | gdcbf cedfbg dacgf dcafg
|
||||
becf feadb abfedc dfcageb gcbda bafedg aec daecfg acdbe ec | abdef fdeacg ace ecbf
|
||||
dc cbfegda bfeadg dbcg gabfd adc dbcfga bface fgcade fdabc | dacbgf dc cdfba dc
|
||||
bc bfgedc fbc adfbceg cegb degcf eabdf defcb cdfgae fcagbd | bcefd gceb fcagde cbfgad
|
||||
ge cabgd egca egd adgbecf bfdagc decbag agbde deafb ebdgfc | cagdfb bgecda cgedba fabdcg
|
||||
cg cfagbd gcedfa efdbc gcd gbefda fegad efdcg caegdbf agce | fgced dgfacb befdagc cefgda
|
||||
bfedgc bec ce fcaebd efabg gdec cgfdb aebdfcg bfgcda cgbfe | agebf bgdcfe ec agcbdf
|
||||
db dfcbge edgfca gabd dcb agfcd bafcd afbgcd ebafc edgfbca | acfdg cbdfa afceb gbda
|
||||
cadegbf egdfbc adc acbdg dgbcf adgfbc da cgfdae fbda ebcga | dgacb bagdc fgcbd aegbc
|
||||
geacf abc gfedba cbadfg dbcg gfdba cagfb cb bfdcae adfecbg | cb eadfgb bcfag dgcb
|
||||
abdfcge adbeg badcef egcf fg fgb fbdec gebfd abgfcd gfebdc | cbeadgf cfdbag gfdbe gf
|
||||
facdbe acgfbd dbc bd abgcd adceg bcegfa fdgb bfgca badcfeg | ceafdb bfcag dcgba bgdf
|
||||
gcda cadbe abcedf cabeg edbgcf begcda begaf cg acbdefg gbc | dbace gdbeac dacfgbe abdce
|
||||
cgf gf fadegbc afgcde abgced fecba ceagf dcagbf fgde cdaeg | gdebacf gf gdfe cfega
|
||||
abdef bc gecaf dbcgfae cbfg efcba bac acebfg degcba dcegfa | bcfadeg afceb edfgac gcabed
|
||||
bfcged bgdac becad fagc aegbdfc gacfdb dbgfc dafgbe ga bga | fgdecab abdcg cefabdg egdbfa
|
||||
abcfg baecf agec fcgaeb agedbf ag dacfbeg bag eafcdb fcgdb | bcdfea efdabg ga fdbgc
|
||||
ba baf dfbgce cgab cefgdab efcad efacbg cgfeb ebafgd cafeb | fdcegb abf baf ecabf
|
||||
cegafd egdcba gbedf cgfde cfad ecf fcegadb eagdc bgaefc cf | bfged defgb gbfed efc
|
||||
gedfa abdce fadbe ebfc fba badgce bf gabefcd fdbgac befcad | bcdgaf fdbgca bfa fgbdca
|
||||
bacef cg dgabec agfc edfgb cge agfdbec fcabeg cgebf abfdce | decfbga cagf adcgbe dgefb
|
||||
eafgd ce fbgaced ecfga eafdgc gdce cea cefdba cbfag bdgafe | eadfbg dgec efgca degfa
|
||||
decgabf fecd acd acbegf agdec gabed gacbfd faceg cd fgeadc | dc dcafge abecgf dc
|
||||
egd fdaebg gcbeadf fcdge ge adecf gbce dgfbac dcfgeb gdbcf | fdcae gfdbea bdfcg eg
|
||||
ad cbafe dabe dfa gbfcea ceafd dcbagf fabdce bfceadg dfgec | cebaf aecbgdf cgdbfa fbaec
|
||||
fc cdgbae gfcbad badcg fcdba feadb fac cgefad fdgbeac gfbc | cf cfabd caf gdfcea
|
||||
fdgace edac cdfag de dcfge facebgd cgebf dfebag def bafgdc | fdgac gacfbed edgacf dgcfa
|
||||
gedfac acedb fbcadge acgefb dbgf fdaeb dgafe fgaedb bf fba | fb bf bf agefcd
|
||||
gefbdca fagbed cgaeb gf ebdfa gdbf afebg feg feadcb geacfd | egf fedab gaefb eagbf
|
||||
efadgbc bfag edgcb cga cefab afbegc ga gaebc eafcdb daefgc | ga acg gcfbade dgecb
|
||||
efcgbd gebcf gcadbf agfce fcdeagb gfa ageb aefdc ga gacbef | gcebaf geba acfde fga
|
||||
ga adbg fdeac gfa fdgbcae dgfabc cfgdb fegbdc fcabge agcdf | adbcfg efadc agcdf cgdbf
|
||||
febdc dacfeb gbfce cfgae bge bgdf dgcfbea baecdg gb ecfgbd | gb fcedb becdf gb
|
||||
bgacfd cdfabeg adgce bcegd acdefg gb cgb bgae ecbadg bdfec | adcbfg gdfcea deafbcg ceadfg
|
||||
bc gdfeac fbaec egfcba dacbeg cab gacbfde eabfd faceg fgcb | afbegc cdgabe bagecf ebcdga
|
||||
fd dfe fdgae abegfd dbcaeg dfgb caedbf efcag dageb dbfeagc | dgfb gaedbf gfbd dgfcabe
|
||||
agefbc aefdb abdge cdef bfdcga dacbf fe gbdcefa eabcdf efb | cdbefa adfcbg fecagdb ebf
|
||||
gbade adecfg abegcdf dcbfa cgbafd cfeb dfaebc fe feabd efa | dbcfea bcfe fecb bafde
|
||||
dfba dfc efbac cgead ecfgab gdfecb edacbf df afced bgecfad | afdce bcfegd efgbac adgce
|
||||
abfcg egacf bceafg dabgc fgb fb fbecadg fbce gafcde gfdbea | abdgc defagb cbef egcaf
|
||||
caegb decgbfa cebf edacg cgfbae gbc gfbea baedgf bc bfcdag | agebc bgcae cbg gefba
|
||||
ad gadf feacg aed agbfce egcda fedcba abcdgef bcdge gecafd | gedfca ad febgac dcaebf
|
||||
cegbd bgcfda dbfeag acef gcead cagfde dcfga gae fagbced ae | defgab dacgf cebdg gecdfa
|
||||
fag edfcg cdfa fa ceagfd fdgabe gebac egbfcd egdcfab gcaef | acebg fag fgdec dfegcb
|
||||
abe bcdfa acdbgf befd eadbc acbfgde eb fgcaeb gacde fcdbea | eadbc afdgbc bgaefc cabfdeg
|
||||
afdgce dgabe dgfbe bdegfc dfg agcbdfe fd abegfc dcfb bfgce | debag bedgf ebdcfg cgebafd
|
||||
dgfcea eagcbd gfceb adgb cgdeb dg eacdbf bedcafg dge abedc | ecbgf dg dbfcgea ebcad
|
||||
dgecf badfce egcdfab efabd edfca ac badc gbcfae eagdfb caf | feadc febad dacef caf
|
||||
gfb bacgde acbdgf afbd bdgca bf bgfdcea ecfag dgfecb fbcag | fbgdcae gdfbca fbg fgaec
|
||||
bcdg dc gedabc dec cdeag cbedaf gfaebc dafge bcegdaf agceb | dfage bcefad cfbage fdgae
|
||||
gc cag agbec dacbe dcbg edcbgaf gdcfae dacebg eabfg febacd | gc cbdg gc fedcba
|
||||
gfdbace edbc ecfgab efcdbg ce fdcabg fedga egc cbdgf gedfc | ecdb edgfbc eagcfb cdafbg
|
||||
afceg bgdeaf daceg degacb fe dfec adfgec acdgefb gcbfa gfe | efg gcfea dcfe fcgea
|
||||
bdca gcfdbea dc acbedf gbfde cagefd cfebag dcf bdcfe ebafc | eafbc bcfage defcb agcbfe
|
||||
cabefg adgeb fd dacf afgcb bgefdca decbfg fbd dafgb dfagbc | gbfca cbeagf cfbgad fbd
|
||||
bacgef defcga afdgebc facebd afebc badc bdfeg dc dbfec dce | adbc eafdcb dabc fgedb
|
||||
cdf decb fagec dc dcgbaf bacfgde gdfeb efbadg efgbdc cfged | ecgfa efgbd fedgab dc
|
||||
faebgd egdfcb gecadb gdbce ag aeg cgeab gacd faecb debcafg | ag fdeabg decbg ag
|
||||
eagc bdegf ga gdaef adg cbgdaf cfaegd dabfce adcegbf dfeac | acedfg agd cega bgefd
|
||||
cfgbe ceadf ab cbefag cegfbd bega egdfcab fba gbfacd efcba | ceafbg abf ecfba ba
|
||||
fgdce ecgbaf gebd bfg fdbac dfacge fbegdc cgbdf dacbfeg gb | aebcgfd cdabf ebdg egdcaf
|
||||
febda edagf egf gdcf bcgafed fg agcbfe caged gcadeb dgaefc | cegbad gcdf gaedc ebdgca
|
||||
eabgf fbdcg dfecag acebgf bafdge fbgce ecf eacb begfacd ec | fbgea gcefb fegcad decfag
|
||||
fabgcd febdac acgdf beagc dgaec de eafcdg dcfbeag dae fdge | fcdgea ceadg fegd bdcaef
|
||||
bcafeg ecbad dcfe ecbgafd gdefab dfabce de cadgb ebd fcaeb | bed bgeafd fgeacb ecdfba
|
||||
afcgeb gcebf cdbfag cfea bdgfe cbgaf ec gfabecd bedgca egc | gce dacfbg cebfg afec
|
||||
ecdafb cfeag bdgaf febga egabfc eb gbec fcebdga eab dfegac | bea gbafd eab befdac
|
||||
fgbacd fbcedga fgc fg gdaf bcdgef cdfba fabced cgbfa gcabe | egcadfb adgf gbcefd gcf
|
||||
dfbcga caefbd ac gaedbfc afgc afgdb bdgce dgcab fdgaeb dca | afbgd cagf adc bfedga
|
||||
bdgce dbf cgeadfb fd gfbde dfbecg gaebf dacgfb cdebga dcef | fegbd fgbde bgfde fcegbd
|
||||
gbda egadbf bfegd acgfde bfgaec gabef cfbde aefdbcg dg ged | abgefd gdefba deg gfeba
|
||||
afebcd degcfb dce dcfgb degf bdcgafe bdcge gcabdf de cbaeg | de bagec gcdeb ebagc
|
||||
eadcfg dfc gcbfade cd edafb fbcge afdbec agdbef ecfbd bdac | efdab agefdc befad defabc
|
||||
agbedf degbfc begcd ceagdf cgabe ecd dcbf ebfdg abecgfd cd | fdebg fdgbe cdgeb bagdef
|
||||
aefdb degf fdbaeg egb agebd bcfage gcedfab bdagc ge febacd | bgfdae fdge acfdeb deafb
|
||||
cegfba dfcea gbea bac ebafc gdcebf gebcf ba gfdbac gacfdbe | febac aefcb cbfgda cafed
|
||||
ec ecfab feadbg ecb dabfc cbfegd dbafgec feabg caefgb ecag | acbefg afbeg fecgabd bcfad
|
||||
fd decag fagbe beafdg egdacbf gbfcde dbfa agfbec dgf geadf | bfda befgcda fgd adfb
|
||||
af eabfdg edabc dgfabc efga fdbae fcagbed abf gbcdfe efgdb | gefa gfabcd fba gcdfab
|
||||
dbfacg degcb gecdaf adcbg bafegcd dfbag gbdefa ac cabf agc | bcadg afbc bdgfa abcdg
|
||||
efab cbedg aedfbc bfcad geacfd ea fabdcg adbfgce ade ecabd | fdceba bfceda ecgdfa aefcdg
|
||||
@@ -0,0 +1,5 @@
|
||||
2199943210
|
||||
3987894921
|
||||
9856789892
|
||||
8767896789
|
||||
9899965678
|
||||
+100
@@ -0,0 +1,100 @@
|
||||
2165679878998998656789210124569321954398786566799434678987678943987789543249654323496545436767898789
|
||||
1034598769987897545678921235698949895987676445978926799876567899876678992198966212987432325456789678
|
||||
2123987659866789756789654396987898789998543234567897989665476999865567889987654109976521012378994567
|
||||
3299878543455699967899876989876765678987632125678998976562345698754378978998543298765432123499765678
|
||||
4989865432324589878966989879985434569998545234569769987421976789653234567899955349896743276589876789
|
||||
9876954321013678989545698767894325678987654345678956798599897898732145678989876456987654387678998891
|
||||
8765985432124589995433989857895436799399795456789545459988789999546234589376987868998765678989219910
|
||||
9879876543435699896512976546789945892198989767998932399875678987657355893245698979899896789698909899
|
||||
2989988998747898789329865437897896789987678998967890989654589998778456789356789989754987896567998778
|
||||
1098799987656789678998764323456789899876567899456999878963678999976567895467997897643498923458987668
|
||||
2987632198789994589019973212367899998765456796347899767894567898989678976579656789732399212349876545
|
||||
9876544999894123479929894343478989899954369965456987656789678967999799987689545698941987301298787636
|
||||
8997659898943234567898765854589876789865238896769876547678989459898989998795434567899876312987654323
|
||||
7898898767898765978929976765678945699832126789898765634567892398767678999896523458998765453498765678
|
||||
6639986656789879899412987876789436798743235699999854323456789987654567896987212967899876589999876789
|
||||
5429875345678998789323498987894323987654345678998743212369899996543498935698309898965989679878987891
|
||||
6598765239889765678934679998921012398767656789987654323498998987654599324569498789654398798765498990
|
||||
7987654378997654349895789989632123459878767999998785454567897998976678912978987698975459899854349789
|
||||
8999876567898765456789999876543434569989979998999897565878966789988789439899999567896599989964235689
|
||||
9998987679999876567899889989656545678996599987896999776989345678999899998789878456797989876543145678
|
||||
9867898789899987898998778298767876789323459876745678989793216789899999867698765345989878985432014567
|
||||
8756789996798998919987652109878989895414599765634569898672101236789987756549866239876767897643623478
|
||||
5345678945987899901998943212989291954323989654523498789543234345678996543239654349765656789876534678
|
||||
3234569129896987899879894523694390965439878943412987678954345689989989921098765698754545699998645789
|
||||
4345878998765456798967779634569989876549969892109876589765476797899979899999876798643234589329756899
|
||||
5676989987654345987759568965678977989698756789219987678976568945988869787894987987632123679998767998
|
||||
8787899998763236796543467897789765398797645894398998989989679439876755656943299876543234567899878987
|
||||
9898999879878345987622356789899879239987434789997879997898789598965634345892123987658545678979989876
|
||||
7979998767989659876210145899978998949876325679886767896569898987654321234789014698987676789569898765
|
||||
6567989654399998765431234998767987898765434598775756795456987898943210125679195989998987893498789654
|
||||
4379878943239899876542347897654365699896556987654345689669876789994323234698989877899298912345678923
|
||||
5498767892198789997659456789653234789987769876543234568979765878985467345997876766789129101234589214
|
||||
6987656789297656989798967896543125898998998765432145678998654569876575459876985455678998212345678925
|
||||
9876543899989549876987898987654014567999349654321035567896543467987986578965432324569987654476899434
|
||||
3987912999878939885676799998954323699891298767632123459987932356798997989874321013478998785677898765
|
||||
2399899878969998764365698999895434988789349876543234568999891238999898999985433144567899996789999876
|
||||
1498789965458987653234567998789569875678956989854347678999789999998789999876543234878998987899899987
|
||||
9987678994367998542123456789678979964569897898767898789988678789989678987987654345689987698998769898
|
||||
8976569989239876521012345694589999873456789979878939899876545698976567896598765456899876569987656789
|
||||
7665409879398765432125467893478987654589894567989323998787434567895457897459876567989765432398545899
|
||||
6543219768999898743234567932367898765679923459891019987654323678912345978367998788978954321297656789
|
||||
7654998957889987654565678943456789876789012398742198798776519799101256965459899899567895432398767898
|
||||
8769897545678998767676789658967899989892123987653987679887698989912367896598789923456987563499898967
|
||||
9899776534567899879789898767898978999943434598779876545998987679894567897987679646567898654989989656
|
||||
8987654323479943989892999898999767899854545679897997634569876568789678999996598767678999769878978987
|
||||
7598765454567892399921099989998656989769696789976598521698965457668999998889459878989998998767867998
|
||||
6439976767878901998432989878987545678998989899998965430987674343456889987764367989299987899654358999
|
||||
5321987988989919876549876567965434569987978998999876549876543212345678976543234590129876789543269789
|
||||
4210198999797899989856998457896323459876767897989987856987652101234589987654125799298765789654345678
|
||||
5323239789656789998769996567895454598765452346678999879876543212345892399775234598987654578975458989
|
||||
6434345678945678999998987678987765997654301234569986989987654523456791498965345987694323459876767899
|
||||
7546456799536569999877898789899899876543212365678965191298765789579890987896496976543213678989878989
|
||||
7658567894423456985456789899764932989654323989789763239349878897689999876989989897954323489998989678
|
||||
8769989943212569876578891998943210998765434599897654498999989998799998765679876789765434567897896567
|
||||
9878999654301459988989990987894329879876565678999765597889993239899899654598765678986965698986543456
|
||||
4989678943212398599998789876789498765987776789789897986778932101956789543219876789497876789995432345
|
||||
3294567894343987456987698765679987654598887895678989765567893222345997654348989894398987899984321234
|
||||
2123456789469876369876569654993298765789998924569878654456794533469898765656799989299798999875210123
|
||||
1012687996598765298765498765894999876896549012698765433345679944598789876797899878987699998764323234
|
||||
2144567897998654349874329876789899987987932123987654321256587895987678989898998767896587899875434765
|
||||
3234588989899969498965214987896789998999893234598763210123456789876567899979987656789476567996999876
|
||||
6545679876789898987654323498965678999998789456987654343234587895985456789567898967894353459989789989
|
||||
7959798765865767898885554569654567899987678967898765454345689924594368893456999989943212398765678991
|
||||
9898987874343456789876768678965678999876599978979876565456798765985457894577894598959101499754567892
|
||||
6767896543212345678987979789876989987765487899568997876569899879876567895678923987998912989663458993
|
||||
5456789652101256789698989892989898976521256789467898987678932989987678976989219896787899876562545789
|
||||
4345789863218789896569992901299787895432349894345989998899543891298889987894398785676989765421234599
|
||||
1235698754523698999678901292987676789765458943234567899978954789989999998995987654565678954310123459
|
||||
2376789765434597898989992989876545678976567894345979998767895679876789879789898543454789765471266867
|
||||
5488999878545986797899989876743434567899878987659898789856789798765678965698765432123499876562345678
|
||||
6789578987659875456789878965432123498967989998769765678943656987654567893987654321012987989673456989
|
||||
7892459898767954348898767896551012599459898999879874389432349897543456892198985432129896591989567896
|
||||
8901598789898965467897657897662156789349767899989543278921298765432346789019876543298789432399998925
|
||||
9212987653919876568998745698787345690198956789998784067890399764321235678923997854987678943989899014
|
||||
4323496542109997679459956789876556789987546990987665156789987654310124789434598969876567899878789123
|
||||
5654987673998698789349897990987697896543239891297543245678998765421249896595999198765434568965678934
|
||||
6785698789876549893298789321298789989432129789987654376789879878432556987989891098764323487894567895
|
||||
7896789898765434932197698934989896878941098691098765989898765986543477899876789199765412345993456789
|
||||
8987894929876545693296567899878965767892986589129876789997654397676589998975678987654325896789567895
|
||||
9199943212987676789985456789769874656789875478998998897986543298787699997754567898765434789899678934
|
||||
1098956323498987899876567898956212345678976567896569976987672109898789876543456789878965678998989023
|
||||
3987895454569999923987679967932101234589989678975456954398943212989899998754587892989878789987892134
|
||||
9876789565678989219898989456893212345678998789986347895239654323578998929995678990194989899856789645
|
||||
8765678978789678999789494345789924459789689899997468954398765434567897939876789789293299976745678957
|
||||
7654589899896567987654323234567895678993594909876579765459898545678986898987897678989198765534567898
|
||||
6543456799965456796543210125678998789301983212987989876589987656789765767998934569879989754323568999
|
||||
7955677989656345987876521436789219893219976323499298987678998769897654459899123699769876545213467899
|
||||
9876789878943245698987434545678999999398765454932127898789569899998943298767234987656987432102456789
|
||||
9987898967892134589998545656989789998999986579843456999893457989999892129654349876549876543212345699
|
||||
8799987655789023478987678987894599987891098798767897899912345679898789239765467999732987654325456789
|
||||
7698765434568934567898789898923989876789199899899929999101234598767678949876878987621298995434567992
|
||||
9569854323477895678909898769019874385878987956998919898919345987856567959989989099560129876545679543
|
||||
5498765412346789789212999652198763234569876545987898767898959876543459898998992198432234987987899954
|
||||
4329876101258999899854998943989753123778985439876789858967899987654598776787893987543456798998969895
|
||||
5210987612567899998769887899876541014569896598765678969458978998996987654456789598654567899329457789
|
||||
4329896523456789999898796598765432123456789699854569993234567899987998962367995459785678965412345678
|
||||
7439765434567899899987687439876563234567899987653456889135698967899876543467892349876789879523456989
|
||||
6549876569678998789876543312997654345678939798542345678956789456965987754578943656987897987634567891
|
||||
9656987678989498642989932101239767456789329654321234589767892367894398967989764767898956798765678932
|
||||
8767898989992349543498756322349878569895498765642355678998943456789239878998765678999547999896799653
|
||||
@@ -0,0 +1,10 @@
|
||||
[({(<(())[]>[[{[]{<()<>>
|
||||
[(()[<>])]({[<{<<[]>>(
|
||||
{([(<{}[<>[]}>{[]{[(<()>
|
||||
(((({<>}<{<{<>}{[]{[]{}
|
||||
[[<[([]))<([[{}[[()]]]
|
||||
[{[{({}]{}}([{[{{{}}([]
|
||||
{<[[]]>}<{[{[{[]{()[[[]
|
||||
[<(<(<(<{}))><([]([]()
|
||||
<{([([[(<>()){}]>(<<{{
|
||||
<{([{{}}[<[[[<>{}]]]>[]]
|
||||
@@ -0,0 +1,98 @@
|
||||
{<{[<((<[<({<{(){}}(()())>[<<><>>((){})]}(<<{}{}>(<><>)>))(<[(<>{}){()()}]{{{}[]}(()())}>[
|
||||
((<{[<([<<{[<(()())([]())>)<<<{}{}>{[][]}>{<<>>(()[])}>}<(((()[])[{}<>])[<[]{}>{{}[]}])[[({}{})
|
||||
({(<[([((<(<[(<>{}){()[]}]<[[]<>]<(){}]>><{(<>())[<>{}]}{(<>[])(<>{})}>)([(<(){}>[(){}]){{()[]}{<>{}}}][<<[]
|
||||
{{{[(([{{{[{[(()())[<>[]]]{([]{}){()<>}}}]{{{((){})[[][]]}[[{}{}]<[]()>]}(<(<>()){{}{}>>([{}()
|
||||
[<{{{[[(<[(([<{}[]>{()()}][[<>{}]]))]([<<{{}[]}>>([(<>[])<(){}>][[{}{}](()())])]{[{[<><>]}((<>{})[
|
||||
{<[<[[<<(<<<<(<>[])(<>[])>{([]())}>[{{[]()}}<({}())[<>()]>]>{[((<>{})[[]<>])([()<>]{<>()})](((<>()
|
||||
([({({[{(([<[<[]>]>]<<({[]()}<[]<>>)[[()[]]{[]{}}]>>))((<<{<<><>>}{(<>{})<[]()>}>([[<>{}]<<>{}>
|
||||
{(<([{{{{(((({{}[]}))){[(({}<>))({<><>}<[][]])][<<[]{}>[{}{}]>{<[]>{[]{}}}]})({[{([]<>)([]<>)}
|
||||
{([{{{(([<[[[<(){}>{()[]}][([]<>)<[]{}>]]<{(<>())[[]()]}[{(){}}[()<>]]>]([({[]{}}{()[])){{<>()}{()[]}}])>[<[
|
||||
[([{<{(<({<{[[<>{}][<>[]]]<{{}<>}<{}{}>>}[({()[]])[[<>()]({}<>)]]>{<([{}<>]<[]<>>)[{[]()}{{}[]}]>[[{[][]
|
||||
{{<(<{(<[<(((<[]<>><{}[]>))({(<>{}){[][]}}([[]()]({}<>))>)>[((((()<>)<<>[]>){(<>{}){<>{}}})(<({}(
|
||||
{{[{<{<([{[<{[{}{}]{(){}}}{{[]<>}<()[]>}>]<[({[][]}<{}<>>)(<{}{}><[]()>)]<[{<>{}}(()())]([[]{}]<[]<>>)>>>[{[{
|
||||
<(([<<{{<(([(({}{})[[]{}])[<{}>(<>{})]]<([{}{}]{()[]})>))({(<(()<>)<<><>>>(([]<>)))}<<<[()
|
||||
<<<(({{([{({({()()}<<>[]>)<{()[]}[<>()>>}){[<[<>{}][<><>]>[{()[]}[<><>]]]<<[<>[]]{<>()}>>}}[(<[[(){}](()
|
||||
<<[[{{([(([([[<>{}][(){}]])]{({{()}(<>{})}{{{}<>}{<><>}})(([<><>])({{}[]}<<><>>))})([{({()<>}<[][]>)}]))
|
||||
[(<<<<<{[<({[{{}[]}<()<>>]<[{}[]][[]<>]>})>[<<{(()())({}<>)}{({}())(<>[]]}><<<{}<>>([]<>)><[
|
||||
<<({({{([(<([[{}()]<[]{}>]<<<>()>>)><{(<{}<>><{}()>)<{(){}}[<>]>}{([[]{}][[]<>])<({}()){{}[
|
||||
{<{([[[[[{<<[[{}{}]([]<>)]{{{}()}[<><>]}><[<()()>[{}{}]](((){})<()>>>>}]<{({{([]()){{}<>}}<{<>{}}({}{}
|
||||
{[{[[<[((<(<<{<>}{()[]}>><{<<>[]>[()[]]}{{()()}[()[]]}>)(({[[]](<>[])}{({}())<{}()>})([[{}[]]<[]()>][{
|
||||
[{[(({[{{([[[<()()>{{}{}}]{([]<>){<><>}}]](<<<(){}>(()())>{[[]]{<>{}}>>))<[<((<>{}){(){}}){[{}<>]}>([[<><
|
||||
<{<(<([(<[({<<[]()>[[]{}]>(<{}<>>)}(<[{}[]][{}[]]>{<{}[]>[(){}]}))[<(<[]<>>{{}<>}]([[][]]<()<>>)>{({{}<>}[<>[
|
||||
{({({{<({[{[{<<>()>[[]{}]}](([{}<>]{()()})[([]()){[]()}})}[[((()())[()<>])(<<>{}><{}>)]]]<([{([]
|
||||
(<[([{({<([<(([]<>)<()[]>){{<>{}}[()()]}>])(([({[]()}<{}{}>)][<{{}[]}({})>[[<><>][<><>]]])<[({()[]}[[]{
|
||||
{{{<{{[[{[[<({[]()}{()[]})<[<>()][()()]>>(({{}{}}))][({[(){}](()[]]}){{<<>()>({})}{<{}[]>[{}<>]}}]]{[<
|
||||
{<([((<{<<<{(({}{})<<>[]>)(((){}){[]})}{({[]<>}[[]{}])<[{}[]][()()]>}}[{([<>()][<>{}]){(<>
|
||||
{([([(({[<[[[(())(<>[])]{[()()][<>]}]]>([{[(<><>)(<>())]<(()<>)[<><>]>}({{<>{}}({})}([{}][
|
||||
([[[({[{{<{{{[{}()]{(){}}}[{()}({}[])]}[{[[]<>>(()[])}<{[][]}{[]}>]}>}}]}{[<[[[[(({}{}){{}[]}
|
||||
<[{<([<({((([[<>{}]([]())]<[()[]]<()<>>>){<<{}{}>[<><>]>[((){}){{}<>}]}))}({[({[()())(<>[])}{({}())}){([()[]
|
||||
{([[{[<<[[<{([<>()][{}{}])<([]{})(()[])>}{{{()()}{[][]}}<[[]{}]<<>{}>>}>(({<()()>({}())}[{<>[]}({}<>)])([[<
|
||||
({[<{{[<{{(((([]<>){<>()})([()<>]([]{})))){{<{()()}[{}<>]>}({<{}[]>}{([]<>)<{}[]>})}}<<([{{}()}[{}[]]]<{(
|
||||
<({{([{[({<([({}())[()[]]]{([]{})})(([[]{}]{{}[]})([{}()><()<>>))>(<(({}{})<{}{}>)[{<><>}{[]
|
||||
[{[{<{([[[<[[{[][]}(<>{})]{{[]<>}[{}{}]}]><{({{}()}<[]()})}>]{{(<[[][]]{[]()}>{(()())(<>[])})(
|
||||
(<{(<[[<{[[<<([]<>)<{}{}>>({{}[]}({}()))>]({([[]<>]([]())){[<>{}]<{}()>}}[{({}())[(){}]}(({}{})[[]]
|
||||
<[<<([{[{<{{<[[][]]<<>[]>>({<>{}}[<><>])}([[{}<>]<()()>][<[][]>(()[])])}[({[()()][[]()]}[{{}()}<[]<>>])]>{<
|
||||
<(([[{(([[([[{{}()}{[]}]]<((<><>}({}[]))((()())[()[]])>)[{{<[]<>>((){})}}<(<(){}>{{}[]})({()}{{}<>})>]]<[(<{
|
||||
[{<(((<(<({(({{}()}{<><>})[{[][]}{(){}}])({{[]{}}[<>{}]>)})>((([<(<><>){{}<>}><[<>{}]>]([[<>[]][{}{}
|
||||
[<{{({([({({{{()<>}([][])>}((({}<>)(()[]))<(<>()){{}<>}>)){[([()()](<>[]))]{({[]}[[]{}])([[]<>
|
||||
{({[<{(<<([[[<{}{}>[{}{}]](<<>>(()))]{[([]<>)<{}{}>]<[<><>]>}]<[[{{}<>}<<>{}>][([]<>)<(){}
|
||||
([{{{[[(<<[<[[<>]{[]}]((<>{})({}[]))>({{()[]}<<><>>}{{<>{}}({})})]{{{{[][]}<{}()>}}<[[<><>][{}<>]]<
|
||||
[<{<{<[{{[([(([]<>))[{<>()}<{}{}>]]{[<<>{}>[(){}]){<[][]>[<><>]}})](([<([]{})[{}()]>(({}())(<>{}))]
|
||||
[<[<{(<(([{<{([]{}){[][]}}><{[{}[]]([]<>)}[[()[]]<()()>]>}][{(<[(){}]{()<>}><<[]()>[[]()]>){[[<>[]](()[])
|
||||
<(<<<([[<([[({[]<>}<[]()>){{<>[]}[{}{}]}]([[[][]]<[]()>])]<{{(<><>){<>[]}}}{(<[][])(()[]))[([]{})[[
|
||||
(([{<{{([<<{({[]{}}[()[]])[<()()><()[]>]}[(<()>[()()])[[<>[]]]]>>{{{{<[]()>[()<>]}}{{<()[]>[()[]]}<[[][]]
|
||||
(<<[([[{{({<[([][])<{}()]][<()()>(()())]>})}<([[{(()<>)<[]()>}((()[])[<>{}])]]([<{(){}}({}<>)>][<
|
||||
[<<((<[<<{(((({}()))({<>{}}([]<>))){{<()<>><{}[]>}{(()())}}){({([]<>)<<>{}>})}}<{{<[()][<><>]>{{[]
|
||||
<{[<[((([{<{{{<>[]}[[]()]}([<><>])}>((<<<>()>({}<>)><[{}[]]<()[]>>)[{{[][]}{()<>}}[{()<>}(()[])]])}(([<{{
|
||||
{<{<[(({([<[<[[][])([]{})>[{(){}}[[]<>]]][(<{}<>>{()<>}){[<><>]{{}[]}}]>([[<[][]>{[]<>}]({[][]}(()()))]{
|
||||
(<{{{[{<{(<[({{}[]})]><<{(()<>)[{}{}]}{<()()>}>>)[[(({()<>}(<>{})))([<(){}>(()<>)]{((){})([][])})]
|
||||
<<[(<([<(({[{({}{})}<{()<>}{<>{}}>][([[]()](()<>))]}[[({{}()}<[]{}>)[<[]()>[()()]]]((<{}{}
|
||||
<<{[{[<{{{([<<<>{}>{()[]}>({{}[]}<<>{}>)][[<()[]>[{}[]]]({()<>}(()()))])[<<<<>()>{[]{}}>><{{[]{}}<()<>>}(<<>[
|
||||
[{{<({[([({{{(()())[<><>]}{[()()][(){}]}}}{[([<>[]])[{[]()}((){})]]([<[]{}>(()<>)]{[<>]})})(<
|
||||
<<<{{(({<{<[<<<>{}>>(<<>[]>{()()})]<([()<>])>>[(<({}[]){{}[]}>{[{}{}][[]()]})[<[<>[]]<()[]>>(<
|
||||
[([<<<(<[[[[[([]{}){{}()}}<<[]()>{[]}>][([<>[]]({}))[(()<>){()()}]]]]]>{[([[<([]())<{}<>>>({<>()}
|
||||
[([{{[[(({[<{[{}[]]{[][]]}<{<>()}[<>[]]>>(<{<>()}<[]()>>)]}))<<<<<{{()[]}{{}[]}}[<<>{}>]><{[{}<>]{(
|
||||
[{{{<((([{([{[[]()][<>()]}([[]()]{{}()})]{([{}{}](<>{}))({()<>}(<>{}))})<[({(){}}[()<>])}>}(
|
||||
{<<{{({[[[[[{[()]({})}<[<><>]{{}}}][[{()<>}({}{})][<<>[]>{<><>}]]]({<(<>)<<><>>>({<>()}<<>
|
||||
<[[[[({([[{<[{{}()}]{(()<>)<[]()>}>{[{<>{}}(()[])][{()[]}<()()>]}}]]<{[(({<>{}}{<>()})<[[]()]<<>{}>>)<((()[])
|
||||
({{{<{[({[[[<{()<>}<<>[]>>{[[]<>][<>()]}]([(()<>)[[]()]]({{}[]}(()[]))]]][{{{<<>>({}<>)}<<<>{}
|
||||
[{[((<{<([[{<<()[]>[[][]]>}<{({})}[<{}[]>[[][]}]>]]<<{(([]<>)[[]()])}<{<{}()>{[]}}{[()[]]({})}>>
|
||||
[{([[{[({<[<(<<>{}>({}[]))([{}<>]{(){}})}({<[][]>}{[()()]<{}[]>})]<<[<(){}>[<>{}]][<<>{}>({}{
|
||||
[<([{<<[((([<[<>()]({}())><([]{})<{}[]>>]))[{[[[[]()]]]}{{[{[]()}([][])]{<[][]>{{}()}}}}])<(({{(<>()){
|
||||
{{[[<{{(({{{(<{}<>>{()[]})[<[]()>]}[{<[]{}>[()[]]}]}<[{[[]<>][[][]]}<<(){}>((){})>][([()<>]<<>>)<
|
||||
<<{[(([{<((({([][]){[]<>}}{({}())}))({[<<>{}><<>>]}{<[<>{}](()())><<{}[]>{()<>}>)))({[<(<>[
|
||||
<[<((<<[[<[((([]<>)<(){}>)[<(){}>])({<{}{}>{<><>}}<(()())<[]{}>>)]{{({(){}}(()[]))}<({<><>}({}()))>}
|
||||
[<{(<([{[({[{({}{})<{}()>}[{[]<>}({}<>)]]})[<[([{}[]][()[]])((<>()){{}<>})][[[(){}][[][]]][<
|
||||
<(({([[(<[[{(<<><>><{}()>)<(()()){()[]}>}({[()<>][{}[]]}([<>{}]<<><>>)}]]{{[<[<>[]]>({<><>}([]{}))][(([][])<
|
||||
{[[[[<<[{(({{{[]()}[{}[]]}}{[[()()][{}{}]]}){[{{{}()}}[[[][]]<()()>]]}){[{((()<>)[{}<>]){<<>()>[()()]}}(([{}<
|
||||
[[<<<{<({[<([[()<>]]({()<>})){[{{}[]}]}>][({[<()<>>({}[])]}((<<><>>[<>])[({}())<{}{}>]))]})>}>[{{(({{[
|
||||
{{[[{{(([[[[({[]()}<{}()>)<(()[])<<>[]>>]]<(<{[][]}<{}()>>(({})[[][]]))>]<<{({()[]}[(){}]]({
|
||||
({{((<([<({<(<[]<>><<>[]>){[{}<>]}>(<[{}{}]>)}[<{{<>{}}{[]()}}[<<><>>[[][]]]>[[<()()><(){}>]{<
|
||||
[[[(({{<(<{<[{()[]}]({<>{}})>[<<<>()>{{}{}}>{({}<>)<<>()>}]}<({{()()}}<(()()){<><>}>){<((){})(<>()
|
||||
{<{{(<{{<[[({<<>>}<[(){}]({}())>)[<{()<>}[{}()]>[({}[])<()()>]]]]{<[({<>{}}{[][]})]{[(<>{})({}())]}
|
||||
[<[<{<<({[[(((<>())[{}<>]))<(({}[])(()[])){{{}{}}[[]<>]}>]<[(<{}{}]{{}{}})<(()<>)>][[{<>{}}<[
|
||||
[({<(<[([<({([<>()]{[][]}>{<<>[]>[[]()]}}[{<()<>>([]<>)}])<<<[[]()](())>><[<<>[]>{{}()}]{<()
|
||||
{{[{(<<{[{({[<[]()>{{}<>}]([()<>]{{}[]})}<<<[]()>[[]<>]><[<>{}][()()]>>)}<{<[{[]()}{<>{}}]>{({[][]}<[]
|
||||
[[{[<<<[{[[<({<>()}((){})){{<>[]}<(){}>}>[<(()<>)({}<>)>{<[]()>(<>)}]]]{<<{[<>[]]>>(<<{}()>(<>())>(
|
||||
{({{[([<{{{<((<><>)<()()>][<{}[]>{<>[]}]><({<>()}(()<>))({{}[]}<()[]>)>}([({{}[]})({{}()}[<>[]])])}
|
||||
{<[[({{((<[{[{<>()}(<>())]<({}[])<<>{}>>}([(()())<<>[]>]((<>[]){{}{}}))]{({<()()>(()<>)}[{[][]}([]())])<<[()
|
||||
([{((({<<<{<{{<><>}(()<>)}>}>)[{{[[[[][]]]][<(<>{}){[]}>([{}()][[][]])]}<{([()()][<>()])(<[]()>
|
||||
<(((<(({<<[{<(()())>[[[][]]<[]{}>]}[{{<>()}(<><>)}(({}())({}()))]]>((<({{}[]}(<>())){({}[])
|
||||
<<{[(<([<(<{{[<>{}]}(<<>()>({}{}))}><({<<>()>(<><>)}<<[][]>[[]()]>)(([<>()){{}()})<[[][]]{<>{}
|
||||
<<[[([{{{{[<{[(){}]<[]()>}>[[([])<[]<>>>[({}{})([][])]]]}<<({<()[]><{}<>>}<{()<>}(<><>)>)>(([
|
||||
{[[[{{[{{((<{[{}[]](()[])}<(<>{})(<><>)>>){(<<<>{}>>)(([()[]]<[]{}})[({}[])(()())])})}}]}{[{{({({([]
|
||||
([{[{((([[{{([[][]][{}[]])[{[]<>}<<>[]>]}}]][<[{[(<>{})[[]<>]][{[]<>}[(){}]]}]{<[[{}[]]{{}[]}]><(({}
|
||||
{(<(<{<<([<<<[{}{}]<{}{}>>><[{<><>}{{}<>}]([[]<>]{{}()})>>])>>{{[{{{<<<>()>[{}()]>{<[]()>[<>{}]}}}}<(<[(
|
||||
{<[{<<({[({(([[]<>](<><>)))[[[{}()]<()[]>]<{<>{}}[()<>]>]})([<([(){}]{<>[]})<<<>()><(){}>>><([<>[]>([][]))(<<
|
||||
[[[[<<(<({(<[{(){}}[()[]]][[{}[]]{[]{}}]>([{[][]}([]{})][{{}[]}<[]()>]))[{[{()()}({})]({(){}}[<>[]
|
||||
{<{(<[<(<<<{<[()<>]>{{()[]}}}<<([]<>)[()<>]>>>[{[<<><>>[{}<>]][<<><>>{(){}}]}[{[[]()]{<>()}}
|
||||
<[[<{<<[{{[[(([][])[[][]])<({}<>){{}[]}>]](<<({}[])[[][]]>((<><>))>[([()[]]((){}))])}}{[([((<>())
|
||||
{(<{[[((<<<{<{<>{}}([]{})><{()}>}[{(()<>)[[][]]}{<{}{}><{}{}>}]]<[[<{}()>]<([]{})>]{{[<>()]{{}{
|
||||
<{<{<{[{(((<(<[]{}>)([{}{}]({}{}))>([{[]<>}[[]{}]]<([]()){[]<>}>))<[(<[]{}>[()[]])]>)<{{[{{
|
||||
{{<([<{[(([(({[]<>}{()[]})<(()){(){}}>)[{({}<>)<[]<>>}<{{}()}<<><>>>>][{<({}<>)[()()]><<()<>>>
|
||||
[[[<([<<[[[{<<[][]>{()()}>[[(){}][<><>]]}{[{<>[]}[[]{}]]}]{<<({}<>)[[]]>[(<>[])]><<[()[]]<[]>>[{[]<>}({}{})]>
|
||||
{{{[{(<<{({{<{<>[]}>[{<><>}[()[]]]}[({()()})([<><>]<<>[]>)]}({[{{}[]}{{}[]}]}[(<[]()>[<>[]])({<><>}[(){}])]
|
||||
(<<[{[{[({<[{{(){}}<(){}>}{{()[]}[<>{}]}]{{(<>{})<{}>}{((){})}}>[{([<>()](<>{}))<{{}[]}[[]{}]>}{(<[][
|
||||
(<[[{<<{({<([<<>()>[<>()]]{{()<>}[<>[]]))>({<<<>()><()<>>>}({{[]<>}{{}()}}{<(){}><<>{}>}))})}<([<({[[]]{{}<
|
||||
([((<[((([{<((()<>))[([])]>({(()<>)([]{})}([{}<>](()<>)))}{<[[[]()]([]{})]>}]({([{[]{}}][{(){}}{(){}
|
||||
(({{<[<{<{([<([]<>){()}><([]<>)<[][]>>]<<[()<>][[]<>]><{()()}>>)[(<[[]{}](<>())>{{{}()}{[]()}}
|
||||
+15
-10
@@ -1,18 +1,23 @@
|
||||
use anyhow::Result;
|
||||
|
||||
fn parse_line(s: &str) -> (&str, i32) {
|
||||
let parsed: Vec<&str> = s.splitn(2, ' ').collect();
|
||||
let instruction = parsed[0];
|
||||
let quantity = parsed[1].parse::<i32>().unwrap();
|
||||
fn parse_line(s: &str) -> (char, i32) {
|
||||
let mut parsed = s.split_ascii_whitespace();
|
||||
let instruction = match parsed.next().unwrap() {
|
||||
"forward" => 'f',
|
||||
"down" => 'd',
|
||||
"up" => 'u',
|
||||
_ => unreachable!(),
|
||||
};
|
||||
let quantity = parsed.next().unwrap().parse::<i32>().unwrap();
|
||||
(instruction, quantity)
|
||||
}
|
||||
|
||||
fn follow_course(s: &str) -> i32 {
|
||||
let (mut pos, mut depth) = (0, 0);
|
||||
s.lines().for_each(|line| match parse_line(line) {
|
||||
("forward", d) => pos += d,
|
||||
("down", d) => depth += d,
|
||||
("up", d) => depth -= d,
|
||||
('f', d) => pos += d,
|
||||
('d', d) => depth += d,
|
||||
('u', d) => depth -= d,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
pos * depth
|
||||
@@ -21,12 +26,12 @@ fn follow_course(s: &str) -> i32 {
|
||||
fn follow_course_better(s: &str) -> i32 {
|
||||
let (mut pos, mut depth, mut aim) = (0, 0, 0);
|
||||
s.lines().for_each(|line| match parse_line(line) {
|
||||
("forward", d) => {
|
||||
('f', d) => {
|
||||
pos += d;
|
||||
depth += aim * d;
|
||||
}
|
||||
("down", d) => aim += d,
|
||||
("up", d) => aim -= d,
|
||||
('d', d) => aim += d,
|
||||
('u', d) => aim -= d,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
pos * depth
|
||||
|
||||
+2
-2
@@ -39,8 +39,8 @@ fn find_oxygen_or_co2(s: &str, oxygen: bool) -> usize {
|
||||
.rev()
|
||||
.map(|bit| {
|
||||
// split current set into ones/zeroes for current bit
|
||||
let mut ones = vec![];
|
||||
let mut zeroes = vec![];
|
||||
let mut ones = Vec::with_capacity(kept.len());
|
||||
let mut zeroes = Vec::with_capacity(kept.len());
|
||||
kept.iter().for_each(|x| {
|
||||
if x & (1 << bit) != 0 {
|
||||
ones.push(*x);
|
||||
|
||||
+45
-23
@@ -12,17 +12,40 @@ impl LineSegment {
|
||||
self.start.0 == self.end.0 || self.start.1 == self.end.1
|
||||
}
|
||||
|
||||
fn rasterize(&self) -> Vec<(isize, isize)> {
|
||||
let xstep = (self.end.0 - self.start.0).signum();
|
||||
let ystep = (self.end.1 - self.start.1).signum();
|
||||
let mut ret = vec![self.start];
|
||||
let (mut x, mut y) = self.start;
|
||||
while (x, y) != self.end {
|
||||
x += xstep;
|
||||
y += ystep;
|
||||
ret.push((x, y));
|
||||
fn rasterize(&self) -> LineSegmentPixelIter {
|
||||
let dx = self.end.0 - self.start.0;
|
||||
let dy = self.end.1 - self.start.1;
|
||||
LineSegmentPixelIter {
|
||||
x: self.start.0,
|
||||
y: self.start.1,
|
||||
xstep: dx.signum(),
|
||||
ystep: dy.signum(),
|
||||
length: dx.abs().max(dy.abs()) + 1,
|
||||
i: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct LineSegmentPixelIter {
|
||||
x: isize,
|
||||
y: isize,
|
||||
xstep: isize,
|
||||
ystep: isize,
|
||||
length: isize,
|
||||
i: isize,
|
||||
}
|
||||
|
||||
impl Iterator for LineSegmentPixelIter {
|
||||
type Item = (isize, isize);
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.i < self.length {
|
||||
let ret = (self.x + self.i * self.xstep, self.y + self.i * self.ystep);
|
||||
self.i += 1;
|
||||
Some(ret)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,21 +73,20 @@ fn parse_lines(input: &str) -> Vec<LineSegment> {
|
||||
}
|
||||
|
||||
fn count_overlapped_cells(segments: &[LineSegment], includ_diag: bool) -> usize {
|
||||
let mut marks: Vec<(isize, isize)> = segments
|
||||
let mut cells: Vec<Vec<usize>> = vec![vec![0; 1000]; 1000];
|
||||
segments
|
||||
.iter()
|
||||
.filter(|s| s.is_horizontal_or_vertical() || includ_diag)
|
||||
.map(|s| s.rasterize())
|
||||
.flatten()
|
||||
.collect();
|
||||
// sort so we can find duplicates
|
||||
// **NOTE** IterTools has `.duplicates()` but it's significantly slower (more than 2x) than this
|
||||
marks.sort_unstable();
|
||||
marks[..]
|
||||
.iter()
|
||||
.zip(&marks[1..])
|
||||
.filter(|(a, b)| a == b)
|
||||
.unique()
|
||||
.count()
|
||||
.fold(0, |acc, s| {
|
||||
acc + s.rasterize().fold(0, |acc, (x, y)| -> usize {
|
||||
cells[x as usize][y as usize] += 1;
|
||||
if cells[x as usize][y as usize] == 2 {
|
||||
acc + 1
|
||||
} else {
|
||||
acc
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> Result<(usize, usize)> {
|
||||
|
||||
+19
-15
@@ -2,10 +2,10 @@ use anyhow::Result;
|
||||
|
||||
use crate::utils::parse_by_char;
|
||||
|
||||
fn get_median(positions: &[isize]) -> isize {
|
||||
let mut sorted_pos = positions.to_owned();
|
||||
sorted_pos.sort_unstable();
|
||||
sorted_pos[sorted_pos.len() / 2]
|
||||
fn get_median(positions: &mut [isize]) -> isize {
|
||||
let median_index = positions.len() / 2;
|
||||
positions.select_nth_unstable(median_index); // quickselect in the standard library!
|
||||
positions[median_index]
|
||||
}
|
||||
|
||||
fn compute_fuel(positions: &[isize], target: isize, cheap_fuel: bool) -> usize {
|
||||
@@ -22,9 +22,10 @@ fn compute_fuel(positions: &[isize], target: isize, cheap_fuel: bool) -> usize {
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn find_cheapest_location(positions: &[isize], cheap_fuel: bool) -> usize {
|
||||
fn find_cheapest_location(positions: &mut [isize], cheap_fuel: bool) -> usize {
|
||||
// find start point
|
||||
let mut position = get_median(positions);
|
||||
let start = get_median(positions);
|
||||
let mut position = start;
|
||||
let mut fuel = compute_fuel(positions, position, cheap_fuel);
|
||||
|
||||
// search up
|
||||
@@ -36,6 +37,9 @@ fn find_cheapest_location(positions: &[isize], cheap_fuel: bool) -> usize {
|
||||
position += 1;
|
||||
fuel = new_fuel;
|
||||
}
|
||||
if position != start {
|
||||
return fuel;
|
||||
}
|
||||
|
||||
// search down
|
||||
loop {
|
||||
@@ -52,10 +56,10 @@ fn find_cheapest_location(positions: &[isize], cheap_fuel: bool) -> usize {
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> Result<(usize, usize)> {
|
||||
let data = parse_by_char::<isize>(include_str!("../data/day07.txt"), ',').unwrap();
|
||||
let mut data = parse_by_char::<isize>(include_str!("../data/day07.txt"), ',').unwrap();
|
||||
Ok((
|
||||
find_cheapest_location(&data, true),
|
||||
find_cheapest_location(&data, false),
|
||||
find_cheapest_location(&mut data, true),
|
||||
find_cheapest_location(&mut data, false),
|
||||
))
|
||||
}
|
||||
|
||||
@@ -65,15 +69,15 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_example() {
|
||||
let data = parse_by_char::<isize>(include_str!("../data/day07-test.txt"), ',').unwrap();
|
||||
assert_eq!(find_cheapest_location(&data, true), 37);
|
||||
assert_eq!(find_cheapest_location(&data, false), 168);
|
||||
let mut data = parse_by_char::<isize>(include_str!("../data/day07-test.txt"), ',').unwrap();
|
||||
assert_eq!(find_cheapest_location(&mut data, true), 37);
|
||||
assert_eq!(find_cheapest_location(&mut data, false), 168);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_my_data() {
|
||||
let data = parse_by_char::<isize>(include_str!("../data/day07.txt"), ',').unwrap();
|
||||
assert_eq!(find_cheapest_location(&data, true), 344138);
|
||||
assert_eq!(find_cheapest_location(&data, false), 94862124);
|
||||
let mut data = parse_by_char::<isize>(include_str!("../data/day07.txt"), ',').unwrap();
|
||||
assert_eq!(find_cheapest_location(&mut data, true), 344138);
|
||||
assert_eq!(find_cheapest_location(&mut data, false), 94862124);
|
||||
}
|
||||
}
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
use anyhow::Result;
|
||||
use itertools::Itertools;
|
||||
|
||||
// return the number of chararcters present in both strings
|
||||
// NOTE: this is O(n^2), but our input is tiny
|
||||
// a HashSet is better complexity, but the allocations will hurt us
|
||||
fn shared_chars(a: &str, b: &str) -> usize {
|
||||
if a.len() < b.len() {
|
||||
a.chars().filter(|ch| b.contains(&ch.to_string())).count()
|
||||
} else {
|
||||
b.chars().filter(|ch| a.contains(&ch.to_string())).count()
|
||||
}
|
||||
}
|
||||
|
||||
// decode a set of 10 input + 4 output characters and return the output
|
||||
fn descramble(words: &[&str]) -> usize {
|
||||
// println!("input = {:?}, output = {:?}", input, output);
|
||||
let mut s1_index: Option<usize> = None;
|
||||
let mut s4_index: Option<usize> = None;
|
||||
|
||||
// find the 1 and 4
|
||||
words.iter().enumerate().for_each(|(i, w)| match w.len() {
|
||||
2 => s1_index = Some(i),
|
||||
4 => s4_index = Some(i),
|
||||
_ => (),
|
||||
});
|
||||
assert!(s1_index.is_some() && s4_index.is_some());
|
||||
|
||||
// now decode each digit based on delta from the 1 and 4 digits
|
||||
let result = words
|
||||
.iter()
|
||||
.map(|w| match w.len() {
|
||||
2 => '1',
|
||||
3 => '7',
|
||||
4 => '4',
|
||||
5 => {
|
||||
// 2, 3, or 5
|
||||
if shared_chars(words[s1_index.unwrap()], w) == 2 {
|
||||
'3'
|
||||
} else if shared_chars(words[s4_index.unwrap()], w) == 3 {
|
||||
'5'
|
||||
} else {
|
||||
'2'
|
||||
}
|
||||
}
|
||||
6 => {
|
||||
// 0, 6, or 9
|
||||
if shared_chars(words[s1_index.unwrap()], w) == 1 {
|
||||
'6'
|
||||
} else if shared_chars(words[s4_index.unwrap()], w) == 4 {
|
||||
'9'
|
||||
} else {
|
||||
'0'
|
||||
}
|
||||
}
|
||||
7 => '8',
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.collect::<String>();
|
||||
|
||||
// return the last for digits as a usize
|
||||
(&result[10..]).parse::<usize>().unwrap()
|
||||
}
|
||||
|
||||
fn part1(s: &str) -> usize {
|
||||
s.split_whitespace()
|
||||
.chunks(15)
|
||||
.into_iter()
|
||||
.map(|chunk| {
|
||||
chunk
|
||||
.skip(11)
|
||||
.filter(|token| [2, 4, 3, 7].contains(&token.len()))
|
||||
.count()
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn part2(s: &str) -> usize {
|
||||
s.split_whitespace()
|
||||
.chunks(15)
|
||||
.into_iter()
|
||||
.map(|chunk| {
|
||||
let mut words: Vec<&str> = chunk.collect();
|
||||
words.remove(10);
|
||||
descramble(&words)
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> Result<(usize, usize)> {
|
||||
let input = include_str!("../data/day08.txt");
|
||||
Ok((part1(input), part2(input)))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_example() {
|
||||
let input = include_str!("../data/day08-test.txt");
|
||||
assert_eq!(part1(input), 26);
|
||||
assert_eq!(part2(input), 61229);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_my_data() {
|
||||
let input = include_str!("../data/day08.txt");
|
||||
assert_eq!(part1(input), 272);
|
||||
assert_eq!(part2(input), 1007675);
|
||||
}
|
||||
}
|
||||
+167
@@ -0,0 +1,167 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use anyhow::{anyhow, Result};
|
||||
use itertools::Itertools;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
|
||||
struct Coordinate {
|
||||
x: usize,
|
||||
y: usize,
|
||||
}
|
||||
|
||||
struct HeightMap {
|
||||
data: Vec<Vec<usize>>,
|
||||
width: usize,
|
||||
height: usize,
|
||||
}
|
||||
|
||||
impl HeightMap {
|
||||
fn parse(s: &str) -> Result<Self> {
|
||||
let data = s
|
||||
.lines()
|
||||
.map(|l| {
|
||||
l.chars()
|
||||
.map(|c| match c {
|
||||
'0' => 0,
|
||||
'1' => 1,
|
||||
'2' => 2,
|
||||
'3' => 3,
|
||||
'4' => 4,
|
||||
'5' => 5,
|
||||
'6' => 6,
|
||||
'7' => 7,
|
||||
'8' => 8,
|
||||
'9' => 9,
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.collect_vec()
|
||||
})
|
||||
.collect_vec();
|
||||
let width = data[0].len();
|
||||
let height = data.len();
|
||||
if !data.is_empty() {
|
||||
Ok(HeightMap {
|
||||
data,
|
||||
width,
|
||||
height,
|
||||
})
|
||||
} else {
|
||||
Err(anyhow!("HeightMap parse error"))
|
||||
}
|
||||
}
|
||||
|
||||
fn neighbors(&self, pos: &Coordinate) -> Vec<Coordinate> {
|
||||
let mut ret = vec![];
|
||||
if pos.x > 0 {
|
||||
ret.push(to_coord(pos.x - 1, pos.y))
|
||||
}
|
||||
if pos.y > 0 {
|
||||
ret.push(to_coord(pos.x, pos.y - 1))
|
||||
}
|
||||
if pos.x < self.width - 1 {
|
||||
ret.push(to_coord(pos.x + 1, pos.y))
|
||||
}
|
||||
if pos.y < self.height - 1 {
|
||||
ret.push(to_coord(pos.x, pos.y + 1))
|
||||
}
|
||||
ret
|
||||
}
|
||||
fn iter(&self) -> impl Iterator<Item = Coordinate> {
|
||||
(0..self.height)
|
||||
.cartesian_product(0..self.width)
|
||||
.map(|(y, x)| Coordinate { x, y })
|
||||
}
|
||||
|
||||
fn value_at(&self, pos: &Coordinate) -> Option<usize> {
|
||||
if pos.x < self.width && pos.y < self.height {
|
||||
Some(self.data[pos.y][pos.x])
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
fn is_local_minima(&self, pos: &Coordinate) -> bool {
|
||||
let value = self.value_at(pos).unwrap();
|
||||
self.neighbors(pos)
|
||||
.iter()
|
||||
.all(|n| self.value_at(n).unwrap() > value)
|
||||
}
|
||||
|
||||
fn find_basin_members(&self, root: &Coordinate) -> HashSet<Coordinate> {
|
||||
// `root` is assumed to be in the basin
|
||||
let mut ret: HashSet<Coordinate> = HashSet::new();
|
||||
ret.insert(*root);
|
||||
let value = self.value_at(root).unwrap();
|
||||
|
||||
// test each of the qualifying neighbors of `root`
|
||||
let good_neighbors = self
|
||||
.neighbors(root)
|
||||
.iter()
|
||||
.filter(|npos| {
|
||||
let nvalue = self.value_at(npos).unwrap();
|
||||
nvalue > value && nvalue < 9
|
||||
})
|
||||
.cloned()
|
||||
.collect_vec();
|
||||
|
||||
// recursively search for each of the qualifying neighbors' neighbors
|
||||
good_neighbors
|
||||
.iter()
|
||||
.for_each(|n| ret.extend(self.find_basin_members(n).iter()));
|
||||
|
||||
// glue it all together and return
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
fn to_coord(x: usize, y: usize) -> Coordinate {
|
||||
Coordinate { x, y }
|
||||
}
|
||||
|
||||
fn find_low_points(heightmap: &HeightMap) -> Vec<Coordinate> {
|
||||
heightmap
|
||||
.iter()
|
||||
.filter(|coord| heightmap.is_local_minima(coord))
|
||||
.collect_vec()
|
||||
}
|
||||
|
||||
// scan the whole grid for low points
|
||||
fn sum_low_points(heightmap: &HeightMap) -> usize {
|
||||
find_low_points(heightmap)
|
||||
.iter()
|
||||
.map(|coord| heightmap.value_at(coord).unwrap() + 1)
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn sum_top3_basins(heightmap: &mut HeightMap) -> usize {
|
||||
let mut basins = find_low_points(heightmap)
|
||||
.iter()
|
||||
.map(|p| heightmap.find_basin_members(p).len())
|
||||
.collect_vec();
|
||||
basins.sort_unstable();
|
||||
basins.iter().rev().take(3).product()
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> Result<(usize, usize)> {
|
||||
let mut heightmap = HeightMap::parse(include_str!("../data/day09.txt"))?;
|
||||
Ok((sum_low_points(&heightmap), sum_top3_basins(&mut heightmap)))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_example() {
|
||||
let mut heightmap = HeightMap::parse(include_str!("../data/day09-test.txt")).unwrap();
|
||||
assert_eq!(sum_low_points(&heightmap), 15);
|
||||
assert_eq!(sum_top3_basins(&mut heightmap), 1134);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_my_data() {
|
||||
let mut heightmap = HeightMap::parse(include_str!("../data/day09.txt")).unwrap();
|
||||
assert_eq!(sum_low_points(&heightmap), 504);
|
||||
assert_eq!(sum_top3_basins(&mut heightmap), 1558722);
|
||||
}
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
use anyhow::Result;
|
||||
use itertools::Itertools;
|
||||
|
||||
fn matching(c: char) -> char {
|
||||
match c {
|
||||
')' => '(',
|
||||
']' => '[',
|
||||
'}' => '{',
|
||||
'>' => '<',
|
||||
'(' => ')',
|
||||
'[' => ']',
|
||||
'{' => '}',
|
||||
'<' => '>',
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
enum Response {
|
||||
Illegal(char),
|
||||
Incomplete(String),
|
||||
Ok,
|
||||
}
|
||||
|
||||
fn check_line(s: &str) -> Response {
|
||||
let mut stack = Vec::new();
|
||||
for c in s.trim().chars() {
|
||||
if ['(', '[', '{', '<'].contains(&c) {
|
||||
stack.push(c)
|
||||
} else if matching(c) != stack.pop().unwrap() {
|
||||
return Response::Illegal(c);
|
||||
}
|
||||
}
|
||||
|
||||
if !stack.is_empty() {
|
||||
Response::Incomplete(stack.iter().rev().map(|c| matching(*c)).collect())
|
||||
} else {
|
||||
Response::Ok
|
||||
}
|
||||
}
|
||||
|
||||
fn sum_illegal_chars(s: &str) -> usize {
|
||||
s.lines()
|
||||
.map(|l| match check_line(l) {
|
||||
Response::Illegal(')') => 3,
|
||||
Response::Illegal(']') => 57,
|
||||
Response::Illegal('}') => 1197,
|
||||
Response::Illegal('>') => 25137,
|
||||
Response::Incomplete(_) => 0,
|
||||
Response::Ok => 0,
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
fn score_incomplete_lines(s: &str) -> usize {
|
||||
let mut scores = s
|
||||
.lines()
|
||||
.filter_map(|l| match check_line(l) {
|
||||
Response::Illegal(_) => None,
|
||||
Response::Incomplete(s) => {
|
||||
let mut score = 0;
|
||||
s.chars().for_each(|c| {
|
||||
score *= 5;
|
||||
score += match c {
|
||||
')' => 1,
|
||||
']' => 2,
|
||||
'}' => 3,
|
||||
'>' => 4,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
});
|
||||
Some(score)
|
||||
}
|
||||
Response::Ok => None,
|
||||
})
|
||||
.collect_vec();
|
||||
|
||||
// select the N/2'th element
|
||||
let median_index = scores.len() / 2;
|
||||
scores.select_nth_unstable(median_index);
|
||||
scores[median_index]
|
||||
}
|
||||
|
||||
pub(crate) fn run() -> Result<(usize, usize)> {
|
||||
let input = include_str!("../data/day10.txt");
|
||||
Ok((sum_illegal_chars(input), score_incomplete_lines(input)))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_example() {
|
||||
let input = include_str!("../data/day10-test.txt");
|
||||
assert_eq!(sum_illegal_chars(input), 26397);
|
||||
assert_eq!(score_incomplete_lines(input), 288957);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_my_data() {
|
||||
let input = include_str!("../data/day10.txt");
|
||||
assert_eq!(sum_illegal_chars(input), 390993);
|
||||
assert_eq!(score_incomplete_lines(input), 2391385187);
|
||||
}
|
||||
}
|
||||
+33
-12
@@ -1,3 +1,5 @@
|
||||
use std::env;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
mod day01;
|
||||
@@ -7,21 +9,40 @@ mod day04;
|
||||
mod day05;
|
||||
mod day06;
|
||||
mod day07;
|
||||
mod day08;
|
||||
mod day09;
|
||||
mod day10;
|
||||
mod utils;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let dayfns = [
|
||||
day01::run,
|
||||
day02::run,
|
||||
day03::run,
|
||||
day04::run,
|
||||
day05::run,
|
||||
day06::run,
|
||||
day07::run,
|
||||
];
|
||||
// used to generate more runs when profiling
|
||||
const RUNS: usize = 1;
|
||||
|
||||
for (i, f) in dayfns.iter().enumerate() {
|
||||
println!("Day {:02} -> {:?}", i, f()?);
|
||||
fn main() -> Result<()> {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
|
||||
for _ in 0..RUNS {
|
||||
for (i, f) in [
|
||||
day01::run,
|
||||
day02::run,
|
||||
day03::run,
|
||||
day04::run,
|
||||
day05::run,
|
||||
day06::run,
|
||||
day07::run,
|
||||
day08::run,
|
||||
day09::run,
|
||||
day10::run,
|
||||
]
|
||||
.iter()
|
||||
.enumerate()
|
||||
{
|
||||
if args.len() == 1 || args.contains(&(i + 1).to_string()) {
|
||||
let result = f()?;
|
||||
if RUNS == 1 {
|
||||
println!("Day {:02} -> {:?}", i + 1, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
||||
Reference in new issue
Block a user