diff --git a/Cargo.lock b/Cargo.lock index b141c16..d5e0fc9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,6 +8,7 @@ version = "0.1.0" dependencies = [ "day1", "day2", + "day3", ] [[package]] @@ -17,3 +18,7 @@ version = "0.1.0" [[package]] name = "day2" version = "0.1.0" + +[[package]] +name = "day3" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 0e0b2e2..656e3f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,9 +8,11 @@ edition = "2021" [workspace] members = [ "day1", - "day2" + "day2", + "day3" ] [dependencies] day1 = { path = "./day1" } -day2 = { path = "./day2" } \ No newline at end of file +day2 = { path = "./day2" } +day3 = { path = "./day3" } \ No newline at end of file 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/src/input.txt b/day3/src/input.txt new file mode 100644 index 0000000..2825c53 --- /dev/null +++ b/day3/src/input.txt @@ -0,0 +1,300 @@ +QLFdFCdlLcVqdvFLnFLSSShZwptfHHhfZZZpSwfmHp +rTJRjjbJTgzDJjdsRsfwtfNwtfmZpZNhmmzt +bMdJjsjglnVMFCCc +BZvZMBBBMTtZTgcCPdgtgQCrrV +VspNDDpsGDGnRmRpRplQdrrPcPCjgDCcPQCQQj +RVnsmspnpwFRlHGRwHHlnRSThSSvBTbFTZMqTMZMTZFh +ttffrVJWtWpgtQnZGVnNSLTHSZ +jRsjjmhdRcjcRsFcdwGLMZSnHMTSMNZN +RjczlvjhPCcPjcvRpbglWplJBblqrGgq +NwCWwdNQNDCwGpWNQwmJtZgPZrdJgLZcPhLddr +blqpnFTqrLbcLPtV +MnjqSSpqlFRvSqNDGHvWHQDwfWmm +jfLljlQhDLmlrMJQtJTJrQqQ +NpBbjjsdMCgCCMrb +dwspwGnSHHGsGzDDlFDjVWjfZWnP +wQhTZwvpZFZdqWLnnwSrWC +mfDmMFlDcPLdgDSCLCqg +PmzclsMclMlFsHHsJZFHpT +LfLJWNdJnBLfhndfWdZqcgDZgSqgCCSSSLDF +bQVQmrrjPqQDZSZBCQ +RRtGjVmRsPbPrrnNNpNHHnBnpHns +PfbGNwGBwNcPTbGNQFBVjsjztVztVjHV +hrdCJhmlJhZrLDRmghrmDrzqFsbgtbHqnznzznQtbjtz +WdZdDJCDmrJmLZrLDLDZlClcSccwSPbNPfSNWfGNNWMGNc +QwrnTSgqgFShSdfHPdbS +BGdjmMmZMvfhvCZZPf +BzGmzVGGGzmzGpVBtdnQqqdTQQDDqrpR +PPRPwLQlLtbPmbwgJhrSssNlhhrgsZ +fFTdFvTMNfzVnFqdnjgSSjjsSjhghpJs +dvczcFzNTWVWMFLcLbQQwmbHLCLL +HhLLDfMmTjsjmLmhsmmfZMjGtpGJtdcvnCWtZJcWGddttW +gwrwwgzwgDpJddrJDr +SBwBBbgVsVmRRhDM +SZdmfdZRTQZTQgHVVGGRqZdVCjCcNCNcJRWcCBbJjCPCsNsc +FnhzMMhDDFlzlnvpwMLrMDCsbcjNJbcJbBcBfPhCNbWj +wzwnpDDnLvFnLlttLrzGgTVGQqZtTqSqSdfZTg +FJJWWWrCGWdmzFlTVqqlMhmvVlNh +btpgtfjZjjhgggrNMThl +DpwpfRZDZwwfwjsnjfsZnnnwGcCRCHcCCCLGHLWcrcFCWCHW +ljHHHBtjQthchhZpqqNt +FTmJnPFwzlJPmzTgTgbFwJbMCpbMchhhqbhWCDMDhZcppM +JwlFGwVGnFFGBGjdSsfdsG +QsvpGhjGgswvjjwjjjvPpThJfLZCCLCSSLbFLStCFCSgtH +mDrzdzMqqnMrDMmZnqnzNVRCStlCHFSCtJqlCLFCFLfJfJ +mBDzNRWBDDMBpGsZcGZWGjPp +SlLQhQsvvttFlWsWcfHHMTJfwSHwTfTf +VZmmrRDRfpTHJcRf +jzBnDDgjPchWlsQsBW +LTLVdTSLNTLnTSnrWvdwswsfmJwmwGsffH +FbgCbRRppCpPbgMcZvCcGftGGltwHwGtplQQsfJw +CRBMCvZZRgMgBbDCPcDrjLzWLVrSSzShSSNrBS +hVJJjhjRVRZjQvDfBstsBVNBdwstHsld +pCTCcMqCThTFLFFPWcWSPHtwwdmcBHHmNtHdmwmwBl +rMTCCWPLLPCMFhDnDrjzRrfDJD +pqMpCvMchvFNWSBdVNqQ +zDRJJDGJJtNtmGRRWVdFWWVdSfjb +DDJLmnJmzwGmGLTPhTCNpgcrpv +cpPpbPWVprWcbJrrwpCwwdWrvNNFRqzNnChgqFzFnZvqFlzq +fTtHLfSHSsNDGLSmsLvnhFqzhzlzDhhvRlFz +mSMLHTQTmHMSfBSMTPdBJJNNVddrVrbjbJ +zpCpBTnFgFbncznbblzdhRswdlJsLllJdw +QqqmtWVPWvHDVmqDhjsljwRhlZldhRMQ +tWSHDmVfmrtPHVgGRRbgTRpSgpTc +ssTbzFRtPRwTFZtvbPRMhndBqMMvMBHJnnHMMd +WQVWzlGWVBqqdMQJMq +pVSpSSgLfjDzWrLGWWjDzzfLtbRFFNtPZRssspsNRZcRsNZb +jnPzzGlnnznWnzhvGnnpVFrZmVFcgjrrmZRFtj +fsbgTdwdqBbfwCptVtdZRcrRCp +gsMbgfHsBSwsGhhJWMLnWPPJ +bpmbJpNbbbNGGmRJzJTsfdsvsNdglfhssCvC +hWLwQjZjLhjHFFBLZldvvflrvtfjCrfjlT +QWVQZZFDcDJJhJJc +RmRghgRlNgfGGRmdGqhsgsZFZZpBvHpZppHcgH +tbLCDLnLtSbbbjtPtMLtDPTvHHBpcHcsHvTcHsmZcF +rSLrMJzDznzGmhNlVwdrRr +vWjljMWcnSSpjmzbJVzJrTCmtGJV +NZDDQLRqPJrPzrprTC +gqDqqwpdHWhlgnjH +ccptcpstDvbNvHbLNRZZ +dFjhdnjQFJlFCQSjgngJPJgWWrRNWNRtNCzrVbRzNVzZZL +PhThFSPPSpsmTcqMwt +cLcLlMhGMGcpGzslHFHFvnHlBDvWbT +VHdQwqPJdPwjJPdPQRrmjjjQnTFrbvNWFFffDvbvvNDvbBNN +RwRJCHmmdQJZZLzGphcCtz +hVvFVjvjVWmFRQVZqTpqtwQpwpqZfp +gvDlSBDJSlPLcLdDwzwtptqTTTzwcCCt +JgrJGbLgvnWsmvVr +rwmqqRqrnHQGmnjCCqCzdBzCBJBz +hFLgbWWPWmvtLhPtgpcdjJdcBJdpJjDsgp +lvfhSSPWtTNTTZZmfr +bHDDssRHsjNMbJjJLQJsbTtGvSCzCGQCTzGvSqSBzT +mmVrwhmmpfPStnTSBnhStG +pcwrptZcgFcmpgHRDjjZlDJsjbbD +JJRrmFqJMdFFJMjjJcqGgzSCSHSCscPCHPHGZc +VWpWptnvSmpPGCHC +vQnDLBmbntvLBbnlldTQFlJlFFrNRd +LPDftnHFQfwmBcBGmc +CVqRsdqvdrlsCVsNvqwwSpTNSSDSDDBBTTSN +lqlDRddjbblRbRqrlRRjsbvghHHnPQWjHWQWZHPHWZhFnP +bwQsDcgsJqcsDpcQRQnpqtVSVvgSMMMfMvfVBVfdvM +CGZFrHHPrTZNGGZZHmCZHlVfjfzjSfzBtBBNSBVjvntf +ChrCCLGrTlhJnhDncRbp +nmFnhfTQjSzfjddZWsRRRFRFGl +HDgCwgtQbZlHsrqHHr +cJPCgCCPbpbgDMPvMQnjmnhTfmzLpQQmjz +QFHSQdNMCSgcSgFtttPNFJpCpnTjZlbblpppZplZjz +LqLsWMRRfrrWMmMGpbTnbppbZnTjpnmm +fWBrMqWsGswGfGRMMwrLgtPPdNFBQPHNHNPPcFPP +dngbSppJSSppbVMZQQMjqfQQgwcl +TWmSWtvCRCWjwfjqQqMstq +FhFvRzSTNmhHnVPhGhBJdBpB +gcHPgzGmPPwTsSTsbwbdWD +QjBLLfVhhBqqBFQLrLjVFlNpNDtsSWTDdNptdbqbdS +jCMFLVjFBFjJJLFFMVBFrLnvPzHRmHPGnGWWcCvzHRZm +PDPqWWjhPpPbCsjwjTVbLT +SrtCttGRMddSVwHFSs +JtfvttmrGMRRJzJCqhqqqWQZhCNgJZ +ChrCVFQCVQlwQNwpQcmmcjmWBmddghjjdW +sbDTZStTqqfSBggPmWjWWNsL +THqqSHDTtZTDTHZZbHTzRzFvlFCVprFprQVnCzNppQrz +PdfWCwMWjPSrdgCMnnlGsGQvvpJZvFGnps +DmBhVBLbbVqVBzTRLBRzzTLNNpRQNNZQZppZvlQpZvllvF +zVDtVHBbbTbzDbrjgWjMPtMWPMlj +JLsTTNDsgTMNvDQpLpGpLGNJShrfzCFnSnSrnfzCfTFhWrfw +ZcqrRddHZZVRfzWnVWCzWFnn +tZHZtrHHPdRtdHlcccQggsplpJDNvMGNGMss +cMCLfStfMTCjPMPcGzjftMbgsRNmRgmmGsmnJbNJbghJ +QHVVWrFFWZNShHSgbSJm +qZwwrrpqpZpZFvqrQdFlQVSwLBMBfTTLTjLBCcdTMzMftPPB +SwsdBTvgvJLPNptpCpCmBDtn +wffrzwGFWFNZWpjWZnNm +zrfflbRwJPhbPbsS +HjHHRtwjnjRblQRttHwQGvGWNNBWvqGzfTvfNN +FmScCcrsdVZrpBrVcCVFzffvzzmWGLWgqWqgGWzW +SFVSDDBdsdDSJhnjJltJbPtHRM +FjGFVqWrzQFlQrZzGQzFLTvfwwTgMnvcnbRMLRdnfb +CCttSNsSnRfgncSg +CNspmDBPtPmJJNBJPNpDhQZVzQlhqrGZflfVjQFrQj +dNNdHWcmdmPPptmmWHpPTFFjJPGrQsVsPQGGGJVDrVVGrS +MhZlZhlgflgfnfDtjbjJGbtnVtGS +LtZqlzhzqMZWHHLwdHmFWp +llNRlfwWRwwLlwFNNgRrVCBjdjCVdjpWjtVWCD +HTQqzPqzQPmhhmSPznSsssJtdnMZddtMCjprtMjCnBVnjZ +PzHQmqsGSJPSmQqPbfwNcgNbNgNfBGwR +lPdzlZPzQzMZQGQrTZvvpjHTTpfsTTZb +zRShhtWRnqnqSNRnDTTHvfNJspNsLpTsjL +hBVncVtDSnhDnDBBtGrlzwmmMlGmVrMdrP +HPTZVHVPlHDPlfgnjJFdJdjPjSPqCS +hLRRBhwGhqbtmsRSSSjjdMJjnJGSMj +QrQtqrRrcQDgVglc +ZTwbbZdchZZjmVWHTrHWBVJtBB +glslCDqLLDfGRqlsgLssfrCHBHFHmrHBBppFmCJWWp +fRzvvvgGgNSNvmQbSQ +qPGGPwCTqTzHCvPGqWdLFLssLpstLLspvd +njJchhcbjbDrbcLNlLrpWWrLLHgp +DQhMMMJQMQJnVbbnRHSMPwZmGZPZRTRCwTZmZGwz +zzGNfPbcgdPqLrqvWWVzMq +DGmJtnJTJRhhJMhCQqCLCLrrLM +ZnHDtSZlTBHnBdccGSfGcwjjdb +FpZDpQZDvMwZpCCMdCBPpJGPPLgJGGLffJJL +jlbswNrlPPJJfGlf +bnNwqbHnNwRSrqhbdCcmHddQzddFDdvZ +gbQQQngWPVVtvvPQNVNvWWSHGwDsCCmDtHSlmrssDmHs +fqhMLFFMMZqZMRZqMjRMqLJSCdFlrrldsDrCsDSSHHGCSC +MJRZLZLGMcTqczjNPzNnzPvWBVgNnP +gqdbBffTvlRHbwLl +nMMQJQpGdsFpQsJzNMRLLDlmLLmjFFmLjDRF +pzGMnVcMBfTdtBBV +WSbfmrrrrWdbWmdfDSSStmHjtMtvCLVnqBHCVGtVGnMM +lRcgFRZhJgnMLjvGgv +lcvwTcFTplvwphzcTTJTbsdsPSPDdbmzmDSWPsSm +bbdTjTQTQMsZNqqhJrZslg +jFGVjwfCPVGfwjCVqWhWZFgqWrglllNN +PjfSPzRBjCCfSBCGBLznTndHcdMLbMmmdT +wSVMJSVccdGwGnsgbVTTbRsCRNgN +rHjhHLmrhPJrqjNTRDgBbbRRRs +zqmPPqqpPLzltrMdJcZpfdpGWWJJ +ZhrBBJGrgJhGHttGGVPPcPPF +cnzLqNssfRnpfWqsLfcfWQNMbMVPDtnDtbHFtMbPtVPFFM +jfqzCCLsWQLcjgldjmljmgTd +wghGSSGZPVwgqtwtwCCtFFMM +BvbspnBznvvWHWHHHbCQptQFQlFcqMClqLLq +JWzzsJHWzfWjJrvMBWHBBGDmVDrVhZmmgSPSmZVVrh +ccRMJRsjjgJgcPCSCCVCwsSWVNzp +WQQqnmrBWtqWqdSbVwwBSpbbCSBB +QvDqmqqmgWPWjPvW +msqpjDWspRWwvFvDWWhnbbJfPzFQblJJPlnz +gGGrMTgLVBsBBLdsVTrSCBffHQfdHhnbPPPPffndlbzh +ZCVsCGSScsLZpwNpqmZRqW +PPsGmJPVPQPZmsQCVPJPnPCMDcTcdqDDTqvFhvnTjRDTDchq +BdrtzNBLHStHrdrlwfNThvFhcvbDccThjbFBqq +SSgdHNfSHHgzLHtLNWSPQQPMQVpmmppVCmQZCW +pPssrWWLdndHPJdd +QNQFTLNBFTzzgjfGTjffFNZjCSGnHDnSDJHnDScttDCcDnmd +FVzVLZwZZgswqqrbphbR +VpWCZjCwWnppZpqnhNjjNZjFLtLzQJHdHLQRzWLRzRztHJ +DMGPmPMgTSmsgQzRFbdHRLJgdn +csDMPMGDDvMSSPnDTvrDChhwljlqNNjchNCjNVcf +WpGGmbSGpVWWpjMMTNdfCFNdFfRNwNSF +JsQztzrvrJqsTTRbbvFBhhhv +cLrDqLccsLqbDHGpZWDHgjGlZW +QGMQJMmsJmMCmmqjsRvLvvdgvgVvDVdD +BDcrcNbNppwTpzRdvvchhFvfFv +plBBwWrbpQHDjGmGJl +mzFlTdmSDzrPvCJqqDVVNC +hfRmhgjRhnfwnRHcnhGGvPJQPvvfLfQvNLGv +BhhnjMgRWghpwjRWMRjrZzdbSbsdstTrltdmMs +bLLnbqjpvplnDvNlqpqBWJZSdPJCNdJJThhSPhTd +HFwHHQMMFHGzGwRPPJPTWthTZtJSQr +mfWMHFHWHmgmFcwGwwpbDljqjBDcDnLcVnlb +wBrWBwSWRJMBwdZnPQPgFnwGVF +fLjfbsvDDfvvqqGqZGqmPQgqTGGG +vZLsjzjjZCzJWRNSBR +jTRbRHHqPqTRBHqdjhgvgghhZQdDvvgvhC +WLWWzzFszsmNFGWSFmMrpghCtZvhlQNDgQCDgctC +FJsLsSrDmsFSDLWrzJmmMsGqjRBVbJTBVPVBbBqRjPBjHn +QbwwnDDQDcDfSbDbfhhrvrCtJMvJSCvvJh +FWRjjLjmdZWdWNBFNWNlNQQrMGvvMGgssGvQRvrMJs +BjWdlBpmdmBWFWdpWfPfpVnVwfHpqPQDbq +SqrvlMldqvSWdGPTGzWpWpzpHP +tRwmhtbsRRFsLwGGTVDHppTNdbVp +FRCRQdCFtCLmBhCcmmQdhFdCvnfjffjZlZnjSnvfcSrrgMgn +GQQtNJQWWcqPPhMMtwqD +WpWLlBWZCvhjwMMZqDDP +WgvmLVmHCbpppLgdllHddvCmFGzGnfsJJQJsJncSsccFVffF +HcSsSlTTvvPPWWNMWWgPTPPbGbbrwJQbrrDphrHJJRpRhp +ztfLqqzmRwDGlLDb +fdVtmqjdZBmSvjsPSWlTgv +DPvDhhMRRMhRNDLPMNsbwHwrjgnddqddrWdPtHzr +pcBGSpcVBfJWCcmJGGwHtzgrrtwqzdrtrngG +mllBlBZmMlQWRbQv +SGZBSFMZllJWmzvfpp +NTqbNrhHNHWgNqHrNhNQbbjHJLcnfnzLLnLmfcfccJcfQLcL +HggbTNRRTHqqbVSGMSZVWDMDwVPs +SBsSlvbPlFPvRlbPsMFZLgVLrLsJVgzrCJfVCH +jcNddNdGzZrVgNVJ +tTGwdcmWGdtwQmwmwZdwSlhBPbhPTBFRhlhSMFMR +RzStzTzzvvQvSHVvhVgBqMMFqhPM +ddlLLwNVLWLjbbLrjrbWrwmlhcFmBGgFMMPgBcGBBqPhggMs +dLwdVCVWWdfNwNwLrWrbfbJNptzDDHRnHptHtznHTppnQCtR +RzcfMBHLzpDQFmnDSWNB +dbqjtjVqJZZGjPGJCPGbPndNNDglrmQmNSDgSlSSng +hjCTqhCJbhVCGNvMcfvhfRLhvchz +sDDqDMtqshJhPvhhCpSCCWlZHSWp +bffRcbBGGTwGfGfbNjgSHZSgWwplHCClZZ +RTQBbcnbRNmGbGTQLbmbJVqLllsDVMsPDVVvttMd +nbLBjnqwgfRRBgBwnllbLlwScvPdZPcScZPcdFZJPvZPvcMZ +tChQpphHrrHztssZdcDJcPZcMvWv +hpTHVMQMtQtVpzBfwjfRnfwfnjVl +ljJlvvJQlrlcJcWpPzgthnPnzMgpgSpC +smtmZBmHZTVttHmqFqmzCSZSdndzShPNgPShgP +bVqFHLqLqfHHFwbBLHcwDQrDrtjlQvGjlRQQ +pwhVsPvVVCFtmhPhzqGqqZMZvGTTTMlGWM +drrrrDfDRrNQdQdrRrBdjGWqWqWlGlGtlGbGZGBTLc +tSDfgnHrdDtVSPSshJCSPh +WlWlDqhglLhsdgrcbFdJJpPpdBbB +ZQZvSvzRMSzjZjvZmMMpbFPQFVBrVbPcpbJFLB +SwGZmjvCRSMRjMzZvRnstHftNfswHsflLhNWHf +jsprCvGRQrtjCsQrGsrzvGHhgmHVmHZgggmMGVmhMbHm +FFFdDSdwSffJWqqMzzMmDVbZ +LLcdcfcfPwwBzdTTdtvlsrjCtvPvprnsjR +MvtSqNSWMzjwzFTD +ZRPlcRpQszNgszNwVT +bcZcrcPlcPLLLZllPlbcbLSBfWCvHvWWNSmSqNqfWN +rNdZpMGnddgggwHwzRPCzDDD +vcvhcTLhZLhLPCPHPDPPVvzH +LTmBmthWBchWLttttFJFLlFnGJNsfpdjNsnMnMpnpZdssn +ZHWFCvqBDdqqqCTDHHBWrgppTMhhVpspMPQcSgQVPS +jblbGffntRwltfMQVrrQscphfg +ztJrGtbwGztbmtzzRGnRznWNNCWmHHdFHdFNWWHHqCqZ +WGWSSZvVvqmrmzPm +NgjtwFFlwDsFghNsMtlcjljcPqrQHcZzQznpQQprnqqzHQ +tgMCwNhtgbdLZRbZCT +PQSPQrSGZnGnVFhpVhRRlvLvBDRV +tjctcjTMMpDTvFTlRD +JCftsccFCcmsJJGZGGmPHnQrGwGS +TrjRFFRnpnRCHNFSjSRrffJvJfzqQBsjqQqzzffd +ZtlgMDhZhgmGDLVZLlGtLPqdQQvvfBJJqzzBPdMzdd +VlLDgLLDWtGZwgtRNTNrFTqCwqHTrr +LpcDFDMMPjMLLjpcDGCHgHssGHWnbCBWBHvm +QfZhrhVVdZThlZlfVvVzZrTbgQnBHsCCHgJBsCsJBHmBmn +wwtvfZztlTVlhtrzzlLNpFFRjMPDpRcPFwRj +VzZhhQHQJJWJSSFWDGclbmNPgglPgVGc +ddBTqCjjBCcrqrCRrwGPGmmDGmbpBGNpNNgg +CRMjwsjwsLdLRrQFJSvMFMWZcHFW +JgJJPvtrhRPQQzSRMQFFSF +BLqsjsdLsMBqblnsGbBqVqdwSQSCSWwNFwczQWCNNwNCHn +ljqbpLbbdDlbDbqDDVtMttTTgpJJgThhJrJr +nflndmjbSnlTQGwvWGPHGRGj +NtstcMcDJMvwgHfFvDgR +qqqpLrMsLLqLNNnzbrdlbZSrznfz +ttZCCFjNjnPVCFQPPFbbStrzqzqrrrcwtmJJ +gTTMRMTWsTGGTddHTTbBzBLSmqbbJGzGmqqb +HpgpMTvRhHHTRDhMsHdHDRhjJlVPJjNFJnnFpQQVfPCjnP +VqJVQPpjQqPBbHwldmLfVVmd +tMGvrzzDGCDDddwLbgLvLwcm +TWDWCzTZDGMZtzWWtsFhbRRqRQRjhbNQBBTh +zgLgLHnnzCCvnsHSsZBZBsTRdD +rslllhJjcQNNGjpWJlSRTRdwBVSSNTPVSdPB +jGrGqjJfqccrfqGcGplrJpFvzggqmCtMzmsMnvMvvCgm diff --git a/day3/src/lib.rs b/day3/src/lib.rs new file mode 100644 index 0000000..3580122 --- /dev/null +++ b/day3/src/lib.rs @@ -0,0 +1,68 @@ +use std::{collections::HashSet, fs}; + +pub fn start() { + let input = fs::read_to_string("./day3/src/input.txt").unwrap(); + + let items = vec![ + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', + 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + ]; + + let mut sum = 0; + input + .to_owned() + .lines() + .map(|f| f.split_at(f.len() / 2)) + .for_each(|f| { + let pack1_ids = priority(f.0, items.clone()); + let pack2_ids = priority(f.1, items.clone()); + + let prio = pack1_ids + .iter() + .filter(|p| pack2_ids.contains(p)) + .collect::>() + .first() + .unwrap() + .to_owned(); + + sum += prio; + }); + + println!("{:#?}", sum); + + sum = 0; + + input + .lines() + .collect::>() + .chunks(3) + .map(|f| { + f.iter() + .map(|f| priority(f, items.clone())) + .collect::>>() + }) + .map(|f| intersection(f).first().unwrap().clone()) + .for_each(|f| sum += f); + + println!("{:#?}", sum); +} + +pub fn intersection(nums: Vec>) -> Vec { + let mut res: Vec = nums[0].clone(); + + for temp_vec in nums { + let set: HashSet = temp_vec.into_iter().collect(); + res = set + .intersection(&res.into_iter().collect()) + .map(|i| *i) + .collect::>(); + } + res +} + +pub fn priority(str: &str, items: Vec) -> Vec { + str.chars() + .map(|c| items.iter().position(|p| p == &c).unwrap() + 1) + .collect::>() +} diff --git a/src/main.rs b/src/main.rs index 864e0be..1abac5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,9 @@ use day1; use day2; +use day3; + fn main() { // day1::start(); - day2::start(); + // day2::start(); + day3::start(); }