diff --git a/input/year2022/day03.txt b/input/year2022/day03.txt new file mode 100644 index 0000000..02370bf --- /dev/null +++ b/input/year2022/day03.txt @@ -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 diff --git a/src/lib.rs b/src/lib.rs index 2ea0ad9..aa3fb9e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,4 +14,5 @@ pub mod year2016 { pub mod year2022 { pub mod day01; pub mod day02; -} \ No newline at end of file + pub mod day03; +} diff --git a/src/main.rs b/src/main.rs index b4623f8..cd5a6f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,7 +58,7 @@ fn main() { } in solutions { let start = Instant::now(); - let (aw1, el1, aw2, el2) = (run)(input); + let (aw1, el1, aw2, el2) = (run)(input); let elapsed = start.elapsed(); overall_duration += elapsed; println!("{year} Day {day:02} ({elapsed:?})"); @@ -84,5 +84,6 @@ fn year2022() -> Vec { vec![ solution!(year2022, day01), solution!(year2022, day02), + solution!(year2022, day03), ] -} \ No newline at end of file +} diff --git a/src/year2022/day03.rs b/src/year2022/day03.rs new file mode 100644 index 0000000..701ff4b --- /dev/null +++ b/src/year2022/day03.rs @@ -0,0 +1,39 @@ +use std::collections::BTreeSet; + +fn char_to_score(c: char) -> u32 { + match c { + 'a'..='z' => c as u32 - 96, + 'A'..='Z' => c as u32 - 38, + _ => unreachable!(), + } +} + +pub fn part1(input: &str) -> impl std::fmt::Display { + input + .lines() + .map(|l| l.split_at(l.len() / 2)) + .map(|(l, r)| { + let a: BTreeSet = l.chars().collect(); + let b: BTreeSet = r.chars().collect(); + a.intersection(&b) + .next() + .expect("We know there is at least one") + .clone() + }) + .map(char_to_score) + .sum::() +} + +pub fn part2(input: &str) -> impl std::fmt::Display { + "" +} + +#[test] +fn test_part1() { + assert_eq!("15", part1("A Y\nB X\nC Z").to_string()) +} + +#[test] +fn test_part2() { + assert_eq!("12", part2("A Y\nB X\nC Z").to_string()) +}