diff --git a/2022/Data/day3-input.txt b/2022/Data/day3-input.txt new file mode 100644 index 0000000..61d9ae0 --- /dev/null +++ b/2022/Data/day3-input.txt @@ -0,0 +1,300 @@ +lflZfgnSnlmmlgGfjGthQPtLNsQhvbHLLpSS +zrCVDVFMJTCTcCJMwCThWbtbpbWpPbtbHPLQssLsHP +rBFcrwFzFwwVDcDrzTzJfnRGjllBdGZnnZfhqmdn +FjpnFRDmbRtnbJrFJmSTsGShWVhGqGVVsmqs +ZwPvNPdzNZwfzBNLdNNNNcLvhnQhqMTVsTGSWSqGqTdVWhMT +vgLZHfvLffNLPbggnrbFpJnCbC +hzJzGjGfqmGtDQtDSvVV +plpcMBNBcCTlTgCMbvtrsSVsVJDJlrwDQr +McHBMMcTTHgJnWqnRqjzZnnRzR +ppvsGZhDGprrSjSllwfZ +TTFMMFJMgMHmHmdqdSvNqlSSSNJv +mgBPHTRWFRVcpvsVttppbv +ZZDssfMDMtqqppZLLJzmzSTwNJplTSgpgm +BdCRRHFRbccWWBvBHCdcJVngNVSvTgVNzgNNVmnz +QHFFrBdcGtqPmmQh +qLvQFRgLSSNgqQvRrqLTQvLttwDBFWDwjwFttDdlBBwBwM +nbsmZnbmHbZVCGPVmHWtwlStBDtwBMtwWHMj +CnCbhGCPpPCSnZmrgRNRqNRrLNgrzh +vgLWWHRNLnWwLggWzwLFFzMmBMRMhMhTbhsmmsbbmQTm +rScpJJDDpjtSDPPPJDpjqPCHBBtlTdblmmlhBsMMmTsbmtsl +GHZHCPprSSwgvWNVwVZv +dMrCMJMqvtdFwcjczjQzThtm +gGbLblLpZlHvllQhlQwcjT +GHRWvPRbPHPRvNGbvdRBqdqBBfRqBqnrfF +VsHcljlbhmHbHHlcjVcVShJSCdJCfMrMMQDfRNFCfMRGfNrQ +tGtvLtpgBTGvDMMRdMMgdCNM +pnGnGqGtvtzTLjWqmSSjHhWhWs +NJTDntDNDVjNnjBfjjjcCZCZcVqCSCLqcSScCc +zvhgRgQvvdllgQbHghlvHrRHSScBCRqqwCLGqSMCZCGGGqMZ +pvvrHzdgvlgzQphQsDFmnsNTTtjfjJJmPB +ScnSZSZZlmjmHjjWHHWZftJVJpppwtVVnLJtnptnwt +CFFlQBbbPQqrBwJrJJrGJD +PgTqRddFzgdRPFFbFgqQFgsSjfHWfSHmSMWcjZlmZmjTZM +lzBRtctbnBRBRBBWnDnDWjlLVvwGMrvwrHHQHGmDvHQvHGrV +FsTgFCTSgsCNspzhCGMfTHQVwVMfMmMmrH +hSdSFgghhqpRbLqjntqnPz +DCDnNGFFDQdQmVDNdFVNFccpJLHWSvPLrvvvPtGGhSttLv +sBgTzzZqrBlfljslWBhvHSvPBhSBJSSL +lRlTgMzlzrwRrnmbCMCFnNVMnc +MJQJMJHBrsdrHwts +dbbSVGgbjVqGTVfqddCTpmWWcprgNgWmcWwWswpN +LPdGGdVGPCVdLBlBMlDRRRMD +vdcwZLTdTFFRDHVgmpppMmqZ +jGPzCnQPjlsDVqDpqDHbgP +BjWJrlGQQzrCzBzlzBCGBznzwNRNcwLJdwTJFTHRSTvtLcNN +ngrgqTjJJZnjFJpnqnnVTLzBbbHbLQdLHLHbrdHdHG +lNcltCCtvftfWssPbMQdMBzhbbcBDLdh +PRtWsQCmWsmSsCNCSvCSWlspwgqjqmqjTpnJZwnZVpFwgq +PjWjGDCjmrmWPNmvWDWFmgCNfVJRLfJRfLDLJQlfHplpRbfR +MtZMtcSbccZshTtQTVVTpzHlLRRQLV +cZhbwMnwqsqnhnqtMBnvNFrnGPNPPmgPGCgW +WBjWjWjqZwQJnJZCZZbf +StHSDRPHHcTrTrJpLCCMbrqnJn +RvTTvGqcqTFvSvSRDHvRjlhgWBWBdhjwjGgNjhlj +FSbCqcFsbCPtrcrqhCScbshMjHDGGWBLHBnjGLPBHGGBGnHj +flQdlsgQgGnQHBHjDn +vllgRZdmvsvpgdwZgzJdwRmprqccSFcSShJbTSttqMCrCCch +GwwgCtvHgwcHVVDqpWdfnqVv +sllBsSNBjSrLfqhLgjfqhL +ZbQbZQzgQQPSblBggNQRHGZHHCmwmHFGGcwtJm +CmGVGBTVTmmTWTNLLCVgCSFvDQppQQDDnDQDJpMggfnQft +RrtdqtldPbHzRbnjRfQZjJfMDnMj +wcwhccqrdrrlFmLGCwCtSwtL +pzZznZphZnpcNWSwGwVVPzrPrG +lgFllLLltgbDsrBCwrjWGmwmtw +MgJbDLlMQRJccchrhc +wbbjzZhdGDwLzZSBWqqHmZgssCWqFtMZ +VRJccfvPlTTlQlHQCWQhMMhCCHqQ +RlVfVJcPTVTfvvvJfNJVlcBjGjwhSLdBNGGnjLLBwzGb +bvpqHMVTTpZnqnWRQQQw +tfhFFdSFggfhbldhhZcnRscRcQmnRs +DPzgFJzFLfFbFSgPFgdPglMHpvBpHTCMGpjvMMpLvvNG +JggGLQgQpLpSPRJgGPSnGlFTDBjjRFvRjtBFjWvFjqRj +cmHhZcMHcWjrTBjrvm +dbHwdNNHhwTNThZHdlwQJJwngpgnJGnSPw +DbZjVfjVLhZDLpWPHpMZPmmGNp +lFcJJGcFqnBFqwJCHHMmNHPsdCNp +BlwccRQtBwBrwLGbGhGggzLgzR +RBhZPjlWqgbNbgGLBr +MzSmSzpFdHwpswzzHnzjnvLCbgtrtLGLbJLLJNtJtbwJ +MsSHdmMdpFfmFjpfcPWRhRVZfWQThZ +mqmssPCFhhsJccVg +FTttfwdjjHznJgfngpnc +dNFTjQNRtRNQldRNrRdHMRrlPZqCGlGBCqqZmmbPqDmDCmGW +ZJVRRZZJRcvmPhCJrvhm +PPWQDTfWbnnstlCGvjGrWMGMvr +TbbwddndsnsfDpwFqZFVHBVPqc +tFmpJmgJJgmFDWgRgFrrlGSltSQvZChMtCMM +TLcZHsjLVNBwGQCCGlsCShvh +nqNdwwccBwVLwjjDznZzppbgzFZfDF +qsTqCCCszjlqTssBShlQSSZFgZZhgB +LDPmVgDDJdLPrPgLgPZSFZQfhQGGBQJcSFJS +mvmVbVvtggVtvgdLVvtmptCsNTtjRnpRTTjpsqCp +BdNPLnmFvLFNgnmBmnFGnwSZZZWwqWgqjwWssTHWSS +bJhMzhbVMbDCcVpZtjHMqTMwtttSjH +hzclfCppVqQfbzQVbpzPQLNFBdrvdNGGBnmrmP +nLVLzBDJCCHqdLncqVJgSsDlGsbssmvvvbvbff +jMNHFWNTZZNwMPrPWrrPMMrrvSllbgsllfgbgvQsvGmglZbv +RjPjrjRPtNrwHhBtncCJtJtL +jbhhjhNjvqNbmjMjqhtCFdmPFdlzJzfFfJQJfR +GBBZWrZWgpSsnSngrrSgHzFzFFdClzfFQFlRZftQPR +TrGTrGWHpHWGHWVWsngprHpLbLLVvcqMcNbVNLhwVNbtNb +sQDvDmDLQFDRsdchzhBczLhhPhVz +MbGGMjjGZSjvfHvHSbfwBqcPnqqcPVhPNnqnzjcn +ZwMMHrWvSHbfJfTrbJwSMMfMsQDtsFRptlpdCRpWmptQDRmC +TwMHdcTznLqzTrHdzzzHTdgMRQWRhJhNjjvgQvQQWNjl +tbfsVbDCVSSDtSPQJWPvRNhQtghN +FVGBpGCVFCbfCbVbZCSHqmwqcqLcdHJGwHqqTd +lTlGfjLGwHNMggscsDRwsC +MrFtrzZZPZrtVQtnrrFdQhhDPDSphgDRhDcsCCgWpW +ZJmJVzVVJFHfGbqJGMLv +zsFZVjzlHPfTzGfLGt +mdrrmdMMcBcmNqNbPqfRDLPWPlqTWD +BNQhmmrBrQghgSmNBQQSmvwssjZZSJHljJFFHZJvZV +rLZCsZdMJfdNCsfZMrLdFmssnwgTRQgBBwgRwcngTNVRVQjV +StqDHlStDPgRTqcwjT +GlDGDhbpHhvSHWlzbWlhpzhJdrFLrCLmvdmFZsmJJjJfdv +pJHJMJsJjSMFdHhszFvMhlmmGNlSmmBGllWmVlwcTw +ZqZRDrZCZDtPDPDrCngrnnPQGVmGHVBWGWtGmWVwVlmTlGNl +ZQPgRqrrQPqLnrLMvLphHdvdjpJddb +NwbBjljFbcjtTcccqW +RHZrPHPpNgZTzTqc +sfrPdmPdpsmPPPrfQPVGlwGVBwbGVnFlNQCG +hQdNTlzhdTvrhdnTBqcWBLsBHgWQgBPg +zwzRDbDfqZBLHDLB +wFbFmjjRzfmjGGMGMfmJwwGCCnvNhpvSCNnrvJvCprnnSp +zshNNJbwGFJfGJzzzNRnHGnCnRHcRPgTmPmn +LMDVtZLStrrZClBrVDllLSBWRPTPPRRPmgWPVmPTPHTWgR +SDSqLMlrtLlLtrBqBdlMZjvffCNzwvhjvvzhdfNhvf +SLQmGBmhLSLQTBGBGwdwpJjwwQjwcVpJZJ +sNrWrWPNbHghrbgnNNzbWbFWdZpMpzVpdMZMzMMVZcwwJdwd +frrPNNWshWhhHDvDGDRSBSRvttqv +FJqpgvhJJRjFjZTqDsMHrzwjsSsSszMrMm +PPPQWGtnbbfBmPsFswwsMrcc +QfBtbldtWQfbWbnfGlFqZppvpFZZLhFlpq +ZqSMZHHCMpHTZTWmFTFZPZQJBgVGVJQvVVSDBvBtcBBG +RNsndwsNjsbsgGCgjQBttcBg +NRszRRNzLNNNwNfhCCrfdmTqFZllFFHFFpWhlTmWpq +llbbzDmSspGRpHpzsldzRRsVtFBBFJMMVVFLTTTMVtLTDM +cqgjqvNgvqCjQZqgGGnhMTnMJVLBLMtFhhVFWB +PfGGvQrPCjvjZgGCCCZZZbSmmmHlRpprlHrHwssSRr +mRmpFpWpfMMgLnmS +CdCsqzdRzqStLjSqfMnL +wQRHdTzCQbzCwsTrZBlFZGpVlpFGQD +qnMTnTVSTPTHTHcMZMvVpmppmFmVzFLLFLlFpG +gBjDsjRRwhDDghthwwWZwLmpmwWWLWLbGZ +NhZtZtBgPTNJJNTS +jLjjmpHvzvZrfzQjmfHHWrfbqblLsSlTsqsgqPJbPqVglb +FBcCwDwtwgcgnCwcGchtJSsRqVRVJPPqDlbSDRPq +MBhthFNtMGCwhcwnpQfWjNrQprpvzpgQ +RfCnWfnhCbwHgWjzBgzB +PsVqDsSTshsgszpsph +DPDvTVtTShhSZhmqSvLlQJFnQJJZnbCnlCCZ +pRRdJngltnwwvTNSWqWffqgBqD +HQGcsdrjzMDDBfGMGG +FLhsdbzCLLHjhntpVnRPRvZV +gZNwQHHNRlGvhvhGRvRb +dpSSBDrzdCfcSzfrzZrfCfMbthWWWPttDthvMFWvvvPj +ZdpBpZCrssBJZfSJBzBdCTcnmQwmnVVlmqTQTTQlHLwNnN +ssCpTttVVVpzZDVvRpCsRtDgWBWBBFBJvvJHMBghGghrMJ +lwLmNNLwSblbmSQLfhJHZgHrHhhJJhHHmW +QLSdbdPqndlNlLdSLNQncpRtRTcRVTPPZRCjVCcc +wzzJclzcTThvWSSCqRlQSsNN +rDpVjpVVDpsQSRDRfQmm +GLbjrLpFbgLVLLgdbjVpchcFZhvBwJvtvtJcZwRB +wPgZgLVMfWVTgmTZZZftJjtfjtJCcdpjdCqc +zGGbQQnQGvBBhGQvvvBBSBvQdhdqqCpdddDmJlCcDjCtJdmJ +HszzHBzQBSmGSwTWgswZPWTVgZ +GDFvzCFdrszSdNJrFfjjfqZjRfsjpqmcwZ +WbbVtVnBPWMgBLMBnQQnBQHcjfjpZRwqcwMfcNTZRqqNmT +WQQnVVPHtggLghWWhHnPVQbvlJhSlrvJDlFGJDdDCzGNFF +dVhTBjBHtTVqWRJZRqhJZQ +brSDTbDfcCwDzfCSbwMQnlqCRJnMgWWnZngM +DFwNSrwNwbDzbFTTFtjmBpVdGpHs +dPQfdfTzDrFDmFDBgBFj +RlJRclcswJRvnwPcpjbjbbCZjFjbBmsbFZ +pqncGlcRJpHGpllGHhvPhRTHrQrttVVfrdQzfrTdftfV +RCzTzRMTfCfRRDzRfhSmZZlCslBbZZBVtZBZsqBL +nvvJPpdcFnPcWnFnVZvBqVlZMbZBNVlV +FpWPMdjdPhSTmwfSjD +NDJjNHLLNWjcLLWCLJLZjLDtRqqtgtMqgtqnRqnSRgggtZ +BwrlfFwmQwhwfPBFhsBdFmbQggCgqQVtbRSqttqMngnp +llPPwsPlGshBJGWJLcHvCzNv +rBvTmwdTSbnrvVWsWVftGfJQGT +gNRLLjlPRWnFVRFDFW +lpCpPNZqZCdvdppnSnBr +ShRdCrJgHClZJtZDGMMz +LvqVVTTNbVPLQNFTnwwMtzFZGDDwmtnM +VLbNvpPvTNVqVbbNpbVPGNLPrRWrcRCWdSrCjWSHcHSdWpCh +tNmZnLSZPFLDnLTmhJMWczQdhmWhWH +bGqbgrpsCsWhcChNQfJz +vwlNbppsRGRRSSSDvjTjLZjZ +zgMZhgfBtftSZQQmLHpSWH +cdqcqnrJVGjjqPVjrPnfpJmsQHQQpsSsbsSDmm +NNnrNqNlrNcPTlBvBvgggfMv +llPrrLHBHCrRRBjrHCjBdrPmvJZzZgZbmgJlZmZhMhhmvh +pNDstVtNtGFNSDFScQtfwzzFJwmJhgqzbMwqZJmh +fpNsptGtQcTsSTccprddCWPrWdTRBMMCMd +TTtDVqTsTcJFgbCqmbCq +NWZQnllzfBFZPBGWQGzFPFRNNgHbHrrwbNrmCbggJRHR +nBZjGFjMQBMPZnjfWjstpcctttvVtcTttMpL +qphVCCwnHqhnRVznFwvLtBTLDTWZtwLWWS +JmdlsdlsjfJfrtjTcvtctDZSSB +rsmfPGbrPbPJfPmrsgMrdJdlFTHhFCqhNqVHnNHHCFznhphG +JsWFMJJzrhSSdFdldmmdmdQc +qLLgCVTgLbBvqsQPVdQGcRRmQmdc +bBCBgCCDbLDqTvqqjpShHfzrzMfjtHHSHsfz +nvFSBFlvvgQFFBzQnlQglmRRzqwsrrMJJMrsMqrfrwzf +CjZNCNhLDNbPZZLZZhwVjpcfrqRhsdJqdsshRTTdqJrJ +jNNDDppjpjDWNVLCVVDpGVVPBFtlSQFWvvQvSSQHSgwQnvtB +WhrQWBRWwhzgmpnSpH +LqMVsJVvFMJLJMsfNjsTJvCgFbSmzgpSHzmngHbGPCbm +jvMjjtqVjTRnwZQwBWwt +jfTWSGSTTWhgcngQfbtJfNzztBQBzz +pVVwsdppRVPLVmPsVVHsjPLPzQdzBzQFzFBNNrJZZQBzbbFF +VmsqHmjHmpvGDSWDvlclSl +PNZfTFSFfTFGCHqqmbFm +WjzRWrjVgnjzplrWWjJVppgGPGsgstmPCCtcmssQqGQt +pzjzJVvnzJjWvpPlnVRVrvnlTDLNNhwfdNZLfMZLwLhTNvTw +QFrQZMFVrVpVszzcNTdMRCCb +SvljGmlvLfwLhLLLHlHdNzsRthhbbRccRCRNbC +LfwlDmlvGBSjjlLLgpPpFJqgQndQgZBJ +RBjPRHdjPfqQcfhcdv +SngFcJZJlcnctSlhhsQvGsDGDsDnfs +pSmFgSWNJFNtStrmNtpCCjPVcbjjHbcWTBHBHL +vGjqCPqNPGFGNftLwmZwfQNTLp +hrdBCSHcCJJcCBShJswmLQpLbbQZTLLJmmZp +BdHHSzrBWdzchzzCcdzHddcDVWFnjPjllGggVlWljPFFFWPM +hBtZZnpbhbPZJbnhDtPnpBtpfjfNNzrrCzjFzFzFTjfjjWzJ +gHllMqRSmqcqMTdggMqHlcFzRrFQWNfvrRvzQrWjWvWf +gwqlgHmmdsgwlwMHZtpsbBbtDBThbBht +CsDLFFLFCvczsCsJrCrJJLRgbQQgmMmPbDDQbPnMgMmg +VlwNBNVhjNVNWBwWjtbRMRZzPmQnfQMPnlZP +VWWSSwGTwtwWWNVwwpqJJrcJGvzqCJCqJF +wLwSSbzwCvddlvvlSj +THnQnnHttcvpQzrZRllZ +sTntBHTnVbPbgzsbgL +FwHgrHvFQQwpHhNhTBLdpNNNLd +fCGqCVtszfSslCSzSGsfCssjNTqLTdmjNLBLdnTTTMTjTg +DccfslfgRSSVVzlcSVtzDRVHwQZFrwwvwFWbbbRRWwrFJb +CwwWwwFNRpFFpZQHtsmfqbQDTQTTqb +VcjzLjGjzGjGjVjLdzqmDqHrsmsqGRrHqGqH +RjdVlgdnljlBnSgPCpNwwMWwMM +tCCtqtbPGzsSQVzQTq +mzMmHMpRsRQTsFFV +DpzDwgdMzMLppNmNpDpfgrbhLcGtPrbtrbrbhnbBcC +BvsQBBBLvDQGjDvSQLTvrHprHlRpVlVllgRbRbHPqq +MMMMCpfJFZZMmCzwpVPCWRtHgqWgqClgtt +FwzmfzhFFdFcpvSDSBDThs +fQrGQbFFFrHHtlHPclzzPLvc +mTnwpNCCqMqjmCThpTpSvvtBczstlLznvsztsPPP +mCpTNhmmpCqCmjmpTjmLCpSJQZVfFVrDVfffFFgfgJQFdbgG +GmWjRBSfttcGfRcSclVVJqsTMllsgJVMVZwV +pPFNpfNCdNzCVMTTNqVssqJN +dzPfHCLLhdjjLGRnmnmr +GPhPfGWgggfslffPsVPGsqJMzLQJtBprwQJJGQwLpQrw +ZNdmvbDDbNvHbmZCcJQwMmzMwWWQrrwttp +bvdDNdnvNbnHDdnDHHRSbnqhqhWfjWFVTVhRVjfjFTfP +hTThfWNCDRfsVCDhpgzgbpPZZwbnZQns +GSjGGcCBGmdjdSlGBcmZwzJzpPpJzwPwQbzgPd +BGmcrcStcMMMmrSLmSMCvFVRFDhfFhhNDWWTqFqTvf +ZmjDTTbmqQCCQQSwvhsL +FGVJPmPmtRVRsCvvRLwwhC +JgdHJgmfbjzTpTMf +fTbsVCsssgLNrfNrgm +zQvzZlRvddvpNLpZrMNNLZ +HLvWFHHlFQvzHnnlnvQqhzWvstBwbGVtstjGqjjwqGGCcwGq +JNpNdzzdJhNnfNGBZLqZqlhvSZSG +QswtcmmwwmTmwwcwZSLlZLDSvSvlBZQD +FsVFBbFgFsPwtVBTwgTPcsmpzdNngfzfpCzJdzCJzNCndn +qcvrLBppgpWWWgLcpzPfhNDqdzqwDDzwhV +MZFjFnHFMHbMntMtnwStfddPhDffDfzDfS +QmnjMZnlHjmnMGFnFlMmjlZWzLgsGgcrspBBLCBcgvgBRC +sdfWHjZfrZrSPMCQ +zqtWRDDDRMbrQJPQ +zwhwzmqwzmFpWzvFqBmFvjNHlHfgVLBgdfVfNVjLsl +lRlBTlvlZfhtbGBWtFBz +cqCNjjqjrNrcNjwDqNPCVrSQStSWshFhtQhbQzGzmFCG +HjPPzMcdNqjcNHMqPjdpgpZflfdgnTfdlvlJ +VpwQJVRtHplnnwtppHhqWBCfVdNNPqPBPWsBDq +jzLZCrvvrZjZvqNffvDNDcWDWd +LTrZZLFZbgTzgjZZjFClJhTHTplQpmnQlpmpQR +JGJnSWLGSpWHVHwGGJHpZdwPdTTPMdTMDdlzccPMPv +gqrrmtbrbgggqgBtqmRSrFgNCzvMDvlMPDdddvzBcPMMMDBd +gjrmRgmtRggFtqjbhgbjrtnJJHWLHQWZZLhZsLLGHhSL +BtTDNggLRPdWQHqggg +wrVpVVlCJVGMMJVdHWSdPSqqRwSQSP +vCVrpvvGjlphBRmZBhmBhBND +lqDcZGcSSqSqbDnccSLJgHgLRfnvvJRLmvWJ +FVCFPChQzVhmsFBgddRgJBfdNfJdfv +FzCpmTQzjQCThppTSttqDccMTDGcDG +QCSGBGCrCsMBTCQwMGSfvvLNNnnVLDlNVNDdVdlr +ZHtPffjWbqgtmnNdvljFnFhdVv +JRWbmgmRJtmJMGGwSBBRRRfQ +LqNrCfCQQhtgnPnc +JWBrWrVlbWgbbtcb +VwvTBprdrVJVNLNMNNqfqpjN +bjVqdHrdqVHPsPNbqHbqNdjFGRwRGlttRtMtRtFFGMLHJw +cfSpZnBZWQBZJlGRJJcwGMGL +WWBhTMgDTZghVjgjssbrbddd diff --git a/2022/aoc2022/src/day3.rs b/2022/aoc2022/src/day3.rs new file mode 100644 index 0000000..9c89760 --- /dev/null +++ b/2022/aoc2022/src/day3.rs @@ -0,0 +1,60 @@ +use std::collections::HashSet; +use std::collections::hash_set::{Intersection, IntoIter}; +use std::io::Result; +use std::iter::Sum; + +use crate::file::line_reader_for_file; + +pub fn main(filename: &str) -> Result<()> { + let line_reader = line_reader_for_file(filename)?; + + let mut priority_letters: Vec = Vec::new(); + + for line in line_reader { + let line = line?; + assert!(line.len() % 2 == 0); + + let compartment_size: usize = line.len() / 2; + + let (left_compartment, right_compartment) = line.split_at(compartment_size); + let left_compartment_set: HashSet = HashSet::from_iter(left_compartment.chars()); + let right_compartment_set: HashSet = HashSet::from_iter(right_compartment.chars()); + + let intersection = left_compartment_set.intersection(&right_compartment_set); + priority_letters.extend(intersection); + } + + println!("{}", priority_letters + .iter() + .map(|c| String::from(*c)) + .collect::>() + .join(" ")); + + const LOWERCASE_A_SCORE: u32 = 'a' as u32; + const UPPERCASE_A_SCORE: u32 = 'A' as u32; + + let scored_priority_letters: Vec = + priority_letters + .iter() + .map(|c| -> u32 { + let char_value: u32 = (*c).into(); + if c.is_lowercase() { + char_value - LOWERCASE_A_SCORE + 1 + } else { + char_value - UPPERCASE_A_SCORE + 27 + } + }) + .collect(); + + println!("{}", scored_priority_letters + .iter() + .map(|i| i.to_string()) + .collect::>() + .join(" ")); + + let sum_of_scored_priority_letters: u32 = scored_priority_letters + .iter().sum(); + println!("Part 1: sum of scores of all priority items: {}", sum_of_scored_priority_letters); + + Ok(()) +} diff --git a/2022/aoc2022/src/main.rs b/2022/aoc2022/src/main.rs index 369c0f4..641ad54 100644 --- a/2022/aoc2022/src/main.rs +++ b/2022/aoc2022/src/main.rs @@ -2,6 +2,7 @@ use std::env; mod day1; mod day2; +mod day3; mod file; fn main() { @@ -18,4 +19,9 @@ fn main() { let day2_datafile = &args[2]; day2::main(day2_datafile.as_str()) .expect("Unable to process day2 data file"); + + println!("----- Day 3 -----"); + let day3_datafile = &args[3]; + day3::main(day3_datafile.as_str()) + .expect("Unable to process day3 data file"); }