From 5b39ac0af9c7565a26ec438e8733e093d0890302 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 3 Dec 2022 00:25:03 -0500 Subject: day 3 --- data/2022/3.txt | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/2022/3/mod.rs | 63 ++++++++++++ src/2022/mod.rs | 4 + 3 files changed, 367 insertions(+) create mode 100644 data/2022/3.txt create mode 100644 src/2022/3/mod.rs diff --git a/data/2022/3.txt b/data/2022/3.txt new file mode 100644 index 0000000..cd857ef --- /dev/null +++ b/data/2022/3.txt @@ -0,0 +1,300 @@ +jNNBMTNzvTqhQLhQLMQL +VCwnVRCGHHJTdsLtrdhrGdsq +wFJZTbRcnJCbpwpFccZCBfBvPzfpgfgzzWvjSzNP +wDWgDfWNTvwvgFfWfddGldJVprrrVdNlrN +nLnmLSnmMVJvSrHqdV +MsmsbLvtzMjFsCPDsfBwwT +WTqSCqWSWqSgVZqJHpHmHrhMMVrRhBnn +PtLGLGddGGMCpprM +jFvLPPlLjvfjjffsclvPqzzJWTbqNSWZsbSTDzCW +lLSSrfmddlNpnmLdfSPddDdbZQTZgZjbZgjcQZHQPjQgZP +MJMnhzBJVJwvGsMRhRhTsHTjZjHFctbtHZcgZj +vzvBWGJMVGwWGGhGqVBnGzVGDfCDmrqNfrrLSdpSfLSpNmNC +qGWLgfbWhqpLgZbJvTRWJTvMWRslMv +FQwPwNPCVFQQdNcFHNcwwsvslRDRTMDMsVTGJGtRTs +wQHnwnQFPNPdjnnPjhphGqBrfpBBBfZf +mpVpmtPhVtPBLLbQTJpBLZ +vzFMlMzvvRZMTbJQJQbf +srqzvRRqdvzFFrDnvqldFVtwCVCHWNqJHNNcHchCPt +CQJJLZCJLqNMMDDgGLVV +RfRFFszTtzbWTFnRtFrRrWvNHghvBVGgMffvmBVDNgGV +znsjWzstnWjbDnDbTZCpwZcjpjZqQCwSPp +jRrzzrPjLnnpQQDsjj +CTVnTlZWHTcqZBcTTTHqWscQsQDQQDsmmQfvfhwDmv +qlWFWWHTZTlqTFWZHtBVFdlTGdNzRnNngbbSrrSNNzPgPGSz +cWjbcjnssMmRPWbGsWcMbfLBFrZBBLLgZwBrlfLQZtCw +vqpvFHNvhvJzdZQZtlgNNwlrrw +JzqVVVVpzhVJqzhSzJhhDVnFjRRMsPnSRcGMRMjWjWmR +NznNGQgSRQffbbsR +jjjCLwdvLcrhqdblFJsFSPfbDP +qrrvwHqjtLmSSggpBtgn +LGPtFtTfTfTfLrrWTSWGPrrsszbsjZHzgdzSwzbHdsglwl +NhHpVpqNNqbdszRRRb +ccBMJVDNCvvhDNpvNDpnNCVCHFPTmfLTGPMQrfLGmMLWWQQL +dRgRhVLRlncZSSrtLp +WJmwvvvjQvWwFBBvFJPHpwvGWTScGsrZtttGTSsrzTsSZt +FFHJjmjjjPMvfHfwpdRqMppghdRCddDg +NDTRFSnNsVVBDVlM +JjLZWqwjHvfrvmHHvjLWWLlhPlnPlChlQhJQnnzPPBCV +mwHvHmpvwpLmjnvpvLvvNGcTTggRbdTGcbNbTTpS +GGhZQMsmGRfMwfpclgdBlbblBBZgJc +tFvFSTSDnDTTLtcFMbWcBgclJrgd +vzDtzMVtnLTTMTSjSDHtppqhsqqfGjmpPhmsRGPG +MfJtWTTMJfzBbVWPZWQbNnDV +FvlgSHSLvmCvZjgcCQQsPQQsjnbVDNVsdn +HLhclRlHRmHvmLmclLZFSFwRRRpJMtwJwfGGrrtrwfpf +scsswLQcGmQmNHCqvrsHqfff +bdnPSMMMClbBBPCdDDnDVMDWWWvfvWFfFJfNqqNVFqFNfr +bDPTlSTPPbSPjnPSbGmQLCcjLjwzRLcmCG +tFFJjMnFhdcMMJlWtdnlFczBSZGNSjGGbBGZLbZZbLGB +QRgqwwvsLssZnGCz +gqfvvnpfHwRmHTFdFcPdJJmJJc +fccTzVVcfSmdThTTFJPFgg +wLsWfppsjBrnnwjCBZnZqJJQGhBdFJddQhFqdQBG +pZrNCWLwLZLjwwWMftmNzttDcVzVvt +rZnVVjVSMcrwsNbc +dLvQLBLFddvBLzpGmddQCqNswzsMjbhgbblbcwshlb +LLCCWjGBFPmCWdmmPWLdWBpLRZDSPRnHSStRfnZnZTnSSTfJ +ddfnQRbpldRlRLgFglqGCLqsGq +BWBVDZWTBTDPvVTZVDBDNMbhcLLHsFqgvHJsLCJCGcHGsJLH +NPZPDMWZMbZrBVMDDWNmBhMVpSSRpzjjfjpwRnSpwzRzdzjr +bvPSBttgGmZwScwShS +NJspjJLdprzHgjrLzLNrnHQCmmcZQWlcQcNQwlwcQCZC +HdRJsJrdHTbqGMDtgDqT +sNVvSdTstDCtdzdzSCwTzCRhRQjfclMflppjGhffjZcN +rgWlrnLLbqbQMfMphpWjjf +BmrnrFPnnBLlqVwDCtCtVPDTzT +mJMqlVlttQlFVmzFQMQMbQMSSDNwwdSddNddwdDswRDVdR +GGZgcfjrvCCZvgCZqvPHSwRBBsBwswcwBNTDTcSR +GZppfGHGrgGprZhLthFJhFqLWWFhtq +WDHHLtRBHgDnVrWFVFBTdzzZLLjZzjjvddLsvv +JlqmMpCMCGMwbwZddTtCtv +cJJqSplpfSGccJGthFVcVHgFBWBgHgDB +tlFwbWtQFLJhlBFlWPbwmsQndTrrqdnggjqdgnTgTT +GCMBDDCvRpDVpRpHrsgdqTjqgdHcsjHd +MDDvCVGzBGfpzBSNMSRRmwbLWlPmzbPmlJlWbFbJ +fzFzFHBfnvpHFbnzbHfBHZggCGgtZCltDGggdCCVtZVD +sLMNSccQLMSrmLcshLvtCGllPtDdGgtJgmlV +cwLMwwNhQhsWSjqTqHnHbjWTvH +NWlqqhNNnGtNvvWQdrVGBBQdVrwRQr +mppCjppMrDTSgDppCDTMQVRwdBbBQVVbQdQsVB +pgzzTFFFrjHqHnqJFWnh +ncQrhQjqjVQhGsGBbhtsstTp +RllWFLRfZrGlBTbg +vFLLmfNRFSNDfSNjcwqJVrVVzQjc +mmGrgwmGDGcVWVjNNW +nDsqfPCHnpntDssfJPDPjWWhjNTTcjjhTTNcqWcc +DfPCJLpbldRrlrdwmw +dJDNbRhNbJdhqCnrWjhsTWvplg +LMHrttLFcMmcMFLmtGplCggpjjnvTpgnTTFT +czZMzrzVZzHZdNdbDDqDVQNR +sbsJgbsmzdgRgWdg +LLLFBzGMLjzzFtVFwwwCPPRCCqQQTnnCMMCMCC +GllfptwjLjlGFVFjGzpFFNbJDmprrNDsDmDvJhmcvp +SccPbfbncpcfsjbRjMBCTTFGMTCQtJtzFFFJ +vvvdgVhlmlwlgZLgmJhWQCWGGbWtWJhzTJ +NbLNDdbLVmqqmfcsrHcrpPqrcH +HcgDBJSHTCzjjnMNJjrW +VppGMwFwllwwbZZrjvnqmzmnzpqjNv +wZlhtPGPLFVFlGZbVtVTQLLBQRRTSHTSMDCgLs +HPMMnhBHlMnMBPBHJHPWfdnBmjvLZvjTvZTZDgTgTmQmZhZZ +SrzrSScrctrwVzCSCmzQjmLTLvGDvTjGbm +CswstFRNpcwVNRrVVSVwpwpHJnnWWBBHfWHlffWfQMnM +mlFMtqjvMdqjmMCCJZsRQBnszlZz +HcNgcPLcHLwtcfZBTsnsHJBJTzCQ +LGGNhbNtNLDfcgcwfbgthfwFrqqVdFMqMMhMmvShFqmvVv +NbvbBGNvhNhnhpbgpGfBvNgmRjCdPCPCCRCQmmpRdTmTPR +qqFSSqWrtSSccjMdQMHFMBjPMj +SBDSBZZZwGGZNJJg +qTdHSLSFRZRHHZVgpzhbJszchsnsLg +tDvflvrGttDCjlQfmCGvtCftczhbzwJczcJgznNmzJNhwgsp +tQlDCDtrfrtlGrjlQBHFHPVHbBbZqTZdVZBF +MTwvsQJMvvHwVMMJMQNNJRPWWjCllrlWGFlSFCpjgFVSWr +zhcmnRZmqmWjCSFrFqCW +ZbmhZcdZznZfndtwDtMMsRQTTQNRQw +ZhhVqQTvZvVhSmQZcClRCLPCgTGGLbgl +dJWHwndMHswswlGbCmclmLHbbP +dnwwNJnjBjwwdddnjndfWvmvSNZQNrVVmZvZFvvQQv +trlrlrZzsjRjdFhlpwdpnpdp +QqLvvLQmLfQTLbLTfHmqHHLqQgFBdCJBBgggCJdhgJwCggBF +DPDvqLqffqfhSVjVPSPtsj +gsnVdcBcjMMntGMh +RQZLRZlZDRJDCzCjblJSDjQZWWTWPCThMTFGNPTNttGwCFMh +pDlQbSlzpQsjVpjHVfgs +zgqtCtJltdGttJgVGPPJCtJvQFsFFbTFssNDNDsHLbTQbssP +rRcwBnnpcmBqpbLHDspTbFsb +mwRqrqrmWrZnfWmBmnRZlgClgJCJlGJzClGMtG +jlzHllmPnpHlHZBWZJJDWMBNVH +bQrhDbcLgsQrtdVCJWfCCBMMVWrJ +QhGdGcLGwwwtcDzznppPpPwlpnSS +qbpqvWFHbFHHsWwPqPpsVWZTlDcLDddddDrmrcVZDrmT +MCgSSJMCztdmcLzlrlDl +QCRMRSnNtRSqqRjsjLPPvp +ZnZrTfsWWvhVSRmzqqnn +pLGBLBgLCpgGpbdLbgMClJTmmhShSRShqSBDQSRRmQVV +dpJPldgMMbglFdrNWWjHZNccTjZP +CCZCQzwwdmMGDWMmhCMJgpnrnwsTrFNLgnpNgg +jfStHtcjqDPbPtvqvgLNpppnHsrsFgnFNp +fcqqPPPtPSfRVBBRPRPbvQzzhQWGZQVQQZDQMMzGQM +VVlDNDgppgtNltlrJPbjSzPPzjsMsjBBMWMM +LmGRmfmwCqQqbsQBMqJj +cHRcCFfmfmGLJLGFcJLFwfdlhDgptthhHpVrNVdhlvhl +vSSdnBVpscwZcBZB +mLHzqtGtNfGHHFNHMhJMthsbcJtctZTw +GHqHHGzNDNFCfqllCFqVDdPSDQnddvcpPQjdjg +CMWcwGTrvzDWzrDccDCGzTTTplZgSjggjSpSljSjBpSmgmWB +nssRttdsnhsdbFhtVFhNpgwNpBBgHHBBBBZSjNSl +PnVPVPLFtvPvTwwrQq +tlQlqlJCCJWgFrprPjpGVpQzvp +SDbwShHbBZZbhcBdDBDSTrsVpPrzzzHVzNllzGlVNv +BTbbScwRhwZLnLtfJFLFJgWl +VDfPVHfDVMMfHSPSMTVfqgFthFcFrtcdhrhDQdDmdcdt +bWGGHCplWnJNpJCCnlnNwdcwQhmmdmtwddBNcc +HpGCnZGllzlzJWjnCbbnCnRvfvsSTVVSgVLqSsLsLzPPLV +fQqcfqfSDzDWffDZ +NcCLCtPCPMtNBwdthpLhPwzsHrszsZssTsWrDrDVTNNH +twMPBtCpLBCtwMPpJcMBSjjnngqSjQQJbQjjmgmn +vQwVQQVqcJvVJvCpQBCLpdgSFCdjjWWnMSgnSjgjbj +hszPRDTVDWWWRnjWWj +TtDDZsszlPllhPzmPVGssTPpQLcpvpBpZpcfpvrvQvBQLv +sRmGqqzzzgCtRrttCP +cffSwNDddTdfGWtgNCrtGMPP +GGcTwHwHvjqLLjLvlJ +JSdjLJMBdMSrfwwLpWgzWmvDhggzWvfmgD +VsRtVllstHHNllsQsHQRzchcnDmvmvnRvvvcnZ +tGVGCTTTtTFVbsTTNTHsTTqBqBLrBCjqBwqJwqBzLqzw +MhjTJjlSDrplQvFQ +RHttqbNGGmbbLmLmdqbgnFQwrZswQrwDpFpppdwfvQ +gCNmDHHRCLHnWWSCjhWPShPz +BvzpbBwBmsDrmGVgZFDm +TnNRdtlRlCdFFGTLffrrGf +jltNtRCPSlPNtcpwpGzjMBpvbhps +hflJphNDmmbpfnfplbcvLsHVLsrsZsVvCb +FgTFWqTBfFPfFqQqTwHsHccVVLQCZZZCVH +BSSRTGWBgFggBWgBGStTGpzNztmjjzhhzDfNnMjnph +mDDFjjFmVlTZJttffD +hhRvNNCvdNMRLzhSzpptwslNTfNQntsJQZZTlN +WCdMzdMzhMdvRvLhCRLPvjgHmggmbmbblgWcGmcbcG +cScMdhsDhDDdvGzZptzGcnGtpB +NPWjJqrjJWwrSFWRJlrlNWJLtZznLBBzZznLqnpqnpnznV +NWNQwNPjCSQTQhTd +fVVCVccppZMZMMCBzJTNJHWZTWZzNF +QrmmPhDqPhsPRhrlbgRDbbPDJNJTnJzmzzfNNTNHNJNWmnvF +DgbPLbPsQsrbsqLbgllsQQptfwSjwtVLfwdcpCjVwwSp +ZlsmlrZZJcQmhBhlNrsrJRRbRCRggRbzGCRHgRCDGB +fMFvdfVTTdjWTTTfvSjVjpjzcCbFHGPHPDbPHRCFGGRHHG +cdvfSWjfjpdVqSwSvMdLrlrmhqZhhrrLLJQhNr +sWVVmDJsNWNjcSNJZcNcZWWsHTGHTChhHGtHsFFbbsfHhH +nqPRwQRgpQRPQQgMQgQLQqBhvTRtfdfvfCbFtTFFFTtvff +qgrPMLLPpVlbDrVrWD +VcGjcCHcVHPrGnjQDQgDgQDFtdglRtlQ +bWWhfzJhvZWJzNpmRTtsDLDgRTsNddFT +MhJMhJbMmSZbJZwSCtjqcGrrnGjC +FCvpgDsZNsCbvvvpVwcDrjcrmVMwVwHJ +fhfWdPhhhhRQQqzdLSRHRHJjBTTmcrTMrMrwmczcwwTz +qndhdQWndftfhWStfLQQfWgFNsgFpHCtgCNbGZZlZCll +mqTCNhTNmGTLwLNfLrSrgZHDvfPDPv +cjsMQppsFnFslnRQQGMDHGZHSgzHPDZDSf +stWFjcFFsJlQcQtwtbVwCmCthmBTGb +fmsffcqhmqPsnTCnCcQpzjSSNpBWBTQpVSSD +vHbgLRvvvzdgjVVjWg +WltLWvWlqcChrhlf +CtwjffWrdznRtzCwLsmGLlLMsMmMGb +cZFFbgPgJZDchMMPVsmlPGmG +SpNFJBJccNgDcTJJTdbStbnntrCdSrjWnb +qWzgNFqzqHNTBzFNCZCGPpPlHmdPblls +rfSJRJnhhnJDjrfvRStCmpdGsdlDpZZZPbPCmW +cffRvfnnVRjFTWVTLQMFWN +VcHhVrVCQQWhffzcRZznnZFf +dDSCGSsSblwDdmLqvnFZzNZplfpfRZfBnl +tCCwGmSqbqtwsVPjVJWtJHHhQV +fvvTcWzGcCJrJGJvvHMbZTmRQTbpMdQQsR +SgFhVgllLgjLgwlwljFqVFSFdjmBHmZdRMdZpbjpmpjBsHdM +LNqFnlDgVqllwLFLnVSgLFZtCzzzzvCGGccCCDCfvJrv +FczpzmSjVVpSQrzzcRpRcrwqMtJqwtvtLHvQwtLtnJMw +TvbGGbNfGCBBLHtJBHDZDMqD +shgdNTGgvNsflspcPjzVdmppczrV +JHLPLTsSllgSSPPSPLTRTdjCZGZDGGgCdqZtZCZdZt +mhFpnpFwqdGbdFDt +prpWcvnmhmpccBBJMJJlPWLHMDSDWW +GcMcjDbDMMjqHBHVlHvv +rLCrwNJCnwrZNLWQQwzQpRqQPlBRVVBRvvtHqf +zhnrnzdrCwLJCwzwCMGcbdFTscTmgcFlgc +cnwlFrdMsggblgsrMbncwrsWzjGBTjznBzWNzPzTzfjTzf +vvVVHSpQvvRQDJGGLWGfTLTBLQMN +hCmJqVvMSpqqChCJHDZrFsdhrtgFhttZZhts +sfDNqLNpqpzCzLsDqzbCVWRhjTNhShTjHmmjjhStBmvT +wZrlwJwFJGlFMTjhBBZTSTRSbv +wrQrgnPwMsnLbfffVc +hDcwwGWhMMssTcdM +NQmLbNSZHQSHSNpbvfdqfRsZMqssjqdd +LNVtLSSHLSgLNrgwJgJGnBwFMBzD +CRDfCbfjcnRCBVfjVMfMjZpPptplPWtppStpSlBqlq +HdTFLGsdLrzNWtvqPTcpgPZl +JLGmmHrwJGwhjmfMcbDjQC +VShGpPbWjcPCcTLcPN +HqfqDfDFFJDvZRJvqZRRqHZdNcwjllwvQQLQlllccwclCMCT +FddsFmJjjrgGmbSSpS +NRFFLtFtqFLGsdnGbQSs +ljMfMBDlJHgBVHgVflfnwdsSQQbddsSsqnqGfs +PlzDzjljzqRzWzZW +dtzZZbctPzwdlzRwlcdfRgtQJmFmhPSmmSsQQFhsmqSFvm +nDjHnNjjjMnfjNTMWhHQWJSqSSQmhqhm +CDpVCfrjLnnfwtBcpdcbcBZt +sssZSZtDfHbbdtBTCRBzRDFJCBLp +jwWgmWlNQNLlcjWhgQlrQQWrCCJJzFCMVMTzpBMMCVCMTwpT +ggLgrqljLlGvHqttftbP +cSGBFsFcSRZSQGsgBNgVMwMhDQDVfqPjMhwwVq +vnCTLlrpPlHzzjbMfqpbww +rJCnlmClvWvLrTmtTlZcZWSSWPGGdNcFGgcR +lfDDvZZSvLtDtCQZltCqVBWVBCbHJjRdNqWq +pGGhhzMRcqMBqMdVBN +mzgwGrrwhThFGPmGPcFGpwStTfltfDftStDsQRsflDQl +LjnSjLZLBcbBdDqzND +rrfhfMRmpsghfrhGhgQrcPNtZcqNCqdCqPzcNZMM +ZTTgvRpmfffpfgRRhWnVSJJLLWnvJHFlFH +lstcGcttdczzsWVCvQVLCHHnQHWL +rjmJrmfmJMqvQTLvqfGG +JbNrjGjGrMDRJghZggcchhDhzc +tftJQwCgSjpdWHjbRJ +DcwvlZBmGvHjdbczcRpb +sqwDlsBvGNSMQTCNfCTC +DwDrtvMHtBCvcpDcjCMFtBCblJfJGJbZlfzrRlJdbRdZld +sPLPmqhSnLQQSWqlbzRRhfJCJfNJhZ +mVCnWCsQqqLTPWmnDVMFVtHFtMBFpjwM +scChGddJztdNswNsdDsthvmpVmRVcZjmvVvRSMZVSZ +lQLCWgWHCWbFPbbbHqLnLPHHVMpVRgSMmZVSBZBjZVSjRBZp +QrTlTHbPnTsJGtsDdGCr +fMjgFqtFWMhtjcNQSDMmNlCCDMQN +sVHdHdJHwPGPGwwbpJGTbGTvClldmvRSnvlDlLLSlvRnQl +pJbHPHJGVbBswpTcfrBtrhmtrFczzq +SDGSDGVPqqqQPGrTQVTQDrSrJfHJgqhgJqzhJJmWfHpWpzmg +twCdCWMLwbtLLjBddgfcJgRHfRRpfcpRHM +FZdbvFFbVvsWsQsW +rzrRgqGrwgjRVqJCHLzCCWhtDbCC +dTZnNpvBvnJdBpBnsJPvsSCbthLtLbbQShQQLHtSST +BlplPmdlFsslfJmmRfwfwMjw +PPHSrmfHTnmHnHBzRhbFgfbFwzQg +LcsVsGtVLtLqpzwBvgzQRgTTTp +TjLJGTTJWJZZWWZS +tHcshJcJRhLsQscVtccJLRHfvlPjZFSvmvSbvfLFfFFbGZ +drwdTNlwwBTpCdCdwGPrrmjjmjmbSjFPrF +wglnzCDpJtQcztMR +bbMjTbBvgjZNSqldTlVt +wwrcFwsrsnnCQzrCsLnRsQZcNlpJVZHdttZVttSZqJZd +GwLnrsmFCCzqzhvPbPmWmvvfjj +dcnwQdcdrJdSwSFBBqfBfwMqfBfzsh +RgmZpWlCClRlTgBZbhHJJsZjfBHZ +DlNVWgWpgDCCNRDJFcrtQGrrVnrcFPtc +sWSHsdSrHWHsbdsddBsbjmfwffmJDJwcfDQgfvwJDj +ZNGPhRqCCRNGNwSDvmmwwgDhgf +lGlTLTGTSVVFqVTqsFHWntbWBsBsnBHb +QRRgRvDwWDVjmSbDnbTDlDnbqS +rHCPPHrcLFJcllqbTlpq +CldFrNFsgVhhhWgN +qSfMgNqfpmSmlQrRFG +cbBczbtbZTcPWzcrTrmRrLGFTQQFmJ +PBZChtzzcWPcZtBvPjtzBBCfHMMNdDgDpMfVfVpHMqNR +LJPPCHtgtLDfFfvTLwfv +pVGWGGjjjplhpGGVjWnldsvrrMFvfDMTWBdFrfFF +cjlhShjchhjGGmNVjplcQgmTPtHPPJmQgQHgtqgZ diff --git a/src/2022/3/mod.rs b/src/2022/3/mod.rs new file mode 100644 index 0000000..b6c339e --- /dev/null +++ b/src/2022/3/mod.rs @@ -0,0 +1,63 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +use crate::prelude::*; + +pub fn parse( + fh: File, +) -> Result, HashSet)>> { + Ok(parse::lines(fh).map(|line| { + let (first, second) = line.split_at(line.len() / 2); + let first: HashSet = first.chars().collect(); + let second: HashSet = second.chars().collect(); + (first, second) + })) +} + +pub fn part1( + sacks: impl Iterator, HashSet)>, +) -> Result { + Ok(sacks + .map(|(first, second)| { + i64::from(priority(*first.intersection(&second).next().unwrap())) + }) + .sum()) +} + +pub fn part2( + mut sacks: impl Iterator, HashSet)>, +) -> Result { + let mut total = 0; + while let (Some(first), Some(second), Some(third)) = + (sacks.next(), sacks.next(), sacks.next()) + { + let first: HashSet = first.0.union(&first.1).copied().collect(); + let second: HashSet = + second.0.union(&second.1).copied().collect(); + let third: HashSet = third.0.union(&third.1).copied().collect(); + total += i64::from(priority( + *(&(&first & &second) & &third).iter().next().unwrap(), + )); + } + Ok(total) +} + +fn priority(c: char) -> u32 { + match c { + 'a'..='z' => u32::from(c) - u32::from('a') + 1, + 'A'..='Z' => u32::from(c) - u32::from('A') + 27, + _ => unreachable!(), + } +} + +#[test] +fn test() { + assert_eq!( + part1(parse(parse::data(2022, 3).unwrap()).unwrap()).unwrap(), + 8493 + ); + assert_eq!( + part2(parse(parse::data(2022, 3).unwrap()).unwrap()).unwrap(), + 2552 + ); +} diff --git a/src/2022/mod.rs b/src/2022/mod.rs index 6647253..b59d411 100644 --- a/src/2022/mod.rs +++ b/src/2022/mod.rs @@ -4,6 +4,8 @@ use crate::prelude::*; mod day1; #[path = "2/mod.rs"] mod day2; +#[path = "3/mod.rs"] +mod day3; // NEXT MOD pub fn run(day: u8, puzzle: u8) -> Result { @@ -13,6 +15,8 @@ pub fn run(day: u8, puzzle: u8) -> Result { (1, 2) => day1::part2(day1::parse(parse::data(2022, 1)?)?), (2, 1) => day2::part1(day2::parse(parse::data(2022, 2)?)?), (2, 2) => day2::part2(day2::parse(parse::data(2022, 2)?)?), + (3, 1) => day3::part1(day3::parse(parse::data(2022, 3)?)?), + (3, 2) => day3::part2(day3::parse(parse::data(2022, 3)?)?), // NEXT PART _ => Err(anyhow!("unknown puzzle {}-{}", day, puzzle)), } -- cgit v1.2.3-54-g00ecf