diff options
| author | Shivesh Mandalia <mail@shivesh.org> | 2022-12-20 21:38:16 +0000 |
|---|---|---|
| committer | Shivesh Mandalia <mail@shivesh.org> | 2022-12-20 21:38:16 +0000 |
| commit | a1c075cd023714d61a6c9d7bc30a1b711e648d7f (patch) | |
| tree | 5a6fe056a9092ca402d8820a723868f39443d0fb | |
| parent | 277254232b852283cbc6bc6a0f31a588c458bf6a (diff) | |
| download | advent_of_code_2022-a1c075cd023714d61a6c9d7bc30a1b711e648d7f.tar.gz advent_of_code_2022-a1c075cd023714d61a6c9d7bc30a1b711e648d7f.zip | |
complete day 3
| -rw-r--r-- | Cargo.lock | 16 | ||||
| -rw-r--r-- | Cargo.toml | 4 | ||||
| -rw-r--r-- | day03a/Cargo.toml | 10 | ||||
| -rw-r--r-- | day03a/examples/input.txt | 300 | ||||
| -rw-r--r-- | day03a/examples/test.txt | 6 | ||||
| -rw-r--r-- | day03a/src/main.rs | 105 | ||||
| -rw-r--r-- | day03b/Cargo.toml | 10 | ||||
| -rw-r--r-- | day03b/examples/input.txt | 300 | ||||
| -rw-r--r-- | day03b/examples/test.txt | 6 | ||||
| -rw-r--r-- | day03b/src/main.rs | 94 |
10 files changed, 849 insertions, 2 deletions
@@ -97,6 +97,22 @@ dependencies = [ ] [[package]] +name = "day03a" +version = "0.1.0" +dependencies = [ + "clap", + "itertools", +] + +[[package]] +name = "day03b" +version = "0.1.0" +dependencies = [ + "clap", + "itertools", +] + +[[package]] name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -5,8 +5,8 @@ members = [ "day01b", "day02a", "day02b", - # "day03a", - # "day03b", + "day03a", + "day03b", # "day04a", # "day04b", # "day05a", diff --git a/day03a/Cargo.toml b/day03a/Cargo.toml new file mode 100644 index 0000000..ed56058 --- /dev/null +++ b/day03a/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day03a" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "3.2.20", features = ["derive"] } +itertools = "0.10.5" diff --git a/day03a/examples/input.txt b/day03a/examples/input.txt new file mode 100644 index 0000000..60251e4 --- /dev/null +++ b/day03a/examples/input.txt @@ -0,0 +1,300 @@ +BdbzzddChsWrRFbzBrszbhWMLNJHLLLLHZtSLglFNZHLJH +nnfMwqpQTMffHlNNLllHnZSS +cGpcMwfppfqcjcTCBBzWDsDbDrjzWz +LhfjhcdjcGdhFfdGfdjdvwCCZMvvLvWwMLCLSwZC +rDnsbmptPmlbQMCrQWQQBZQW +gltgVPngDPbptPsbPzVgmDldfTdfczThjJJjfMcJdFHjjH +dGlgDflTLLLrRLTLVdQLcQMnbvHbbFzNNvMbnHHn +sZjWJJCSjWqfCqSjSmJSbFvCzBMBBzHncHNvMBHN +twqqwpZwfrlwRwDGDR +zCGGFTQMQrsNRNGZdR +cLLQgPDpgcgmvPRHrwBdvrNZ +glWpmJWQDcJpQnpjSmbhFtMnqFfCVTCFCFFM +zNZWFNZBFrGTdBcZZBdJTrGrmgvppgDHwHmgVHCHCvCPDjzC +qtqqPnLSfLwvjvvgvvqH +MtbLLLQbRfPRfnbnnLMtnsbdBNsrGWNWcNcTBWZrrcrWcJ +sZwstbbDVlHtbhcrhhZLrRpNQN +jqGjjFjWnzWGgqWjJJNphnLMRhLhcrhcrSLN +qCJzFJdvmHvbtpbb +ZSRsvvQvZpsRQGJghClPCwGPChCP +FVdMLDdtDRdDcBtmcVFntwgJJTlnNPwJnlTlwlTPgN +VqttMWFmDbjbzrSWRQ +TsDSBcwshdwSCrgRWZBvgGRG +LPVJLqqJbbzpFqwpbvgGRmZPrmZgCvCCfr +tzJlJzQllFLqtwHhjNSdtthjDhTN +fsDLDDnwvnSdqLSsFSDfsLpbgVttPMpPNjMWVMNfpjgW +jhHmBmlrTBBHRPVtMZbppNPPZB +JmTTrTmjRTJqSQQSFqQw +HPzZFgPFMCHJCcZMcDQGwpLqPLqppwhGvv +BrWRqbqRsTSTqNddrVrthLQVwnpwphnvnDnGvGDn +tSbBfsRbTfqjJqjCqm +pCqrqzmqZzrmCCvCJwJPBRwJBWBmwWBJ +VqbqbjFLFfSHnfctBwDdDFTwtRRTDF +LVcnbjHLSqHnhbSGGppCMMZMphpNrQ +PhTcTPsSPCMvvhhMRPttbNWfNsWFNfWWtpNw +rdQrDbJBVVjrBVdLjHHHWNWwfHtzzNtFpZZptppg +JJVGGdddjDjDJmdjGqqRSbPMTvcRlqnnMlvT +SqGfTrBlSrrrfGGQvCnqZhZmPPhvJh +LdVNwgsjdjHmjWwDsDpwsHWtnCnQQQQNnvCnbJZQbNbtZZ +DjssDHLLVppDssdLspswFLVjzfFMTfSBcTRcrFSBzBTzmGzr +JSJJqlldpJlcdVWMlgMJrcCjrhzHCwTjHrQzwTzZ +bBvsGBGNFDNRFNFBRDPsDDHCChhhrZRQQzhjhCjTzWCr +FvbLFGDDtWDFBnPGFDWGqJMgJpSdVStllttlppVS +clpBdBQBsqGpQbVdqTTWRTSFgLLggffg +NzvwmHvZtZZgbDSCLDmfmm +jPJjthHzNwPvvjwjNzPzztZBlrccpbVGBQhlGBVlrpnpBs +NmFFGlGmzCrNWHvFmFWCFvQPTdDDlbbdgJPtgbbdPDcc +RwfBqLwZqffqnPbdDgVQDdtRbT +hnptqLMMLwqjMMjzSzHmhvNNrvvhhz +hqVrDdPdVDqjsDrjjqsfrrWlctvHJNLfvNcLHNNZRNZHvfZL +CSnWQSGBBSnmBnTmSbQbNZZMJNJMccGNHLZNNvNv +gFnmBmBnTCpwmBbgWVqjPsrsjplVrjlqPr +vgVgJJCphzFjzbwljwww +PWmfDgrPrPWlSWqSWlSZ +rrTHQTGTPHDDHgPrcrcPmDPhdtGvnvNnttJCdJhtGVnpdM +DDDhNgWNLWgDqDgtgtwSngjVSQdf +cvFrcGmBrrrCdSfSJQ +mBHzFFvFzmsBspsFsZqhqbWlWdPDlLHbqZ +TLNpGpRzwGQLLQRTwdvWdWbdbgdBlblb +FJDVzZzHfZHVzcHgnvHnvngvvc +MzDVSmZPPrqhGmCqQqLR +mqHWcBHVcgsbhhnTrrTg +fWftGtfJpwJMSdFDLFSGDGFnnNrbrhTNsZnrhTswZZnnsb +dSftppdSFStLDpQfLjWHQvWBmmqVjCqcVv +frfNzgvzzzJwJqpRcP +VdVSnGnHqhDDTdqhdLWmjMTmjMPjPmTsmsmjmR +BdGLSWtBSWDtVqdSDVGqtSSHFZFZtQbZlZfNgFffrgNrvgrl +jBVSjsJcLcqqjtgcmRFRNFFzFm +CnHnWQQGGWnnCnfvCTmZRZgNtfZtNDZPtNDtzl +mWWGGdmQQWwrHHMBBBhrBVqshBLBSL +cLtFcllvrslGLcLHVzDZQzzpznWzQtQZ +TmShfSSPJRRBBfSgmdfBJhDNVpGzVZpzQgZgbWzpnDGp +BhJPfSqdhqJRdBdPqTJBChvrFlHvvCGCccHsMscvrHvv +zfddZTpZLzLDfLtDCttdTfZPnlcPcnhjPDnlcjMchDPjnP +MQsFvFHJsQvmNvvswljgbPbwlwjnmcch +VFVqvqFQHqVJRVCBLpqTGMzCqtMZ +PZdVgNdQQcdcZQtGhnHtBlvlvWTnbBHWWH +CDJmzqFmMmLfqmzFwqfzfwMRvpRbTWBBWDnlnbnWnTNTnB +zFfffjCqwLJCfrCFjCLCzCMsjSZjQNPhQGVSQQZhsGjGgd +nbHntnqPQwTHwQVC +BzfSZSpcBZpzpPhSBjRTCBWTTRWTTTWR +pvZpzPzNfhddJGmmNnJb +GwTgWlvbgTwMrbwTrlWvwtHBNtNvBhBtdZcShHDtNS +PnndmnCmnJFnsmRdmFnnZDhRRScRQQHDtDNtcDQS +CLffLsmqqpJljVdlpMpWlr +dPCzBLTSLqmqdSCsmrTDVQjZfjfVVZnZhhhLGQ +wwFpgvPJNwgPPwvZGnQhbZQQFfQZbf +WvRwwJpHHgpNMNqdTdCdqrmHBPtm +DbWwjSGFSFfwGfCwDSSPPjLhgrrLWRJRgggJphLzpJLq +lQTnMHdcQBvlHMMZBcHHTrbzpdzgqrpLdqzzVRVRVV +vlvlNlBQvBZTQBnHnQTTBBPwPNCCsfSFmbSFfmGPwFmj +hGGQtbVjhRqlmqqrmDlpmw +gPMZsMgdssCPPsvrgZcTZTPSnnLLnBWDwLmwWwBnmWSnWNWB +TsvgMPdcgCfMdcsZJRQhVfVRVQFFQGtr +NfpFTTpFNbpZMRFrJMMMCv +dWJPngDWBtPVBdPVGHZzCGHZrrvZRSMSzv +WDDDVDPlWnLBVgnsgJmQJNqThNmbjlqbbh +vnznqvfrzzVzrvvnfVqztBtGbMCdGmCcdccJccCLCcpSSgcL +RQsDsljDlhssWshHhlhsHTlLbgJLpmgbbcMSpSSbcSJgjd +WswhhHWlRTsQDwWHTRhsvNVvwqzfVmNBtZNmnzzq +cjcPfLlQtPsZQlfHZJqVSFdVwmSRRqSSddwDvF +MgNbBgzgnwdPRFmSPn +CMGbNNMhCMzzPzBpTNPGBclLcLfsptHQfQlZssLcLf +slsdfpSlllpTVJJGgGDgHMdV +wrBQrbQrhQcpbQrhLwRBrjVVgGGPgZMtZMVhgMPMGHPg +QQwRnrwRbbRcmQmrjRnjpvNsNTNSlTmsTqCSvsNSWz +GWNwppdHdpmzgPFPCRmlCBPB +bSrJhJSsMhrJMDPRCPBlwVCtVSLV +QbsbwqQZvrJhhQrhZZrhchTfnTWGNvWpNnjHGvGjNdGT +NMZGmnMBWmwmNnGwHrHvHzfrvrVVVj +pSbDRLgbpJDPpRZRQjjFqVhhDFjDVqfrzv +sQQscLTZcsTpRsBnmlBcdCMBMtlc +hwWslbGWbRvLZvcscZ +gQnmmrNTmSnTfgwDwVwpJvJPJzLqLJTLLvRcZz +mrmnSrDNNQSmmwdggrrDbHMGhtdtGhGlhtClMGhM +qQdlGcvDQDQvDdmtPmmmlStbjSrm +CpNhzWTCTRznBMvwtTjMrHtSvj +nWzsfZCsBhNpZLgGdQDddvqd +ggjTjJWDVVVRTwQcZWvchshWhs +LmFfLfSmBtCttNLfCFBPFNBvvvhrcQdvsrsdSwdqcwrwSw +CHttltmlPLMHRTgJQDgRDTMb +RPJgCdhgPPSzvWDcCfGHDcvf +HbrrwBspTwWDDnqbZjjD +rQrFsrsstQMQHJdHQm +GVwQVGBZBNQwsjdNcMMlgJNPgj +SWFfSzTCSWFCSpgnJLSjpMdc +FhTbvrzrMrDCVHsVsHGBtHwv +FsqjjVzFVWFqRRWBssdpNSBHwJpHHJJdddSN +lQgmhvbTcgTgfhTQhSCFCGJHSlwNtJdGHG +vgZPbbfMhbTmchhjRFRnsDRPWVqzWz +cvwfjjcJjqhctvSpCgCFVhrFCrpC +mRsQmsMlNNzznWQlRnsMRQlSCpLNbpwSSSrwFLDFLLLgFp +zznlnGlmRmMlPZnGQzMszMRfccTjcBJjtJtJjqTZtfwBTt +PtCwCCVqbjNNqqvGssPmHGsHMfPH +dcddcWFDJJJcLczhWQdcDScZvHZgpGfsvMfSmsggSvvnvM +TTQmTDhdQQzdRwjBVrRwCwBbBr +BnBsFHCrcnBrMBPSmMSCmrcFqnZLddLhdhdGLvqLqgqnLJJp +WfjTlNVDTtjzNWTlVMWNlTwTJphdgpvJLGLdgghZvGLpwddq +zVjbVblVDlNTlbzTzDjllDTzHmHCsmcMHcSBrCBbrHBcBPSC +ddlcGQlCjQNGQmPLslZTlmTtfT +MDzMwSwqpzpDRpWRJwgZhttrZmTPfZmrmtrMZZ +JSqRBpJzwgDDpqDqvpBRdCjbCjQCFCbHvdGPjdHQ +bwzPwGLZMsbJMPPLGLMQzbhhQRvWWtVqVhgCVtWWQDqt +HddrHFnFNpVnVLhnvLRV +NLdrFjHTBrrdjFSpFmNBmSfZMwZMJJfSffbwzwPbczbJ +QTWSzTTLwTfwflSNJRdvGlRGcNgJBl +FnmmqrqbBBgRbHGc +MFZqrCVCqmZCprspFZmnnMsDfzWzDwSfjSwPQPTLhffwBLwj +npfgFRTZRRnDZLdgRfRrrjcWzGpWGGGQrjjWpP +vblVbvSShhVzHWjzzlrPWG +bVwqvCBtShqBhCCtqhNqCJRTTBDFJJLnJgDRWFBnWg +nHDNQvgvnNZHDnsGcjfNTrTfVrfL +SRWFSBRLtSFqjTrVVcsVjTSG +BdBbRttWBdbdWdbppmZlLmgwHvgQvgLZ +PQRZlpDDptQSclBMGVBdhVFGBMpf +nnrsTCWjLJsnsSMShhGJfwffwV +vjzqsjqgSHbbtvHZ +DgFmbdSDZbPgLbDDmFwZwgLSfccGcGvnvvngsGGnsGMNWsWs +HqztHHhHVhHjhRRhJtCVBCfNprMWpcMMJfsvvMsGscpG +tjVtBVTBtHHqCRqtzQwTPSNdSwPTTbPFDdml +sbmBmHZbRRRmwBmsSjHzRjmSCNFLNLLQNQhFgtQLzNztlrff +MpqPPDPVnGqrJpcqqJpMVlgtlLFLChCgChCCQgCtCD +VdcVVJvdrVWHbwHWBSSBRb +tPDVBzzNSNdDSQpMQMTQJMMQMN +LqSWSmbsmfQTTGZMWGCW +cLjLcbrjqmvfqLbfmqLwDBBzSHPzlwzcdBlnnP +SbnHrGHSrrhHJBrrScDfcPDMfpPGcGcpDL +QTpmpmmQWlZsTvVQDMgggFLgFcPf +zsCNlltCslzlTNsNlShwdJCpSqdHrBhpwr +JZmFrmLGjFZdDGrrVTvzmPVvRRVzwzzl +WBnfMDBqMsgDBqpBvzwVlCwRTRRPpvlw +WfghfttggfSnnqbDftfqSBBDQdHhZFFJrrHFjGJdGjFrjQLj +rNLRjrlVlrFRJzlsjrVlRFGCmnMtftgCNDDgDmCfqNgPNM +SpdBpdHbpHWhZqnCdtCGggqCPn +QHHvvWwWhwVVQRscVzGl +QffLtMQGMQfDMMwMTJwqWHvH +nSSFznjFcfjTgVJTJjvT +RrBpcfSNpRBcFshrCtQrDGLPQb +GctcMldStGwPPbcLsQTV +jhnzDgnHnnfPVwHQTTLTds +gBgzDDhzvqdGGvrtdvtm +PPwRWVTvRvPVLwRpMlzmbmsbHWjbbs +dFTFCNfdjzjFjsMF +SgdffSTrnnqCgdqgcNrfSZqVvVLRDPJZQwJBLPQPtLZwJJ +HSzDQftHphTBHFhr +WMmJsMJNLWNPmmsncjMJcjtvwggVvhFFFhjrVwrjrjppvT +WWPsJJCWCtZZZRGC +SfFZQDRLgpLlRgQRRRFWTsbhBhgTjbWBjhshgw +tHVNGjtzzHvMMJJhrWJNrTrPbP +jvVVvGCGtCmjHtdHzQQfDpSSlDRnFfQFmR +ZBBPfVVPPrVmrWZJzNdPznbnbSzznP +gvgpGqFFMgMcGgwLwGpcJNZSTZbdbdzNNSlqbTnn +ssZLgsMLQvcFpVrhCsmtWHjrrW +nFvhRnWWzBRPHQqcqqCqmFbd +SJDJgVprLfDfbJmHmWWHQtJW +wVsgWVSTgLjfSsVjVBRvRNwwGGRhNZhRMZ +wTRrRBCTPTBPlgMqgHCqggHLgg +dmDzpQpBdmWmWzzzDFzjGNMSWLSgLVGGLVNSLgSg +JbFdmQQJpjpptQbdJJmDmdtnZhZRflTlnTrTlrhBwPPc +jwSwssQbwbStlhRgtsVstn +zPzFdFFZccPDgntzVHHgghRz +vVVdfFmZPDMWZZBmGQbwJJGCLwwMwJCS +PLLffLFqqNLwSffbnVzzRf +lsmgTggChrgDtZsZVblMVJMznVnwMBnb +hDZZTmZvhTgstvwNFdqpWQcqvP +mmWwpwqtmmHTqHpprRZQPPZLZWSFRFRB +gzcgscgbfvhRRNZQRRQPvr +JsjhcshCfJgrrpttTCTplH +TvNrvNrJfWWvtJLTHhvZZhQQwVGZZhbV +mFCPmBMPlPsPPBsMFPszbHQJwwHHhbZVQVzjhGHZ +qmlBsdCSmJBmsBBMnMMTDWDNcLrDprSNcWDNrW +HSnHCVqTddFHSVqFqdStSQGQwRzQCzCRzGRRGNPQwz +jhlBpgNvlfZjlfvmpgfgfBrMRRwMMPPLQMZRPMWMMZPQ +hflfpgjfBfDcpchlpvndbHFDdHqSqNVqNVdn +QBfhlVNfHSZHfVCVHSQfZfTCctdvdDTRtjDCtTRsjsvj +brrWWqzFWzwWbswDchhTRtDhjT +gbrFLnpzqrWPgqpLWrhnHGZlSfLfHfQBGVfHHNVG +hcFmVScmQBVhtcvfHLfvHSnbHRLn +lzQqlDqgpWPvJfRnlNJvww +PjCCCPgDgqGzmMtCQstZmBFs +GrnrHrmVVFMFhSSbSfhR +zjTqLtBjjdWdWTLshMZMDbPNRMSSqSPNfD +dTWjdtwWhjWTBzcnrpcwmQpCwcpw +BgtVBsgVVJhgGsSGJbghJqbsjLfZmLjmmtfZndNNZFFZNLdm +MHTlzlwHSvPvzMSPCTMQCNZdjjmnfQjdZfNLjF +HMDTwPDpzrTzpScBghDbVqRBgRBJsR +qjCsTmrrnnCmhcFrCjqmThRlbHGvJGvvvbRbbJRcQJRG +fVBBTfMdSZLNZgPdgglGRdbtbtJRllJWJtWb +TSZZSpNMPBLgpZLVgppBDFhzDmjrnzhjssFqDhzFnn +MDtDMWmMQmdzmMMqvlGfRcjzgpcPPjczPl +sZsHJWNJFJNbWFBhFBnnbVclbVVPglfcRggffGGpjl +srHWLNZZJdSLSdvDMw +BFqsPnsZcgnncggccqsqqpDPtDWPpPNTNSNThrWtSj +dQbfQQJJdwdmFRbJLRJdMrfDWrjpDrrprhDDDDNWWD +QGwdJmCFJZvGsvvncB +GRRNSjrffGTSPrNTffSgcJTwWJZbbZvwvwtVwWVJZv +CMcFsqmBQzMzshsBQBQvLWmJVwZtpJLJwJLvwt +qBzChnQlzMcRSnnRRjHGGg +dPPbPWNdTBbDpHPHpNsgzvFlglvHzvSFzCFF +fntqhGhRMhnnnGGCVMRhCVlSjswFvvjzjSzvQVSgsl +MMqqJJRCnMhZLCRhtPNrpZPDDWTDTrNBmD +VjVGNTNlNchVjNGRWrSWWtZtRrzncR +BTbbbwDmCDLTbDwfHmzZMmRrWtzPrZSZtrrz +qDLLqvwLBsfBbBdQFQTJhqThVTQJ +qBqPBGZflhrWznzZZdsnzv +FmHRcCCsCDwDbjtzdjWbdz +cTRwCCNHFNmwRgmFTNCFTJqqfqPJsPhPBlsrsfGf +JTNhhNrCTcWpJJcpWw +LLdLsfMsdStbtggLbnTpwfWDzpjvnnjzcz +MqSZsgbMbGFbZtgTSZSFSLhhmHlBQlmrmrPHHCPPZPBr +GgjjgpGvpJJtjgvPrJttsLjVwCsQsQNLsfLfMVCl +RddqZqzcZdSWcHdcqQfQLMwVflfNQNMQ +FncWTRcFlHWFmcFTgPJhGvDgpnnhhGtG +ZGPFJsPQCbZCCbgz +nrvrnGWTwwqTBRcpCRRg +DnGWDldNmSLSMdMQ +ScDmPPPmjmjjWgtdSmdmCnNqVQVVrNRTZTQTQDHHZGNH +wbbMhLvMJpRwJQrJGHqQGrQHqr +wzhspwpppswsMFLmtnzjdcmdPRWPtS +fPlLTtBlTjDbWcTMJcncWqss +LdvLrLpCRRQQmvhhVNpwRMWJZcFMZWJwJFFFwZsGcs +prrRVpvvRVNmRvvzHjHPlzPLSffbbPHS +bbCbzsQbBzbBFbFzFfJHfVJPfVPtzZttpm +hwvrjDDwjcDcvdnNvwdnwwDPpNtNMVtPpJpRmVMPfmtVZR +mmqDWjhcqhwvDDdTsSGGCbQGSBBLTGGl +wthtwrBQhhSrqJJVLMRPPtJLPF +vbmbZqfqgsfHmcllmLLJNLJMNFJNNvPGJn +jHlDscllClCCgbZzhWqBzBQzprWCqS +DwpDlwDwllhJwbDFNDwFPhDnQnZZzVVnnBrtNznzSSzZrr +MHPfWRTgWzTQmSTTZt +GdPjHLRMCfcGvwqDGbFq +NGdNpDPdNGLppLpwSNFFFDLwnnZbMnrHlHZQcHbcnHQcPcQM +jBgBsjssgjWJVGhBfhvJVnMlbnZQVrrrlHCcCZrl +sRBgvRffhhtvtBgvjgttWBJTLmFLLwdwzFdqLDDDqFGdLFTd +RBzRGRGBgnrPJrRGGWWbDggZTSTVZVFFSVZZdw +tfmLhjfshNNsqpppfjHdwVdQZbVbQFVVTmSVDV +jvqtwHqCNLNsNhNfjssLCzGJWcBRJRBCBBBrrWnGrG +cGDBdNFdNdDStNtGdGQGscDMvZjjZWMvMLjsjjLZjLsJLv +fbRnRzHVPClfRlbbmfHRlPvZvMLpqjvZJqZMpzMpZjBZ +gfbfBgCHCPVNhNGgTtFDcF +ljjvLZvvllFnlLJLJjLWFQrVssFpsGMFpNMGsr +qbHSqHTcHChqCmTSRqqBVpVdBQsVQQGHdMprWV +DbtcCqRhhTRmDnPMlLgfgztlZZ +QtMQzPZcbtGgTtLvtf +HwcDsdVVDnNSGLhwvffJvfTT +CSsdSHNmSDHcCqqcrrzQcC +nDNDfmMnmDJRNfJJdMDRBdwjcTtsSHvBTswTjwLtsCts +QcbQrZZggGWVVWbZZjStswCSCCttGCwLvC +ZgZgbzVglVbchVVrVhFWWpnnpNJmJMqDfMJnMRqNDDMD +WMfNvsjWGjsqFjqTRRQVJztDzVmJHbft +ZPhplcrLrmzQGzmz +ZPddLPlcSclhZChndMvgTjjWNGWMGWBj +nDLjMchghDcljfjffpfsqTmGCTGszGZVVzHV +wdFJPFrQRwSNbjVQCTGsHZHmHCHs +BRJJSddvdBrJwrBRNRFRSPRjvclLpWhpglgWpLplltnMgh +BbVRzMcpbMNMHMTJmWdljdlJjT +GtsqFnfvGSFqGfQvgnWWZlLlLjZWtWldPmlT +sSsFqsqsGghwQQmfGRHbbVczbwwBpBpHcw +BBFCBJCsGJBBgvgsvTlVhgNg +ZnLdjRQddLRnZrlScHRVTTSHhRvg +fnnjZLWdrnqdWrrPLddqVqBzGDJJFGCBDfJmbDzFMbmB diff --git a/day03a/examples/test.txt b/day03a/examples/test.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day03a/examples/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/day03a/src/main.rs b/day03a/src/main.rs new file mode 100644 index 0000000..eafb25f --- /dev/null +++ b/day03a/src/main.rs @@ -0,0 +1,105 @@ +/// --- Day 3: Rucksack Reorganization --- +/// +/// One Elf has the important job of loading all of the rucksacks with supplies for the jungle +/// journey. Unfortunately, that Elf didn't quite follow the packing instructions, and so a few +/// items now need to be rearranged. +/// +/// Each rucksack has two large compartments. All items of a given type are meant to go into +/// exactly one of the two compartments. The Elf that did the packing failed to follow this rule +/// for exactly one item type per rucksack. +/// +/// The Elves have made a list of all of the items currently in each rucksack (your puzzle input), +/// but they need your help finding the errors. Every item type is identified by a single lowercase +/// or uppercase letter (that is, a and A refer to different types of items). +/// +/// The list of items for each rucksack is given as characters all on a single line. A given +/// rucksack always has the same number of items in each of its two compartments, so the first half +/// of the characters represent items in the first compartment, while the second half of the +/// characters represent items in the second compartment. +/// +/// For example, suppose you have the following list of contents from six rucksacks: +/// +/// ``` +/// vJrwpWtwJgWrhcsFMMfFFhFp +/// jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +/// PmmdzqPrVvPwwTWBwg +/// wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +/// ttgJtRGJQctTZtZT +/// CrZsJsPPZsGzwwsLwLmpwMDw +/// ``` +/// +/// The first rucksack contains the items vJrwpWtwJgWrhcsFMMfFFhFp, which means its first +/// compartment contains the items vJrwpWtwJgWr, while the second compartment contains the +/// items hcsFMMfFFhFp. The only item type that appears in both compartments is lowercase p. +/// The second rucksack's compartments contain jqHRNqRjqzjGDLGL and rsFMfFZSrLrFZsSL. The only +/// item type that appears in both compartments is uppercase L. +/// The third rucksack's compartments contain PmmdzqPrV and vPwwTWBwg; the only common item +/// type is uppercase P. +/// The fourth rucksack's compartments only share item type v. +/// The fifth rucksack's compartments only share item type t. +/// The sixth rucksack's compartments only share item type s. +/// +/// To help prioritize item rearrangement, every item type can be converted to a priority: +/// +/// Lowercase item types a through z have priorities 1 through 26. +/// Uppercase item types A through Z have priorities 27 through 52. +/// +/// In the above example, the priority of the item type that appears in both compartments of each +/// rucksack is 16 (p), 38 (L), 42 (P), 22 (v), 20 (t), and 19 (s); the sum of these is 157. +/// +/// Find the item type that appears in both compartments of each rucksack. What is the sum of the +/// priorities of those item types? +use clap::Parser; + +use std::fs::File; +use std::io::prelude::*; +use std::io::BufReader; +use std::path::PathBuf; + +const FILEPATH: &'static str = "examples/input.txt"; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Cli { + #[clap(short, long, default_value = FILEPATH)] + file: PathBuf, +} + +fn main() { + let args = Cli::parse(); + + let file = File::open(&args.file).unwrap(); + let reader = BufReader::new(file); + let res = reader + .lines() + .map(|l| l.unwrap()) + .inspect(|l| { + if l.len() % 2 != 0 { + panic!("odd number of items in rucksack") + } + }) + .map(|l| { + let (l, r) = l.split_at(l.len() / 2); + (l.to_owned(), r.to_owned()) + }) + .map(|(lhs, rhs)| { + lhs.chars() + .filter(|l| rhs.contains(*l)) + .map(|l| { + let b = l as u8; + if b > b'a' { + (b - b'a') as u16 + 1 + } else { + (b - b'A') as u16 + 27 + } + }) + .next() + .unwrap() + }) + .sum::<u16>(); + + println!( + "The sum of the priorities of the item that appear in both compartments of each rucksack is {}", + res + ); +} diff --git a/day03b/Cargo.toml b/day03b/Cargo.toml new file mode 100644 index 0000000..3b746b6 --- /dev/null +++ b/day03b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "day03b" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "3.2.20", features = ["derive"] } +itertools = "0.10.5" diff --git a/day03b/examples/input.txt b/day03b/examples/input.txt new file mode 100644 index 0000000..60251e4 --- /dev/null +++ b/day03b/examples/input.txt @@ -0,0 +1,300 @@ +BdbzzddChsWrRFbzBrszbhWMLNJHLLLLHZtSLglFNZHLJH +nnfMwqpQTMffHlNNLllHnZSS +cGpcMwfppfqcjcTCBBzWDsDbDrjzWz +LhfjhcdjcGdhFfdGfdjdvwCCZMvvLvWwMLCLSwZC +rDnsbmptPmlbQMCrQWQQBZQW +gltgVPngDPbptPsbPzVgmDldfTdfczThjJJjfMcJdFHjjH +dGlgDflTLLLrRLTLVdQLcQMnbvHbbFzNNvMbnHHn +sZjWJJCSjWqfCqSjSmJSbFvCzBMBBzHncHNvMBHN +twqqwpZwfrlwRwDGDR +zCGGFTQMQrsNRNGZdR +cLLQgPDpgcgmvPRHrwBdvrNZ +glWpmJWQDcJpQnpjSmbhFtMnqFfCVTCFCFFM +zNZWFNZBFrGTdBcZZBdJTrGrmgvppgDHwHmgVHCHCvCPDjzC +qtqqPnLSfLwvjvvgvvqH +MtbLLLQbRfPRfnbnnLMtnsbdBNsrGWNWcNcTBWZrrcrWcJ +sZwstbbDVlHtbhcrhhZLrRpNQN +jqGjjFjWnzWGgqWjJJNphnLMRhLhcrhcrSLN +qCJzFJdvmHvbtpbb +ZSRsvvQvZpsRQGJghClPCwGPChCP +FVdMLDdtDRdDcBtmcVFntwgJJTlnNPwJnlTlwlTPgN +VqttMWFmDbjbzrSWRQ +TsDSBcwshdwSCrgRWZBvgGRG +LPVJLqqJbbzpFqwpbvgGRmZPrmZgCvCCfr +tzJlJzQllFLqtwHhjNSdtthjDhTN +fsDLDDnwvnSdqLSsFSDfsLpbgVttPMpPNjMWVMNfpjgW +jhHmBmlrTBBHRPVtMZbppNPPZB +JmTTrTmjRTJqSQQSFqQw +HPzZFgPFMCHJCcZMcDQGwpLqPLqppwhGvv +BrWRqbqRsTSTqNddrVrthLQVwnpwphnvnDnGvGDn +tSbBfsRbTfqjJqjCqm +pCqrqzmqZzrmCCvCJwJPBRwJBWBmwWBJ +VqbqbjFLFfSHnfctBwDdDFTwtRRTDF +LVcnbjHLSqHnhbSGGppCMMZMphpNrQ +PhTcTPsSPCMvvhhMRPttbNWfNsWFNfWWtpNw +rdQrDbJBVVjrBVdLjHHHWNWwfHtzzNtFpZZptppg +JJVGGdddjDjDJmdjGqqRSbPMTvcRlqnnMlvT +SqGfTrBlSrrrfGGQvCnqZhZmPPhvJh +LdVNwgsjdjHmjWwDsDpwsHWtnCnQQQQNnvCnbJZQbNbtZZ +DjssDHLLVppDssdLspswFLVjzfFMTfSBcTRcrFSBzBTzmGzr +JSJJqlldpJlcdVWMlgMJrcCjrhzHCwTjHrQzwTzZ +bBvsGBGNFDNRFNFBRDPsDDHCChhhrZRQQzhjhCjTzWCr +FvbLFGDDtWDFBnPGFDWGqJMgJpSdVStllttlppVS +clpBdBQBsqGpQbVdqTTWRTSFgLLggffg +NzvwmHvZtZZgbDSCLDmfmm +jPJjthHzNwPvvjwjNzPzztZBlrccpbVGBQhlGBVlrpnpBs +NmFFGlGmzCrNWHvFmFWCFvQPTdDDlbbdgJPtgbbdPDcc +RwfBqLwZqffqnPbdDgVQDdtRbT +hnptqLMMLwqjMMjzSzHmhvNNrvvhhz +hqVrDdPdVDqjsDrjjqsfrrWlctvHJNLfvNcLHNNZRNZHvfZL +CSnWQSGBBSnmBnTmSbQbNZZMJNJMccGNHLZNNvNv +gFnmBmBnTCpwmBbgWVqjPsrsjplVrjlqPr +vgVgJJCphzFjzbwljwww +PWmfDgrPrPWlSWqSWlSZ +rrTHQTGTPHDDHgPrcrcPmDPhdtGvnvNnttJCdJhtGVnpdM +DDDhNgWNLWgDqDgtgtwSngjVSQdf +cvFrcGmBrrrCdSfSJQ +mBHzFFvFzmsBspsFsZqhqbWlWdPDlLHbqZ +TLNpGpRzwGQLLQRTwdvWdWbdbgdBlblb +FJDVzZzHfZHVzcHgnvHnvngvvc +MzDVSmZPPrqhGmCqQqLR +mqHWcBHVcgsbhhnTrrTg +fWftGtfJpwJMSdFDLFSGDGFnnNrbrhTNsZnrhTswZZnnsb +dSftppdSFStLDpQfLjWHQvWBmmqVjCqcVv +frfNzgvzzzJwJqpRcP +VdVSnGnHqhDDTdqhdLWmjMTmjMPjPmTsmsmjmR +BdGLSWtBSWDtVqdSDVGqtSSHFZFZtQbZlZfNgFffrgNrvgrl +jBVSjsJcLcqqjtgcmRFRNFFzFm +CnHnWQQGGWnnCnfvCTmZRZgNtfZtNDZPtNDtzl +mWWGGdmQQWwrHHMBBBhrBVqshBLBSL +cLtFcllvrslGLcLHVzDZQzzpznWzQtQZ +TmShfSSPJRRBBfSgmdfBJhDNVpGzVZpzQgZgbWzpnDGp +BhJPfSqdhqJRdBdPqTJBChvrFlHvvCGCccHsMscvrHvv +zfddZTpZLzLDfLtDCttdTfZPnlcPcnhjPDnlcjMchDPjnP +MQsFvFHJsQvmNvvswljgbPbwlwjnmcch +VFVqvqFQHqVJRVCBLpqTGMzCqtMZ +PZdVgNdQQcdcZQtGhnHtBlvlvWTnbBHWWH +CDJmzqFmMmLfqmzFwqfzfwMRvpRbTWBBWDnlnbnWnTNTnB +zFfffjCqwLJCfrCFjCLCzCMsjSZjQNPhQGVSQQZhsGjGgd +nbHntnqPQwTHwQVC +BzfSZSpcBZpzpPhSBjRTCBWTTRWTTTWR +pvZpzPzNfhddJGmmNnJb +GwTgWlvbgTwMrbwTrlWvwtHBNtNvBhBtdZcShHDtNS +PnndmnCmnJFnsmRdmFnnZDhRRScRQQHDtDNtcDQS +CLffLsmqqpJljVdlpMpWlr +dPCzBLTSLqmqdSCsmrTDVQjZfjfVVZnZhhhLGQ +wwFpgvPJNwgPPwvZGnQhbZQQFfQZbf +WvRwwJpHHgpNMNqdTdCdqrmHBPtm +DbWwjSGFSFfwGfCwDSSPPjLhgrrLWRJRgggJphLzpJLq +lQTnMHdcQBvlHMMZBcHHTrbzpdzgqrpLdqzzVRVRVV +vlvlNlBQvBZTQBnHnQTTBBPwPNCCsfSFmbSFfmGPwFmj +hGGQtbVjhRqlmqqrmDlpmw +gPMZsMgdssCPPsvrgZcTZTPSnnLLnBWDwLmwWwBnmWSnWNWB +TsvgMPdcgCfMdcsZJRQhVfVRVQFFQGtr +NfpFTTpFNbpZMRFrJMMMCv +dWJPngDWBtPVBdPVGHZzCGHZrrvZRSMSzv +WDDDVDPlWnLBVgnsgJmQJNqThNmbjlqbbh +vnznqvfrzzVzrvvnfVqztBtGbMCdGmCcdccJccCLCcpSSgcL +RQsDsljDlhssWshHhlhsHTlLbgJLpmgbbcMSpSSbcSJgjd +WswhhHWlRTsQDwWHTRhsvNVvwqzfVmNBtZNmnzzq +cjcPfLlQtPsZQlfHZJqVSFdVwmSRRqSSddwDvF +MgNbBgzgnwdPRFmSPn +CMGbNNMhCMzzPzBpTNPGBclLcLfsptHQfQlZssLcLf +slsdfpSlllpTVJJGgGDgHMdV +wrBQrbQrhQcpbQrhLwRBrjVVgGGPgZMtZMVhgMPMGHPg +QQwRnrwRbbRcmQmrjRnjpvNsNTNSlTmsTqCSvsNSWz +GWNwppdHdpmzgPFPCRmlCBPB +bSrJhJSsMhrJMDPRCPBlwVCtVSLV +QbsbwqQZvrJhhQrhZZrhchTfnTWGNvWpNnjHGvGjNdGT +NMZGmnMBWmwmNnGwHrHvHzfrvrVVVj +pSbDRLgbpJDPpRZRQjjFqVhhDFjDVqfrzv +sQQscLTZcsTpRsBnmlBcdCMBMtlc +hwWslbGWbRvLZvcscZ +gQnmmrNTmSnTfgwDwVwpJvJPJzLqLJTLLvRcZz +mrmnSrDNNQSmmwdggrrDbHMGhtdtGhGlhtClMGhM +qQdlGcvDQDQvDdmtPmmmlStbjSrm +CpNhzWTCTRznBMvwtTjMrHtSvj +nWzsfZCsBhNpZLgGdQDddvqd +ggjTjJWDVVVRTwQcZWvchshWhs +LmFfLfSmBtCttNLfCFBPFNBvvvhrcQdvsrsdSwdqcwrwSw +CHttltmlPLMHRTgJQDgRDTMb +RPJgCdhgPPSzvWDcCfGHDcvf +HbrrwBspTwWDDnqbZjjD +rQrFsrsstQMQHJdHQm +GVwQVGBZBNQwsjdNcMMlgJNPgj +SWFfSzTCSWFCSpgnJLSjpMdc +FhTbvrzrMrDCVHsVsHGBtHwv +FsqjjVzFVWFqRRWBssdpNSBHwJpHHJJdddSN +lQgmhvbTcgTgfhTQhSCFCGJHSlwNtJdGHG +vgZPbbfMhbTmchhjRFRnsDRPWVqzWz +cvwfjjcJjqhctvSpCgCFVhrFCrpC +mRsQmsMlNNzznWQlRnsMRQlSCpLNbpwSSSrwFLDFLLLgFp +zznlnGlmRmMlPZnGQzMszMRfccTjcBJjtJtJjqTZtfwBTt +PtCwCCVqbjNNqqvGssPmHGsHMfPH +dcddcWFDJJJcLczhWQdcDScZvHZgpGfsvMfSmsggSvvnvM +TTQmTDhdQQzdRwjBVrRwCwBbBr +BnBsFHCrcnBrMBPSmMSCmrcFqnZLddLhdhdGLvqLqgqnLJJp +WfjTlNVDTtjzNWTlVMWNlTwTJphdgpvJLGLdgghZvGLpwddq +zVjbVblVDlNTlbzTzDjllDTzHmHCsmcMHcSBrCBbrHBcBPSC +ddlcGQlCjQNGQmPLslZTlmTtfT +MDzMwSwqpzpDRpWRJwgZhttrZmTPfZmrmtrMZZ +JSqRBpJzwgDDpqDqvpBRdCjbCjQCFCbHvdGPjdHQ +bwzPwGLZMsbJMPPLGLMQzbhhQRvWWtVqVhgCVtWWQDqt +HddrHFnFNpVnVLhnvLRV +NLdrFjHTBrrdjFSpFmNBmSfZMwZMJJfSffbwzwPbczbJ +QTWSzTTLwTfwflSNJRdvGlRGcNgJBl +FnmmqrqbBBgRbHGc +MFZqrCVCqmZCprspFZmnnMsDfzWzDwSfjSwPQPTLhffwBLwj +npfgFRTZRRnDZLdgRfRrrjcWzGpWGGGQrjjWpP +vblVbvSShhVzHWjzzlrPWG +bVwqvCBtShqBhCCtqhNqCJRTTBDFJJLnJgDRWFBnWg +nHDNQvgvnNZHDnsGcjfNTrTfVrfL +SRWFSBRLtSFqjTrVVcsVjTSG +BdBbRttWBdbdWdbppmZlLmgwHvgQvgLZ +PQRZlpDDptQSclBMGVBdhVFGBMpf +nnrsTCWjLJsnsSMShhGJfwffwV +vjzqsjqgSHbbtvHZ +DgFmbdSDZbPgLbDDmFwZwgLSfccGcGvnvvngsGGnsGMNWsWs +HqztHHhHVhHjhRRhJtCVBCfNprMWpcMMJfsvvMsGscpG +tjVtBVTBtHHqCRqtzQwTPSNdSwPTTbPFDdml +sbmBmHZbRRRmwBmsSjHzRjmSCNFLNLLQNQhFgtQLzNztlrff +MpqPPDPVnGqrJpcqqJpMVlgtlLFLChCgChCCQgCtCD +VdcVVJvdrVWHbwHWBSSBRb +tPDVBzzNSNdDSQpMQMTQJMMQMN +LqSWSmbsmfQTTGZMWGCW +cLjLcbrjqmvfqLbfmqLwDBBzSHPzlwzcdBlnnP +SbnHrGHSrrhHJBrrScDfcPDMfpPGcGcpDL +QTpmpmmQWlZsTvVQDMgggFLgFcPf +zsCNlltCslzlTNsNlShwdJCpSqdHrBhpwr +JZmFrmLGjFZdDGrrVTvzmPVvRRVzwzzl +WBnfMDBqMsgDBqpBvzwVlCwRTRRPpvlw +WfghfttggfSnnqbDftfqSBBDQdHhZFFJrrHFjGJdGjFrjQLj +rNLRjrlVlrFRJzlsjrVlRFGCmnMtftgCNDDgDmCfqNgPNM +SpdBpdHbpHWhZqnCdtCGggqCPn +QHHvvWwWhwVVQRscVzGl +QffLtMQGMQfDMMwMTJwqWHvH +nSSFznjFcfjTgVJTJjvT +RrBpcfSNpRBcFshrCtQrDGLPQb +GctcMldStGwPPbcLsQTV +jhnzDgnHnnfPVwHQTTLTds +gBgzDDhzvqdGGvrtdvtm +PPwRWVTvRvPVLwRpMlzmbmsbHWjbbs +dFTFCNfdjzjFjsMF +SgdffSTrnnqCgdqgcNrfSZqVvVLRDPJZQwJBLPQPtLZwJJ +HSzDQftHphTBHFhr +WMmJsMJNLWNPmmsncjMJcjtvwggVvhFFFhjrVwrjrjppvT +WWPsJJCWCtZZZRGC +SfFZQDRLgpLlRgQRRRFWTsbhBhgTjbWBjhshgw +tHVNGjtzzHvMMJJhrWJNrTrPbP +jvVVvGCGtCmjHtdHzQQfDpSSlDRnFfQFmR +ZBBPfVVPPrVmrWZJzNdPznbnbSzznP +gvgpGqFFMgMcGgwLwGpcJNZSTZbdbdzNNSlqbTnn +ssZLgsMLQvcFpVrhCsmtWHjrrW +nFvhRnWWzBRPHQqcqqCqmFbd +SJDJgVprLfDfbJmHmWWHQtJW +wVsgWVSTgLjfSsVjVBRvRNwwGGRhNZhRMZ +wTRrRBCTPTBPlgMqgHCqggHLgg +dmDzpQpBdmWmWzzzDFzjGNMSWLSgLVGGLVNSLgSg +JbFdmQQJpjpptQbdJJmDmdtnZhZRflTlnTrTlrhBwPPc +jwSwssQbwbStlhRgtsVstn +zPzFdFFZccPDgntzVHHgghRz +vVVdfFmZPDMWZZBmGQbwJJGCLwwMwJCS +PLLffLFqqNLwSffbnVzzRf +lsmgTggChrgDtZsZVblMVJMznVnwMBnb +hDZZTmZvhTgstvwNFdqpWQcqvP +mmWwpwqtmmHTqHpprRZQPPZLZWSFRFRB +gzcgscgbfvhRRNZQRRQPvr +JsjhcshCfJgrrpttTCTplH +TvNrvNrJfWWvtJLTHhvZZhQQwVGZZhbV +mFCPmBMPlPsPPBsMFPszbHQJwwHHhbZVQVzjhGHZ +qmlBsdCSmJBmsBBMnMMTDWDNcLrDprSNcWDNrW +HSnHCVqTddFHSVqFqdStSQGQwRzQCzCRzGRRGNPQwz +jhlBpgNvlfZjlfvmpgfgfBrMRRwMMPPLQMZRPMWMMZPQ +hflfpgjfBfDcpchlpvndbHFDdHqSqNVqNVdn +QBfhlVNfHSZHfVCVHSQfZfTCctdvdDTRtjDCtTRsjsvj +brrWWqzFWzwWbswDchhTRtDhjT +gbrFLnpzqrWPgqpLWrhnHGZlSfLfHfQBGVfHHNVG +hcFmVScmQBVhtcvfHLfvHSnbHRLn +lzQqlDqgpWPvJfRnlNJvww +PjCCCPgDgqGzmMtCQstZmBFs +GrnrHrmVVFMFhSSbSfhR +zjTqLtBjjdWdWTLshMZMDbPNRMSSqSPNfD +dTWjdtwWhjWTBzcnrpcwmQpCwcpw +BgtVBsgVVJhgGsSGJbghJqbsjLfZmLjmmtfZndNNZFFZNLdm +MHTlzlwHSvPvzMSPCTMQCNZdjjmnfQjdZfNLjF +HMDTwPDpzrTzpScBghDbVqRBgRBJsR +qjCsTmrrnnCmhcFrCjqmThRlbHGvJGvvvbRbbJRcQJRG +fVBBTfMdSZLNZgPdgglGRdbtbtJRllJWJtWb +TSZZSpNMPBLgpZLVgppBDFhzDmjrnzhjssFqDhzFnn +MDtDMWmMQmdzmMMqvlGfRcjzgpcPPjczPl +sZsHJWNJFJNbWFBhFBnnbVclbVVPglfcRggffGGpjl +srHWLNZZJdSLSdvDMw +BFqsPnsZcgnncggccqsqqpDPtDWPpPNTNSNThrWtSj +dQbfQQJJdwdmFRbJLRJdMrfDWrjpDrrprhDDDDNWWD +QGwdJmCFJZvGsvvncB +GRRNSjrffGTSPrNTffSgcJTwWJZbbZvwvwtVwWVJZv +CMcFsqmBQzMzshsBQBQvLWmJVwZtpJLJwJLvwt +qBzChnQlzMcRSnnRRjHGGg +dPPbPWNdTBbDpHPHpNsgzvFlglvHzvSFzCFF +fntqhGhRMhnnnGGCVMRhCVlSjswFvvjzjSzvQVSgsl +MMqqJJRCnMhZLCRhtPNrpZPDDWTDTrNBmD +VjVGNTNlNchVjNGRWrSWWtZtRrzncR +BTbbbwDmCDLTbDwfHmzZMmRrWtzPrZSZtrrz +qDLLqvwLBsfBbBdQFQTJhqThVTQJ +qBqPBGZflhrWznzZZdsnzv +FmHRcCCsCDwDbjtzdjWbdz +cTRwCCNHFNmwRgmFTNCFTJqqfqPJsPhPBlsrsfGf +JTNhhNrCTcWpJJcpWw +LLdLsfMsdStbtggLbnTpwfWDzpjvnnjzcz +MqSZsgbMbGFbZtgTSZSFSLhhmHlBQlmrmrPHHCPPZPBr +GgjjgpGvpJJtjgvPrJttsLjVwCsQsQNLsfLfMVCl +RddqZqzcZdSWcHdcqQfQLMwVflfNQNMQ +FncWTRcFlHWFmcFTgPJhGvDgpnnhhGtG +ZGPFJsPQCbZCCbgz +nrvrnGWTwwqTBRcpCRRg +DnGWDldNmSLSMdMQ +ScDmPPPmjmjjWgtdSmdmCnNqVQVVrNRTZTQTQDHHZGNH +wbbMhLvMJpRwJQrJGHqQGrQHqr +wzhspwpppswsMFLmtnzjdcmdPRWPtS +fPlLTtBlTjDbWcTMJcncWqss +LdvLrLpCRRQQmvhhVNpwRMWJZcFMZWJwJFFFwZsGcs +prrRVpvvRVNmRvvzHjHPlzPLSffbbPHS +bbCbzsQbBzbBFbFzFfJHfVJPfVPtzZttpm +hwvrjDDwjcDcvdnNvwdnwwDPpNtNMVtPpJpRmVMPfmtVZR +mmqDWjhcqhwvDDdTsSGGCbQGSBBLTGGl +wthtwrBQhhSrqJJVLMRPPtJLPF +vbmbZqfqgsfHmcllmLLJNLJMNFJNNvPGJn +jHlDscllClCCgbZzhWqBzBQzprWCqS +DwpDlwDwllhJwbDFNDwFPhDnQnZZzVVnnBrtNznzSSzZrr +MHPfWRTgWzTQmSTTZt +GdPjHLRMCfcGvwqDGbFq +NGdNpDPdNGLppLpwSNFFFDLwnnZbMnrHlHZQcHbcnHQcPcQM +jBgBsjssgjWJVGhBfhvJVnMlbnZQVrrrlHCcCZrl +sRBgvRffhhtvtBgvjgttWBJTLmFLLwdwzFdqLDDDqFGdLFTd +RBzRGRGBgnrPJrRGGWWbDggZTSTVZVFFSVZZdw +tfmLhjfshNNsqpppfjHdwVdQZbVbQFVVTmSVDV +jvqtwHqCNLNsNhNfjssLCzGJWcBRJRBCBBBrrWnGrG +cGDBdNFdNdDStNtGdGQGscDMvZjjZWMvMLjsjjLZjLsJLv +fbRnRzHVPClfRlbbmfHRlPvZvMLpqjvZJqZMpzMpZjBZ +gfbfBgCHCPVNhNGgTtFDcF +ljjvLZvvllFnlLJLJjLWFQrVssFpsGMFpNMGsr +qbHSqHTcHChqCmTSRqqBVpVdBQsVQQGHdMprWV +DbtcCqRhhTRmDnPMlLgfgztlZZ +QtMQzPZcbtGgTtLvtf +HwcDsdVVDnNSGLhwvffJvfTT +CSsdSHNmSDHcCqqcrrzQcC +nDNDfmMnmDJRNfJJdMDRBdwjcTtsSHvBTswTjwLtsCts +QcbQrZZggGWVVWbZZjStswCSCCttGCwLvC +ZgZgbzVglVbchVVrVhFWWpnnpNJmJMqDfMJnMRqNDDMD +WMfNvsjWGjsqFjqTRRQVJztDzVmJHbft +ZPhplcrLrmzQGzmz +ZPddLPlcSclhZChndMvgTjjWNGWMGWBj +nDLjMchghDcljfjffpfsqTmGCTGszGZVVzHV +wdFJPFrQRwSNbjVQCTGsHZHmHCHs +BRJJSddvdBrJwrBRNRFRSPRjvclLpWhpglgWpLplltnMgh +BbVRzMcpbMNMHMTJmWdljdlJjT +GtsqFnfvGSFqGfQvgnWWZlLlLjZWtWldPmlT +sSsFqsqsGghwQQmfGRHbbVczbwwBpBpHcw +BBFCBJCsGJBBgvgsvTlVhgNg +ZnLdjRQddLRnZrlScHRVTTSHhRvg +fnnjZLWdrnqdWrrPLddqVqBzGDJJFGCBDfJmbDzFMbmB diff --git a/day03b/examples/test.txt b/day03b/examples/test.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day03b/examples/test.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/day03b/src/main.rs b/day03b/src/main.rs new file mode 100644 index 0000000..f309d5e --- /dev/null +++ b/day03b/src/main.rs @@ -0,0 +1,94 @@ +/// --- Part Two --- +/// +/// As you finish identifying the misplaced items, the Elves come to you with another issue. +/// +/// For safety, the Elves are divided into groups of three. Every Elf carries a badge that +/// identifies their group. For efficiency, within each group of three Elves, the badge is the +/// only item type carried by all three Elves. That is, if a group's badge is item type B, then +/// all three Elves will have item type B somewhere in their rucksack, and at most two of the Elves +/// will be carrying any other item type. +/// +/// The problem is that someone forgot to put this year's updated authenticity sticker on the +/// badges. All of the badges need to be pulled out of the rucksacks so the new authenticity +/// stickers can be attached. +/// +/// Additionally, nobody wrote down which item type corresponds to each group's badges. The only +/// way to tell which item type is the right one is by finding the one item type that is common +/// between all three Elves in each group. +/// +/// Every set of three lines in your list corresponds to a single group, but each group can have a +/// different badge item type. So, in the above example, the first group's rucksacks are the first +/// three lines: +/// +/// ``` +/// vJrwpWtwJgWrhcsFMMfFFhFp +/// jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +/// PmmdzqPrVvPwwTWBwg +/// ``` +/// +/// And the second group's rucksacks are the next three lines: +/// +/// ``` +/// wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +/// ttgJtRGJQctTZtZT +/// CrZsJsPPZsGzwwsLwLmpwMDw +/// ``` +/// +/// In the first group, the only item type that appears in all three rucksacks is lowercase r; this +/// must be their badges. In the second group, their badge item type must be Z. +/// +/// Priorities for these items must still be found to organize the sticker attachment efforts: +/// here, they are 18 (r) for the first group and 52 (Z) for the second group. The sum of these is +/// 70. +/// +/// Find the item type that corresponds to the badges of each three-Elf group. What is the sum of +/// the priorities of those item types? +use clap::Parser; +use itertools::Itertools; + +use std::fs::File; +use std::io::prelude::*; +use std::io::BufReader; +use std::path::PathBuf; + +const FILEPATH: &'static str = "examples/input.txt"; + +#[derive(Parser, Debug)] +#[clap(author, version, about, long_about = None)] +struct Cli { + #[clap(short, long, default_value = FILEPATH)] + file: PathBuf, +} + +fn main() { + let args = Cli::parse(); + + let file = File::open(&args.file).unwrap(); + let reader = BufReader::new(file); + let res = reader + .lines() + .map(|l| l.unwrap()) + .chunks(3) + .into_iter() + .map(|iter| { + let (top, middle, bottom) = iter.collect_tuple::<(String, String, String)>().unwrap(); + top.chars() + .filter(|t| middle.contains(*t) && bottom.contains(*t)) + .map(|l| { + let b = l as u8; + if b > b'a' { + (b - b'a') as u16 + 1 + } else { + (b - b'A') as u16 + 27 + } + }) + .next() + .unwrap() + }) + .sum::<u16>(); + + println!( + "The sum of the priorities of the item that appear in both compartments of each rucksack is {}", + res + ); +} |
