diff --git a/day3/Cargo.lock b/day3/Cargo.lock new file mode 100644 index 0000000..4104d70 --- /dev/null +++ b/day3/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day3" +version = "0.1.0" diff --git a/day3/Cargo.toml b/day3/Cargo.toml new file mode 100644 index 0000000..898e70d --- /dev/null +++ b/day3/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day3" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day3/data.txt b/day3/data.txt new file mode 100644 index 0000000..039c2c5 --- /dev/null +++ b/day3/data.txt @@ -0,0 +1,300 @@ +LdHVLDLDdHdtLMhcqCqGWcWg +ZZQZSZnnJrQrJQJbfzfnWGWPWMcChMMPcqMnhFcF +ZrzpWzfbpQpWbzvZWZpdtVtDNmRHNVptNDHt +gzCjffWZCtCfZZVdqVSqJdvJndSt +hMHLcmGLMLhHmsRMsSvsQSqrsrlJTTdV +NPNGRGHGHNLczNzzZFWSFFCC +VSBpcvNNbNWWSfGRwtJnRtrzzGzGGn +jZlhTlQLHFLLZbwrzQQsttDtbs +hmmPFlhLmhLMgFMFLbMBBgcNVcfNCcfSVSSNBq +jRDSzjCjjMRMrHzMRCDHMDjBnlQbbnQwLwrNLPwnTPQrlc +sZBqdZqsWgFBpgppGJqllPllwnbQwTwsswQPwN +gJgtJJBtqJqWBGzjRCHDDzRmDtVV +GRBWbbWnGNhbwSsfPfmrlslWsS +HLVCgCLpMgcLVDcDCgmlvstSlsstPtSSSlscvl +LzQDQzMMzJzFQVDJgCzJHJZRZBNbqGFhNFwBGhbhBhBm +JNsHhdPZSdZJjSHzzNwvwGgBFmBmvptJbFvm +WrDrwqqqQWVMCvMvGbGbbFFbFp +rqqLncqnlCncwQWCwWlLfSZPsZddfzzNNdhdPlZz +rwfrwHqSdRcgwdZrDcrqDDdgNzjNjPzPJNJPtbNPbGsHNGHv +hllLMTLLQMCzJssPsTvtFG +QtQnpWVVMVWnVQpRZSSwZDggrcSq +FDlqPMBdmbqMrdDqqFdFDwjHZChHHZfZWZNBsZjhfhHf +VQJVgncpTQRJfsssGhsNWC +NtpLLSpcLVRzzRRtpgVcLgglMwwlPlzdmDlFmFPDmqqwlF +PqwwSqNWPqwSWqjNBwpTPpffhJfZfstRtZJRRdJsdR +VFLFzQVgVnDVjhdJHsvhZjfg +VVFVDDnmnzLFCzVmznFzrFlrjSCPNMBCSGSGwwwGBjPNWPwC +zzbCGrfgbzfzCtvqdjSrvSjnvS +cNVTLnJZRNNmQmhJNptvBlBtVjlljqqldtlB +ZhpcJHLQhRcLZLmNQJzfFwDzzgHPFngDPPnP +ttntdMMBZzbZZtjPfwjwTwBvvVmh +llSllRRNsGCrCDTPfgVgTfgvsjPH +CFclcCWGrJNDSnnWMbQTnWtLQd +bccfdSfwFsswcbbdJFGQVGnCJLnBLnDnQLDj +ThvHZNhZmqNWMNqvDVjcjjBQVhQBBVLB +vWMZZNRmNMWqtWqmqHclfFgdlwRwrzzSfwbFRd +WNzRWWZNmtNZnssNRPtCJFQJCffVJVffCvlF +cBqBLgHHBcgqBbCJjrvrVQJfsHlr +DhDShwchBSbdwBsqgGcbgTTRmzdNWmMRMmTdNpTMmW +FHWZDbbPZDFHgGGPdPbJNLpJSlNjcjSphcJjFN +ZCCrBBRwwCjcNwcljppN +CmTTsrMfBCRsTMnnCRTmVZbgdbdGfWHPDVvdbbPV +cgSNBScMgjBBPtBCNLVvVVvhhJJhvsMhVfWq +TFlDrHPZHTTFmwTQHZDZTrqvvzqlJppVJvpffhqqVfJp +DbPwrTZDQDRQQwQZrDrbbQwRRnNSBtCjtcNGjSgSLjLccC +pdcVCpdZnZgcZgdcDWBDNcNwvBWJwc +RRmHspRmmQfLwwJJbFBFFJNR +rGlpfrQrqGhGqdGP +THhNsHhdFjcDthDcjDhLBqWcLLQQJvvBbvBJbl +GfrCSZGCzfVMrVCCzGVfSMQBBFlJlJBFFZqvWBqbbQWl +rSrFwCwzMMzRfGrGMwPfGCVdgHDttthNPssHjmNNdDjgdD +shmhggDsZCZWBDmsQTcTqrLPTbNbwQQrrN +lzpFVfdjfFFGnVVHpjJGJVlprNMPNtPctTNwLtcTbwctwTnN +jVFfzVlFSpzpFCshWmgSRgmBRb +zZGFNPmdPdszdWddGWZlpLMLpbQbLDpblzQbtv +wTwgwSSCHhhCSghJbpcpDglbbQbMVMpV +BHnBRrJCHmRNfGDmfm +CffgvfCRGngRrvGvgdnRVpPQQPSqbVZZDPDVPzFSSQ +cMlWJTMlcTLTLtHHJlpqDLwqSzSSDDqDZDDS +tmHTtlMmWpmsMJsCRdCNsrRGfrnffN +lNrzNHNwzZlHmwNBpMqqnqGDZSpMTGnb +ddjgFjjsRvGvQhQvvFjqbVTFpbVpFDJSbJVpTS +cjsQhsjvRvGcgNtzczmtmwCCcr +NJMJvBmBJPtMtRDnDDwDMFFWDWHG +hZsrzshpSdjZZqSSfgpDwnwFnGCCLHDbjnGCWG +zfgSpScsrdpmllttGvJGcm +GLsnLVLZGZmcGVpgZLmTjTsDDTlDTHPPHWlHwD +dNJhCCdtNJSvdDzwPlvTlQ +BCbBrPPfRMfMJSffrMCMChrSqVcmLLFpqLFFcggLVnqgmbgc +hMdjMndZLRnRnjclszLclQlzGwcr +FPCCSCSpCwStJVGzsPQGslGzPbsQ +TSSJTtfTFTwtmTFFVFDTWRvdgndjjRhnjnvHjdfR +ZwgsnsWsWvWQHqJhGhJVCJHhCJ +cdjlMWRRMhJLCpLL +jjSRmRmNRNWBmdmcWjlDWFPswsPtnZQsnBsnZvvTTnvT +vvbjLTPbQzrQQjpLzLbflfjfRDDsDlRfgDnnVD +ZGCtHHFGzFHhMlCnDqwlgggsqf +FJHMhHZGmNHtJhMhBJZZtZdrbSbSzbmWLLQrQTbPdbrS +ZClGVCvLZzCLBVbdGGzVVBvVrqQMDWMHrgmgQLWrWmTgqqHH +tNpNspcQPfHmqfgHmHHg +nNttnwPRjFtPcccsFptPlllQGlQZbvGzVVVFzhCd +lflmVWpDVsMmmVPlHVbbGSSbGnSHJcncnLZn +NvTFzNwzTQvhFGSZnvgrbgJCgr +jtRwTQFzjBNGGQQBdDsDqqlsVqRflMlPsP +rCSJPCrBwwMdBJRCrwMTGWTWNbcjGZNGGZTb +qzgqfgFghsHzfgHgmmfWGNGGWcNNFClbWlcCNW +DqsnzsHLhddBDwCRJR +sZpHjZrVQmcrbhbthzhFHzhH +QDPMDMndqqQGqQfCDDbhFtzzLtbWzlBLLPBW +TDMDqfGnJSnfnfvgjsjNgJvsjVQv +bDZQbZHdQQggZfttJjGnplSnldsG +FTrFCvWBWzTNSPNvRBGJsGjpsJjstmCLtjCt +rhBvzRVRBBSVHDHcHMHq +FSbSNZbZbzGzGGbNzGgcZPwlDPvlNmLLLwLLlLvvvl +pqnqpVCrpshqmChsQnnRpRCldDHvDHLjDlvPwddlwPtwDV +rRTCnnpCWCChTrWsrBTfbcFFmFSSmfBBGg +QdhdWDsHhHWzPrLPSCPGvs +gpZZmNmtjZwpBZBZgSnvFcGPrrvmncnvmC +RVVRjZJfJVfVBZVtBNBVppZVDqMHhqTbMGlWHQhhWldRMHWd +BPWQrRRNNMhrHhLqqGgjDJjH +TzVmmpmtCNwscTzszcNzDCfCHJqDfGjDJJgfGCDq +wdwmspTsVdlTcpbmVMPWBbBWRPNnFnBWMr +VZTnVnsgrjjsqPzPwWgWPghz +mcFdQGPMBdMSBdWbhRzzWqwLwcWt +GQPBvpfvNvFPBvTnfjnZDHDDjsrr +CZssCNFJBmBNFmFBNwBFCJFTtthGrrSThtSgSRtSfRTGtRrg +LDpDbnjjDGpggGrvGg +PLMWnWQgbQWnWbnbjqDbszHwwzwmNsFZMBmwJFZF +hQSjFLhFLLMSSFgdWTMdGgNbNbWv +JmPlltJBJqmzpbrrwTwrvvGqww +HBzztRBRplzlmHmRmmsplRJZcfFcLFfHSLjSZTcfVVcLVH +nBSQMnVQqJBGnfVfDgCrjbVbtC +FNcPPHdTdhmBdHBvwlZjbClClfcZgjclgj +vFdHWhTLHvnBRRqBsWSR +TRsNNTTHRRZRRsRzJQddSpJLcQdpjs +DMVPVVGmMGWMGtMgGtDlmMWwLLLpJfSfpjzpdQddLSmSSJdc +tVMgGMDwMgMWDBWMttjRBZNnvNCNZrZZRbZNvZ +wlJPVMJPPBShSlhgfTvgNNzzgNMCTg +FLtRnDDSrvdNdrng +FcSmpFZFFmmjWqPWJbmhGqqm +hlBqqTlSfvNhpbfb +fRVsVDDRtnRVfbDNCCNCNQGwNZ +nrrRPPnHzntRrPsRVrtJVBMjlzWfFWdMjjWMqdBBlT +zDNcnRsNNfRFFNNzRzLbRWgMZMMZcdhcBdMrBpZmmZ +PVHHVlPDGPPtjDmmdrrGBBMpWGWd +VVqTTlQtDCqFNzsnbLbCSJ +ndSGSZZGwSZTBdwnwdwmWCzPQCQLffZzRgMZRggMzf +mvqVmqrmcDqllNNtbcNcMCQMRCMCCMQfHLgvRgMg +FhNNcrrVljFcqmTJhwnsmGdJsT +wlmLmZLwzvVmVWVmQWzZSFJFDSqFHSSFJHhDqZ +RsgpMNcMdRgjDcRFqCSrHSHBCFJr +jdncssDNPsbmmwvvlPLw +wQGHMrHGgwgVTQrrMGgGQrTtWzzPJhsfhZztWssQWbZCWh +FjvBFSqqDbljFvSbnvFltszfWPPfWzJZBCsPtJft +qLlDbpjFRbpdGTgLGLGTTV +hrVJsBrpwbsMZtTLlwnqtqdc +QDDmHWmffHCQWHjRQjCWczTTjtlzdldqVtTnTqLt +HmfGfRNWfNWmQCRsgbsMFMhMGvpBVs +CRzzVCZhvGQqNmcWrgpgwQFSmF +BJsttjDtjbdLMHHsBTqBbBHMrprDSrFnFnSgrnnrpDSmWWnw +TbMBMPPdLTbHTjHMtPzZGvzlvqCPGNlNVRVP +QcmcrCVcdTCGRRLT +zzgWFWVBTSWLPdMP +JbhnBVzzfVhgztVDvqcqHwncZHNqnsnccQ +JJVBFfJjNNNsJTwVfZJNffFRpRzRzRptRWtCtSSHWsWzCD +rmrnhgclhQGcGnhrPjqgGMHbWRHRbRCWbzRbMSSpHWCD +mhhjQGGjQgggqnmQnmghdQdJFZBNvZBBLNTvvTNNTLfZ +DrBgwMCMRvMrvDgPCzdpdNtzqqlHNNtp +jWSSZGgfGjcLfdNjFzqqFFzzFF +nGZhTmZLLZhGPVVTgQgMRrrb +ppqZvppdJmSLHdSfZRrrtbscgRVVgwVrHt +hFFFzQPhNWzNhnhGVggrcbwVgBnvbwgR +CNQWFMzWWhCflpjvZJMJdj +pfpfmQMWmcBVfMBBmpfVQMbDGGNPDTcSNTTsSNPCCNhC +ZZrZwvvzZrvZlZlwhwswhNSsgbDssC +ttvdtzRzFDqRJWLVLWJJpQ +CZZPTQPTPTJhTQTrHCBbvtLbbbRWtjbDvb +cGfsVSVcLdSgSwBWRNNGwRNRbD +spSffnccsgcdnnJJQlZZqJLhpMJh +TwGGdWwdddtTsbzPzbbnTLnPLP +gqNSMvtvcSDLLfnMnnPzFM +NvDNDqtvRcjQVGZZGZZhwpQB +jtgFmnqjqttQpsphzNllblzlNH +GRMRDMGCVCHzSCbSbNNl +LMTJRTGRLBJBwLRRHmBFQPvqmPBvtgtc +jDjjwRDpPqqsMsDLJbJzVB +lMNMNddvMltNfFVWbVVWJrrVLfgL +NQQtmtFGFlGZPZcMmmcjjn +CgCNjvSCgSQQzVZNWVnTBPTcsTVBnpPs +bFbbLfbfdRBFhLwqFmblBJfRHtWcttcttlDpspcPWDcDptPn +mdbFhfJrmJwfbmmFFFvBZCNCzMGrNjMQjCCZ +TPDNHHSTNNmRfTrRMZSqwwttdbBvBMth +VVnnFGgnQcBvMqvnhNBN +GLzjjzGscssJGJCHljmfmTWPTCDN +BZZNcMQjBNjNtDJgstjgtwqGRQfhGhSvPfThfqvPhfhf +CCndrnmnnWbrnHrFbWbpbbVmGGPqLfTGhvGSPhqRLRdfSGsf +bFssVbbblFHzrmFlMNMtcNgDtJDzZgtw +smjMtSqQQSjtSfmDVVFHFhnHBHmbNPPH +TgvCCJcZdwdgNvbHvPbbvBNq +JLqRWTgLqJLCJcclgCJdWjfsSSpsfRrsQjDtspptQQ +hNwztzgzJnnNTVFwNTNhwVhZlrpLMLZZlpZlQndLPLpQLZ +vRDvqSSqjbqSWDvjbvBdLWspPLddZPQQLMllLp +SfGfRmSGCSfBfjTcNFgzwMFJzwgm +lhVBhZjjPHbThwFGrNrdvNNwFV +DRrDLfMLSgpCdCJcfmcJCm +LQtnprtqSRtZjHzTthlb +GrGsqfbtsWGWWntnrrwWWWGSSDSMDcSSSwTDzPzJSJzPcT +lmQhhVCgmffCNgmNNmCmBNRRPvDzDMhJvSSDJzzcTzvvPvMT +VBllNBpfQgQmpLBpRBtnqWLFFnZZWWGrZrjq +NRJdngMVwfgnwJtvlblcWLlLDHfccDbW +PFJzBmhmjPFpJrFqLcQHLlHGDlHDQbGz +ShJZJmPFpwdMvCCZRd +WQDqSVWqpBCsPqPWWNscfrHfhrhrHhGFGs +MmLRmLTjmTzTzlhGHfprhvfFhHfT +mLZLRdgMRjtdddmdgwmtMwQSCPbnDSSCqBDwpWPQqn +rNHwMMGDrggWwsvWMPMWWwjbCqjCBlZqvfjBqCJhfffj +FbtFmRTpzBBZqCClpJ +ztbzFtnzVNnNNPPDGD +PLPFcwdLdFcbgdfSwFtWhGWGRMWMJMGCblJR +qTpszVVjRlCHtWCT +qzvrDqQrqznzggFZwFwQScdW +LWLjLNjNjTwlwLZVcBVcVVZcBVQcZZ +JhGhFdmBRdGGDnQtbPvVVdnccS +zDrrFGFFRgRHmDNWTpjTBNTHWNjW +fwfBVLhmwfhHsgBstWCWQnDQnlldWW +hZvFTNJrZjZbFvNvttqWWDtcWqCtFDWn +rbjjrjpRzRzgBLzwLgmzLh +ZqqqWVzdSPnwBJBfwJfZTs +FHGgjRLMJFsJTsBw +DHRcDgHvLhDWPSCzwqnq +LZGZLLRLZpRQBtPTjTffrHljjmsB +wNVVwcCgNCCScwggmjHjTPmQPsTHmlSs +gbbwbqhNCQcbqqVchWhtRZDJWJDtZLWL +CmTmvvmvzCCCgzzVQmTQvTjjGRGShwSHwRrRSSSSDNHSFN +PqZqWdqlplsqBJMMsMMnGRJRbbNwNhrrhShGShFD +fBWBWdZppqpqDMBdlfcTCTLtLtLCQfQvcmgv +pntdtdHHWHqnptGpqHqNgMQwPPPnZMZZZZcfgc +LFmLSVBRTSBBRrffTQgMfQMtJZQT +bmRCSSSjRCtSrRChjqqGqpppGhqDGp +dGGhhfNfgRTGLcpL +BmCCwQMQqmQrBCBJLpbVTFbHcgcbLTMc +JrpqJJmqqqqmzqqwmwNlzfvltDPltfshlhNN +VCCbMJfJlgRCnNGVNnvFvVBF +STsgcZdghZsqSttBnsGnBtBtHt +qDcjgDphjhSghZTQgCJWQWWfwfRzWlwJzJ +JHMVMvmvRcdbmrRHQBBGjcjfFQfChSfj +NltNtZllgZtgtnpnqNWpgCrCBQzBGzFhQrGSSBCzWh +pDrwnqLlvDVmPbss +dbrpbSrwBjswsSjCwqllLqFtqLcrGqqFtF +RvfJDQnRpHvvQfRvvQRJFDqzcWltFFlzcLttWltW +ZpnRVZHmvHnTnPZZPHfHmVwdjVghwgVSBgdBBCwgdC +WRCBGWvNgHnMcFwnpC +ltlstrjlJNlfrZZqDJtNLsHnmwwpcHphhFPMFjwhmnFp +TStJssLstJLtqTsNgvvSBNzzvWvGRz +VBjdWdGcqWdBVCFRmHwfCRRV +DLzNpqbDzDNbrJvltMLJLRRmtRFTSRmTmFwfRHRTFf +zvvJNLgNqGcnjgnP +JjdnFfbdbdQMbQzjtRcwcCvbvBqRBCwt +LlNHlWGprPCVVBsVzqNR +hLmgTlrpPPHrLprHrTTGggHWzhZFSJDfhMdnjjZfFfdFMjFz +bDbwRpCSRgqqMfMf +HzzPcPnhzlhsQzHhHnTggBBqTQTgVQqBqjZW +tnsrFccnzsDvGpNGqNtq +GmPsPrsSlswNmcLzMvnpnmMpLBCf +glDTZRDqRTjRCvjvfBpfCzvp +DHlJVhJRDTbqZDqSNVrNwtVrQwSSGs +nNnDwqDwFVgDwDnCgLnLpCVWdBMRpsPdMPPjRHRHHRdBWj +tQtfTtJtJmlTQrTtTlhfzrmdHzMMRMsBPPddjddBPPdWsB +bbhtQTfTTsmmbStnqGFGNDbFDgFVnw +dsVpDPBMHVdHpplpvdHjRjmmjRTMTFFrrTTFQq +LzzWZLGCzCWNjfmRfBhmQjZq +zSSSwJwSBzNtzLBbwbSGLzWVvcvpHdssDllVJgVHVcdDPv +RWfQBDTBLQWpDLNRZjZwHHddjHNhZdtv +ScCCzSszFzJccPHHvmjHvjhpmHsj +FPclgFVCbcngVgnpWQqqRfLBDBrR +cRLLVwcsctwmbVcszztwtRMvNrCpTggqFrTvvhCVpghBqh +PdSDGdnZQfGDfDjWjWWgvCqFhpqvpNZgCTTvrp +dGnDHWnSQdJPDSFLLcJmRzzLLLRRcl +lCSqlcCcBqBCCwGwnNWnnFwBHF +WMZLMPbPhQddRbMpbbLbRLLHDFgjFGDmFNZgNnDGNHGGjD +dTVPPQbPbMdQMzvVrWvczrCJqv +vzscdHcHZzHzCCHlQTTTCcslMGPStmSlpDDSSSgSPDNBmNtl +FWVMFhFMMqWhFVFbDBDDhpmpGtPSDpGG +fRLbFfwWWLnVjMdzzQHQJnnvQs +SmPdRbWZdSqqzSPmbdWFFQgcQnvncgQGQMMT +BfBLmVNjprVVNlVBrpBlHpNrgQFHGCGgvTQTMGFFgMCvgQcQ +BjjJfVLBfNffJbZDqtDsdzzm +NLgtLsSggjqgqpLLDjsjmcJfvpmFmmJmvPpwhBJB +lMnlZMtdCMrRRnRbTddWbVwcmPfFmhJwPfwJmvfwFvPl +MnRrnGWRbgQqtNGDjt +dSdrTbTtLJCcttcFVw +PhsgQQGPZshvpQZGgsrBllVFlHVpFllJJrFH +gqsGPgMZhgvQbzrzTfSzMTLf +pqbDdQWqCgBfbbfFfB +vtjnmzLcmhBdzTFgTsRP +LZGmjvJGGctnLtvcchSjmhcLqNHCwVdQZwDwWDNpCwqHdDwQ +wlMWSSHWShSMbDSwVhCrNjJmcrDmGRRCGCjN +FHZdHftFFQnqsQqsQttjvGrJccmdGGcrNdRNmG +pHpzPpQHpsPzPlzlbSgSSMLwzh +fCQDLlDQTSjbHDqH +ZhrsrZZZhcclwNswGGwbwF +rcWhlhlpMJpMZmgtBCzCttCCRfdp +zLnCMLNTvtGNpNvNjhRHgZhHvZdZHdjD +fSsWWqScTfJJqfJFFJwswhdHhhhdhDdjbjZbhhDj +WsWmfcqBWfTfsrntrLmplCLttm +ljssbqMMPbHPlsbcWZNLLsWJWRFvvZfW +SzgggDDwTzrQmDQgdSSWvdJLFGffRvZG +zCzCDCrznnTTmCbbpvlPHtCPtb +TZSwNPpcgpNPbwbhhbwrwJqh +BlCDtvvgLWGCLffGfLzLrMqnnbDDHbmnnnJrhnVJ +lzBjdCjCGCjfGjjLGBGGjlCSsRppcdpRNdRSPQcRPQZTgT +TsFTrvGmZGfvZfZFzNNZrhClmRcBgCMwQwQPCPMPRP +bpnnVVJtSDgRBwbQRwlR +jpSnqLpqDJDJLDjWDWLWvvzfZZvqvNsGTHGGFfZl +bzbzznqfCpzvhCSMfbCbpCFhtHGHHJdtHJGhFsmshJJG +DLWRLjRrmNPQjZZlQPsFGFggVcWcFddggdsg +rjrZPwwDRlLLBjQlRRlPDpmbqzpqnnCSCfTMwMqSvC +FmcGcjLRPjQwQjMQrwHQ +btJzJbVNdBJJtzTdGBbdBztGrQhhQWhMwHrhrHSHgHQfhMVS +JJDpdDTtCtzNptnTJBznnvLCCvcFqsRqFcvZclLGRR diff --git a/day3/src/main.rs b/day3/src/main.rs new file mode 100644 index 0000000..3619d91 --- /dev/null +++ b/day3/src/main.rs @@ -0,0 +1,37 @@ +fn main() { + let contents = std::fs::read_to_string("data.txt").expect("Failed to read file"); + let lines: Vec<&str> = contents.lines().collect(); + + // Part 1 + let sacks: Vec<(&str, &str)> = lines.iter().map(|&x| x.split_at(x.len() / 2)).collect(); + let common_items_part1: Vec = sacks.iter().map(find_common_item).collect(); + let priorities_part1: Vec = common_items_part1.iter().map(char_to_code).collect(); + let sum_part1: u32 = priorities_part1.iter().sum(); + println!("Part 1 Sum: {sum_part1}"); + + // Part 2 + let groups: Vec<&[&str]> = lines.chunks(3).collect(); + let common_items_part2: Vec = groups.iter().map(find_badge).collect(); + let priorities_part2: Vec = common_items_part2.iter().map(char_to_code).collect(); + let sum_part2: u32 = priorities_part2.iter().sum(); + println!("Part 2 Sum: {sum_part2}"); +} + +fn char_to_code(c: &char) -> u32 { + let offset = if c.is_ascii_uppercase() { 38 } else { 96 }; + *c as u32 - offset +} + +fn find_common_item(pair: &(&str, &str)) -> char { + pair.0 + .chars() + .filter(|&x| pair.1.contains(x)) + .collect::>()[0] +} + +fn find_badge(set: &&[&str]) -> char { + set[0] + .chars() + .filter(|&x| set[1].contains(x) && set[2].contains(x)) + .collect::>()[0] +} diff --git a/day3/test.txt b/day3/test.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day3/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw