diff --git a/input/03.txt b/input/03.txt new file mode 100644 index 0000000..1bba85e --- /dev/null +++ b/input/03.txt @@ -0,0 +1,300 @@ +dWlhclDHdFvDCCDfFq +mGdZBZBwRGjZMFgvTvgtvv +jwwJrzdzGdSbGGnNlzWczHzPHPhn +cczcbMBszhzzDBTBPPPGjtvtlt +LqJLfpwdLnvQLRGQjGtj +gSgnSJJCGSGpGSrwgfhchmmmHzcrHDmbrmMm +bVjstCsSstCLCrbSLnMpdMndcLddcqcpHR +wPZJQJwtBfJZmgBwPTcpTdcnfHMppcGMdG +gmFJzwPJJtszvNhCNC +DmjZDMZWDqGRqqRpHmmRLTTNTPTfCQJQQLJHTClc +FtzfvrfFwVgtzztgBLJNcNlTcTVNNQLN +vgsdbzzrwtqWfWRpZDdZ +rJhqRhLHhdcQqdHqfQGfPGstgGPlWttM +DzCpDDmnNCmBZBZnVBmZzBGPfsbglfNPwgPGPMWsWWft +BZFnlmpBpBzDzVZmhFHFrrrchhRqTdrc +DWCCWFNqdGFdPVcb +HllttQsTRlJlsblrHlhdmPLVcVcTccndLvPLmL +HSlstHgJltghhRrzNBNDzSwMjNZwNb +dzGSHCWSsGVVSdHVHHWWVVDCgJDpQqLTTRJpgmTLRmJTTpTR +BvNjMPZMBtBBMvvNMNttlhLQqCJpLmhTRQqQJgRJLQQg +llNncBlMCwwMnwPZrGsVHzcfFGdHGFGs +JfZhphMMQmFzDTDjSdrQjQ +sqHCbCwBVtbqbCqtrWdjzlSJTlrTSWBn +bHcwbGCGRssNscwtHNbwvmRFvpFFJFvLZMmPLFfv +qBCrzznVmDCmMMDNgrgcrvHHcgbQcW +TTTsdJRTRhhlsgbvbdCFdbWvbQ +JhGGlfRlJsnCMDMqjmfV +rqLLvDLtStDLQhQDQrQhhNdsmWdmmjjnssPnTMnTzfTsWT +ZRFFpgCgppcBcnjTsjTMTfPFMP +GCZpGlwJwBgGHcJhSSHLDDrNqrMtNq +FsPFqsDNZFNnZrcBmWfWWQ +lSnRlRTvgrWtctTmft +SMbGbbvnGlnSDwGqLwNCqNVD +dPQDcBwJJDgDTPgGgQTBVjSsmLhLTrLmjSLpjSLh +MvvZRHtMtbCNvCNCNtNvbRfBSMSrjmLpjnjmVhrVSLsnnmSh +qHZtbBZfRztbHbCzNRHPQgJPJgGgglFPPFqdQD +MsBsVDspRPfPlhMl +zWnCFzHbSCwqNmPSjmGlsmfN +FnHnFbFzsHHCCgzCzbBptVppgvvVgVrpBrJt +pTLntptZjQLfVDjQTDlVJCSWNCPSCCsSNmFlNslm +BBHbqGHHqgwSWSCCWwZWWZ +qRzbhhbzzrHdRRHhRHvzZjfrVTrppVQttDfcQTfp +DHsdHPHHsHMsRmhMZZQBtljgZGtC +NFnCbFznLVJbVrjhQthjGBLZBjGL +wNrfFJJbCpNnfbdwDSDHsvsHmsmH +jLZRjnMMjJhJnvtQbdHfHZbvHQ +mBzwptCWlcFCwsHSTpQfQHQfrpTb +mNltzmsCNmFzGwCBllGRgRgqjgLMnGqjnPjV +ZqqcqmVVtbcBMFfFMcQfgphJ +HLWLDvWjjLwTWzzvGLThQQshQllgJDJgfbffJQ +vHzLvrwwzGzTRGzzLLRPRwRdSVdnBBdSbBSVStbNmnrmZS +TWVVvPSgwWSqcRgRwbRRcqshsfFzzzChTGNHzHhhhCsG +njZrjMLlpmDmGfSGtrNttzCF +ZQBmZdDBZRRPRSBgcb +TpntvdpnZDptnbnTDGtSFSlFmzCzzmSFRjqlZj +MWrNcWRMlgqzMjzq +NPwsPNrBNcVHNNcJHBNBcJwwttDvGVnDptVRtbnTtGvVGtGG +tsbbvvSfnqvzQLLBjfMLdd +gJRmRNmJNchgmmrFJhFgWJQMwBnjwrMBVQwQTBdLdVQj +GcGpGGRGJgqstvpbnCqb +rsHcrbZHBTTtLtNSwwHLLJ +mFqhWVsjsVCjQlNJGMwMlMMGMh +QggzffQRCfgVFWzzCQffqfZpZDcRvTTBTvvZnsdnddcn +bPFMFFBpMlFfMZMpHGNSrNctJcPSSchJchPt +zCgwnmgzQDnQgdWWQRgqSrqLSqSgssLNJhgJ +rQCQQTrRRmDBFfbHBFHZbT +fzfPQsGrrMMjtHtBHs +SwNNDqwhWpVTwbDGGDmwSVhZRZHdbCtgBjCRjMtbBHtRMd +vVTGvVGNvPPvQvfncJ +cwzMJbclHDPqfJQPfq +rrqjjTBrqqBjRCgTjrRjNrsGPDhDFGCfWGfPFfFPGWfD +BZTTSTZgjbSwVptvpq +PPPPJpvpJsJwPHHPsJdTNZRZZZjTFFmRRRNjZd +qbWVfChDCDnVVDGfnSFNNjRLmNfBNLQjLjmBRm +DhFDhbnWCDhGcbJPPwrsrMwrvlvc +lFSDTwHTSwlTNwFFlwNcFFpjLZvZqvnqLPnnWbgngbbncqbZ +rzQfMzRGrRGJCffBMGdGsJZWWnqWVqdPPgNvvVZWPWWn +RJrttBtNQCsNzTpShhHFDwFlth +QNzQFjNFrQPNbmPpqTTDGswWmB +ggHRcSlcCVCSzMVqDGwgqTWpsmqwqG +cltzCZtLClHRRtMZZLQjfNvtrJfhvrddvNNd +mcfWHffBFnQRQlTFdv +wssSLVbbzDVbzbggzSzNshNMnvnljRdvQRlMBjvQdnCj +bhDzVSSJDDJhDLBwtbDzzbbWppfpcmWGmprqqGtqprcHPp +rpVFrZpgHWSZrFPqhzwcqPwmcVBD +vMTnQJjQLCbljvvQzTMbTjPNdBLwwDhmhNNqPwmmhhBh +jvGjjQJnrspGHgFz +sjssjtZlcphZHwWvcrHTwWJH +qDdzzrFNNNDGdFDzzVBVVvfWJPfgPmgWPgvwVH +nqMQGDrnLGnqqLNqjtCZZjsMhZhCMbtl +JJJsLFmzsrFlSpzPscjgHhnRnmvcjqRvvj +fCMQbCbTjjqTGhjc +bfdbWdCddfBbtCfbfbqVWQQpPlBrJLJJSSLwppFssFzLzp +pdbbzlffWtJbgQwhcphQcCCg +vHvLFvVLvSfFRLnRFRNHjPjggcssQcjjsnwhsPCC +vGVGGFFVHLTvDRHDmBbTzfZWMdJZlfMm +wjCbjQgjTQhNNzgWQCWrDFMZmZDZDCrrMDpLpL +czGSPznnRGGJGGlVVRVBGGlBmDDcMDFDDZLqfffZFrrZqFpZ +JPGlvBSJHVGnVsjvQjjzwdwjzd +MFlWQHDTpnpsFNNQllWFWlhzjGgrgDzGGhGGjvmZDZrh +PtTPcTLbBCVPTRVcvhjmmhVhSZGGgvZg +JLPfCwPbTbBPJCfblplMpqWsMpMwWHQn +QbHVBBzWtzHBNtBwQSgqhqSbFgRLjhmqqj +ZnCnMcdsDnJTncggFJwRmSwgRFmL +sTMZpGDvsZcMpcvTCPHwzrfzrpzHpWBrWz +PMdJWwJWHFWJnNzbDlfbCfMvbl +rZgttrFptFFcBtccbbCDvgfbGCGGgGDz +QsZBmsrFscrVrjQJjJQRJWWLwq +GwNNJwwRThwrWfhh +SmQqmzsjHssQzCbvsmSSzsQTjWpFTTfFfThchhFTBBfppB +mmbHbmtmCzzQZzQRdZJhNMdMlRMglh +rrsPbncQvvgnnrTdGDVcCdpZHHZp +RwwwhjLLqtJFwjzwtwmwwGpDZVdGDVdZBZDFHdHZCp +zhzwLhhfffLtjNChgWbbrbnMvPrMrrfv +tQMtQtTSBFtSmQSttMggMtbtnTnPrZvrnzNNTGZvrZZdLdnL +HqhwDpDcwlHqpVrrFzvFGpZrrzrP +RwlhhjwRCjVfjDbMtFWBWJMgWjWm +WpWVlWzsGlBJpspNclNlhhhmgzrdtzQMQttzMmtt +RfnPRLTPDHRdPbwvvntnSrFgmvnmtm +CwqRDCCwqCwbCTqJcJBNcZqdVcBlpJ +tpfnNBsGGNRppRCgfgRRCRQJGMPPWdwMJdWFFwjVzGPJ +chLSchLTbLqvqcZLlvvLqbmldMzFFWdzVSFWFMzQVJwjQjdM +rLqqcjDrcvhRsDfHDtNNnN +DjZjvTTDqrtTZZSMcdRdmRJrcJNc +HWgPGVhFPgnSVtnJcdMs +FPLfBwCWGPfCwfLHCCDBZlbDpBjvqTtDzzDj +FJNqNFgNFssqGGqBsTlMVcgVrCwLwlhcrw +fRZzDmDZvvDdZbtdpDZmbrThrLMCvcChwwlSTrvMSr +zmfZmtZmpDmbfWRDDZdqFljqnNQjGWnsjFqGsG +rMdMWddmJmvdSdmWfWMddpVRqRFVHRRqMRRPQMRqRq +tDGtGGhLjLLZNLjjNgNthGtqHTVqRVVpPDRpHHVRQVRPPR +ZlLtzNjgsZZlssLgtjNpfWfJvlJrrvCJfBmBfn +hqpWvFJsJFNHhqMWNhWvWRmmDcDMLcwZnjcwnjRnjn +LdrlgCCrSSTrTnwRjmwRQZwdwG +PVlfClrLlLlfggtBPzHHhHFbWzJNbvqJFNqF +TbbQtnDtbGGjGlGsGHpJJmFWFJJrBWWFlWrS +CZzzNzzhddNchhMhhRVjpCBwBrCvJvpmSCvrwJ +fhZZhddRjRgZzMZRzPjPTsLGQtHLTHTbDPQTtqPT +nHnWsQNQQWTWQshwjBJJJmHwFBwm +VZZpfbffZVvbSbGfBhSwmtmmJlmjJFJJ +bpphpMfMvMzDbMGZgQNrrngzdTsNqWdd +VPNddVTPPmdnVcPVZcdTmcDbQTFjMpjtFzbMtFjzsFTssT +lJCllWCrgvRlgwlJfRRvSzjSjQpbzMHpbwMQpszM +fRhGBBJJCgrNLsNPNVVhNq +pLrVDgbNbjVplpsltHBqWSqhSQcHDttH +MCdCwCGTmnTmmmvTTCwCqNhHQhRWcwHWBRHSqSQH +TNTFFPfffTvFTJvTPCPTFfGdzVjspVLZglJbsbZpVblrzjlb +cdPzFrldgcdCrnlznPzrBNRssLLBbVNVZsLHRHdm +wTQQwvvtqwqcGvTZmVHBbVLLBbRV +GWJSGfJWcjQwhQQWjqJhhGfgpMnMzDnpMlPpMnDlMrzl +pMhqTTsSpdBPpNBshsdMMTQFvFlQtQWCRQlCllVFqVqG +dfcbnmrnjzRFvGQQGvfv +mDrjLLLcJjLhpZSSJMdpph +NGZNwqFqZhhcFSCfRzwdzRfCzVRw +QTTmBTsWQWJPPCvzvpHPzdvVFR +bsmWTBbQDbmbLQQMsWWQchgqLqhGGGGZLhSFjhqS +HgmGlgsvBBDgBGCdHHvHwCGwhZJWhTjSdhTSFFFhJtSJTJhT +RQfVrfQNszMQfpMzpNnfLbtjhtSbWJWFWtFFtFJtFSZq +PNzLfnLnBCPHgsgC +mTZGgCdNSNmCQLLpPnDhRlGhpV +vWJHWFsfHMWBBFbBsjfjHrFfLRRLPPnpLthttRVPLSnhSPbS +fzMrBjWfBrzsZCZmSTgQzcNN +mgmCZCMgmnZmZgBZpgpJfbQfwSQPDTdfdwSDfwhn +sHhcrWLcFlzHcHRNNFvNFcFPwDDTWdddDdqWbSTWDPTTQS +RNsslsRrNcRNvNRFFNvVsghZBJtVCCtCtGghjhGBGG +gchrcRRdnRwPPnvQ +CVCCSrDjFHjVDbBLFGGBSvwnwNMnMsPPNsNPvwPQVM +lHLCTHGDCbbjFTTzdWlpcqfgcrdzZg +fRDPsDsqqJttttJSzPDgJWQCbQQbGMWCCnGGPVGVQQ +rTTBvZhrvBnWWDWCbZWW +cwLlTLpjTwBFLLhgfRRfmRqRDmRdjq +sprGGPTrJTsGPzszqGzNtTtpfbQddQSQSDFDFvvbZvwFbbfN +LWWCMVmwMmgWFQfFDDvZDgdF +mlMmRVCWVMmmHRjVCmjHWRhMzpTtlrlPzrtzwlsGPrpwtrJp +tsfwwfjfdfrtrClfvwvvLnTHNmvLHcNccRNcvNWH +qQSqZqFQRBzghDFncHgmccHNmWcNmM +SQJphFJzRDSsdpVlllrCrw +vGQqLQFvBvLvdNnvjnvNDc +TRJwmWmZWlCCmzznbNhhbDhRgj +CCTtDTlmDTWTmDmZZlVLLsFfstfFFLsBLQfF +cfWflMmWWlWfPWBhBlQtLmmvrrrvCLjvRTjLLwwr +gSgbsbgHdsjzHbqbdVDLZLvTZwLTvSrZrFvZLw +sdbJqDNdjJNdsJBpBWpJlMcfcB +FHlMHPqDLlPctgHSnttCSC +zhrmBrTwJTjBmQcSQvQqbtwGvg +jBjmBmJjjjRZTBzhhrBJLDdZqfpDMdfWWlDDLMlV +zPVdbsBzZdwqJGhrLTvNNJqH +tmmCgCPCDDnptHDjNvGvhrDvLv +pRWRlpSpPllClnpbQVQwFFVSQFVBZz +nDrCvmvMnMSmsCvblBzzCZplbJlTbZ +FNRtFWRfcGqFGQbzlZTQqQTBbd +GRwFfNtwFRNFGMvBsnnwMMMBjn +LVTBjjlJCDrnJzJNQR +GsGGsggGpfhgpchgdqzbMzzhzQRnnMRrNzzR +PwWFqFGpwWpdWgfsGggdmjCVHPHlCCCVZNCjVmVj +qVTsCWwbCsPlCVfcbvfPDgLzbzDDhrzRrjgZghgr +ntmHmNpSQNGtntNttmSdSdBdjrrDLQZQLLhRrFFFRDTFZhDF +mtMtBNTSNBpNJStMGSdHppNcVWPsWvqVcsVJfwwqlqWqlc +vvWzLvvdpZDvhTpcrLcTTLpdwSPnCfJwCMnQSMwSnCGJrnwr +ttHVmVNNsHBBRsHbMMwwnjnjBfjJwCMP +tsVllgNVqbRlfplldDvDWT +mLjLsQqLQqsBRvvlRBLRlT +bhgtDDhCtmptmTTS +nfmdbggwGWrfsPzfWq +JpWDcSGJpGzsHPSSlbbd +wVRqVZwwRwPDwbDddH +VtVVVLthLVtVgfQLRTNtqDcCcJBmmWMWWprpFrcBJWNp +dhhhDtmLdttdPlslGlRFjfzBBpzzRpGJ +QMrVMwbVrrbvVVCrvcnqQQrrSMBJfpjFSzfjJFMFRWSpjjFG +cwvbHHbCqVchRDHgDsPTdt +CgVNCtDsDtJGZZGqMMGhDq +cLRnSHgWcRdLHWSSRLjQdlHBTTPcPwwhzqzTMBPTwhPPwP +HnnnglnWWgdRjlmQNsNFmJCFJFvsJsNN +hfccLbjhfSRbfDZjFRJzrlvlwwlnnFrWwzqr +TCsPLNtQdpdQQVtVNvJNJWlzJzwlrvJl +pHtPsPtPtCQfbRHHDHhMLh +nWRWgLtWnfTcZNNsscfd +JMGzMVJwMVTvzVQFGHMMmPdddsPsCjldlHPcScNPsP +vGrMQQmmvTQzMJpghWRWgpbbBqLbLR +WSbhFbPTpRfTfPdhpfbhSbfPQLzlQlzlHvtQsvlltlsgHdgQ +pZcGJDZNGcVrJwrDrrnvtNvlNzsgtgzvvsgt +qmJZZJcBqwrMJcVbWfSPPWpmpjmSCF +jHVjjCcpNrDgjsfB +ndqllRvJQtqlQQTRWllFNDrsMZBfDBLvNMNDfsbZ +qTFnWJqdWRdqWRlnTRnQGnTmwwSHCzpcGNmHNcPVcHGmCz +pZCpBhDfvgBVZQGMMVZVlq +sLsLTTSssjPnTNbFGRGFPVHqMMRF +TsNSccnjLdcsLjdmjWvWvBhfmvWpCGhGhD +VWFFFPMpPVSMbTppHTnHTbRH +DtvfNdBNddDNSLjsvDTTHnzzHwrTrwsrwqbT +dgBLNffdgjjtfBQSvgNjNDlvMcQJmJJmZCMmVVVZFPFcPMGG +VWsQLHMVVSNRShWLhNSNLjbbbddbpDZDddcbZdDRztpd +FPlhhgPvThGFJndnnCCnJzzdCp +qrTfmllGvfvGqwNMMMsffsQsNh +NsmFqNlmnQRbCFsmJgSffpPcbvSfrVvpgS +LhZGDZhhwtDHMwDdHGhDjDpTzzPdzgTvcPvpSSpPrdrv +jgHMjBLhwtZMHMHmJNNJNFlBqlBJNn +bznSQggscgMcSTTfJbSQzQFwClMhmCmthClvMwFLwhZL +BRWBPBVVPjPNVHpVqlqrvtwFqmmLqltZmL +WDVddNHNvRgccgsDsgbT +sNgnQLtLLLPPnsPpqdqjBclpGWjcWjBG +rVCChSZhVrrwqVDVHSHmMjldGfJGfHddJGJlfGjGJj +CVZmDvZCmmhFVVrCgTNbbnQFgbsqNqNQ +WmMmSSfJNRRPfJRMRMtllCgdStgbgttgCdDd +QGBrvzwBczlgqCtDbvDq +QQpBGFrLQjQzGVVRNjPmNNWMbW +gGljnJhnJtllpNVCHWcccdTdjdmB +bLfSQDSMSHmBnwCB +LFMDrbFfFQZQRzLZnbgtlsRGtltpgNhgPpPG +cRThZZchCThtgTRhZTRtjWFjWNwqCjGmwFjqqffC +DPDPGzPMHDbrpqjfwrjqmjmp +JVHHDdVdVbvGMdnVdQVdDbHcRZllhRtgStRLThRSTcBTvc +lQWPSBrrPZGgPglGssDfHnWsfDFHHvHh +TDCqpttptJNLtwNpbwTqzqHshsvsMMFnmHMNfssmvmvf +JCjqVpDtrBjQjrlj +wFGWGpFLvCczNSWWsz +tlfgtftjlbtHHlDBsBzmQQnsQDQsCn +gjfrsVqVgPlfqhvLdvdwZhGq +pHpZHBSvRvRCBBZCTMngRnWndnRmWcgg +jsfrfrjJFDwDDMMggMCGWGcfmG +qbCszCjtCjQsQrtZVBHBHvBvqLZvlp +scFzsPScNgNPNgQzpttlCBCwpLrMLCrDdljLwq +TjfGZZjVwMZwMLwr +vnGbWTvTmFRjQFQPsb +bVLrzqrzJVgJbbtVrWJVgppcBCzBvdzwBCCBHDcBvc +hflPQnMQmQSRlQMPNRTHwwHHHqpHpdfwdBCp +hFhZMhqSNMNbrZgWWGWJjZ +NJsgNjJlMHQrwnRgSRPwrP +tqpQtTFpFvbGpzTTWSrnSbrhwChCnRfrCf +GtcvGqQpttzcqdFzWppDsZMJjBBsBJcBNmBjMsLJ +lGfZGZhFfhdSWqmFFWSS +wDRDPLcDnjtWbSmqrSCSLC +MPwmtVnVMjztznHPgQhQfJfvvHHGggQZ +llTspLllCHmLHHndldqHdlLQQPSBQczZSFDDQZSNGcGG +jMhwvVrRjbRhFBZNGPcGNN +wVtrrtRwrfrwftjVjwWvMrRpsqsnsHsBglslCmTsdWdHTd +vPvmTGgDPRvGpDPGPqGHQnWJQJMBBzJBlBQWlHWl +bfbwNsmwFdLjbfrrLsSfLNQtMllznBzJQZMQtMlZZnnF +frssSscssNfScCjfSCwjsDmRDpGmDRDvvvVcvRDvRp +LtlPZPjBTbWsWJVJVzdT +nnprqhrqmzfrSrphqfCChVVGVDJWgSHHWgWsRDVHWd +nrmppNqhcCrfMchcMCncqbzPZvlvlwbBNjPjtNjZjL +FPWsFdSspVbbbtWVvl +CCHnnfHHvCwtVMhzlzDllC +LrGnjGfgfvcwfgrLrBjrBLgwdBTSRBFsRZdRsSqFFSFSSPPp +whGCLqsrjgGhhGFqrCCFGCGzTRTZJcNnzlLTnznNHcnzTH +ddvVmbfvdvVbDVQdvvdSzpNcnJzlzSRHNJpnJcSc +BPdvfQdWtPDDPfDvDQVVPmbhssCGGMqgFCFMqGMWgMjrRw +PSLbGmWPSPLQbMTPWGFWltthdDdrmBDHhdDdczzDRh +VfCngVfgsZwCftrZdhcZrdNDzz +CjVJJJqnJwQhWPPLQlGj +ntnnQmTQTQGVWGNGNNlClG +jDffjMSvqjHzHHzwNVwNVcCddPVNdD +ZszJsrrZMjsHqqvZJLRQCbTRQbJmThbt +BgLHgFDsJNWgQgflWd +mnVVcCHnCGRcVnZSjmlthftMQddlfhQctNfW +qbSGqmHSTFprvpvTTL +dvdTMvvpdLpTcSLvdLLMmhfFBftwCNhRwRNjtCTRCf +lshQWgsgrHHqlFfRqFjRFfFwCB +rsgHQbJbrsGHHlgQHgJrlHrPZdhdpMZGDSDpdPLcZhdvhZ diff --git a/src/bin/03_1.rs b/src/bin/03_1.rs new file mode 100644 index 0000000..8e49d2f --- /dev/null +++ b/src/bin/03_1.rs @@ -0,0 +1,42 @@ +use std::{fs, collections::HashSet}; + +use anyhow::Result; +use itertools::Itertools; + + +fn main() -> Result<()> { + let input = fs::read_to_string("input/03.txt")?; + + let lines: Vec<&str> = input + .split("\n") + .filter(|s| *s != "") + .collect::>(); + + let result: i32 = lines + .into_iter() + .map(|s| s.split_at(s.len() / 2)) + .map(|(one, two)| (one.chars().collect::>(), two.chars().collect::>())) + .map(|(one, two)| one.intersection(&two).map(|c| c.clone()).collect_vec()) + .map(sum_priority) + .sum(); + // .for_each(|s| println!("{:?}", s)); + + println!("{:?}", result); + + return Ok(()); +} + +fn sum_priority(entries: Vec) -> i32 { + return entries + .into_iter() + .map(char_to_priority) + .sum(); +} + +fn char_to_priority(c: char) -> i32 { + if c.is_uppercase() { + return c as i32 - 65 + 27; + } else { + return c as i32 - 96; + } +} diff --git a/src/bin/03_2.rs b/src/bin/03_2.rs new file mode 100644 index 0000000..348e7dc --- /dev/null +++ b/src/bin/03_2.rs @@ -0,0 +1,43 @@ +use std::{fs, collections::HashSet}; + +use anyhow::Result; +use itertools::Itertools; + + +fn main() -> Result<()> { + let input = fs::read_to_string("input/03.txt")?; + + let lines: Vec<&str> = input + .split("\n") + .filter(|s| *s != "") + .collect::>(); + + let groups = lines + .into_iter() + .map(|s| s.chars().collect::>()) + .chunks(3); + + let badges = groups + .into_iter() + .map(|g| g.reduce(|acc, e| acc.intersection(&e).cloned().collect()).unwrap()) + .map(|g| g.into_iter().next().unwrap()) + .collect_vec(); + + let result: i32 = badges + .into_iter() + .map(char_to_priority) + .sum(); + + println!("{:?}", result); + + return Ok(()); +} + +fn char_to_priority(c: char) -> i32 { + if c.is_uppercase() { + return c as i32 - 65 + 27; + } else { + return c as i32 - 96; + } +} +