Compare commits

..
11 Commits
Author SHA1 Message Date
swaits 743f6984ce chore: remove Sourcehut CI manifest
Migrated to git.swaits.com; Sourcehut builds no longer run.
2026-08-31 17:16:10 -06:00
swaits 96b018581c add github mirror 2024-01-29 10:30:52 -07:00
swaits 75b7a367fe day10 solution 2021-12-14 00:32:20 -07:00
swaits 49734821e9 add missing testcase to day 9 2021-12-14 00:25:55 -07:00
swaits d8afaac4f2 awful day 9 solution bleh 2021-12-13 23:26:45 -07:00
swaits 5dd0fc2862 minor day 8 tweak 2021-12-13 23:26:17 -07:00
swaits 7e5ea237db flamegraph.svg snuck in there! 2021-12-08 21:11:42 -07:00
swaits eb92ccc919 day 8 solution 2021-12-08 21:09:25 -07:00
swaits b283c88975 day 7 optimizations
- no need to sort thanks to `select_nth_unstable()`
- don't copy the array around
2021-12-08 21:09:08 -07:00
swaits cd0c64b152 small tweak (convers sum() to fold()) 2021-12-07 22:38:36 -07:00
swaits d1dcb5134a misc optimizations 2021-12-07 22:28:46 -07:00
16 changed files with 928 additions and 62 deletions

No files matched your search

+1
View File
@@ -1 +1,2 @@
/target
/flamegraph.svg
+5
View File
@@ -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"
+10
View File
@@ -0,0 +1,10 @@
be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe
edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc
fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg
fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb
aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea
fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb
dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe
bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef
egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb
gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce
+200
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
2199943210
3987894921
9856789892
8767896789
9899965678
+100
View File
@@ -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
+10
View File
@@ -0,0 +1,10 @@
[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]
+98
View File
@@ -0,0 +1,98 @@
{<{[<((<[<({<{(){}}(()())>[<<><>>((){})]}(<<{}{}>(<><>)>))(<[(<>{}){()()}]{{{}[]}(()())}>[
((<{[<([<<{[<(()())([]())>)<<<{}{}>{[][]}>{<<>>(()[])}>}<(((()[])[{}<>])[<[]{}>{{}[]}])[[({}{})
({(<[([((<(<[(<>{}){()[]}]<[[]<>]<(){}]>><{(<>())[<>{}]}{(<>[])(<>{})}>)([(<(){}>[(){}]){{()[]}{<>{}}}][<<[]
{{{[(([{{{[{[(()())[<>[]]]{([]{}){()<>}}}]{{{((){})[[][]]}[[{}{}]<[]()>]}(<(<>()){{}{}>>([{}()
[<{{{[[(<[(([<{}[]>{()()}][[<>{}]]))]([<<{{}[]}>>([(<>[])<(){}>][[{}{}](()())])]{[{[<><>]}((<>{})[
{<[<[[<<(<<<<(<>[])(<>[])>{([]())}>[{{[]()}}<({}())[<>()]>]>{[((<>{})[[]<>])([()<>]{<>()})](((<>()
([({({[{(([<[<[]>]>]<<({[]()}<[]<>>)[[()[]]{[]{}}]>>))((<<{<<><>>}{(<>{})<[]()>}>([[<>{}]<<>{}>
{(<([{{{{(((({{}[]}))){[(({}<>))({<><>}<[][]])][<<[]{}>[{}{}]>{<[]>{[]{}}}]})({[{([]<>)([]<>)}
{([{{{(([<[[[<(){}>{()[]}][([]<>)<[]{}>]]<{(<>())[[]()]}[{(){}}[()<>]]>]([({[]{}}{()[])){{<>()}{()[]}}])>[<[
[([{<{(<({<{[[<>{}][<>[]]]<{{}<>}<{}{}>>}[({()[]])[[<>()]({}<>)]]>{<([{}<>]<[]<>>)[{[]()}{{}[]}]>[[{[][]
{{<(<{(<[<(((<[]<>><{}[]>))({(<>{}){[][]}}([[]()]({}<>))>)>[((((()<>)<<>[]>){(<>{}){<>{}}})(<({}(
{{[{<{<([{[<{[{}{}]{(){}}}{{[]<>}<()[]>}>]<[({[][]}<{}<>>)(<{}{}><[]()>)]<[{<>{}}(()())]([[]{}]<[]<>>)>>>[{[{
<(([<<{{<(([(({}{})[[]{}])[<{}>(<>{})]]<([{}{}]{()[]})>))({(<(()<>)<<><>>>(([]<>)))}<<<[()
<<<(({{([{({({()()}<<>[]>)<{()[]}[<>()>>}){[<[<>{}][<><>]>[{()[]}[<><>]]]<<[<>[]]{<>()}>>}}[(<[[(){}](()
<<[[{{([(([([[<>{}][(){}]])]{({{()}(<>{})}{{{}<>}{<><>}})(([<><>])({{}[]}<<><>>))})([{({()<>}<[][]>)}]))
[(<<<<<{[<({[{{}[]}<()<>>]<[{}[]][[]<>]>})>[<<{(()())({}<>)}{({}())(<>[]]}><<<{}<>>([]<>)><[
<<({({{([(<([[{}()]<[]{}>]<<<>()>>)><{(<{}<>><{}()>)<{(){}}[<>]>}{([[]{}][[]<>])<({}()){{}[
{<{([[[[[{<<[[{}{}]([]<>)]{{{}()}[<><>]}><[<()()>[{}{}]](((){})<()>>>>}]<{({{([]()){{}<>}}<{<>{}}({}{}
{[{[[<[((<(<<{<>}{()[]}>><{<<>[]>[()[]]}{{()()}[()[]]}>)(({[[]](<>[])}{({}())<{}()>})([[{}[]]<[]()>][{
[{[(({[{{([[[<()()>{{}{}}]{([]<>){<><>}}]](<<<(){}>(()())>{[[]]{<>{}}>>))<[<((<>{}){(){}}){[{}<>]}>([[<><
<{<(<([(<[({<<[]()>[[]{}]>(<{}<>>)}(<[{}[]][{}[]]>{<{}[]>[(){}]}))[<(<[]<>>{{}<>}]([[][]]<()<>>)>{({{}<>}[<>[
{({({{<({[{[{<<>()>[[]{}]}](([{}<>]{()()})[([]()){[]()}})}[[((()())[()<>])(<<>{}><{}>)]]]<([{([]
(<[([{({<([<(([]<>)<()[]>){{<>{}}[()()]}>])(([({[]()}<{}{}>)][<{{}[]}({})>[[<><>][<><>]]])<[({()[]}[[]{
{{{<{{[[{[[<({[]()}{()[]})<[<>()][()()]>>(({{}{}}))][({[(){}](()[]]}){{<<>()>({})}{<{}[]>[{}<>]}}]]{[<
{<([((<{<<<{(({}{})<<>[]>)(((){}){[]})}{({[]<>}[[]{}])<[{}[]][()()]>}}[{([<>()][<>{}]){(<>
{([([(({[<[[[(())(<>[])]{[()()][<>]}]]>([{[(<><>)(<>())]<(()<>)[<><>]>}({{<>{}}({})}([{}][
([[[({[{{<{{{[{}()]{(){}}}[{()}({}[])]}[{[[]<>>(()[])}<{[][]}{[]}>]}>}}]}{[<[[[[(({}{}){{}[]}
<[{<([<({((([[<>{}]([]())]<[()[]]<()<>>>){<<{}{}>[<><>]>[((){}){{}<>}]}))}({[({[()())(<>[])}{({}())}){([()[]
{([[{[<<[[<{([<>()][{}{}])<([]{})(()[])>}{{{()()}{[][]}}<[[]{}]<<>{}>>}>(({<()()>({}())}[{<>[]}({}<>)])([[<
({[<{{[<{{(((([]<>){<>()})([()<>]([]{})))){{<{()()}[{}<>]>}({<{}[]>}{([]<>)<{}[]>})}}<<([{{}()}[{}[]]]<{(
<({{([{[({<([({}())[()[]]]{([]{})})(([[]{}]{{}[]})([{}()><()<>>))>(<(({}{})<{}{}>)[{<><>}{[]
[{[{<{([[[<[[{[][]}(<>{})]{{[]<>}[{}{}]}]><{({{}()}<[]()})}>]{{(<[[][]]{[]()}>{(()())(<>[])})(
(<{(<[[<{[[<<([]<>)<{}{}>>({{}[]}({}()))>]({([[]<>]([]())){[<>{}]<{}()>}}[{({}())[(){}]}(({}{})[[]]
<[<<([{[{<{{<[[][]]<<>[]>>({<>{}}[<><>])}([[{}<>]<()()>][<[][]>(()[])])}[({[()()][[]()]}[{{}()}<[]<>>])]>{<
<(([[{(([[([[{{}()}{[]}]]<((<><>}({}[]))((()())[()[]])>)[{{<[]<>>((){})}}<(<(){}>{{}[]})({()}{{}<>})>]]<[(<{
[{<(((<(<({(({{}()}{<><>})[{[][]}{(){}}])({{[]{}}[<>{}]>)})>((([<(<><>){{}<>}><[<>{}]>]([[<>[]][{}{}
[<{{({([({({{{()<>}([][])>}((({}<>)(()[]))<(<>()){{}<>}>)){[([()()](<>[]))]{({[]}[[]{}])([[]<>
{({[<{(<<([[[<{}{}>[{}{}]](<<>>(()))]{[([]<>)<{}{}>]<[<><>]>}]<[[{{}<>}<<>{}>][([]<>)<(){}
([{{{[[(<<[<[[<>]{[]}]((<>{})({}[]))>({{()[]}<<><>>}{{<>{}}({})})]{{{{[][]}<{}()>}}<[[<><>][{}<>]]<
[<{<{<[{{[([(([]<>))[{<>()}<{}{}>]]{[<<>{}>[(){}]){<[][]>[<><>]}})](([<([]{})[{}()]>(({}())(<>{}))]
[<[<{(<(([{<{([]{}){[][]}}><{[{}[]]([]<>)}[[()[]]<()()>]>}][{(<[(){}]{()<>}><<[]()>[[]()]>){[[<>[]](()[])
<(<<<([[<([[({[]<>}<[]()>){{<>[]}[{}{}]}]([[[][]]<[]()>])]<{{(<><>){<>[]}}}{(<[][])(()[]))[([]{})[[
(([{<{{([<<{({[]{}}[()[]])[<()()><()[]>]}[(<()>[()()])[[<>[]]]]>>{{{{<[]()>[()<>]}}{{<()[]>[()[]]}<[[][]]
(<<[([[{{({<[([][])<{}()]][<()()>(()())]>})}<([[{(()<>)<[]()>}((()[])[<>{}])]]([<{(){}}({}<>)>][<
[<<((<[<<{(((({}()))({<>{}}([]<>))){{<()<>><{}[]>}{(()())}}){({([]<>)<<>{}>})}}<{{<[()][<><>]>{{[]
<{[<[((([{<{{{<>[]}[[]()]}([<><>])}>((<<<>()>({}<>)><[{}[]]<()[]>>)[{{[][]}{()<>}}[{()<>}(()[])]])}(([<{{
{<{<[(({([<[<[[][])([]{})>[{(){}}[[]<>]]][(<{}<>>{()<>}){[<><>]{{}[]}}]>([[<[][]>{[]<>}]({[][]}(()()))]{
(<{{{[{<{(<[({{}[]})]><<{(()<>)[{}{}]}{<()()>}>>)[[(({()<>}(<>{})))([<(){}>(()<>)]{((){})([][])})]
<<[(<([<(({[{({}{})}<{()<>}{<>{}}>][([[]()](()<>))]}[[({{}()}<[]{}>)[<[]()>[()()]]]((<{}{}
<<{[{[<{{{([<<<>{}>{()[]}>({{}[]}<<>{}>)][[<()[]>[{}[]]]({()<>}(()()))])[<<<<>()>{[]{}}>><{{[]{}}<()<>>}(<<>[
[{{<({[([({{{(()())[<><>]}{[()()][(){}]}}}{[([<>[]])[{[]()}((){})]]([<[]{}>(()<>)]{[<>]})})(<
<<<{{(({<{<[<<<>{}>>(<<>[]>{()()})]<([()<>])>>[(<({}[]){{}[]}>{[{}{}][[]()]})[<[<>[]]<()[]>>(<
[([<<<(<[[[[[([]{}){{}()}}<<[]()>{[]}>][([<>[]]({}))[(()<>){()()}]]]]]>{[([[<([]())<{}<>>>({<>()}
[([{{[[(({[<{[{}[]]{[][]]}<{<>()}[<>[]]>>(<{<>()}<[]()>>)]}))<<<<<{{()[]}{{}[]}}[<<>{}>]><{[{}<>]{(
[{{{<((([{([{[[]()][<>()]}([[]()]{{}()})]{([{}{}](<>{}))({()<>}(<>{}))})<[({(){}}[()<>])}>}(
{<<{{({[[[[[{[()]({})}<[<><>]{{}}}][[{()<>}({}{})][<<>[]>{<><>}]]]({<(<>)<<><>>>({<>()}<<>
<[[[[({([[{<[{{}()}]{(()<>)<[]()>}>{[{<>{}}(()[])][{()[]}<()()>]}}]]<{[(({<>{}}{<>()})<[[]()]<<>{}>>)<((()[])
({{{<{[({[[[<{()<>}<<>[]>>{[[]<>][<>()]}]([(()<>)[[]()]]({{}[]}(()[]))]]][{{{<<>>({}<>)}<<<>{}
[{[((<{<([[{<<()[]>[[][]]>}<{({})}[<{}[]>[[][]}]>]]<<{(([]<>)[[]()])}<{<{}()>{[]}}{[()[]]({})}>>
[{([[{[({<[<(<<>{}>({}[]))([{}<>]{(){}})}({<[][]>}{[()()]<{}[]>})]<<[<(){}>[<>{}]][<<>{}>({}{
[<([{<<[((([<[<>()]({}())><([]{})<{}[]>>]))[{[[[[]()]]]}{{[{[]()}([][])]{<[][]>{{}()}}}}])<(({{(<>()){
{{[[<{{(({{{(<{}<>>{()[]})[<[]()>]}[{<[]{}>[()[]]}]}<[{[[]<>][[][]]}<<(){}>((){})>][([()<>]<<>>)<
<<{[(([{<((({([][]){[]<>}}{({}())}))({[<<>{}><<>>]}{<[<>{}](()())><<{}[]>{()<>}>)))({[<(<>[
<[<((<<[[<[((([]<>)<(){}>)[<(){}>])({<{}{}>{<><>}}<(()())<[]{}>>)]{{({(){}}(()[]))}<({<><>}({}()))>}
[<{(<([{[({[{({}{})<{}()>}[{[]<>}({}<>)]]})[<[([{}[]][()[]])((<>()){{}<>})][[[(){}][[][]]][<
<(({([[(<[[{(<<><>><{}()>)<(()()){()[]}>}({[()<>][{}[]]}([<>{}]<<><>>)}]]{{[<[<>[]]>({<><>}([]{}))][(([][])<
{[[[[<<[{(({{{[]()}[{}[]]}}{[[()()][{}{}]]}){[{{{}()}}[[[][]]<()()>]]}){[{((()<>)[{}<>]){<<>()>[()()]}}(([{}<
[[<<<{<({[<([[()<>]]({()<>})){[{{}[]}]}>][({[<()<>>({}[])]}((<<><>>[<>])[({}())<{}{}>]))]})>}>[{{(({{[
{{[[{{(([[[[({[]()}<{}()>)<(()[])<<>[]>>]]<(<{[][]}<{}()>>(({})[[][]]))>]<<{({()[]}[(){}]]({
({{((<([<({<(<[]<>><<>[]>){[{}<>]}>(<[{}{}]>)}[<{{<>{}}{[]()}}[<<><>>[[][]]]>[[<()()><(){}>]{<
[[[(({{<(<{<[{()[]}]({<>{}})>[<<<>()>{{}{}}>{({}<>)<<>()>}]}<({{()()}}<(()()){<><>}>){<((){})(<>()
{<{{(<{{<[[({<<>>}<[(){}]({}())>)[<{()<>}[{}()]>[({}[])<()()>]]]]{<[({<>{}}{[][]})]{[(<>{})({}())]}
[<[<{<<({[[(((<>())[{}<>]))<(({}[])(()[])){{{}{}}[[]<>]}>]<[(<{}{}]{{}{}})<(()<>)>][[{<>{}}<[
[({<(<[([<({([<>()]{[][]}>{<<>[]>[[]()]}}[{<()<>>([]<>)}])<<<[[]()](())>><[<<>[]>{{}()}]{<()
{{[{(<<{[{({[<[]()>{{}<>}]([()<>]{{}[]})}<<<[]()>[[]<>]><[<>{}][()()]>>)}<{<[{[]()}{<>{}}]>{({[][]}<[]
[[{[<<<[{[[<({<>()}((){})){{<>[]}<(){}>}>[<(()<>)({}<>)>{<[]()>(<>)}]]]{<<{[<>[]]>>(<<{}()>(<>())>(
{({{[([<{{{<((<><>)<()()>][<{}[]>{<>[]}]><({<>()}(()<>))({{}[]}<()[]>)>}([({{}[]})({{}()}[<>[]])])}
{<[[({{((<[{[{<>()}(<>())]<({}[])<<>{}>>}([(()())<<>[]>]((<>[]){{}{}}))]{({<()()>(()<>)}[{[][]}([]())])<<[()
([{((({<<<{<{{<><>}(()<>)}>}>)[{{[[[[][]]]][<(<>{}){[]}>([{}()][[][]])]}<{([()()][<>()])(<[]()>
<(((<(({<<[{<(()())>[[[][]]<[]{}>]}[{{<>()}(<><>)}(({}())({}()))]]>((<({{}[]}(<>())){({}[])
<<{[(<([<(<{{[<>{}]}(<<>()>({}{}))}><({<<>()>(<><>)}<<[][]>[[]()]>)(([<>()){{}()})<[[][]]{<>{}
<<[[([{{{{[<{[(){}]<[]()>}>[[([])<[]<>>>[({}{})([][])]]]}<<({<()[]><{}<>>}<{()<>}(<><>)>)>(([
{[[[{{[{{((<{[{}[]](()[])}<(<>{})(<><>)>>){(<<<>{}>>)(([()[]]<[]{}})[({}[])(()())])})}}]}{[{{({({([]
([{[{((([[{{([[][]][{}[]])[{[]<>}<<>[]>]}}]][<[{[(<>{})[[]<>]][{[]<>}[(){}]]}]{<[[{}[]]{{}[]}]><(({}
{(<(<{<<([<<<[{}{}]<{}{}>>><[{<><>}{{}<>}]([[]<>]{{}()})>>])>>{{[{{{<<<>()>[{}()]>{<[]()>[<>{}]}}}}<(<[(
{<[{<<({[({(([[]<>](<><>)))[[[{}()]<()[]>]<{<>{}}[()<>]>]})([<([(){}]{<>[]})<<<>()><(){}>>><([<>[]>([][]))(<<
[[[[<<(<({(<[{(){}}[()[]]][[{}[]]{[]{}}]>([{[][]}([]{})][{{}[]}<[]()>]))[{[{()()}({})]({(){}}[<>[]
{<{(<[<(<<<{<[()<>]>{{()[]}}}<<([]<>)[()<>]>>>[{[<<><>>[{}<>]][<<><>>{(){}}]}[{[[]()]{<>()}}
<[[<{<<[{{[[(([][])[[][]])<({}<>){{}[]}>]](<<({}[])[[][]]>((<><>))>[([()[]]((){}))])}}{[([((<>())
{(<{[[((<<<{<{<>{}}([]{})><{()}>}[{(()<>)[[][]]}{<{}{}><{}{}>}]]<[[<{}()>]<([]{})>]{{[<>()]{{}{
<{<{<{[{(((<(<[]{}>)([{}{}]({}{}))>([{[]<>}[[]{}]]<([]()){[]<>}>))<[(<[]{}>[()[]])]>)<{{[{{
{{<([<{[(([(({[]<>}{()[]})<(()){(){}}>)[{({}<>)<[]<>>}<{{}()}<<><>>>>][{<({}<>)[()()]><<()<>>>
[[[<([<<[[[{<<[][]>{()()}>[[(){}][<><>]]}{[{<>[]}[[]{}]]}]{<<({}<>)[[]]>[(<>[])]><<[()[]]<[]>>[{[]<>}({}{})]>
{{{[{(<<{({{<{<>[]}>[{<><>}[()[]]]}[({()()})([<><>]<<>[]>)]}({[{{}[]}{{}[]}]}[(<[]()>[<>[]])({<><>}[(){}])]
(<<[{[{[({<[{{(){}}<(){}>}{{()[]}[<>{}]}]{{(<>{})<{}>}{((){})}}>[{([<>()](<>{}))<{{}[]}[[]{}]>}{(<[][
(<[[{<<{({<([<<>()>[<>()]]{{()<>}[<>[]]))>({<<<>()><()<>>>}({{[]<>}{{}()}}{<(){}><<>{}>}))})}<([<({[[]]{{}<
([((<[((([{<((()<>))[([])]>({(()<>)([]{})}([{}<>](()<>)))}{<[[[]()]([]{})]>}]({([{[]{}}][{(){}}{(){}
(({{<[<{<{([<([]<>){()}><([]<>)<[][]>>]<<[()<>][[]<>]><{()()}>>)[(<[[]{}](<>())>{{{}()}{[]()}}
+15 -10
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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(())