From 5c23f8a99a02df12e3cd9ac0f9f66e61cbb70829 Mon Sep 17 00:00:00 2001 From: Lars Martens Date: Sat, 3 Dec 2022 10:24:11 +0100 Subject: [PATCH] Solve day 3 --- input/03 | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++ input/03-test | 6 + src/bin/03.rs | 50 +++++++++ 3 files changed, 356 insertions(+) create mode 100644 input/03 create mode 100644 input/03-test create mode 100644 src/bin/03.rs diff --git a/input/03 b/input/03 new file mode 100644 index 0000000..606e5e6 --- /dev/null +++ b/input/03 @@ -0,0 +1,300 @@ +PnJJfVPBcfVnnPnBFFcggttrtgCrjDtSjzSS +llWlLbmmdLLwLbqGdmTmbZfCQtzrMQfrjSzrtSrMqgMt +sHlZTsWZwGGlZmGTmdlZbhJNRPphVfRvVnRBsRsJJV +fsHtVbjtqstBghhwwPBw +SDQzzSzQrQMmmQlmlcNcJLZPgLrVZTdCddhgdPwwCw +JmSWSVGGlJJbRsbpWHfbRj +tJndRtwtddPvllvfrldrfPpHWDgglFDWWmMmHWmHpZlS +BBJTTjCsJWZCmSHSZD +LhqLcVzshTNjhqhcjLLTLjbTnGndfdwrfPRVRrdnwftQwJRv +wHlPJZwbbZfqbFwqFZfrrcrJrtMWSMMVtVcJht +NzzzNBjNfLzvGfDNjMhVhrrMShLchsRVLs +DDdmmgBGDNdgfgZggnZbZHln +jqNjZJqsGsRqJJqnlJJGzMzffcffTCfQcFmvcWfvTNfcvv +PdhVdrwphhVtDdSPLmFCWTLFWWTfFQQr +dSPwbbVdbpQllZMQbMjM +QQdfflqvjTvfZqLMWfNDGhwsCNGGGM +rzRRRTVTPTNhsDWDRhGC +gHSTpTnppvjQgJjcql +nzNvsFBBBFsNrnNBrvndfThwDbhVPzVVwhZZChpZPCbZ +GMQQStmcHHmlfMtPwbZVVVVhhPhbVc +GmSmMGlmWWgqQMHgQHtSvTNTTrgBBvNvFsfTfLvd +VNVBgRRBRzWRRbRTrTBgbzpZvMvMJlQJZJpJvlTMdJlp +mfdfdfdHfQplZJJh +ttnPmsLHmqsPGgWjjWRbBdbbGj +mMMzwFFpnwgMggSzhQSbSJbhWzbr +NPRlHHPbPRdPHCdRNGWWhWQhJVVGhZrCCJ +LlNbRllLLdHnpLgMTgTsDT +mWhvwmthrzJrLhvftwPrtNHlbcHgbDzNDHcGgzllHl +TCjdSCFMQCCCjMspCMQBMqpFHNGblPPnGNNbpnpccZGccclc +jVBPsqdFMFsTVMsdMmfwhwvVwLrvWhVtJR +TdhJJttgmdgctBBhBwBqBCLWqC +fjNGPblpPlRDfsfGbfcWqBqwWvnHVvBLVHss +lpRNDGjbrGfPZbmZZMFdTzTgcFdS +WPLMvWLMqLcSvrrBmDPFfRzmDPRfZDHP +dCggNCCdNCbHTHTfFnNHzM +GlJVQjdCCwjMGbGpjGdCpqrtctqcttchsrLLcthlhc +jgPHPgjGCwrqjqrvzBfFfCTTCdFpDD +QhQLtcrQQLWshQttdzzvzBnhvvBhvFTv +RJRssrQSWQSqjqqVSSGP +sPszmnmnQPQbjSRVVjbRjVVB +cdvZqMfNchMMMqCBlBZlmSmWCHBj +dFFDqJNNJvTJTqvvwmGQsGwJztgrwsts +dJGPMNStSclWJSPScMNMzqqDfzqVzwwjGfzjqfQz +hppFbrhFrrhgCpFlFhvFTgrsDfsjVzvLDfqwVzzwQDsVwL +RrgnZbphTpbgrnZgmpbhFcMlnWdMBNWJdtNJBMMSMc +HqtfLZCLmLtrSqZStzFtwpPQWlNQBpplpQWmBpNp +jMJcnRFcJjvjvcGvdJpBppBwQBpwQWPW +DcvDgbhjMMsjGvcjRRvjvgbGtsTZFHCCHSCHZHLfsSsCSrZH +wvFPFqvjlgTwjvjZbMSzHTSScMBBbN +VVmpVsmmptfDsdSZbMzZzMZBtB +LVhfGJVhQsWhVJhfmGJMwljFvqWrlPvCqrqjFFvj +cdNbtwrtwrRNLzhQhHfCzbGzQH +DMlMgFDBMSBjMTqMFWMFDQHdGZHvQdTHHvHzHChJJv +MBVWDngVqVWlqqBgBjjcsPnwnNdNsPNPpRcLws +pQqHsBmmrQHrrmsmmpwMdfdPbfWPMVbMdWbPwG +ZSvZDlvghgSDZCSzJZzgZNNPFRFMVRVfMdbFPddfMzGRWR +vWgJhSntvglSgDCHsjHBBpnTrTmjmB +hDgmmgnwDCdddRCqCPzz +sSslHbctbHsNrhpZqdqprc +WbsHSBQHQBLHTWJSlmjnVwFDvWhnvjmfgv +phwdhVLRddWJLVglLWRlWWgwhCjCrrrHZmCjZNHtjvvZrHTN +zzFzPQqFDcFsHsFPHSsGSCCNmftjjNDjCfCCCNfvrr +BSQsqFQMcPqHbcGzFMWgLlgwpLlpJLLpBwnp +GTrsHGGHfGMvsrGsvnGcHsvTwhghwhpVpJhQpwhQghhmmm +bFPFPPtSdPtSZPZWjSdZSNFdmhDJQgRQbQgmhJgJmRwVQMRh +jPdjldqlSNBdFBjtFZsfsGMqsHCMcqcfvnrf +crZHHZcZZsSrVrSCrBNTTpppBpJBCbwbBn +DzhRggfhhlRghmBNBpLJwDpDDTNp +qvwqwPRfvfzPPRvQlfPvPlRjZSHZrcScWrtVQscjjtZHMS +GRGBgsgghbvRvgsBTsgRjjznCCtSVCZtCFZtzFtwnSdj +cmqpPNnWWPrqWHplHDDcpCddFfZdFtdrwzrfdVFFdt +lPNPNPcqpcHWmPLllDDGhbRbnMgLgRbvRsbhhg +ZRBBNFWWBWPDZZprnwVvDD +bSzzhHdttMtCCzCThMTShStcvrqNNjwnrcvqvvVVpprvnnpN +CStdTMLztMmTSSMTSSSfBQNWlsFRJRPfmlNRNB +pMLptvGHTSGSHtLLwNWvcqsJmWWzmPFFms +nrQPrjrddgQlDPZjdlBcFFzFsFWhqWgshszhNW +CZDCQjjBBjrnCfQCrZrbSbHLRwGftbfPbHRMfp +sqQHBqsHbwDtmbSB +GjVGrlsMsPjbPbPmTtSwDb +lzFFGznLGGrLrnrVzMzsqvpqvWQcnNZWvCpnqpHc +nZWZjdWRwhRdBRhhdNZMtHtpPrGCCGsrTGsG +DzFFbblvbzFvVJzzzlVmvlpTpMpMrMCgGMtprJgCMrPM +zVmFzFvfzSmDzmCmzmmVQwNRqdRhcWBqShjqNndWWj +QQTdgLQlhGhQdPbwJJgwRVmtNRBV +vCSnjzFqSDDFMDjvrqvjvnVBRsNJRpJwtNJNpNrtbtbt +DfnCCjDMzcnqvHZGlcTcZThBlG +lWtmssWNcBjTjhlLpn +fwJbgfQfVfqPwmdgJjppHTjCphppBHCnhV +bgvfmvmbqdfDqJvqgbPJNDNSMscNDtccDzzcNtRt +ttBHSflTlqwGGQJBQq +jvdPdPLsDvCzvVqVQQGw +ZDdZnPrrPLPLZMZlfWSqmmTWmtTMtF +ShhwCZSwlPwZPSplwlRGGVmttWVVQcJVnJtSJVLcjc +qmzDmgNqNfgtJWWqtQLJqL +rsFgvrmFdfRhPBRvRRPZ +RQQRGJRpfJzlTQmbfbsGlsTMSHMPgcMFpgqPHHpHqqPpcP +WmLZDBBLZLNVdjWqDCFHCMccSPgSgg +thrNBVVBrWZNBWNrRGQbRtJGzlRRbmlf +NfdjBfsnDfNjfBddNBnBwsQShzQDhSDhvZSRDpFRSVFQ +lHrbTgtLmrblPzShhRpvRPZPVz +tWbqHlHmWHgWHtqrLJJsvBwnBfjswjwnNMwf +qQfdCVqZSqZmQmgVqCqCWTMcNFTwWwTccgpcWcpw +nSLrjrJnLcTwLNcz +sjRjSnJnRsBlPtnqCqCGfCbmQGHfCl +tqSmNPNcVrNNmPtHfMZbCWMCZbHwfdzW +RwgGvFwFdsssgjdb +LnLhhnFDStLJSrtw +HHGCHgfjgjgzNSTgJTDJ +WdMbDBdQLLZPWZVZZmLdzqqNbvzswSzrqqsJwSNw +QQmQBmWQZBmRPGfRjRcHccplpD +zFpjDvzDzWWvWBqDqvQcjsfbHPjHsVjcPGffGc +TttwldmlTPSCCZmhlNggwffhHsshRsGssRsfGHRhHf +twmMMmltZdNNlZLLMrPWzrrprpDr +ChCnpqhzCdndsDCnVpVJBgLTpTtgVggL +swHPGmwHbjPjvjQsGLSgVMtgSLLTVBHSrg +mRPPwvbvbvQjljvbPvPlfwWhsnhZDzFnWhDFdWcdhZWl +ndnSZSfNgmmSZlbllglVVsBCfqFBfttpPFtsqV +DJwcMzJDwLcMHMDRMRrtVWFWtCBqBWpWCzzP +wvcHhRcTJJvTRLRvRhwTQTHdQjqqGdgnbGQgSbqSbgNSdl +MHtvCFtCFvMvBDcVfjhhQf +WJZWSgZbdlwZZsbTbwDhcBVQhmTTTcfRjmjD +WwwrBwZsSJWwFttnLrMCpntn +BJgWJVSPVzNJNPZPVHBJHBfdhbjDnbQndnBnBQfndQ +MwMsNmNpmsrrwLssvsvpRpvQnCqbCCQfCfhhbDnqCfqLqn +MFvtrmGMFwRmFvcvMFmsWSVHWVHNzgZWTtWSTPSZ +wWNsHswfsWnVvNZvMLDRRpcLMBDnBlpR +QFdhqzFbzmgbhzQhFSLRrpBBBRcRBcLldpWc +SbmhzChGhqgQFFzqGJhwvtvNWCtVjVfwwZjHjT +WHGDHBRQHDBBQpGzBzQlDVjPmmVtbqbLmtPtzvmZbb +nchMhdMgCMJcwvLZvVcffjZfmq +ndhghggCwSnhCnnTNSdBpFWQFNLFlpHQpDLRGl +FZdjbqjjZTFbRHfVwgttfBZrBpBB +LJQFJWhPPnQJJQCPQpzwphczchrgtrfBrf +FFWvnlLGDGRMDHjm +jCsCNZTTfjcQMLWTtvHQvG +mgwdznllpRgBgpBDdnDDzBDmdrMHMLjtvvHJtLrWrHQWvQtv +lgjDpVSppmqsqssVPZPf +NcNwtChhScfPtwVRgmvWvWvNllVg +nZGJMJLnqqGzLzrGQvlmmgrTmWWlcVvR +LLdMzdssLZnMMbbZBJGsqLcjwjwPffpdtjFpFhPdFwjFFD +wQvZHfbLjrMZSVWMZSdZ +wwqhwtTRRpCCMmsnVlWGMpWM +qBDcqBTBtJCBDqctRDCBCzDFLfbfLwvfbQcFHNvLvvfQjQ +QDFwwvLJFjWQvWgGNnfNftCJPggP +lpqdpqqrqBBpTTBsprpsTsbrNGPfCPzftfPMMGztfzNgNflM +sqdpHrcbmTTHTdcspZNbZmDSQLQjhhSSWwvWWFHQvLLh +gjQHjfqgVSqjqMSnCRMDMvCGZDvCNCNJ +FnLswmdphJchhcZd +bslwFmLTTbWWmlmbBLwlpBHPPBjqHjBSgPSSSfrVnzqQ +JddrdBgJpChGfDLDDpcm +WnSFqRhnjjWSSlSFWqTFVSLGbDLcbLDDvDLztbftVzcv +nRWjsRjQFnQRshgwJCZwJrhw +rnbZwrcZQdpsLpHDVWBBBgDv +NNTSFCqJFMMMSJqTFFPttmNPlwgLvWvgWBffWlClLfvlVCVv +TMTTJSJFRNwmjZsnGsrhnZZR +CMZhZstZqlClJScfBrfHHHFWFFHh +RwGdpjdGVGdmNHcfczpJWWpf +dDJnQbdnwQdbggSPgPsnlqSn +hnczBfznJFmzhnzJLLMwLjmQrppgCjqC +HRRlrPRZSDtQjjPQNMPpPw +ttlZHDRGRlRtGltTtGvcbnFrbvWJhvWhndcFWF +hRsCqfRdqdqfqdtqmMmmZpStMTZZSTnp +VjDDjWbzPFFwPRPFDjzLSnTMnZSGZMnWpLLmpL +PVHFNBzDRbDwzjNNzHdvdHvlhhcHgvCglf +cRLLzhRBhLhVLLLMnnRVVhtJgNgPJmPgPvDPJgvzvvNJJP +lpFffHHWHbbMNPQgsgJJmW +lpdplSpHSHlCCTbSpSFwdnLqMwcdBRRRLdRnth +csZWwFFZbtbztcZttbnRbGlbJhqfnhlpnn +mmTjjBLdSMQdBggQHNgTmjgJJRqRhCJphRHRRClGnhlWJJ +MNMMNTmBLDmTLDSQmFDvvzwPWzsvDZFFcD +fmflRfGcCtGDDbRCRlhCmmBJQsvBBWWvtWBnBJvLLvLn +GFjdMMFGzVQvWWVWJQVJ +wjTZzjrFTHgZjTFjMwGRcfRcqlbhcccrcmmlqC +PvnvjHPnjRPPqvvnPqZNNWHTSdVDHwTLSDWDlTTTLl +MJswhgppwspJpJsGbhchbcMlLLDQdVSgVldtSlSlSTdTld +FwzwJzpfzzJRPZmPBvvmBF +ZrJhslhhclDJhrDZllcGGrZnFCCWNMCHfsFbPddwdwWwCCfP +BTjgvtBBSLqqBSLVzgTpBVMFHNPHwFbSwMPbMwbHMCPf +fRtTppTjRJmrmJDR +hJzcQcwMQhcQwZHVNmSmPCQZSm +tpfvgWFFGGfRWFBqtPrHCmSwPPVPwgVgPC +fpWBRqWqqGRpWWRpFWssMnLczJnnwcjscsJnLhbz +HggzqvvrgtlrrHlQtvlJqFdfBLFJBbnfbBBdfBBfFd +SVVmpZVsRLZGGZwRGZSTDWBbmBFBdFBnnFCnWnBfhB +wpjVppVpZLRTGZQrrjjHNzcgvjrg +GsMgMCFGMsbwbbSwwglS +mJDMqRJzTRVdPWttPffZppBBfS +dzcdqQcmQMGnHCsQ +HlPgHwlHVwsVPPFVsNwzwLnmRmCCMcJcMRRLqGtRjCjJ +dWhrWdDnmrrRMRct +BZDvBpfTDDfBddWTZhDddWDQgwsFsHVvVHgHHznFQFznlQ +FjmqFqJJGsBGGhsZdRDDRZZjTvdMdt +NnHPngrPbPpbPfVvfCrnwccTwrRwTZdcdTZLwRTD +lbbPvHWlHCNNnJzGJlQsJlsBBq +mLNRpRDcDDCmCpzTcCPcNTTDrrnrPrPvjqtqhnhhhqQQjrhF +dVMlVGgVSlGgWgsWSZlwtrHvqMjhnrhQjnBBqHqvhv +WJfsVwZfJGfdLNmcmCcCtztf +bBTtWQDMpDSjjznztCLd +JhfZfrNPPwNJrhqRcJjfCCCzLSGLbGGjGznj +RsPRZhwNbgbrgbBpBWWsQFvDMTDF +rqLzTmqqMmmwrqwrJJwPTplhbRDphhdhDvnnhnRDnP +ggfctFfSRNgZFBRVfFfWfZNSvjjvjCChpDhhDCCjdvlDDD +NQfFRFgtffcGfcgZcfBqJrGLJJqLTwwmmHJrqz +WVGJCltslWJsbbtNJbDJPMrPLBNLrpNjfqQQMMNr +nTFnTmdRnTmmmdHZZnPQpLMfMZPMPqLZDqLf +HRvRFRTvvvRmnvFcFRndcwVVJWWGbsJGwgttlCzJlGDg +rfwdfLwLwwNdwbLcgCCTtFPvFPzWtWVtzvJF +MpjqDDQQRmQjDspzTWWthVWRvRVRzn +ZTQQQqlQZsqlrlgwNlgLcSdf +QqBNgbNNJvcgnbBQQgJjQZSJWppPWsGpDpSGPpWTRDTp +rrldddlrChLFpWPSSPWvPGCR +fhFltdLhHwVfvgcZZqjzNNtQgt +BMCMQZSMvSZSQTQTWvMSvrrTccgGRNljBFglGRgBVgFGRRGc +ffmdmwdLbDJwFVNlGRRVVbRR +dwJnJLfJwLhnPQSSNMvMqhMP +RpQDDCHQwMRpwpNMCwpZhgZrPSqQdgrqPqPZqq +zbtzmzzGbVzJSTScZqrthddT +LVLJlLBnGnWNHMDRHnCCDh +wQDcLhScLLBStHhctwVwsBjNTrssTjgNsgGCgssj +fWblbRqMZWRffldFZpqWRbTCsPrsTNgnCQjgTrMGGgsr +FZRpqdlWWbZZJJJppWWdHQVmLLDmzwDcLSVcQJLw +DlllCDRlflQRsRnlCCBhzvLFVhJzJVzh +jHjNNqdHqwNgpgqNcpgZwjZhJJbvdbPVhBbbvVvBvLzbPF +cpcgSwWqgVnftSSTTf +QmLZvjwwmDWFLNLqbqfF +JJSBMBpdpgSBRBHJgdHBNVbsgqVlqfbVFVlqVFqb +pCttfdCRMDCjhPDhmQ +nDjnzdcDbDtGdcQTvssHssHbbfTq +lVgRgpWCrMRVgVglRLjJmQFHqHHHsqFvFfTQsHSfMQ +VrlpmWmgWppllLpPPWPWljPBntcnhdBNPhZBZhGdDd +fQsRRfBHvRRjjvSgTwCTphdlphqBpn +WJrDZbrNJZPWJcZmWLrrbPczpCnTddqdshqhDgTTwlwwTqhs +brcPbZPcWGWssGtVfVMjFF +GBZgqHhHGBZcLcGMjVJhrjrbStjbbb +wTTNFPQpvDQTQLQvntRSbRJjVnrSDtJV +TTwzQzPPTvmWLTTcdWfdGdZgfZHfZH +VswNdtMgdsvQDJgdVNgQrrLlhrSCLflqfLrDnzLL +RbjRbcZGTGpRbzrTqChtflhSnt +mBjPRWpGcmBZGZpmZjtRbQQVwJgsPsQMsvNJdsVFdN +TDmDTTThRDbbZtpTSnhRcFJMglldGdrJltgBMtMB +jNjsWLqqqvzWswNqdccrFNBFMBlMrdMr +LjjqwvsWCwjHwQHHTbDHbbRZmnRd +qtnncCFCqjwjcDwnFQSGGRSBGBSvFdvrhR +JPZzpgPJWNJBRhqSvQvBgB +mZmJmMPWzmWmPLbmqTTJPfDHnHjCjflHjflfDcfMwC +VfJrplTqzVVlVVlpfTMJfqDtWSLgbHgDjSHLgjHWjrjb +vhGsRdsNRPRvvRhjSZjJLPDjDJttbZ +GvGhQmhBnQNmnJGvhdFqBFVqcllqMBCMlVCc +cnmsmmDCBDmcmvVnsVBtQQWWrrltQlrBfRHB +hqphjLZFhMMjZQGQWGfftQWf +JhFqhbjSLjMpqzJFbSLdFSggDwgmgcDVsVzVfvNvDvsm +mRdspZZggmbJbpDcDJDqPhvvGvrnVqPqpzvVVV +dSjSjQtwfQlLwjQSPrrqVqvGPGPVPjnP +fMQtFQLHSfLtHFttHMflfwHWgFJsDbmJRDWdFBRJWmcbsJ +lMMftpGHMntGtMMGpJnSPQvwzvvHscsdQscQsscQss +hbfmWWLggVFjVVQdvbQvbcdzwbRR +qZWFWTgTZhrLhLmWGlGGrSnJSNfGtSll +QVGdmgVGLdllrGVgnZrdBvNvBSSjSvWtBHBqNNmv +ThRjRFwpfTNBBqSBSSvT +MFzbzfDjFFCCFJpRpFwbwJRnZndDgsZlgLrQLDgdlglZnD +PjbDQvQPjbjjvtrQcpHBWnLfqnqGcHngnLdf +VTwmMzMFnqHBwHBB +lMTTNCzCZmClVVQjstQpPlprlHSp +MtMqBtwFFsMRZMMZMjJGZR +PHbpbPqHmVVCRGGCGRjv +pdrrgdrqPbpzrHQbbqQPLHcQBsNtNnwzNhSFfhtfffFffwDs +cPjpPcRJJVtSGGtJtffN +CldrWrmDHnHnmWmTWsNzzfbbFNhtsbbNGGfb +LCDTldCmnLLVwPVgQt +NJpFrbpFZhlzhbzzqCtgMCgRbqCRMMtm +dWcnntHQWcjRHHCVMqCsRg +vLnQDvnGptrzLPwp +dwTwTHwvZHqTrTRTlWtfzt +GbFFbFBPnGQBQcQcLbPjFtCSrtgMMLrMfrrWgRgStr +PnBnQhsGPQbnJRqwdRDwvJNDwq +zzjWtnQRntzSBjZccmZmmC +bdJdbdfJdFCGflfGwBJsmhmSMgmgcsmM +qDbGDbvrFbbvGdvdffFdTTWQzrTWTLWLNnttLnCH +WMMssTqCbpGzGSlmzLbG +FVdwftRRVDZPcdZtZVRcjmvQSzzLrmlrclSGms +DVfPFZDZRfVFPFHRPFRCphhMpCTHTsNgqHNWgn +LzBGCRjHCnmnHzdzLLjHwGplflfrfPcgtflgLFLlcrcc +hqhDMSSqWZsDMVWTVWmTcglglflFVflFrpPtggcv +sshbJsTsqWMbqNWbhbzzjzGBQjCJQnzwmzBw +QnpfLpbLfGbvgjHzjgmNRqbz +SSMBMZDwMwFsqgSPPmHlHj +BhMFJhMBddDMFcTdMVddrQfvrnCqnCffpqnVCLtC +lhrTZNJZjCRjSCvRSlTSLlrvFnMHQhVDnqnmqqqmQqPDHmqF +wcpGdtwtwzcbpzggCFPMqtMQmQqmVqHP +bBfwgWbfwBdGpppGGGbcBsTRLlZTZsTRTsRNZClJsvZL +nJLgNcQDNMlQHMvCbv +zphFpmTszmwhGGFhhtppNfffVlvZvHCCVZzbfzvS +mTTsmTRGstsFhWwtWjPRdjnJdjJnLjcLNd +MfBDjllflHLTpDhhppDDbp +NZBBnGJNnNPWTcTTmVhZCh +PSzgSgwrnzrSzBGJSJrSLQqfMHQfqgRgfjHLljll +RgbNmBbqgWHWRNRqHtcMlMwJJjcDtVlD +SzpFLGPddSGnnSLQZLtJJcclDlVjDQwMhDcc +LtTZCTttRqqqvqTN diff --git a/input/03-test b/input/03-test new file mode 100644 index 0000000..9919ffa --- /dev/null +++ b/input/03-test @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw \ No newline at end of file diff --git a/src/bin/03.rs b/src/bin/03.rs new file mode 100644 index 0000000..d88e0ec --- /dev/null +++ b/src/bin/03.rs @@ -0,0 +1,50 @@ +use core::panic; +use std::collections::HashSet; + +use aoc2022::*; +use itertools::Itertools; + +const INPUT: &str = include_str!("../../input/03"); + +fn main() { + let solution: i64 = INPUT + .lines() + .map(split_rucksack) + .map(find_common) + .map(priority) + .sum(); + solved_level_1(solution); + + let solution: i64 = INPUT + .lines() + .chunks(3) + .into_iter() + .map(find_common) + .map(priority) + .sum(); + solved_level_2(solution); +} + +fn find_common(parts: impl IntoIterator) -> char { + parts + .into_iter() + .map(|p| p.chars().collect::>()) + .reduce(|a, b| a.intersection(&b).copied().collect::>()) + .unwrap() + .into_iter() + .next() + .unwrap() +} + +fn split_rucksack(r: &str) -> [&str; 2] { + let (a, b) = r.split_at(r.len() / 2); + [a, b] +} + +fn priority(item: char) -> i64 { + match item { + 'a'..='z' => item as i64 - 'a' as i64 + 1, + 'A'..='Z' => item as i64 - 'A' as i64 + 27, + _ => panic!("unknown item: {item}"), + } +}