diff --git a/.nova/Configuration.json b/.nova/Configuration.json new file mode 100644 index 0000000..28e08ef --- /dev/null +++ b/.nova/Configuration.json @@ -0,0 +1,3 @@ +{ + "editor.default_syntax" : "rust" +} diff --git a/.nova/Tasks/Cargo.json b/.nova/Tasks/Cargo.json new file mode 100644 index 0000000..0a4a8ee --- /dev/null +++ b/.nova/Tasks/Cargo.json @@ -0,0 +1,12 @@ +{ + "buildBeforeRunning" : true, + "extension" : { + "identifier" : "com.kilb.rust", + "name" : "Rust" + }, + "extensionTemplate" : "cargo", + "extensionValues" : { + + }, + "openLogOnRun" : "start" +} diff --git a/Cargo.lock b/Cargo.lock index ab23f43..5540719 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -25,6 +25,7 @@ name = "aoc-2022" version = "0.1.0" dependencies = [ "chrono", + "itertools", "regex", ] @@ -127,6 +128,12 @@ dependencies = [ "syn", ] +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + [[package]] name = "iana-time-zone" version = "0.1.53" @@ -151,6 +158,15 @@ dependencies = [ "cxx-build", ] +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "js-sys" version = "0.3.60" diff --git a/Cargo.toml b/Cargo.toml index c0c9ecd..965ed56 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,6 +7,7 @@ edition = "2021" [dependencies] chrono = "0.4.23" +itertools = "0.10.5" regex = "1.7.0" [features] diff --git a/input/03.txt b/input/03.txt new file mode 100644 index 0000000..192455a --- /dev/null +++ b/input/03.txt @@ -0,0 +1,300 @@ +sfDRhjhHsHhgWPJvPmmQnmPqnW +pTddGVwcpMTTCdnQJqqQqqqVtVms +MdZCZGdcrCNRFZRhFssL +CttWnSnNfSnCHsWrTlTPPpPCTRrLpl +DgqqghjqJBVgDMTPGVlRGwbfLLGP +cgqBBhjqcBdMcWQcQNnNzsfv +lnDWMgTLlTFlHHgDDgngWFnlBWNcBQrdjcrrdQrPBrdjhWhj +JqSVRRVmmRqJJbZGGJqJvbmBNcjPNQNssQPhSSdwPwwwQr +bCRJqGJJmzmJZRCmFNTLTttTzfFfLglf +SPWvWMvCSPcjzjDbcwfjTl +lLNRNLqhhQVQJlRjrjrDwTzzqzzfrb +GRnRVhRJLFnnhtJQNVdLdLgWCmmZlMlgSCSWSgpZtPBM +pTGFrLFTFWFprLDBmLbSbtmBDb +MqjwqJwZlqJjHlqjHHPmSbsffDmsStDnHnQmsm +ZPJjVPZbVMRRPZwMJZVMNJMcGWpWFcWFFNFGrWTzWzFrzG +MffZZtMTnTtSZLdfgSMtCHSbmWsGwbHGSqvmCqWb +lzpQhrhphhlzDDhRPmBvqHGRbBbwbbssCB +JJljpvhFrrjhptnddMJfdtgnMT +drCtpNLCLpTpJSdswQhvDbHZHDLDHQ +WmWgBWRcRzVVWVBgBBnnlfgWHjmvjQhwbbbshQvZDQQjsHZC +fqBzggWPPzBWBzffcfnMJdtFtrpqrGMpdCCTdM +JwJWqNBNNdzzBSzGsqbdNJbVMpptPmZMrVZrrZMtPmPwDp +THgfgffffHRhQRLVMGVQmGtLDGmM +TjGchhlHhGfhRHgRgWJSqzJWWlqNSzsWSJ +dNmPlzdvdspsFWwQmG +bhZSbVJBJnLNTnwWVHMGwQsGMFFw +RnnbbTnSnSSTTnLfRCCPqDPDNDlfCfDDcr +lhhTcnPchPPHCCStwWTHbS +GDRFNqlQJsGJqGJDqVNsqssDQBSZWHQBCZHHwbZbtHtwCbZW +RNJrFJFJDrmqsVjNmDvrvfzfffcvdpMrvlfh +DtLdNGHNfwBJQwgCrncgpSpcnlfC +sGqWPMPTvPPhTjjsqRqPvSlzFFpjnnSrjczprgllFF +vVPGPGMbPGqTRWsMqZhqvbZNLLmLQddQdmBtBwBNBwNB +ChVzhwpdpqHhtNmHHNHt +QsjGTQcTWQjfjbssQDPmHgfrrVrPZnntZD +jTGJSGvWJwqlvlCBqV +pRVcSRffTPfBWfNVfWBWdJdwhvvwGjjFmGvhLTdh +qsrHqtbDZqsnsZqCQDtHnQQLwFvJFhGJwddvwLcCwJJJdv +sgcqHnzqqzgnHnqrstZzqsnSPllRlVVSNpWVNVRgMBlVPW +WRQTtHrTrrDRvQDHrbtJlpdhLdGsDllfspLpphhs +GzCSqCSmSmVSpsljphlpsL +gVwCVGzmNmCNRQTvJQJHnvwQ +psBDsswNjBcqtHtsTHsqtM +vQrPqZPmvgQZrfgmPrfJQlLvnLzVHLnSnnTLTnnHMt +PRCJRPgmqrmZmmqQQDDRwwNwjwDwpFjDDW +VtBgCqbVjPbSbHtPRdrssZMFZlrRsBRw +LzWmhcDqTDvnDWTFMrwRvwFrGZdGlZ +zJLczJDnWDpDNzmDczWLzWzWNCbbttHPCHbSVbqgHSCjffQf +TjTfvJjjvcjTQcDzMDfQTLLbLgVVVhMrWWblghbbLN +dZHFSpqpqpbWrhhlWh +dFwPBHqFSqwZSmZmSlqZjTvvJTmzcJsTTTjfvsfQ +qqqNTlfjzbMGJlHMSZtZzZgRZDgZDzdS +nLCCVVcmgCdZdSlg +cmQscBVpFsppsVlffQGJHjlWHJGq +whwVGGZhVLwhsFFDCTrDccCctrcctL +CzSSvPSzTBStSWND +HllCHvHJPPqjCPvbfdvvbsmhdRRRsmZhsRdMFQMRFQ +gFCfCVfCsLCftsBsDbSHrbJRJJtrmrddrd +hqQpqWhlNlpMlppfdTRhmbmTdbdHJH +NGvvjvpvpfGgGGDCZZBg +rmBtgdddtqmmrqBGbLGJlmctWWvbNzvfpsVVfzzSVSTsWNpz +RPDRjMhDFljvsvzlSs +wDChhnCQwDwmgJclqrgm +WHrrDbWHQPzNrrRVMQJMQGvvsvvjnDLvfsjsvwfGws +dhdhZhcphZZZmtFFTcZSmcZsnfqjLRnngnpwnGfqfvvnRs +FZcZhtmhFCttldFlSSmlSthQJzNVMbRPWWPJzrbbJCNMPH +wMFBpvTppLpwfNfjggmNmGTj +ddSDDbGHnRDQDZRHSZSdRZDQzjjrzNNNfnmNrllhgglhfgWg +bCQqsJqGDZCHbppwvtVMMvJcLL +pSpSVdLDFCvDDvCFvJgwjsJbNtmtJgSjmj +ZcWNNBQfwjsttsbc +WNQMBflQQNGQrFpFVVRDHpCMDR +PfPvqLphWpWLtZSWpWLPjwJbmDwJbbDbmJVjPQ +lQQnRGMllMjswrmwJM +ggRGFFGGdlGGzFFzzFFcNBvSfLQZShZTtdLWWZWSWZSp +lCfgHsVHJDdswNRmsMRQ +vccvvFVrPcvQNRdnmqdR +rctPBrPBTTpPFBLZZcCCgVHJHVjjbLHfCjfS +dfGdsGGrlFFlbWjfgblhJhLDLDDMLNvJNLLBnmLB +tSppwQQHSSVtwStSpZZVqRJmBDzLvwPmzJznBDDmLBBJ +cHvtpRSvptCRbbjrrcfjrWjf +BBdHdjgQdjMMsHJscFnrzLpLgznLFzcF +wvllmNmVvZfvmZWqcPptPztFSWLFGrrFnt +ZbCvqqmNvflfVTbZfNllsjHdjdhhHDTHRBJjjMsc +FNCPtPtgLFJwPwflFwSrLFcMczQZTbMVmzzVZMcNVVVb +DhRDdhpWQDZmzVSQ +vnhBSHppjRBHqpWvrPFtJLJlLvfLPF +nmcSnnWjmfCTcHPHJCvh +zdDdlrrzGFFLPtPhBBhH +NGNGrzrRrzphwwwMmqqfnsfZZNbSjQSN +lgznQGWQLQWlnSzHSQlwnlDhCbZhZhZChPChwDcDphcb +jTRvVVrMvmLCPNcNZhRNcD +jfftvsrVJLsVvJqsmfqjfjlQgzlQWFzHFGGBQgtFgnnH +sllpwssrsCwrTRgCHGCTcnZD +jjzJtSdhdzbJWhdQqLdzqSHmDZBGZmmcGGgBGTDRBQTD +SVjgVhgtbVzJPfFpvvNrNswV +StzdmmnnjSRRdhPPdZZd +VbTbCqFFMbZTFcNQLgRgQbvvRh +pGsqGGGfHGfZVffzwtrHnmJHllznrS +NLWJvtLjtLzBjNSvSMDCHfwHSlDMlSSHfZ +RTPTVmhpnprfcfgZwgRD +PnPGFhGsTphsFpdPnpVdmhwFvBJzbdWNtJJjtNJNjbvJtttN +RvmgjDqqjqRgZRMRDpQjQhWsbPLPFnPFFbVVLbdSbnPSvP +NwczHBrJTzcBJHrfWJBCJcrCdnPPPNSlLnsnbFnnLlbSFddS +rGJwCCCJHwBGGctGDtphQQMppQWZmRpD +RPhhSMqRccBDZPPPRhPcNZSzzTLJrWZLmVVQLWZdTQQJWL +nwggfwCvbjwvbwpzWLpWVLdrrrQVTm +vgnGGCsCtntbFsgqlRVMSqNVBDtPSc +mtstjJmvTNBcjRRCHCfH +gLpglwwlgHbZbgpgFrdBBBfdfSPBLSSrcS +GQGglGWWgMglQFHgbmTmNtDqnDDVJMDMNJ +ZMbBZfvVfFfBbMvfMhgbfDsrSTTszcldmTTPmcPFDz +QqQQnwrqWQpwRWWpWwJRwNzTTSPpzPPdTPpSPmdSscmS +GjjtJRWtwGQjRZVChZMjVCrMMf +fJNPTvDPTpHHTPwvjNNHDfTWthhgQQGdBddtlvMsMQMvQh +rFbZVZrLmLdGrrhMBQWg +FmnzVRFLqVqqVLVRRFZSFmTwfHHjHCNCCDGwjnCDDfNH +gQHHQJgCnNJnQFQPRbDQzLRR +mwrdpctWtrMvvrrWwGMmGWWPLzFFLSbLnDFsLPdDFbZRLz +vGcmGwBBMGtmmrvlMrGlqNghlVjCCnTHHCHgCCjh +LmLvVjVjsrmrtmmr +tfcnbScRnlMZtHQPCgSQssPdHC +RGGGGnRfcwnGbbJRBRcwJfnGtBDhhVptNhDvLLhVvvjBWNvT +dZWNQZgQbbNvdWGgZvbTfLrjtrPlGJfrLqLJlj +TMmDpwzmVMHpBLfrcccMfqLjct +SwnSBTDDTwwzwnnsFSZdRNbQZWRvgSCvbQ +WPgZgQLLbMgdBrdnGqqfdhVVvR +HzssNTzwlwHHcczwFjMFHjVGrqRqnVThVqrGrGTRqvrf +zFzcHFNlzJBLgMQLJCZL +nPLNcWtNtlLMccLlWdTjzzbBfBQSzqzBqPqS +RbbDZZrGRJhJjgJQSjCfqQCC +rrmRbDDwvZDpprbGrbDvtctlVVVHvdtlcMtWHMHV +DWrZJrQjWwFcrhzVzbpmpcVqhb +MFnFHMNSqbMpMMmG +FNngNRBRCgnHCCHRPvLNdgJWwJDlJJDssZDLWWlWQlsl +BQqNsGrbBCNbNCrMpGpbHhthRCDRDRJCmDVRhRJP +nfvWvcnSWncSTdzzFLJtRmhHmPPVPVTwwHHtTh +WfLfnfSJZJvdLFZWngfBMGMppGMrNBbGMpZjrj +rccMjBMVJcjjjNNqmmCf +LLspTTGsTGntsntTFwnNNfFqQmmNgNqfNQmZvQ +tpDTwlGDTGPPsbtsLsnnqGTJzJrJBzHzMVrMRzBMlShVBR +PsrNPRjjPbjzjLRWLbjmvtCnMntnpfmtNZNCNv +dDlfwwJllhJTcllScSCQvmtCnmtCmQmQmG +TTFcdhJwhBFfwJJHhdchVclrsbWsbzqLgbzrrjgVRgsqgW +vvcvvDJFcDZPTzwfcwSLczzScz +VNnnVVsqGNntsqtBRblqBndSfzCCRzwRfCHSjdfSjzSH +pppsMVlGGhhrZwMMDP +LltNHMZNHMfNnfgtLHWWbhWjcblSbVbcTWVP +vFmCZsqRRBqrVPWsWTWPWb +mQBqJRdqQBqQzzRQztgLgntGZttddLMggw +ZTCCrCWfGLGBWSwHvHHmHvmTTH +bllhnsbjDlqFfqjhnFRppwmvJppmpRRwMNSmmw +FlnFDjdtqhDdfZZBrtBrrPLt +CRCTHHJcCmJgTSTRcSMcRMVstssSrtprppVFtdrdspNb +jjllnvgBLqdsGprtqtFG +vQjzWnWZWjBLhjgwcccRJgZPCmJm +VRNmBBRNRFcCRcFVRSVSqZLLvvlLqvLfzfMhjJLC +TdHsHbDsbHMJLqlLzl +bgQGsgWWGGgbDgwGzBNSFrFtVSmwRRNFtn +pCCggQPPzWnvlDcWVHGJcNBl +LhsLMrwwGlnMBlNG +mmhwZmqSLwjLttnFbvgFTpPtPtgFCz +TtZSJzFZhZzTFcgFFcmRRmJJQllCHvPshVQsCrshsCssHVHW +GjGGDGqdGfbpDBjMdjpBjBNbVHtsWWPHlMlrrrrWWlVlVsCs +dBdDdfqLdBjjFRFScRStmLnL +GtVppGGPbVgTVFQrZzfrJfJJtMJr +DslmNmLsnmNHNNnnqQRZSJSQfqrJzSJn +BNljDHsHlvhmBshDljWsDWlHdgvpVTFggVgGcTTpvFPTzGCV +GRcnTRtcQTcBTsNtpvhFCmmFhZvFPC +bBJMgqWfdwBJfMPPPmvPqhmjvvPC +SMJMdJbdfwJgVglMWWVdcQnBzSQDzGGQzRQDTQSB +mvjVzLgTzVzvVjJrJgrlMhZRFTtRlRhMRRRtFZ +HGqnNNqfnHNGGfCHndBqnqfFlcppsJMZplMFpMtlscRlpC +qSnPGqqbnSdVrvQrrSJjSV +lWFSWZZvVqnqfnSrJzMcPDjJBJcBMPFJ +NGppNgHdHbRsHPbsgGspTwHTMcmMDdJMMmzBDcMBMDQmjMBd +TGGLRGwHsGtpHgHpNbpttwrvCnvCrqSSLvWqPqSSnWvn +jwcqBNNdZLjSfvPdddRlfb +CDVmsgMHCnnDnhVghmDnDCzRRrSrbrlTbsSTlzzlvzPb +gCCFmCWDnChGCFHnGCLBcwwjvZQZNtGqqNZc +LBDcNstdNJscccVDhLHNDHVtFvdldlFvCSnSvjSSbblgvZjF +rWznQqGMMrmmRZbbwvSFgjwbwm +RQnTQfWqqTzTLJJLVtBTsc +SvwCTHqCqqqHtwtnnHHDtWgrBQLzzVLLzSQVFhbrSFLL +cZmPNmPJdmPjPdcclRPPdhBCFVVVrQzQCCLbcgVbBV +fNlmfZfpfWMCtGGpnM +bSNssNssbPHVccPhclPGpP +ffQfZdZZBDDZgLvhmhzVmVppmlpGgh +jdQQQJRljSFFTWCT +lvlLtvnhnfvMgtrvWjmTmPPzjHcrmdcjdd +qCbssCJbppQZQbRJDQSZCJRpzhmcQjdcTBmmGzmdcmjGmdmT +SqwSbJZSpwwFJFDDbqtNVMwVMMlVNgNVlLhV +DqGFQGNMGMQwCcgtCJcr +sVfjWlzzVsmzVZsdVlHrhjppcgpjrhpphcSJ +LRdLsZBWWmlZldZRmzPDvDTTDMGTPFPvBTTc +jzzzpjgBzTDQQHPH +gLLtZVdCdsLfnbZCbdZtHDfHTJJPPmJJfmHQDJqD +bVtWndLtcZgnhsvMSBrMFrvBWNrB +sfqhLDcqfqRRqQhQRqMcvlJpJwFgzwpjplwbgpwzLz +CrGttnhTWtmSnGrtTtSCZGFzbgHHFFFjljHjZHHFwgwl +mBnrrTmWWCGStVCmMcDPcPBqcsRhcvPR +GLZLBNrGZdGGVgMVJVhnvn +dmWlcqcQMWCJVhMn +cdpPqtQbcHlmQjmZswFfTRFpBTfwwT +ZhtZpvbnbpPbtLHLvdsNdcRLNd +jDDjlCflGwsHfdrfTLrrdN +MzmljBMBWPtsbtSQtW +GHrzPSrNLFnMtSBZjZBB +WWbfDmVmwmmlbVDldWslNnBMJJNZZJCtJJJn +vwDfffVvmDwdTvDRQvpLNpLpcRFpphhHLPHg +scsTslgcnCTCScSTcqLLWlFWLLqbGvRbpL +NZMBdBPtNbbrLGqqqGvqZF +NttdbhMPfjQfNtbMbMmNjhNcCzczSSCSJTSzTCScnfnzwC +pjdjCGGGWPCMSDfS +JhFMFcrgBHPnSnWFWDDn +HVBBJctBccghsJhgrbwLGTTdtjLdbmTMMb +DtGHgDPfGfPhfLwNWSSJQcpHcr +dvlMCzdnMRFCCTjnZNpNQJcSbrWzrpSQWS +TVvFJJMjJdlMvRvMClllZZgPtPGsftfDqtGfVGsGtqqq +jSmmcjmJqcBgwmWMCLLzCsMz +TnTQVDGQTpZGNQHDZDHHQDwsCCdLrflsrCVzVrwWzwrr +zDFpppnNQtnTQQvZZZNvnhqqjtRccRbgqqbSSSjPRg +FwClNSwCFstWZLDLvhvjvtjhhD +TmsHmsmrggzmqnnGGvPGjTbbRGBhbB +cHVqgcrVzrQqzHmMcrMnczzcWFVCCFNJZWJZswwFCZWwffwS +mzbsmbmLRCZTRbSJFvPLPJPJpJffcP +QqWqNVNNNllnnWTglqTVlGNPJDvwcJpwfwccPgccPJDfJF +HMGnNMltqGMjHGqMzmTSmzTsRSszSm +qlGDfljllCTgqCTvCDfBHHQsbrSZZHSHWtvWZB +NzpnNpRnLLwRpdwpVhtqQbSbsWQWbSWnrrnH +cFqwFNpLdVcDJlDgccTD +BRqjnSBNBpRHHpjpBSnHnRBQfQzzCvzWrsWCTvfsvCsCCsfC +ZMVbhqbMdlbLTdsWvfPdPC +hlZVDMZcwJNSgjJgJFnq +CZwZssQQZrmsCmNNDpDGFblclD +HMjWMbBVfnnbMbnzMpFhlNSNFFSDcDGSzN +LnLLqjnBMjMngHbnWrTgZsCsgZvvvQrvQs +RCFCCJQbCQcprRlHHPpHhd +tWWLwvswfvZshgqDpdpBgfdf +mZtvZtMpjZzwWFjJTcQQbjjnSQ +fBfVwtttLDFctDtwFPWfTppWfmHCHdJhdChT +bGMRsbsvMQSSzMzZSNzsZvRNWTZJlmgZTJJdhhmppHTJCgTg +jssjNSSGMsQHbsRvHNPjtDcDcLPPPPDwLDDV +pClhQjJccrpbpqHhMhVhSMqHPt +dBZGZdgBzRsBsvMwGGVPVqMGwtVH +ZvDddZvDBdDdDmgCmVmbbCNpCCbljW +DTMCpdCnwRDwdfMCDDCssfZmGrBrjpttjrNrgctmGpGr +VVqJQgSSWzhPGGrPtNNQtm +bFvhgWzHJlDdffswTvRd +jwCCPPTtCswCCNTsqRNbMqQMVvVzMMMQSGvQqn +hprHlmFcHcdhWWLchZzHrLMvvnBvJJSBJMVMnnmMnMMJ +WppLcZdHWHplZWlDHhHTfzRzCCsTTtNNgtjgDw +vhmDFcDZmczMrwcqrMrmDFrvggtVSWgtSNwsjBtNVSnBsjsS +dbbRJHbpCWBBpZVgSS +LZLdHlClPmqLGDvMDv +mFbWsvsJVtbbRwfTSP +BGpQllhLGqhplBGZBfLMTSTLwwfwMJwMPT +GlDnDpQZlZZpZBlpWDNcmrgrWmNdNJvc +zbtqTtHQbZZpqbPpvGJdvQdhrhQjdQGs +qDFLLSNqcWwsGhGDJh +LgBcfnFCSFnLccggSVCVtHZlpqPPtTRMftHMbMzb +hzrrWnzRZRnbWVRzjcRHMDdqqQdNMHqHQQjlHM +sGCpCtppBfCTgwBBCwPBCssQqMQvNlSMMQDQNqHGHvDSbQ +tpLFPgfbCsfbzzcnJhRhZLhc +qzzGqfpFvWFmRSPjPjRP +cwwVssBMtNMNLngstgVBnrsPmHSJJmjllhQdQldmhdrjQJ +nDVSsLwcVcMnBGzTDDCvpvfzGT +bcTbbcZGZLPgTMWZpLLDQnrvPVnVmmjmRPFVrF +HJCJqlzBdsSjzCJRmlrlrnVQQDFnVF +BfwffNdNswLtbWbNcpjt +smJwSNNFMzFNDrvbrbfJHvbl +BRQjqZQcBhrbTsbTnfcn +ZLQRZRBjjPWSsmCdSWMgSN +NhwlDpbWggdSBvBggLFg +fRrZsVfjqljmsQQVmmsnFMFSBLLRvFTFMBSvFF +QfqVVzcsQmcQqrcsNwzzzPphHlwNppPH +nnFdsjVdmpBsBVFHzjpvlTfQdPcQQPGPcvlGPv +DWMDCCWbNJhLtMgJMNLgtMgQflZQlfQGjZZhQZGhTfQcQP +rCrtJJgLLMbgDgMDWNRrWRnzsjpFzBzSHmmqHmqnHH +rmjjJmmdwSmGhdsjJtsgGNzFWQFnBFVWHdFQcLLcNz +RCCbfRlvvPfvCTnHLLnNbNLczHnQ +lqZTllRRpDMlpfZRvgQpSmwwtggQjJgtpS +LDsGvTSSsswCwTrLZDqQWHMWbphlHMpGGpQz +RRPfPRccBdVjPcFlpMpMQWzMWfpF +RjPRjRtczcNBJRSCtLDTvTSDCCST +pqQNgNnSntwgqzzQCzNwCNBRcWtBjZcZGrBMcHMGvWcr +mmJdJPFVbJbPPGZbMRbvvrjcMj +lTMVVlLPfLNQhpgqLSLn +HlBHFrgBvlfzFzqvnvFqpCJbJfQpQpLcmhbcmtmm +jDjPGsRRTMMPjdJmjmLpCLth +MRMZMWsNpFFFVFHW +RGgwWcppGSWcWSRWmGdWcttHQFJHfbQwBQJTJQBQfJ +njjZZCMlCZjqMBFbJQZHJHBQft +DsjCPDDvjFNsMNjNqpGspcsGSmcpccrGWS +cVwMZGVZwHNPgPwRZwHttThlHllvlzQpptzppl +DsCWdqLdDCnfJLSCqsqWRsBdlhjlhzlttzQhhtvlhnhhhbzT +JCWWRWCrLDDdBdLsSsLLSCrCNZMVcmMZMFwMZwNZPZVGFPmr +hhPzDzPhPNbfpzhBbdNbDhttzqWtwttHWwntjqmwmWFm +LgGZSdMMrgTLrZLdgLSgsGTFFjrWtFFmmmFtWjqHFnFtjn +vZgdLvZLZQLRQZQQdMZLdQvVpRhNNPfJDbcBbbhVNJNNhf diff --git a/src/day03/mod.rs b/src/day03/mod.rs index 17520bf..a8a6e61 100644 --- a/src/day03/mod.rs +++ b/src/day03/mod.rs @@ -1,23 +1,47 @@ use crate::read; +fn val(c: char) -> u32 { + if c.is_lowercase() { + c as u32 - 96 + } else { + 26 + c as u32 - 64 + } +} pub fn run() { - let input = read("02"); - let lines = input - .lines() - .map(|l| { - l - }); + let input = read("03"); #[cfg(feature = "part1")] { - let a = "TODO"; - eprintln!("Day 2, Part 01: {}", a); + let lines: u32 = input + .lines() + .map(|l| { + let l = l.to_string(); + let len = l.len() / 2; + let left = &l[0..len]; + let right = &l[len..]; + let lc = left.chars().find(|c| right.chars().any(|rc| rc == *c)); + val(lc.unwrap()) + }) + .sum(); + println!("Day 2, Part 01: {}", lines); } #[cfg(feature = "part2")] { - let b = "TODO"; - eprintln!("Day 2, Part 02: {}", b); + let lines: u32 = input.lines().collect::>()[..] // Not a fan of collect here + .chunks(3) + .map(|l| { + let first = l[0]; + let second = l[1]; + let third = l[2]; + + let common = first + .chars() + .find(|f| second.chars().any(|s| s == *f) && third.chars().any(|t| t == *f)); + val(common.unwrap()) + }) + .sum(); + println!("Day 2, Part 02: {}", lines); } }