diff options
| author | Reiner Herrmann <reiner@reiner-h.de> | 2022-12-03 19:31:33 +0100 |
|---|---|---|
| committer | Reiner Herrmann <reiner@reiner-h.de> | 2022-12-03 19:31:33 +0100 |
| commit | d8e5908367a9bf54f086405941bba90f3e3929c7 (patch) | |
| tree | 877055f116827aaa687fcbef444d4ae9b5c487b2 | |
| parent | f99af8a126c116dc89da21fa4219398d3ce7d6b8 (diff) | |
day3
| -rw-r--r-- | inputs/day3 | 300 | ||||
| -rw-r--r-- | src/bin/day3.rs | 70 |
2 files changed, 370 insertions, 0 deletions
diff --git a/inputs/day3 b/inputs/day3 new file mode 100644 index 0000000..9b16a3c --- /dev/null +++ b/inputs/day3 @@ -0,0 +1,300 @@ +WVHGHwddqSsNjsjwqVvdwZRCbcJcZTCcsZbLcJJsCZ +hngprFFhFDFhrDpzzQDhtnBJJRJZbZvTcvbfRCJfBRcBJl +DmptngtFwvvMmwmm +HFddrJnLdqtHBMQBmmVm +gbvNsbhsvQtmZTbQPT +vDshDlczcDhcssscwzQwslLJrSJLpqrrzpnCrSfLSnqq +pDGQDSpFDGzFDQSJqzDhjhQMTjTrwTstbTBTjTtLtbTMBT +zgzVNHHgMwMLbLNB +WRWPgdHCZccggJmJGzJmzGhGCD +sVJNlhldShpdpnnwVnwCwtwggt +WLFFcHWQLPPZQCgtnCgmbtbHwt +MPLWzRMMcGgRrWNDpSSSfDflMlTd +BBMZJcgBRjCZZzBpSvHQvbLvvHCQLQ +VlVTFwDTVGnfWSQPtsDPbvrpDS +wWdqhWlwGVfGwlfTVqFWfWWjzZZBJmMZMNdzZJMpjzNjgJ +FBWFphQBmDmpmMSpDWVcVcvsPcRbrjPMcMsr +HHtdnHnwNCHCTJRTPTzrbvVbcVRr +lHqHwlnlqnGCNGGmWDvvZfpZvG +mfVtmPtsccMmHcHCFfmhVmnpgZLbWPZqWnpqZbZWpgPW +zzvwBrzdQDvpZJfQJZJpLf +BrTBwRdNcfNmfStc +sTlhFLfZTTLcfsLlLDZflvQvRNqRJFNvRMRNvQQRBQ +CWcgwStWwCWWwvgNQvJBvQMQRB +wptGzbzGWVGSCVVlVlLDcVVsfhLTlf +HVnMVGwLLbsGnVsLnwLSBggMhjmgmgmhtmqhtgMhMj +zrZzJRZfzZfrPCrFcWccPdTdHHlvdmlgTghCtmtTgq +NFfcZWWzZrrHLBpBBGVGNG +HqFhhCBCBLmwwCqJCHFvvFdcprrrSSrjRFRjpgrggb +VGzWtQzGGQPVtlVNslVWsPdRpmcRrjpSzcrcbdSmSnSg +WPPGllQMPGmTLvLJBCwM +PvDWRSmTVvSvRhbZRpRpbjjjzM +GBFGHLglHrrrLgGrttbMjpbcpcZJBsBp +lrHgrrndgdNnlHGFQPMMmWPTvvWSCDQn +mmhQShhmhQfzNfTTlShbHJrRtltltJJtHlRLLZ +WscggNqwPWjcGcWWcpNcRJHHprZvZHrvtttZJpJr +jGjgcMGCwPNsGDCcszBfhhQQQDnFnTVVBV +mcGjrwzQcrZtQzZQDZcPssvPVVCPCVLwswwPBC +NJbqHddNSgdPWvvsVHVLPs +NqglNSlJFNSbSNdldNlNdNbTRFDrvRmQrQGtmDrvttQmmtDj +zzcBPnHBjgHjWJvbJQTvScbwcQ +qdspVCFqVqfFqLFCqtpTwtpTbSTbJpwBST +FRLFRCNNqMfdWNmZPBPZrHmm +VmtRRJmtrDrwhRcvPspltvgqtqsd +WGQBZzMMBGBGbZTTWWCMNSgggqnPlsfbqndndccglffg +CWQQZMFWdzMQdJJwJVFrwmmmRw +rZsFfGfNhznzsjhzZfVjGVvVdvSTSJHSDDtcmmmttC +wWpRBWlbWMWlQDvCcRSvJRSStm +LPlwWqbgwqjjcFshNf +lsppsGphmPrRQnvHdRpd +qBgjLqMjgjTLPnzHPrPRLnzv +gSMfNjNtttVbqBbtTSStjTqlhmlZDsDsbWZWFFFsGhlWPm +sPDPDzrGzBsGRsbwrjtSVvthVfQtQw +ClpgFZgNqMWCgqCpMNZqNWmNdtSwtljtVHQhtwfvdHtSdhSj +FpNCJpNcpfCpgNWPGBLcbTGTzTzPnG +mssNLCZqSqmNCHmrqHChJTjTjnRRnnqVnTTGngGTRn +dbwptFwQbvdtcvpZDcDddgzGPjTGgpPTRpzzzgRzTn +BwZdtZldDbrSsNrsrSHl +MLnFWMRWpnpnLnLCmPGTqQsFzBttTQ +SwNlDHNcddglSDBjrqmqGQqqmGtGGwszPP +vdSlNcrvvvnBMbBR +psZPRmTpRpgrlrDRBFgV +jvCqNhwnjhGNqCMqVgFHWtgHBrtwHFrJ +cGvbNcjvvhhjcvbQGcZdZSQpzdpmpPVpdZpd +drTHDdlHzllZDTzTQRQLsPPSsBbSjQdL +MfVVWmNvMnqNmVVpMMgfgMmvBFFfRRLQPPsPfsFLFCFRSFjR +whMnNVnqWmlllHswJTZT +ZSQTTLLlTsbmmDZlmNQSNFfPwHwqCjCCfjwFPwfwLr +MctMJMBVttnhJcBBVctwRHjHRJwJwjFfqPfRwj +vzqgqhBVzzTlZmmTlN +WgvlHJFvljvdBmzcvcwpmchc +TQqZsTZttLZbRZsLLMzzppBmNShCmBNTcNCN +LPMZsMZLMQVgglFPhFHlFl +qsBCPVPqVbwfnMQNmZJnqJgR +hHdrvvLWtvtjWQnZJTMrmpTZgN +DShSShLZdFGPGDPGsPsG +qRBddRzFFqFqHnNnPSnnmmSpgpJm +ssZDQMvvMwppNJWRDRpW +MMvwlsRMcQBjcLqLBBqc +ZGHpwFGvwpHrvfFTMtDfccMjntMntc +RgSCLRLJRSRSQQqJmTDMPMTtsJjnclBjtj +LVmmSSddLCwVHDbzDzZr +psgWdsBjnnJjbZWQDDLNrDcrLVQjLM +zPSCCHqCfqfmWNMcrVSLRM +TPHzWPFTGztqTGgdJdsssvZgwb +gcFgBChcClJjNCPb +sWZdZdrSmWmSZRwSmsvPlsTtTtNMnnlvnJJv +GSWrHZdGQpRrrSGmpWQmQfLfpVzDfghppzBVLBlBqg +BFNqFzBNhqVwmTtsqVst +dMwMwMfCMWbDtDvDssCC +ldMwMSHHMMWJpRpPLLpBzPZjgnZPhN +WczRJhcWggVBdzPPLnCjdvjm +lSpSTpTSsCCmmntNdp +wSFDCTwsGDqQqQVWWcJw +RqPqhDGBhRDrrhBFmPmbgssZbwbgCbwsmZsQ +nCtjMppjfTpjJJfVZwtzZtllLZwLss +MHfpMWdHpSCSfnSTJWhDDFDFBGqDGvvDBDFd +MCCGMCSHVGNTspVWQznddndg +rttLtvRbrhLZrbcQdJnnQdfddsrggf +BbRqltRtHsNNllNC +ncFpcsLLdFmWlRmnllTR +bMMVzVqMzjNVDblmRTPGlSmmPlqG +gNDDJMVZNCbNJNDNQCbZCbscvBsdBvrRHfcpdQpfFFff +VnWFbZvFbHWhFjZWVJZJLZFWTttpMCspQTTzQCHpgQMgztzT +dGcfdNdGrlRlBDGNSllfBMspgzmTgtQQgztMtzpmcT +lBNdqRsBRdfPNrLPFVVPVJPZZvhj +TLWgggJzwjgWgjgGnnmQnzQfNNNQsm +SpPbBlPBMlvFZpbbBmQGsmCJmCstsdNGBQ +MhSHhZPrPbvSFrJPpPMSbMcLjjqTLHDRTDDTTLDLTqgH +fprRRbbznFbcQVPDdQPdFV +LTvmsLmcsHmvDvSZDZVVSS +jWtmLccssJTLjHmLWWJwnwlBfwnBbllpCBnffbBr +plPBWzbnFLPPtGqMMwlMGwmS +ZQjDHjrQjdjVFwdMvCSfmwMqdt +DDhhrRDjQghHJjhWBbgbTccbsTzpWF +vgCbbwsTbWWWgwBWDGGDqtPGtMgGlFMH +znrznJNhLSLphRRRDlFPMmpFPjjHtMFF +llNcSQVSNcRbvCwwWcTdwZ +qpnJbnRRnJhRFhFHRgQSzHlSRHCCCg +fMBttBvsBjffvsQTtfGTWlCWsSgSmHCzZmLlHgzZ +ffMdjrfdwjfwwnhJPFchhqwQ +NCVSTCVCQCCRVDQSJsqFPsPNspFhhsgjPh +btvtWtcWnpgmFhjmmt +cfnffBfcWcrMdbvMQJDDrDTDVCpCDrGD +fZNhBWFSlFQFjWQTTldHgCwvTvqqdr +zznVzCznmHvnwgdH +PMMbCGPMDPcLbJhFhWhBhRScQZBQ +WQMrDWGHbSWHMNrTQRhghmgPZccmqDLwPqPg +svCzfpdzzdsnslCsnPZcHZPlJcqZgmqPPc +nntVpdpVsfjCHzvnsCzRTBrtWGbNNQSMbTNSRr +SnpDQdBqGpDSBMfQGcMQBDJPNstvJcWNsPJCtJtNRWPC +VrVHrhTHlPHTvvNtbhNRNswC +TzlFHHmrVlgTlTGSzGqpdMGBPQBS +zrCDnrDVCnCgnrHgGDnVVCZsNttQZmjtsmbMqGqsjbqj +TlRRWPSwwFwbSwTTTpNQQqNjqZZlmMMQQt +wvbwbRTLWdFFwvRBTbvTTRzrnznnJrDDCzBczBfHCJnz +SvTdmLNNNdvTBmvmLvSvDpgczzjfgjggpcjcNPzD +VJHQsJVlHpjjpzsjzP +VRlJbJQrVbVHJJPMhBdnBRCSLZZZnvnLvv +tMGcpGtMtLtsCGspLzNCBBmwCzQRzBBRWQ +hdlHFllDdZgDbDDlDHTWWTnzBBBvzmNHzwRz +FSddDlFRqDFqFSdPVqdhcfGMsVtVfLjrfGfjtMcs +RGMWnBMWfCCMBHTDptJJgZStRPmSRD +bqzFqjqcFLNLZZSmpSBgZZ +rFrQNbNBlNcbrQlNQvvclMswTCTCnwrwHrWGsGCswn +WLhJQddCQwRNCQNHczHNzMvZcZvcNc +SlSpSlrpDqnbqDjlGjGGljTjMZZPPMMfVPgfHMMVgVvqfgcw +SbGsDspbbnjTjBldCFmLwFCJLBmtJB +TMDjMvMqMvDTzcmFCgrJCr +ZZZJSZWVBHZWSSZQJhVhWnHJwczGGwGcCCFzwgmzcwFgwVzc +pLHNQSnNJsMLRJds +TsLZGwdsDFWHBZJFfZ +mqhRvqrzJRbmzJBFfgHHgWgHrrlH +JvvNhJmvtDdsNTwdLV +wwnSVSmwtbstznwgbzzVMTNpTNWdlCSlSWTffWNCSN +cFvccLGFGvvGHZflnNTpnZpZcB +GPqGDhGGqrDhVRgbnbttPmgs +rzSZJScLrcBLvjvsqMPZvjQl +nnpDqgDqFTgwqHHvMHvvvTvPMM +GnqCGpDqqVhccLmrmSmCRL +tJSTmdfddDTDJCPmbQvQLHvqqqbrbvlP +zWGsjcwwGGcVVjcGWcNjvNjQqrQtNFFQHHrF +RZnRVsswRsGWcwVBZVtBRdDJgCffTgmgfnnCpfTfTM +FnCrzhTrNPrMcnhMTnZZZNPwDPdbDmdDtwjdtjbmQwDt +sBvWrpppvLBsLRVBfHSfbbQmbwSjStDSwSwS +LVRRRJqqlHNlNTChrhMG +WNsfsstMvtMvNNGPZwmZmqZPLWZcww +rDCdDRCDFQjSVLcmZcDq +bBBHqTgBbQlQRCQFbgqdhvshGvTJMnfTtnnThnsN +VwWBTNQcVzDtrgfrtzzt +LLbpShLGvlbCmLjpGSCSCpvFdrgdddcHtrtGgfqHcDHqrd +pmvLmlpmjbLbpljJPBBcTBBQRZBBVJRZ +cVTcVTNvvghNhvggPPgtCVSpSQmzCqZDRCmDZDZS +dGJMWFsFMFWsnlzRlQzlzqpzlZzD +HdLFssFMsJbnbFjqbhPgjNggcrhg +LLVhQCTvRvmWlCppQfQQjPrwszNsfzNz +BZSgncHgnJStJHJgntMWzGsrPqGwsfPfGPwwwZ +bdBdJMBcShWCLbhWVC +vjdpGNGwSNCTwwRbfnWgQMLjQWMnLQ +DcmFPFtHmlcgpqWDnMbDLf +FZJPtcprHtPPHplZHPZclwwGBSZSvSwCwvZzNdwvvw +CdJLJCJPWPWcbtzJtqJzFrQvBhfjBBvjjvdjpFjr +sBRgsZGDNSBBRGDwphrrrThpHpgHvhpQ +DwDsGBDNwGmMNlMlMDSPmztJVCbVCCWqPqJLmW +LSTMgDSRSMHbMDWLHSvDScwtCGqGrjGrcLftqVGtVC +hzJPmlphCGrCwVrJ +zhPNdNnQZBZBhZnNZSgMWMDbMHwWSDWNDH +rcdvvcwvrHrMZBjHSZ +sDtWblgnltsDFlgFqltCCVQTMTgSHVTfSQfSHj +tDtRWFpFbWWWWNNDWsNqWvmzvhzhzGmzjjGvLwJmpc +nFSSnnbhSfgLSSnVjdjfHMgfMzGzmqlNGGmTPlqqTzTNNzlT +pBZsJJvccbBmlWGlNb +cvsssvZwsDwrDdfFgnbDfVbgng +mWRNWNCTdwdCwhCddbWWmhsZVgJQJBVBfsBsJQLQBLJb +qFFlGzFtjjcqzHtFtlRfVfsZfQHVfBHQRHgf +jqGjtcDnGnPzFRlzrnMdWrrCMMddNNWT +MHWCjjGMcHhbhPDLphHQ +nRVJrtgssdLgCppvLQbg +RlVVZNVRJlsstldsBCNlczfjjSZmWTcmGmTSfmSm +RTHqgTgMwgnGTRzqTHCGfdFdfhmBrJrdvbFJMhPB +lNZNNNLttLWJBPBdZBFmdZ +SppscpLVStclNPWtCczqnQQwHTTgCGwq +hSHRCbZRSZhbRZBctnMVjwwtWtwh +GrdFzQrDdJstjcWttwsF +drPJLDPGPvDvzrJPQLdDHpZlwLgRmwCHLpwgSbff +zMSSnCtCdSdCtdfMdHMdtVBDjhWDHBqbTVVBqhbDjr +cPNhFFNRlNDlTBqjlTBG +RvmvRpPNRgwgPvFwhmdCssmCzdMshMmL +tttjgrpTwmCgCwgwrrlrHzbzqqFNzdJqqZnddJwNbh +cQjMjPMBfcLBSjGQBndFnzNdNnhzzNGFbF +sSQPLMfVPBVSfBMvVLSPfHCttDjCDRRtrVVglgpttD +vdTvdpBvcTPdSSvCLrCCDLDCQGDl +sRfnFgmFRMVsnqgRmqzmrrDBDwtHlLHtrLCDGL +qRMVjJgRFnJfMssMsgZScPJpZbPbPPWhBZSp +ZJgNJhGZglMZZFDTPSNqFSqTSb +mwdvwpsjrcjBvpwFrvbHcDqbWHRWDSPWDHSR +CsvpsLLjFzhlLGFZ +sDNQrMrNfrlQjJRgGjbTllHG +ZRhSnWFVSwBtFRBVvVgHgbzjgGTJnngmGmHC +vWZLShhvZLVtSFSLqwVrQdqpcqMDddRNQMdsNP +hQhSQbbwtHzShwhSQPbJRsLwRCjJmDCcvmqCcs +FNdBTBTNMsRqqCjTjL +GNdrdMBVFShhSLSGGL +cZzcCmjjcvdzdWqgWTZgPZgZhh +wSwVGSJFTffgJTNh +FSVpVlBMShzbjzcpvp +qqlblClRbnTvqTmRqlmnTwrdfdwFFNrngfddDBrNtr +PcLcQLMVLGMzHLMchhLcjLFrrNrBfrfFNJtNgJDDBNzt +sSjjGcGQscSVSMjHVMSVPSQsWmCmppZCmtCWbbWTlZTqTl +qWlVJmDJHWJHVJlsdVTdhbFNNgFhwhhhFhwwZg +npjnvQpStCQLvBpPnvtBtBpGSGbzbGDggGNbgwghzZNGGN +jBvLtvjnrtMDmmDRTTrsWc +pmwdwzJtFmmlpFsWwtstJPGgvNgCCLWCvPgNNPQCQv +RfbfTRBnRGQvPNnncc +ZTbPZSDSBfSBVSbbBRbbbtrFdtlFmVsswtFwzdpszw +hVphQcmdcWWprWWhChFQBsfHjDTTBCHlSsTSBgSH +vqBRqqzbqMZPMwSTDjJjlHDllgHZ +PMnMLqtMnntQhWBccthB +vqqvCSvHSSwqvqCddnvQFmNbVjbJVVmGNNVHNNlH +pggrhzWgptWhZsmVlFmgNNVNbj +RzpMLLhhphtzrRrSSbQTBQwSTDBwQM +DSFQDlDFRddDHQHQtFlDVsVMTzrMCLSWZLZffSzLWrfCJz +jjBBvpgmbppBPbMwBBBNbbZWZzzCCTzzZgzWcJccLzWz +bvPwNwmpnBNhPmqpPvnwwNmtRQGQMdQDQlsGVVGhRlGFsl +SfJJwDJgpGdSGJNSTwTVJDRbWWfLtCWCLtRLHWrtbWBf +cQQPnFhjjQlczhqllhszhqsQRWnrbrHdHtbWrBWBbtvvHBrW +qMqqqqzFFmPjmmsFjmzsmhjcDGSZTJgTdpZwZgwSZVpMTNVG +czrcHMcMJtCCPnpFmH +DwGGlvLljGmDRdwLdLjfhtFsssnFVpfttpptsnFPnp +TlRTghTjwTDRTDlZZQgWMMrMJMSZmM +BzdNzNdgNNPfgdNsdQdNvVMLLVQVMcCRCMRmvCGc +zHpplwwZrZlqlWWrpZwqlHhLvqMCRDCGVmLcqGMVvCMmMD +rWrjwWwHplZbwpZtHtJJbgfFTfsNnBbsfbSdTzgB +jPRRppDLDGDTLLggMMjpLTGcrJWHsttJfwnWrMvrJnvnrNfJ +blqbzBdzmhhbQWnsNHtJvfssfd +lhFhzSzzSZVNSlVPgDPCPCGTRcGR +cqWcNWffPftvsvfpqPtZsBzrbmbFddBmbcLbdDHbHz +TJgljTnGgnLBTZbHdBFz +JgSnJwSlgGJRwMtfPtvfwsZQZZtv +hHhPbQPTwsdwdHqtgttjpNfjDt +FFlCmSzRCCmlzzRGCFNvRpvjvtZNZqsRfNRg +mVmsFMGFzJFBwQTMnMQndd +QQVpQGcVdGmspHHLtbqfqfbt +JvZTFDFzJzhFCWCZZDzWPBCJfLbnnwLqttnsHHNPwtbHLwjn +DssTMWvvvGMcQGQGld +sshRHZSZRbSZHhBFBMpMWpFgbbtb +JfjTjmwwTPvfTNPTQlmFFFqqmFMBBqFgFt +vDTvJffQTJjJvPvTNSHRzhCsShRRRDtZHz +NFLsRDNNDNBDlgPPgBglQlzj +HJhdZpfJzlWQjjHw +ffJTppZZqTNlGnNsMG +ZMrWcWwqqvPZMndGdqlnnDLnVT +HpCsshCfpFfHHJDDSlSVQQGGflDQ +zssNzRJFhjNHNNHpJRwbwMMzWWtZPcbBbwbG +HlNHHLHsBDRpHLlsHRlJnMhfWZMRnvCCCnWhZj +wtqSmQqttzSSQdPmmwZhChJjWJjPggCZCfZJ +SSwtTbTQmbtdqmGTTcfqzDLHFsBLDGLNGrsBHFGrLB +FFDvWznMWWMrPnPnWPgsmgQbhJRslHbwHwVVsVHjBsHb +ZtSffffpdLqpSCLfCNqfLqLCjHjHbwhpBwJllHlRVQllphjj +ZcNCtcGSctZScqfNGScLNcczPJFmzmDzGzWnrWFPFWDvrM +DnTPspmTPsTCDQWRZzZzZRCRfCfHfh +BNcqTBcFgbVchVJhVR +dTwdrBrwTSPPWnnmSmsn +pfbbDbHpNBFmQbpNNBSlLtlDStSdSPJLtLJR +ZcszvwgVCZswFzVTRTlTlRLgRJSWJR +jzZvVwFjcjjnwvzwZcjMpqMpbGQbQmhhHhmfHQmh +hTbddhQCtdNmdtwtdhTBbCddRSWscczwcRSWLJzcFJzDsFsR +NflgfPZPcgSLJcWD +lPVNZMMMpZlZZvfrMvpbQHQhtbtqdTQHthrqhd +JlWSStwhWJSRJpJvJBjTwTqcwTsDjsCTCB +dqFzgFZGGQNVmTcCrjrzsBrB +fdgLFQLnPdnqShRMPhlJMpWW +TMPcsPDjdDhsDcDcTTTDvdvghBNFGGtmNrSrgSSBGNtNFg +CVCbJqlRVVWWpRqRQZRWVWJZBtmSFGNmggGmtmmBFbrGMGMt +JRqHVJVCRLZWTjMnfLTPcfLd +TRTZFTTrghrZVhVWdWZpMmbzbdzBmtDpDDzmzB +wcsSSsjfPfGPqQwqsQcfJJCtJGpppCBJzCbzJzCb +sPjflcwljfjfvqNcTZTRhtVWrNrVLnrR +rVLLsmwmCWTmsCTdwQrdTmqWDjDHjNGNPbjDBPNDNsZRDBjH +cFcSvgJvfhfLnShtMJtPHRRvRbBBGBPNBHPbND +hgLcgcLpJSMwzmrmzqQrmp diff --git a/src/bin/day3.rs b/src/bin/day3.rs new file mode 100644 index 0000000..3cc961d --- /dev/null +++ b/src/bin/day3.rs @@ -0,0 +1,70 @@ +use std::collections::HashSet; + +static DAY: u8 = 3; + +fn main() { + let input = advent::read_lines(DAY); + println!("{DAY}a: {}", sum_priorities(&input)); + println!("{DAY}b: {}", sum_badge_priorities(&input)); +} + +fn item_value(item: char) -> u32 { + if item.is_ascii_lowercase() { + item.to_digit(36).unwrap() - 9 + } else if item.is_ascii_uppercase() { + item.to_digit(36).unwrap() + 17 + } else { + panic!("unexpected common character: {}", item); + } +} + +fn sum_priorities(input: &[String]) -> u32 { + let mut priorities = 0; + + for line in input { + let (first, second) = line.split_at(line.len() / 2); + let first = first.chars().collect::<HashSet<_>>(); + let second = second.chars().collect::<HashSet<_>>(); + let common = first.intersection(&second).copied().collect::<Vec<_>>(); + assert_eq!(common.len(), 1); + priorities += item_value(*common.first().unwrap()); + } + + priorities +} + +fn sum_badge_priorities(input: &[String]) -> u32 { + let mut priorities = 0; + + for group in input.chunks(3) { + let first = group[0].chars().collect::<HashSet<_>>(); + let second = group[1].chars().collect::<HashSet<_>>(); + let third = group[2].chars().collect::<HashSet<_>>(); + let common = first.intersection(&second).copied().collect::<HashSet<_>>(); + let common = common.intersection(&third).copied().collect::<Vec<_>>(); + assert_eq!(common.len(), 1); + priorities += item_value(*common.first().unwrap()); + } + + priorities +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test() { + let input = [ + "vJrwpWtwJgWrhcsFMMfFFhFp".to_string(), + "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL".to_string(), + "PmmdzqPrVvPwwTWBwg".to_string(), + "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn".to_string(), + "ttgJtRGJQctTZtZT".to_string(), + "CrZsJsPPZsGzwwsLwLmpwMDw".to_string(), + ]; + + assert_eq!(sum_priorities(&input), 157); + assert_eq!(sum_badge_priorities(&input), 70); + } +} |
