From 8645ee05f2b3747906d8d8e2703cdb49480dbd11 Mon Sep 17 00:00:00 2001 From: pegasust Date: Sat, 3 Dec 2022 08:50:36 +0000 Subject: [PATCH] d3: prototype done --- 2022/d3/data/example.txt | 6 + 2022/d3/data/example_2.txt | 0 2022/d3/data/submission.txt | 307 +++++++++++++++++++++++++++++++++- 2022/d3/data/submission_2.txt | 0 2022/d3/src/d3_deno.ts | 92 +++++++--- 5 files changed, 375 insertions(+), 30 deletions(-) delete mode 100644 2022/d3/data/example_2.txt delete mode 100644 2022/d3/data/submission_2.txt diff --git a/2022/d3/data/example.txt b/2022/d3/data/example.txt index e69de29..f17e726 100644 --- a/2022/d3/data/example.txt +++ b/2022/d3/data/example.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/2022/d3/data/example_2.txt b/2022/d3/data/example_2.txt deleted file mode 100644 index e69de29..0000000 diff --git a/2022/d3/data/submission.txt b/2022/d3/data/submission.txt index f17e726..597c2c9 100644 --- a/2022/d3/data/submission.txt +++ b/2022/d3/data/submission.txt @@ -1,6 +1,301 @@ -vJrwpWtwJgWrhcsFMMfFFhFp -jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL -PmmdzqPrVvPwwTWBwg -wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn -ttgJtRGJQctTZtZT -CrZsJsPPZsGzwwsLwLmpwMDw +wcsbsWwspmFTGVV +RHtMDHdSMnDBGMSDvnvDjtmpTpjTFggpmjmTFggTjmpP +vtCSGRMBDzHddvBHBzRhrlcZhlLzWNlqblhzcr +shhszHNHHZWqSzVNdClMjlFjBBbNTB +tQQGmnrMnJnGfmvrRRPCjlbljFBdjFCjTjnP +mRwtfGrMmJtwRDvQJQrJpMLSzVDHzhzHZqZzqSzcWVWH +WsWWgrtgsrhTQtsFcWPcRMCCTvqvMvqNNqMMHlMq +bBJrBGbzzLJznJrbSDGGJLqmlvqMqvlmLHRqRZZRNZ +bzJfDGVSzVrJGwjVGPPpQthdPsPpjdphsc +pJpCCBSWlczWWBWMHdMmMsFmpddrgF +wfVqZZGVQvzsMqmMgHjm +vDZGvPttQTVtGDQDDDGwbSCcSJSCJWTcRRSRczRJ +HLVHsVWLwbWswbpWFWrrmThfTPNnhNSDDNhDfznTnhnS +pBRcvGvvBtpGcqqQvgcphPfzfDGhzdzPDzDDhnhS +ZQRvqBptjJgZCtJqqMMMLHWwMWZWHHFFHm +PvPFPvLLLSvNFvQNWNPvrPLrZjwhMttTwtTtQZBwqjqtZqwM +HJDDbHjgppzCDCmzpgzsGbCsTMZqZllqhJBhMTtVBBhMtMth +zgGncmGGzHCnHDpDgDCGsmFLLPFjPRRWLRjdcjrcdRLd +zHnWzntnBRWTSBzRBddpFvZVcHpLFvjvLppvHP +MmmWmNGQhbCpZVLLbccvpj +QDMCGrNWfwNznBJsJzDBdg +tcRcZccZmdZJctRcjrlhNNDfrdNdSfNsNT +QHQpBVvMpRMwgBgvnHRFlhrSsgNFThgTFFflNS +vvHpVBBBGBppHvpLvHGbjmmtCqWLJJZRzZZZZb +ZBtTDZRWsTsDZVWVZDmjpbLbpSSzmLpWrbrS +MFNNFvvwFHwlhmNrCStLNtjzrb +vwffwcHwflGqGflHJfDBBZtQVBgZQJtBBsnT +pTJcmMJTspmpMZZJJZHCQQMzPBlQdWWWFzWP +LDnwrdnDnqjfqgvfDjrfFlBBPFHFSHPQCBvQSSWB +nLbjgLjdbrwVRcppsscJVRRR +mHnfggmMtpHPPBCs +PJjlQQRrJhJNPPTtBsCbCCTlpptd +rSSDhNQwShRRjhmMPmzMDfPmfLzL +HzLFBgrCthtFrrhFSCCCvBQNRVmJJJmnpnddmppddVtJ +MPZsjDWPjZsVzNTzpVdRdZ +qMfjWfwclsPsjwzqHgLFhwGFwHrFFrSC +llllmSbhNmSbNzlPmRNCcgLLchHHpTGsCTQGpT +dVjBrvBBVLJQsLpC +frZBWBDMFndStFsSwzlPlq +vmTVVtmJHwCwDllttTsrcPcMrfqPMMpjMq +LQGBRgGGRNgGgBhgzHfpjPqsMjpLcLjrPLpq +BdgzgSRGBnNHJtJlVStVmt +FbDQsFjPVHFZFSbrVjSVvMJlGBJhDcqBBllJGccJnh +RfTCTTpmppfgwCpwpLwRMnMGMlcPGqhddPcJnl +zgLPLNCCpLggzmTzTWmVrjVvrNvjjjvbVHQZZH +RBjjpwmRszBdvhLdSvpVpV +GrbfbJWmQJGWrGZZQMbSLggfCgSHhCSgShghSC +DWNDZQcrbWQrZJZGQQZPsztzBsPmBTzwcwRwjT +rlvgglvZqbrbWbWWdvdmPHBBNMNJGqjGRRnHnPBJ +cDFDcfcCDhLzsCfLDVpGPRJMPsRJMPNRnjHHGJ +DCfMVDFVScVMVQlgmZgdmWQQmS +nWTWWgwNgGDdBZBVcvDzzJccVlCzHD +RLppMMLpRqfMtMjtMCHJFSpzHSvSpczJdl +RdLRbQRjsRMrMRRMfbQLqPjbmnQgQWWwZmggnNTgnnWwhBhn +TmzjMjrmjmjBmHLvGPpbvWGqJzJJ +CfScwNDssDVCccdNVcNDQfbqJLqSLPpJpJJvJPpGTWJb +nddCQTfQVVrHmjMnrMFM +WHDnTwvwcwZmWwQTnBtgbVLLbgfSlTfrfb +CPPGdJRzNhNpzPJtMgBLbgtlLLfLMz +GJptpdFRhJwDmFHDjvnD +PNcWDNnNDcLjDDcSRWtQFfzzzQgPgsssZtPZ +MGhJRJGGrlpVGVHVCqqGqBQvzFzFfBvZvvtZtvFzvZvQ +JmJplCrlMNdmjbNbWR +pqpqFJPPSswJshNghg +zTHHrrbLzDQHccfhqmDshgCwfmqm +rtqqtTTHtzGLPWBdnGBSWGSS +gmNvgVqjjqzfMRgrRtPcft +WswSQwWWHGCsHQhlGGLLJRbLMRfRGcMb +dQCRCWhhwCwFwQshhRTmmBmFjFTTVNpqTnTj +FZvqSWqjjZvvrNSvbblcbslDppDHbcsS +MmwLTwPmBwmLJJmLlWzWnDllHcHzcDHM +QRwtQtLTwwQBTPfFfZdFvqqrFGWjrh +MqlnnNvJJZnNNdJZZLvLJnMzjjCTCChgWjccWqcjhcgcWR +tbddSHDBbHgHhHTCjh +mffBfbpsFSdQQDbQsrlJvwJNLLJMrrlsJr +RjqbNRRbDDqHndbcHDqdRHcChsffCQJJssZGpzpCpJphJd +VrMmSbrWVMtMtLmQGCfZWJZCfpZfJW +PgSPgTvSSHjjBbvbvq +whclNQQfcCFCcrJRjmmHNWsmLs +PPzMbqBPLVtnTppPTPzHJrGWJRRvsjjjRHssRb +PtgPVZTtTLMtBzqPqttPVMClcdDcgCCfCQDSdSgCwlhh +DrcrsvcNtLWSFPSFszbM +HqTdHJdQhGJBHQHWWDTnnPzbMMzPnS +hdwfqdhQJfjlccrfvNDLfl +BBPCWvjvTLrHTHHPCTndfwhbdnnZZfDhJwfJVb +msmgNMMcgmgczlmmgQNlddpVDDZpZpDfhZfJwsJF +mmQmMgSgzmqSRllGmgjPHrvvwHttjLrLRWWB +RwvDvhjhMvwlFNwNwCWCCWWLZcbGGZLGJVrppbZVcjmpmJ +tfnfsStnPPfTfgnPSSzPflJZZZrlZJVzLLmZJrzVmG +nPHqgfsHQnffqgSTldHTPnPHWMRFFqqFhNNNCwNCFMMhDMhh +FmwFHmnlGJfnlSlmrfsSvWgZNWNvLvtqLqDJhWJD +BVVTTMqRWvRZRbhW +pMBPCzVPQcQsGqSFmPFwSF +TcpTpwqZqMpZqlZCpZlwDjjcPNdgdPjHHHdvhHQgvv +zQFBRbmsQbLLBnGBvFdPghddNgHjNSSj +QnszWVzLfsLGbnGQbwpVtMrwZTqpCqpppr +WrZmrJcGwZdGZZmHdJcwGWcZsdFFLqTtLVtSTLtvvLtLLqSs +fnpCCQClfpQlzbbpQpflBpjhLVSTvFhjqtstVsjtstFVMs +QBQRnbCRpnPngnbggCzzRClZwJHFHDwZJPJGWHwmNGHPZr +fDhjvftQtDwgPhdRcRRP +bbNSgllVNMCWVnbWmcdFdmmFdpFpRrPPPw +NBzBglNzBvvGZDJQ +rGbbtStjSdbGtDpjjJbbRRbdrcCsCCrFqhllrFHsFsCvqCWH +TzgMMgmTVgzzTMLLfMHvTFsFCqHTvFsTvshF +gLMPBgQmQmNzVZLPzPppjbRhhddGBGSttbpR +zMJTpMzpVczHbCzVJVFCpJPngnBqVZqsRZZPnjqRgmjR +wttwNdfLQwLhwhhDDhWvgRmnPqsQqjnBPSZRgjPS +DdLwGGvNvhlvrrMFlFTcZrpC +llBQWMScQlSSBjMrvrrPpFHFBDFDFJTmTtFFmF +nzZzfVgzCNtnJppDHPnPpp +LdRNfVdzbzCCjcvllMcsbtjj +pWFwpFhprTnFfWwZrsBDmsqBvZvjjv +VbcHCthtzQtNqBsvsZvQmQsj +cltzzVcJSMtRWdhJLhRwdh +lmmmLRdZnjBlGgVhNSVvRMWN +bDwCqCGPbwpPwDPPpCpqpPbScvMSMSDWgVcSShNNVfgWWv +bTpzqJHPFFJqbTHswLlGlBntGnjQtGBZTT +pVjVlDDhmRPlHlHPWzWVWrVrcWztVdzv +GCqGGGJSFbnLJLLfrLfPrLdgrrgfWd +PbJSQGSsGnbMbqSFGBMMbsGTNwpTRwppDRsjwlNpsmHwDl +GcnPbbbLqDPDBPPDlQ +JtTChNfRpNJMTCfMTlJVsdVHvDddHBVmQm +TzlffWNfjTfjjCjfTtRrLgbnbbnSSwbnLzZZzr +hggWzjLhzhLhjzVWgpCpTFFHtCJFTJTHHHdG +lvSBvNNSNSSmlbwmMJCGtJQCHmdT +cfSlSSlvBDBPnlPPDZLsgtggZZVVfhzRgV +gGVJGvVVZZLvQLWQppccpctpNptMhnhSjjnM +fzQBsBzmwPzdQrRbSFNFnsSDchjnFhMN +bCwQRbbCJvlGCHgL +NMgdHVSqgQcVHmlllLDjlCLdjL +whTRJtJTnthWBlLLLmlFtVmV +wRhnGTpzzTRnVbzzWWbJwbhNQrZHfpNgMQpfZQHHNZZHHQ +qNNlMdbNrlVsQQfswQNCmW +LJzBvSdLSHpDJzzzHJnHnzFQCCmmswmfwBGhsQfWfCwW +HzSvHppDDRvgHzzcnqTrTtllZdRrbRVVZZ +TWVVVFVPpjVFtRfPBmmzMMPCvmLm +hDDrwndQQbbhZDMSMvcflMLmfnBL +grdggqsbrhdJJJrhbwbbsZGHVNHtTWpVBFVTTTVTHtNg +tLbvnTCzCVnzzwVTJVlwltMFvQFQRFFrQPBFdNgrMBNF +pShsqqmGjZfZccsqSfbdNBMMRQGBPgMdPMPF +HhspDpjhSjbcSmcqhZDcZZjTttLVwlTJJVWtnWVlWHCltL +DwQBvwBnBrSVRrZM +JWWGRssgRsFgzsFPJrNHVMHrlVrPSMNjHH +gspgFzRCFWLJpgqqRWgqpCJwnQCnhQvwcTdcdddnwbDfhf +fMMCwFDGNNMTdTDLlVlZZmdZBdBtVr +jjpjtbpRcPvSPnPnpPnvPPPnbZlmrWmLWHmHBWHlrmrmlZWl +jqjjnPqngtQfGFftFq +qnzhhbzzqGgsqGtnwcJrlCMlCjvcCCcrCRrvCv +mVSNZdTQdVVWmVFHQrpCjpjDRvjMRjdLRt +WBHZTHHTFWWNNBNHQTZPsPggghfgsnsgsffthszJ +sDwpdMgvHrZgwbdggzZZgPhFNFFcjPPqhLhjMlPqLq +JffJfnJGtBtCQQRBJZTQJJGfcNjqCLcFhFWCPLjhFLPjcPhl +VZZVmtGQQZmHrwgddppb +NNNlpjbVpGglNbvpTwBQQvfWvfBrWvBW +JthDJsLhhHPcGcqPshJsshSBwCWwfWSLCfSfSSRBrfWB +dhDtZqGmctZDtZHqDGVgVgNbbbFjndMFNlFg +jqDVzzDMdDwsVQLCZVCRWLGBQC +bbHFbSSpFbFHJHStJNbtJprZlCGLQsLGZRBLRQLQpLBClZ +SmFmTPJvFTNbmmsMdqqjscwz +RqMbHGJRJpgJgGgQjgrLTrTzjcrTrrLg +lwfwdhnflPlbCsVVjhCSbV +fwnNtwmlFZpbFZtM +QNSQrLTNrLNQRRrfHFrSjqhblWtSltqlWqtWWl +DvgBgnzgcvVZMljv +DGJdjBPDngDnDjBpBmFpTRmRFLRRmmCmHH +dtgSdTqdlvdJJvFqTvSqJqqRMPBtLHPBnWbsbWbsbWtWtWHV +DjfCfmcpNrwZQCmmNrDZNZNpsHLHWBBbHVVcGGGbHGBbMVMB +fpNjCfzLNZjTllvzdSgFgJ +nHBfZmHTRwsZffjBnHfmRZHtLtdNPPlWvddWLWJlJldCldLC +zwrbphMMVFzMwdCWNPlCbPdDCD +hccMSpqShMSrhZTBwmTqHjqZmf +NJGGLwGsTSsNlJZhmtgCVlbWQWlQMtCbvb +pDjppDBRdjzqpHqDSDzjVMCCrCrWtgQWdtdQQCdb +fHpfRBPRzDpBFSqcSBRBSNhPNwwNNswJLhmmLNGJZL +RZbsPgnVDzTJcdGjDGmD +NwfQHQtpfppQhjVVjqVNJJTN +tLLtwSptVCSWpvVtRnrbWbMgFPMsgZss +VsQjSwwVSwsZzsvdscZvfrhPRpqBrBrbpzMrrTMh +JtNDTmtGJTmLCGFDCHtDhMMBRhqqRbPrfrbNRrbR +GDWLlDnFgZdTSTWv +gfQHRRpQgRqNSBtjqwjztzjtnL +FvsPgvDlFcmvmTLlBMVztnLwWLzL +cvZGDcvbPcmbTbrcDDPgvbTJdJfJHRhZSRSpRRfHdSpSZd +FGHHHWvBWrHHrWVZJvVtcSrtrTcrtcjMTjStSM +swpwfRhRmmmRQDzcJlcqMSMMqtbMTz +dQDRDDRQfmmQDNsLfwRJvZJWFWVnPWvvPddBnC +zVhHvhMVTnMJgcTzMcfGJtfBWRtBRqJWtqJb +hlZjZSQCZtfBbGjqbb +SQDNwplrDVnhDcVHgT +HHZmttZVLVMQQJwMfcDRfDbbMN +phWvTgBqqgBWsTPTzhWzhzfNGNNwfqfcDwJRRbNcJcbl +FnTsvnhppTPFTBpPzPvpBBpFVmtfCjfmjtCmFdStLmtdfjSd +hMTPPMNlLZNSGNbRBB +gjmrsrttsCnsCsttVsjvttvtZGFHdbZGWWWdZSWddBHHnSWH +BmvptjsrfjBgsvvfgmfQchMpMqqhcQPMMPMhLQ +dJHGnrJJpGpDpFzzDmfsfSSCbfTfMbbRDb +vLcwtWNgtVtSNWmTmTMCmhNhTRfM +jqVgqVvWwwLwwgqZgjVSrPGzHHHqFnrHnFGHJGdr +QcQcdgbzwJnzfgVnVwdHQbdBrrpplHvmhLjrlTphppLrjl +MsPssfSZMWGWqWssSNPqrmmLBvjhqTvhjBprhB +GRDDZMFNMGFCSNWFPDMMFWNnwVtdVdQfcgtddwQwzRJfQd +pMqCMBGpMMCnwnpBMGBlbVRFJFWsJzRdzHlWzzJdJsJd +jLLZjDgPbNPZTDbvftvZgzRFsRzRrRRHWFsJsFJc +TZZLDPjtmDmbqQGwQnVM +RjnNhBnnNNmJmBNhrqGpsHbHtstgTtTjqb +WVMfWwQTzWZDMtlsfldqpplstf +WVTWSTzwQWSSvQVZCQPTSZPvBcnmcvnrhmNcRFncNLRLJmnB +lffQcnNTQBBcwqsdcqjSspcWtD +MPMGrHGMMTqWTtDg +VGRGLrJHZzLHPzTNTmmBfZQFTNBQ +lQBPPrBrlnqBgSRhgZZZrLJr +VNcWMDZbJHhWfWff +VwvMwMvdwvdwjcwdwDDqsqsZQqPPzqzldPQtps +VVJcZJVrRSdcsddfsvvbvFZBnngBMzMZFD +hLLqLpqqWWphWjhlGlCHDFgzbvFBbgBFtnQpnngg +HlhlmmHBTqTHHmlLqjTGhHhPdwdmsdcSNSfNJRrRcfwVJdrr +HmhvmRzzHHrRMBJBjNJGDJRnJD +cbqcPqLWZwsgQWZwWPwWgPPbntJnrNftNNNBtNJJNDBNqdjB +lgwWgggQcWSzrlTHMHlp +FZhQpClCWLBlrNDZvrwrrNSH +ztTfjMjJjgsGrqvzDGwG +bMjfnjndjnJtfgMTwPjFhQhCLdQCFWQQLWQhch +PtrqPrrMCPChzCtLFRbtNgbdTjbF +GdZGvJSWWDGplFjbjLjLSTlL +vspvnZsVppBdBnBpDCszhzMsMzzPzPhcPC +PdCtdfCMfGmtfmtBSWrMQwSlwWwJNQ +qTqbcjqHTZTbcDqczTjjZvWrQvVWJQSVQZZSVVrJNr +qbqjRFTcHTcDFgcczRqFrPsGGGgnhtGssCdnffGmsP +vVbcMvqjjjmHCBCBBmBSSH +PzzLTrcrwQgfLGrJBHSGFSCHtRFBJt +cfsPrLDwQNgsrTNTQgLwVpWnVWvMNvqjjqvpMvlj +jbqZNjLbZQvcfhhQ +CWdCDWWMCgmJDnJmdQVzMSchvfcQVFShzf +WPgWGRWRHdPBsttrHvNtrl +MCJCCMCqcCqJsnssjQRlTvQQQQqTvqfQ +HGVmwmLVlZRzcGZG +FcchHmDFpFbDMDMbntsJ +vfNvvttvDRcrvRNRNTLDNRcVsFhwVBVTwbbFFVbVhbJMBB +CJGgSJHdgPPSnQnjnddHGGFMSMwMMsmsFMMFhFShMWMM +dGCdjgzHCPPGlHDDqJtqRcqJlpfR +CwtqqvwLwnwhtRLtdRnwnnRhPHpLLppTPPpTVfTHzJWVLTWB +sGDsZDllDrMFZVmGgsmDMlmHpJBHpcJFPPTHfJJPzfTHWz +srgVlGSgZVGGrRvwQwdqwtCvnS +MLPgDrgLzThhCTgg +GVfCbvVbVvhBHlmhvhHv +ZqRQffRwtNZWVZfZSMsSssncnDCDnL +VwBNhNNmhJswqjJsRzPgDvSgJvtgvgDt +rRMblbHFfRrSWvPPPgMzLW +ZFpFpCcprGfbrGfGCHclZfnGqmsjmBdNVjQqRBnqBsVNQwBh +VLQlZWQbcPgcPmWbgmDWLQzdpGMTTqdpMTNsbGsNpMSqdq +HChrwfffhJtfHwJTsDqThhDMpTGsjj +HvffCrtBzclQZvQD +dCBVJJmrJDlBdQJWZTTsWbdWThWpbM +FHjSPjwqwssSgqTMGbGWhTMHMMZG +FwLvLfLjjSPqFqgzwffFSvrlDJvrQrDVrnmBvrJsQm +hZCRbddrgrRSVgcGZjjLFGLZFQFp +nzPvMsPvtmvPNssPMqpcWVjGGcGLlqGcGN +TBzmTmzmVmrBSBRrRgdR +bwZZmwfFmcfCRswNWNBsjC +VDSdglSStRCCTNCD +VVVppGHGlrQnnGJbMmnmCh +nFhgnFVNtgtFVssgdgVtVtsqJPTNJvDSNqTZZzbzTDDzDq +HqLHqcwlBjLzPvPJCCvJ +HGrlHqlllHBppRrlwWFnnWfFFVhMnnWdFhfn +FsMFVszjggMMzWlPJlPPlLQsJv +nqnBSNlfZqSvLHnHvWLQTW +hShpfCCSRtfjgFjMzdjlpr +jsbDsQnnwPsFbZgSltWGdgJgpnSp +SCVvLhLRrzCNBhrCvddMJpWdWGvJGlgtpv +cHLBBVCcCNHrbcSQFwQTbDws +rMlbLgrRgpwTDbflcnHtSScwHdJdwHJB +CQCjjZPzGGzCzZQvBVBNdQNSJVcJ +jsPhCzhPqFZzZzChFlsbRRLrMfTbbcLTpD +dqjzmmmQBjBHCmWrgVGWrrrvrpgVpM +PLJnTFbJnhTDzrGgMlvrFMzF +SssPcDttntDSsLcCzHBmmwcmZQqH +fFfFSPHllPRpRfnmmFfHvHjgbsBQjsptBdBTTddjsDdt +ZqLJCLCZzzTgWjdzDjzb +ZhNLMrNcGrchLqcCVMqRvlSnFnRnmmGRggnPnP +HMCMCMrHfwMHtFwTtgHHbVjjbsRZDwDVRbZqjhBD +cDpmpdpNLNDcdZjZqZBNBqssRR +SLJSdPcznSvdvDcHFCftFTFWCTHnWt +NlMmlPClmdGldRZHJs +tgJJcJQcntHBsnBt +TfSgQhhccczSVQqrgSgTjFWqLWmwLFNJLWWPPwqM +GGwTHqWVdnTTVVqgngzzqHzGFbJspFccRsjDpDcjsRFDsdjR +rtLflllZSrhQPLBtQStZvhjDNjbcDNDRNFjCsCDCFs +mPLBQPtvtQZtBlLSmMqVGwHbVMqTHWmz +VvJCrqTvPvQrCpRNVRFGfZfmfG +HMzsdWsjhZSsJJZNZf +wHlbjnlzWCvqJBQlrD +FnVRRsVdSnSnFSRqTVdqBBDBhrDdmcddMcMQMhzm +HtZvJwHlgjlGlHJLNjJrMmrcmDQfDLczDrMhhh +vGGpJjttvlZljZllZvJZvwGqsSTRWSCpnCWTVPVmWWTWWn +wSHCNwwmcSMLSDFcwwSSHQvZnQjLZffZjZZbVZjVVb +JqsNJJGGqprJNtpWhGhspfnffTnTvZvVbZnTrfBQvV +GsWhdGtPWpghJRqhtNPmClczSlDglHMlczmwCH +TzRpjVRjFpVLTTdgrTgrGsZwrZZwgg +vQfSBdbDbMbQNBJrlhmGnrgrgwZhvm +SHSCbdbddcVWqqFPCLqR + diff --git a/2022/d3/data/submission_2.txt b/2022/d3/data/submission_2.txt deleted file mode 100644 index e69de29..0000000 diff --git a/2022/d3/src/d3_deno.ts b/2022/d3/src/d3_deno.ts index b8a70dc..182eb05 100755 --- a/2022/d3/src/d3_deno.ts +++ b/2022/d3/src/d3_deno.ts @@ -1,32 +1,76 @@ -if(Deno.args.length < 1) { - throw Error("d3_deno.ts expects a single argument that points to AOC's day 3 input file"); -} -const fileLoc = Deno.args[0]; -const text = await Deno.readTextFile(fileLoc); - // Usable by Windows and UNIX const LINE_SPLIT = (/\r?\n/); function priority(chr: string) { - if(chr.length != 1) { - throw Error("Expecting character"); - } + if (chr.length != 1) { + throw Error('Expecting character'); + } - const ord = (v: string) => v.charCodeAt(0); - return (ord('a') <= ord(chr) && ord(chr) <= ord('z'))? (ord(chr) - ord('a') + 1): - (ord(chr) - ord('A') + 1); + const ord = (v: string) => v.charCodeAt(0); + return (ord('a') <= ord(chr) && ord(chr) <= ord('z')) + ? (ord(chr) - ord('a') + 1) + : (ord(chr) - ord('A') + 27); } -const sumPrioOfShared = text.split(LINE_SPLIT) // split by each line, basically iterates through each rucksack - .map(s=>[...s].map(priority)) // translate each character into respective priority - .map((v)=> [v.slice(0, v.length/2), v.slice(v.length/2, v.length) ]) // splits by 2 compartments - .map(([left, right])=> { - // Finds the value on the right compartment that also exists in left compartment - const left_set = new Set(left); - // by the prompt, we're pretty guaranteed to have a solution - const shared = right.find(e => left_set.has(e))!; - console.log("shared:", shared); - return shared; - }).reduce((a,b)=>a+b); // find its sum +if (Deno.args.length < 1) { + throw Error( + 'd3_deno.ts expects a single argument that points to AOC\'s day 3 input file', + ); +} + +async function main(fileLoc: string) { + // part 1 + const text = await Deno.readTextFile(fileLoc); + const prioritized = text.split(LINE_SPLIT) // split by each line, basically iterates through each rucksack + .map((line) => line.trim()).filter((line) => line.length != 0) // pre-proc: remove "falsy lines" + .map((s) => [...s].map(priority)) // translate each character into respective priority + ; + const sumPrioOfShared = prioritized + .map((v) => [v.slice(0, v.length / 2), v.slice(v.length / 2, v.length)]) // splits by 2 compartments + .map(([left, right]) => { + // Finds the value on the right compartment that also exists in left compartment + const left_set = new Set(left); + // by the prompt, we're pretty guaranteed to have a solution + const shared = right.find((e) => left_set.has(e))!; + // console.log('shared:', shared); + return shared; + }).reduce((a, b) => a + b); // find its sum + + console.log('part 1:', sumPrioOfShared); + + // part 2 + // eventually was not used. part 2 + const setDiff = (a: Set, b: Set) => + new Set([...a].filter((e) => !b.has(e))); + const setRetain = (a: Set, b: Set) => + new Set([...a].filter(e => b.has(e))) + + const groupBy = (arr: T[], groupFn: (e: T, idx: number) => K) => { + return arr.reduce>((ret, e, idx) => { + const groupId = groupFn(e, idx); + const last = ret.get(groupId) ?? []; + last.push(e); + ret.set(groupId, last); + return ret; + }, new Map()); + }; + const toGroupPair = (groupMap: Map) => + Array.from(groupMap.entries()); + + const groupByThree = (_: unknown, idx: number) => Math.floor(idx / 3); + + const threeGrouped = groupBy(prioritized, groupByThree) + // console.log("threeGrouped", threeGrouped); + const badges = toGroupPair(threeGrouped) + .map(([_, group]) => group) + .map((group) => + group.map((bag) => new Set(bag)) + .reduce((left, right) => setRetain(left, right)) + ).map((e) => [...e][0]); // get the only element in the set for each group + + console.log('part 2:', badges.reduce((a,b)=>a+b)); +} + +const fileLoc = Deno.args[0]; +await main(fileLoc); -console.log(sumPrioOfShared);