2022 - Day 3

This commit is contained in:
Dreaded_X 2022-12-03 20:49:39 +01:00
parent 0f25ef7775
commit 0c0c5f183c
3 changed files with 398 additions and 0 deletions

300
2022/input/3/input Normal file
View File

@ -0,0 +1,300 @@
GwrhJPDJCZFRcwfZWV
LjnQlqNpjjmpmQlLlqNfZRvQcTWcTSTTZcSQcZ
nNqjdspspngnmjmslqmjjjCDGrHPHMGddGCMCGPPPJWC
GwmVZmPWWFFmBbVbZVwmbPsTCnlgQgnQfhlffffZnlQh
DqVDSqqSMzLLDDNSHHLdqSdSllCQjsTlClhlflnTlhjgfgfM
VHJztNLHGtcbvvPG
bjrPrNCtNrjdcCPpptfpTVspDtfTtB
JGQJMJQMmmmZMnnLpLBTpHCD
WJJqWRgWlCJZhZRCQZwdPScdrPNbvzPzwvqz
QNSQNBWQNLjZBNNhLhSNRsTcsrTTVzcwZZZsfrrbwb
tCFtHpppppMldpvpqnMFmMVGrbPcrwbzswrzcccfvTfw
pdmCpgqCdmHHdJVWgSRNJDRVVj
sNrFnvNSzrjQtQjQTj
lcPmcJDLdPDbJPVLljdGGBBThBQTGwTtBw
PDLqmJmpJQfFqfqsCM
BnhctqdnqnRcBnslCJJCMrJrsG
wNDMZpbQwMpCvCGVjlss
WfzNwZFbwZzZmFZbLzNwzzzzcdqgRMTTPdHPTTPMRdcWgRPt
grsrVSFSSdFSDFVFjZZWwpWpZWZplgZZ
mcBPPPBLBfNdLlvvWljWJC
dMcmcRdbRzdVhFthSsTShM
bzvJZMTzTZSHLCCdDzmDcc
hqBqWPFssvshWvvssNqtsHftmfpHfdcdDGHmcpfctL
WvBQgNNNhghTJbJQlJTZlT
chcdwNwdbCbQctCjnnQGHsQspMHMjG
nSSSJqJZzJgWWRfZDJSnqvTTsVvvHVPpHVfpjHMTjP
BZRDRmmrDWSrZWWzWSRNhdnCFwChclFtwbNdtr
lNgmssCtqLwqCCtfsCLHPFhhhmMhVzBDbVzMDMVz
ZnRlQTlJzFQFQFVV
npZJvRRGZSnWvSvrSLglsClfpfcLgNgpHf
tVtqcVqFVtZhcfFtqlgSpmpDSDNPzSzZmNpw
LRGTHqbrHdnGHrTCSSwNDzMDwPMzNwbp
TqWGJrGHCHnTWnhsWcFthFjtfQch
qNnTbwtctvffFcqfrHjMrFjVHRjSjZDZ
dLLzWWPmCmCzGdsLgBLGGBDRMVMHRlrrrZDDZsNMrNNS
PJQWggCzWNWJzGWfchvfTbJvfnnwtf
ghzdgzzdQsdqzzhMNqQzvhgQnRRBWTjWWGTRGWwGTZhwGnBT
fsrfJHbFfDFLVLVFHrWCWrBRZZTGCCjwWZ
HLLllcDPbLPQdPspMNgvMt
fNDJqdPNbtHpCbwpCCCp
RTMRLrzGrMRMRPWnnvSmgCHFCCFmmT
WQsWQjzGWMsGQzWclQtVBJfBftNdtqVPfP
gbTCVVmDVFdsgmgrrcfwlwfTfPlcRR
qhQZqQvnQhLQhJnvfPcSwSwlfjGcqjqj
tLNZLZZJJZthpzhMZDCdFmFsmWWmtDDgsw
bqCvLvLppzPzPPvPbFztFtttBNGdGsRggSgGSHDdggHSzNgH
rMQpWfMfrcTjWJhwWHHsSBsRBdSTTNBgSR
VwfmWjwMWwccrWcWpQQFnFtlCqmltFnFLbbZmn
cWqsMWJMzqJJMHsJcqsJqTqjSbLBdfdSbtzLbbLfbSfShfhd
gplGvQmRrCrgZSZtSGZZjhbj
CQmmmmNQRPvjgRClCvmmcVHPqMFMFsWJVqFFcnTJ
QHHqvGwjjWNqvGTQGvTFcGwJRJbszcPtDbJVbtPzVbDptp
MLdrgmSgZZdhdfbLVRpszlRDstRL
gdSgMCSfdMnrghCWGRQvHwvNHjnjvv
RDBZwvZBrMlsvnlb
WdFQqdjWWcHHPrwSPnnSWnSS
mLdqgqHmcjHHjqLHjLppmhfBfgtDtBJZJfVtBZwGZB
CCWRJQnZlHtHtNZRFDcBhrcvhDrJVVDv
dPPSqLzfsqGLSTzfLzLGdLMVVgvBcmgMVwmmDFrVgmBBBr
SFjdTGzqpjdRbNRNnjtnQR
hjNcwBDDwDFcjdFfjtFhtcRsGGgTsGRRRTsGGqZGRq
gbmrLnbzLmvQJnQVVpqZTqzWSCRpqRTsSR
MQMvVMbPQQHrQMnMPldtwNNfgHtlwBhdwj
zwzwpzMfzrBMWfCCZrwzrMJDGGGnNmGNZvgNZsDDsGsG
FbFqSbcSbSHqTjmgGFnJglllsDJm
TbhVdVjqdtqTjVHqjPdthPBBWpCnRfwRPRCfBCCnWR
hlpmbfJJpCSChmJMmrSjTjcSdjTtQQTtTtjF
gqrgsqLzgnBgZGzHBnnsQNNQtjjcNNjjtNFQNcNH
LVRzgGGzzzPCVrJMbPJb
VHrmqFnVdvlzzNrr
PMtwBJPBcPwfbwBJndplLvLdLlgMMzLL
bBZnTwbtnScfQJPJwPTjqGZFsVFjDHHGhhHhVj
cftqScHJrfVfrrRZ
DTTsDvvlBbTGrWBwwsWDBbWdVpZjjZjpVPPGhRRVjVZNRPNN
lsWdWDbrTLBsbdrmdwbMJtmHMQJccFHFnJFqFt
SWNPTPVSWChCSmQQhpppJdFJLpDpgLJmLd
NGGtNtGfHtDpdJdqLB
NcsNGNjHZsZGnzZfnGhQnhPClrVlQPhTVVhl
QDdgMBsNhhMgcWbZdzmWLzFzWH
fRqRJJqGCvrJGjCRRrSJlfPtHzzPmfFbtPtLZZLnmt
VjvwwjlwVGGqJSSqJFccshpgNhQNQTsVgBgT
wvDLDwCbFgSTfTSJJgfB
qsRhmhqchmVhPdfTHJSzpCtJpfPf
hmdhrWrddmhlqCRcwQjDLMQnMFDZnlLl
trMWtlwwMplMZMCZWltDpzBLBnflVLBbHzbBSGlVlL
ghhqJTfmjQjfqqznznnHnBRzBLmn
sQhPQsjjQcQcTsPqZWwwZcFfWrWcrZww
MRVpVCZZTHWVMCHvgNvVvbQSqgQSlg
NFmnrNDDfnjFnndfssmcStvjvQQlvzvllqvwQllj
GGPNmBrFNdcfcGrsGcdmDFhJHMMhHLZJMhpLHCMMMMPJ
DSvDGdGFlGGnDZFdVSZvfPqwnfhpnrqpPNpLPrrh
sWcTjtHCsTmsCNfgMPjpfPhqhP
BtHzBzChzBBvFSDJvVzFJJ
sfsNrsFFBTfjwwtNNWHPVCVWtSCDDCDmmS
zMdhMMZnSccMmmWVWmCPlC
cLSScJZQbcvLhZvnzBwfTjrpNwNrBFffpb
TBrCBgrTngVQBVbhrCtgJJrGssGsMGRGcjMcNjfN
LZdSLvHMFdzFRWsLjcGRWWNJ
pHpzlqPqFPvdBthgMbVPDhgh
SZlnZZvBvvMrcBnllBMZSvhGMtQwFMGztthfwQtMwwPf
HLqsDgNsDLDDDjggHDHszthzFbQGTghPGQPbTfFT
dmLqDqCmFNjJsjHdssFNHDVWZccnRllnVZvRSBZrZlCc
SccnnSGGftShfHSHHhnvbMjvVlCjzbVzzbMMTbCB
gRpppNNQLWqZgPZwNWwwBMBbDlZCTzVTjHMMbBjV
dqNQPQRqrqpPcGtchhdfhHSF
mfDzgnNMMszBtJCpHlrjnFppCdHj
LLRThGGZcbClBQpdWFGl
bSqVTbBbMVMsNmNM
BTTbbLVpfchmjbsj
JSQJHDMHqdNZTZlhFFhCFFrNhNcsrr
tMwJQlwMMlQwDDJtWGLGPpWLLGnTPn
LcVQQCPPLqTzqQTcllTzhnHHfFJRcGHcFfwRGHwJjJ
stdWDDBtVgbpWgZbsNgDNdWFGMnnwHfjHFpfwwMGMMGRjJ
ZWSDtgNdWNBdgsdsNDDsdbDlTzCVSTCqQmSqTQSvhqLVQq
dZbgdZbNtmqttFJtHHzcczMcFszHnsvH
wwpQplQQwqVVjqwPjCGCSMCMcHSHvvzHMzvcsrMc
pfjlQRpPRRLQWtmLNdWdmqqJ
CPTPPmbjmVjVGCvzbjjPrGsnnMpttdtGdncdMccDRd
lhlHzQSHwzhJLwgWgpMDMMsDdcDQMDMMns
BHZghLWwSFBJJBFvzmbfjNZvZmCvmb
PBGcvvcRwpwNcZcNPpPNcTHGdMtrCWrCCtCLWMtWgbVdMV
fmsJjnqmmfsjQJnjFzSFSqsqgWrtMttZgMWVMbbVMdbSrLtr
qQjjZFmfjZhZmwcvPhNpTNBTwN
HHlVVmmsbbqMsJmVzGSBMSrQQrRrGvvnDn
PZcphZPPZPhjcpdWgPZhRPfcDSrtDBSGNvtggrQtnvQNGNDn
dcWwFjpcPhRcCpjwdCPLzHblJbLbzmsmbTwzqH
hRfzTTfRrTGzhGWTrRrbfcQZQSttWtwddJtvdJJvWSHq
npjnDjFlpDnFFNMjljCnFMQtHHtqNHNQJwwZZqstNwJJ
DCjpLjjpVLDMDpVLDLQbbhzBhVrcVgVGQQcz
LncLBLjCSNrNrNpCLQBBBGwqQwzlzmggvqRqgllmzwtv
fMZPHhhHfthMdbRgHJzmVqlvwlwg
hfsPbZFPPDsfGLcBtSFNBSjL
MlZmszBMJBHrMBMbShwSFpbZSZfwwb
TCLCcPNGTgTPNGWtCtcWtPcSsRfRjRwjFbfpNFDjwsFspw
nVtqqsWsdHzJHqmM
RCrhSmWrmrvmrvhMvRNrRCzCJcQQbPtsMZVGJJtsZssPcQcZ
jLFBGqLFpqBLgZVbPbsLJQcbsV
HjDljGFwrRHRRTrS
GZZhnrwZBwNjRPRCbCbn
fJtJJpsVfpgNTbVNFTRP
JJcpLJfLdcWLdplwRdQMBvSqwRhvrG
wmZDPlRlCDwglgsHtsBvdBHLFLSddr
VbVMnMftfVjQWFFHdMBdBFMFHr
zfjtnGqqnjGqfjPcDPlZPlRDzccw
BRjhfhvRgnTMlFDDJfZzZFFQDZ
qLdqcNttwwcwwSPSpqLNmrwmrZsGzzDFZGZFzVssrzJGnsQG
wSNdHScScdmwHSpdNcmmtLMvChRHbvBMTBnCBBvhvlCh
JgWTPfFPgCPPlCntQSGghHvQnSdQ
BzvMZvLVQpdQpSZh
RwVVjRDVcRDNDTlJPqTv
SGHSrBBRPhPPHQcTccQTRRQjTN
vvWvspCbzWVWVrWdjj
wZpDzCDgDbCZJZzJGlrlqPqnqPllmH
FCncCrDWMLCbjMCcFpLdzZfmZzwwWzdzNRZdWB
sqsgTqHSqllNldMwlZzJ
MtHPTgQhvhhqcrDrrDpjLCQc
pPPvmPWSClqqPvqCmSwqmgGBWDjhGLHfjhDLJGjBBhNj
zrbdcdMndcRdTrsMcbTRdzRFVHjLjDjNLNHsfDhNGjhJNhDj
RdFFcnTdZcTrRRdFFbZtwQCPQglvPlwJwQPZSqqP
wlmbvwmvQvWQsvmbsSsQbswlRCNPfCTcTRVCffPtTSCPNRVP
FhJJJFgFqJGBtDpJhTTcVcVhdcCdCdTV
GDFtgLFnqqDGqGZsQvsllrjbLjbrvw
lnFSnJvmgvLlfnJpgnsjnjgfDQWqCJqZdDtDCtCtCdDrtDDQ
VTBBMPFcNNtMZDMW
VTGbzGGhTbTGHwVPvvFnfpvjgHnfjppp
JJwHqvlvDjljDwJFlZjZDwHNNsMqhNpphNpmNVzpsnsnRV
mTLgrLLcLSTTTdmPPfrrrnssNhRNWhgngzMWzgzVnM
SmTfdSBbBJbtjJvljl
bPNLwTCLLQQqtJsf
zdnnZVlWWGGRWGWdgdSStQMqJSMRptftbsMf
FWbvgvZZZZgnTmwrrhrFPCrP
HcGzzszFGllHWHbZspHbHGsHTwwrTrLLCNjSZwNjNjjCCNLj
PBJMJQJDDDnDggRhMdRSLmjTmTwwVjVQSvvwvC
RqfdhgDPDJDqJJnBdfzWWHcstslcbtStfHzl
zvRRlCqrdNdZcZpjBpVwjsmjsm
fgbTDqbhGfDnLDnLLqLhFmsHpTPHjHppppBwpwws
nhnnnDDngDtDbfSbDnGhhgRlNvQdQqNvQvtcQQNJRNJN
cZbCcbbScCbcmPGjPfSBQQSq
lnMnnVsMVvmzzGMDzPDf
LhrTsTTglrnsrrWWVvlwTnNtcpZRCmhtbCZFdttZbRCp
NWrFPZVWNVrvvrhtnNdddtpldmjm
DcBQBDsJbCwQnbtdzmjjjljbpjbz
qCDcGsDJGCcBDBcswJnBJQDfWfqgvZSvgZPfrVSWvPvZZZ
vcsdHdGtHtMHMFtVsddsWCcbppZwjScLpWhbjRWR
NTwrnzJrgTPrDwnlphRpjSpWbJJLLZWj
TlDPfPnzzlzTBzzvQFFBHMtVtqBqqw
NHnqqfZvZBNHHvgfrSlJrJCSllJRVrCn
TDTdhLMWjFcddMJPSSPJRmlCPz
bljWFdLLTDLtdFtLlwZvqfbgwwHfwqHNvw
BRRjhRQndRNVqBjRVhFLccjpwMmLmjHmgFHH
fZJfJvzPPWtWWlltZzZPpcgFMsFFwwFdpHdgwtdw
PCrdrzzfWCPdvSlqTqNSDnnQVVQQGT
DjbfBMDSfBljBsLSjSZbzrGtPtMCPtVPvvqrzqzG
mWdJWcppcNTdpppjzjRRVrPRpq
QncmnHwmdTmwQcmjNTfgfhlBShshhsffnfbB
WGDsMJsrjHCWtDMGDDVQqSvZqfSJzSnvnvvv
LgLFLFBFLVVzfBzMqZ
lgmFcwLhNcwdwwMLwhmcRDjNpCWRsWRspGGssHCp
PnPzNccnjFfvCvhbSBVcWqdhSVhV
psGMDQJDDDJgQNDHHJbwqwBsVqqZVWBBhBdd
DlDJDQGptpgpGDfTRnrTrFPnNTlf
MSSSMLLmFHcDScSq
ppZnCsbjPZpnnJcbRDmzHJqRRD
pmNmnGnQNnClZGMVMdBGrMgVWg
lsTTGcQzBcljCcQzGcGjGptttpmvSJtmggtwwswwtS
qZRnrhMbRVdhZRhhdnnVRPbmwSNwNNHtmJBvwpvtwNSvSb
VnMrqrrdqhZrnrBLLlzzlQjQjLfTcGfFDF
dJJTlHvhZqZlQTJnSgQDzgsSbScsSBzc
RRNtGjCCpRPPpRtjfrttRzmbscLsLZLgcsbmLzSGLB
wfNttfNrtWwPNNFfRtpfrdJMTTTZTMZTTVTlVwTlvM
PQTGLmdNTgPmGgNNdCPLQlrMqBrDzMCMFqDqFqjVCBCD
hhRwwvpSFmzDrmFh
vwwZfSfsmvtSspnZLLLdLGWPTGTQtTWG
pMcWzWFvWhFpPMWzvvhpdprHTZTQrHrQdZTJdfTgQTnJ
CGbjBbNjjDmRHJDgrTVVZg
NNttGlGqNLsbtlhMFMFcMLwMvvZz
CGSCBNCQBtBCQttBwCGtGtQrqrLrJqZHLHbqHvLDHLrq
nVVhPMfVdfVPbfqLLqgDDqPvgZsv
cpVncbfnhFcBltTplpmTBC
MrdcdStbMnddtRBdqMnFmbqGCwqCVHVsNHwPfGVPqsCsCs
DBLllzWWQQzlZVVVCsGWHfsH
JQphjTgBjlLgjjpTpLgvTjQnnnSJJRRFmdbRRSdMRtmdMc
QbRZMSWMblwLsgpwZzqZ
BFncBrfcdNrrnVrNjsFzFTJpJLGJsGqLTp
VjhDDBdrfdhQMllzHmPQMh
LdVVjFVFbpVGRQGllG
cNMcJNHzJWJtCWHNJHcHczWpGmmhMQmBBqrlRhBmpGpGBQ
JZzTTtCZtHCJnNnNwPfbFpnfdDdLdnvP
TpMlrWTTddjmlmDmgQgRtw
MNNVMSsVSNSnNVMFLDqwtGgRRtGbgFRwtR
CCLSCPSCZZHVCfZscBJJhPphpdpprdhjJM
gSMSHJHsMMpzRgHzsRMPPSzsPhtZtZdqdDqQDhdCdZmQldht
FCcCnrGcNTfvvtqqfvlflQ
TrTrWNWwrTJLMzJCzWLL
TpTzwMrfbrpFpMbFrrrzbPSdZmtSZRTlTZRlmdCVlCtJ
vqvWgqDJQJsQCVtZgdZdRRGd
vsvLJLchWBcqnvczwjLfzPjfrjzPrz
zqzbqCFZgmzzmNmf
vpRWSbRVbVWddVpwvwdRSwnSNgLHsnfNgMmgMLMmnrns
DwWVpJRlpdbpRDWdGJGcGlhFtPPCqCCBFqZPQttlqFBq
wQRlwtBJBDwttJdGvLfBvHLLfTLz
MMmNZcMrcMFnRHzfjjvvHfvc
FggpbFnhrNNrrMrMbMbnhQVJVhstJwqWCVCRsQJQ
DQbCGblQlpQFQlHjCbjwDQQMggNmJmgnnpRBngfZmNgJMf
zvhWccWVdWBchdssPrrWZZZfmsmmmgsnZZJRsRTf
zBdtqPccWPHFCqCCqljq
ttrbRMmgtHgfmHSfBpLfnBBZBppB
CVTJDCCNPwCPDwcqzmddQZdTQdnLBQThWp
zwFDjwDJJPzjzVNcVJwCcbRHGmbbMrFHgHvrsgbblG
gZjjwHqHCzrMZVVR
hhzcdTzPrVhVCGMb
fPcmLPNffsccJDdNDjBnpwzmHqgWjHwwvg
SJQFSvQBlzbSCgdPPddPPPSN
pcrjcWLwwcHcgPNgTPLMNTCB
pRsjsWRnrpHRmrBrHrjlbJFvvzQFnzQblQDDbJ
VjQVMQPVMfVPPbGPHHbGJD
pcqSttltsbDGddsCJG
TSchqLtTLFhgQbMMQMrr
trqzMRwNTtDzLPJQgWmjmjrf
lbBQdpZbsmhGmZhmmG
llVbpCplvvHBBHpnRDcDRRqnRRQnFRzT
SLSSFFmzLShsVSSHnLnrJdbnRdZZbrRw
qCfWBftpNWNNlqvTpwrRbGGCnwGmgRJGZn
NcTBNpvWvBWpMftNffpqWlTpmzPDQPSzFVMsFQVhHsjHszss
VtJtNBRBGDpdpNbC
QgLncnttvFcwwhLvFjSGsSbmmQCSDdpCmpdG
vLgjLhhrctMvLFFjLtMTLMgfPZqBZPZzJBBfWZZPRZZTRV
mJzDJJpJBvfsGMQnBM
CwPWCLRRWwRqwPqhPsrZrnrlhhQrMTrvZl
dCdLLSPRLSqWqVSLqLjgJDzDmtbngFVtJtzz
mtgWtMWrqjzQTTjghwwfczlNJdlcJnlc
FvRsDPPFGRBFvvslwDnTlcTTdwndlh
SGBZRBTsFGBRvLpvSCmgQWQjgggMrQjmmSmW
GcsRrQhrVVjhRcWlnDFGGmvntDWZ
TPbSgJJgBSCbCTbLHMCMTTZdFHvtZlWZDZFzmzZHZmmF
gBCMCSpbPMMPjcjqQQpqQprv
nZJcnZwvwzvTTTVtpDFnHH
DQPBqGGGdMdTRHRBpNgFNR
dCGPfhPWQdWWWCWShWPqrChWLLwLswjcvSJbvbLjJLbzJbJD
QrBQtdtrQBrdtFHPrdQBDvGhLGnPnCWnmpDmLpmD
NjlRJRlNzJJVbSSRVZwwJcmpWDGCWnbchnLCCmnWCG
llSJzsZzMMlsSZjSjZwJNQqtHHdBFsqdfTHhqFftQB
zdTJFHTdDBzrNdMnhNnNdM
ZlLZZcLtVtcWtGjtzLjLZjCrnVNrnRbrQQbQSRVrRnSNqS
lZtGtCvjZPCGCctPpsDDBzTHFmPmFszD
mQSMvdMQtQdZhQrPWCPqPQrN
RwjwnZGzJFTZgzggzJDDwJnCPPhNNqPrLhrGNcWcWNPqCq
ZTzDfnwFzTngTwJvfSlMtMMlmsHmHt
lZlmFRVZWmgQWhRsRpJsCJpJct
PTbPTGTGwwGrbdfjNNZJvcCsCZtvpTsh
bGdBBqGrdBPjDMzzVFZgqQzFFL
szvsmLvppPPtzGLGWpVdTSHTNgjHQRmHTgSH
FnBMBNZwZNcnDZMcnZlZgwgdQTTHjVJjHHVRQHJj
DnZrFCMZMNffrLPbLsfW
rJvmnBgnrCrGRSGNQR
hthjNfhwctwpjTLtVLjTGSpldSCGSPdlPSRzSqSz
TVcTfHNFcwtjMhTvgbHZsBbWmmZbnH
WsQgstQmvQJnssWsWPzhRzhBjZBSBRZSnj
qwCNqFwDrrlDrFPvRhTSPPzLRz
bppqwppCddlvfbDNVgmMmtMfVVmfmVWW

6
2022/input/3/test-1 Normal file
View File

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

92
2022/src/bin/day3.rs Normal file
View File

@ -0,0 +1,92 @@
use anyhow::Result;
use aoc::Solver;
// -- Runners --
fn main() -> Result<()> {
Day::solve()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn part1_test1() -> Result<()> {
Day::test(aoc::Part::ONE, "test-1", 157)
}
#[test]
fn part2_test1() -> Result<()> {
Day::test(aoc::Part::TWO, "test-1", 70)
}
#[test]
fn part1_solution() -> Result<()> {
Day::test(aoc::Part::ONE, "input", 8298)
}
#[test]
fn part2_solution() -> Result<()> {
Day::test(aoc::Part::TWO, "input", 2708)
}
}
// -- Helpers --
fn convert(c: &u8) -> u32 {
let result = match c {
b'a'..=b'z' => c - b'a' + 1,
b'A'..=b'Z' => c - b'A' + 27,
_ => panic!("Invalid input"),
};
result as u32
}
// -- Solution --
pub struct Day;
impl aoc::Solver for Day {
fn day() -> u8 {
3
}
fn part1(input: &str) -> u32 {
input.lines()
.map(|line| line.split_at(line.len()/2))
.map(|(a, b)| {
// @NOTE This is not really ok if the string contains multi byte characters
// @TODO Is there a better way to do this
for c in a.as_bytes() {
// There is always one character in common between the two sides
if b.contains(*c as char) {
return c;
}
}
unreachable!("No characters in common, this should never happen")
})
.map(convert)
.sum()
}
fn part2(input: &str) -> u32 {
let mut lines = input.lines();
// @TODO Is there a beter way to do this conversion, this seems a bit messy
let mut groups: Vec<(&str, &str, &str)> = Vec::new();
loop {
match (lines.next(), lines.next(), lines.next()) {
(Some(a), Some(b), Some(c)) => groups.push((a, b, c)),
(None, None, None) => break,
_ => panic!("Invalid input"),
}
}
groups.iter()
.map(|group| {
for c in group.0.as_bytes() {
// There is always one character in common between the two sides
if group.1.contains(*c as char) && group.2.contains(*c as char) {
return c;
}
}
unreachable!("No characters in common, this should never happen")
})
.map(convert)
.sum()
}
}