From 52123945a7bf2d627f3000add96d30f46c6f48b8 Mon Sep 17 00:00:00 2001 From: Orfeas Chatzipanagiotis Date: Thu, 8 Dec 2022 05:45:14 +0200 Subject: Day 3,4 --- day3/example.txt | 6 ++ day3/input.txt | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ day3/solution.nim | 47 +++++++++ 3 files changed, 353 insertions(+) create mode 100644 day3/example.txt create mode 100644 day3/input.txt create mode 100644 day3/solution.nim (limited to 'day3') diff --git a/day3/example.txt b/day3/example.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/day3/example.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/day3/input.txt b/day3/input.txt new file mode 100644 index 0000000..a30889c --- /dev/null +++ b/day3/input.txt @@ -0,0 +1,300 @@ +hqBqJsqHhHvhHHqlBvlfpHQQwLVzVwtVzjzttjQVSjMjwL +gRTRnCRsFNGbTzLjwcSTMmSz +dGgsRWPGdWgZJqBBqhfpPq +HNCNJHCWJRRLqNJWlfrrrwsmlwGmmf +dddvLdLjdDvjvswlmGwlZQtjrt +dvcpbLVcvNJJHNPHSp +QDprSpLQRLQrQDmQcQFZjbbhZwdRsRFbbBss +gWGGPgNvJlgJzDlNGHCGPNZZgFBbsjbFFBwZwfhdZbZB +lHTlGMHlGCPNvClzGzJHvGcrMcVtLqMLcrrQVcVDrqrm +SrBpJFfldlFNslFJBZwsmwgVGGsCCVmZZD +jLtjvzLQMtWjbbQvDZZwGRJGgwggGZgv +MzqqjznQPqnnjznnctnFlSddPfHflhfBJFNdHd +mPNNGVCRngnSbgNw +WqsqlTssgvqvZWZzhsTzWhScdHtfJJnfbtSJwfczdtSS +sqTvhpqQvWZQLmDpDGMDGrgL +DQRcLQVLbbcbrFPcRtTBBBJnTZrrnmZTrMgJ +slGjjjdlhMfvdMQTvg +jlzNhWHhhWjHlwwwGLDSDtPQVtRzRbSzpp +DzDgfvzfDczfHCHSlgHLCmWG +PrpNPJtpPMBssmmVdmSVVr +PSRMwPnMpBNtNBTnnZwDqzQFfwhjZZqfhh +fzfBwhBJFbCwbwwg +strtgtrPgmPgFRsMdRnZRMFn +mrmLPDvGmmtSLDgmSqvHchhcHQzcQQJHBfBh +NsgwPPDgsPHqsTqqmLbLrDRhmrRVrbVW +lFpGFtfFlvSFplGFzptSGSSlhZbhjhfrmWbhLhmLbCZVZjWr +ccplJQSGcSSpVFvNqqsqPNqPQPTwqd +HFhPNNZGqSZrCDBVZBCB +RJTtwczTzCRVQrRHpR +mfgblfltwgwwmlJgcHNnGhSbFNnFsFjFqG +tSRqNRHpHnMSTqpcmrWWfqfmrCQCrW +lhGDtbgVVgDsDbhfldfwrzrfcdzwcr +vtDDhsgFBTNZFBHS +LcNpLLBNgdmHGmsBCrRBQDDwnwRj +hSWfZVhfPJJhfVWbhzbnQqQnRRRqPvCCrjvjwj +ztJSSJhzzSTJrZSbzzJTfzbZmLmggdmNMFNpmtmMGFFGNpmt +TRdFfLbTnLvZVlZvznQV +pgJGprJNhghhNjjPgPNrhNqqlVVlQVVQqQjfzBfQvZzB +rmGmSwJPwJprrNDbsfMRsdTDcDWHfM +QMpZZTtwMBttJMMbVqPpqLqbVlbqqN +rjCFGrdGRwdDHSnqflPVLqqVNllrfl +DHGDRvhvwTZhJWBQ +LcQCCpLQVhrdcFQCJrmmmwDwvDtJJnnw +TsZqqTzMRqZjfsjTTDjsNJnmnStRSHnnSJmnJSNH +sMMZZbDjZFdbVCFphV +FCcdFFGBsdDrbMNSmSdmQR +tVttHVLhvVgfTTtffNSMQRMZSRmMQNmHSb +gngvvwJtVVTvVvvvfwvJThhCzGcnsCjmCDmscPcGCsGsmz +fsnzRNZswZszPRZSLflPpDhlhvgWHmjWvJjh +bVcCqjbdjbcMdBrddrQphvHHmHWlggpWpppqJJ +FBTdFQGrTjLNsNtL +MSWWgMdgdbWbbfdgsPmddgCmSLZvSFvLQvnLrFNZvZFLlLLl +hjpJjGthjRNRptwJJqVBllnvrrlTTQFZqnTZnn +tjDGHwhHHjwjjJGpwjwjjJpwsdgffmbgMsmbDNcMcdmCPdsm +MlDrrgnTDLlCCmCRFgRSCR +HHhbbNQMccQFSNBmmpJNSJ +MwbMbshsswVbHQsbcVMcrtDllTlLqfTGVzLGrTlT +gSFzqQTpmVpQVpLFLrzJJRthlsQBlPsZsBhZst +rwrNDdbHdBhRhZbsjB +vvvMHwHcwGCwwNfMVSrqffWpSfSFzLmT +RNgMgRCCgCfPNfvNgVQmhPVWWjWjLLdLBj +JhJqqqwGDchsBVbdjldmBLmG +schZzDwTJzFTsctHFMtfftgMttpM +GHHWqWFWfWHqbRWsFZFmqZbhNjNDNppNjrjDcQdbpddhjr +wCLCVPfwgVSnPNrQhnDcjcNpDD +TPgLlggJLVwPVVPPwgTwvtSCFmzGGqzGZsGRqWBGfFRFJFRB +LfFLmGTPHBfpHmzBLdZfBfZTbWWttWSDJtWVDJDtSWJzVCCV +RssRRRhrRwQqMQQwnPngQrwvVSjttjJSjSVtWWCWjbVb +hQPnnRnQgNcQqqQQcsZTNTLpdZZfpZFHNpBp +VTCVVnwfFTvFmTCvWwJHdlhHWBJhJBRWNHgh +ZbSMZbctGtScQSZsSpZpPpplhBhtdJDRDJjhdtlRJRjNRj +rLsbBQSMBGspPGcMPQvnqmwzwmCVLmqVmwTF +GVrrQVHHHQGTllQjPHGrlCQpZZpJFWZFzzjBssDJghzhFZ +NSMmWmtqMWqSNbcctdLcdghpgpppssZgbgzpFzJJFs +cfLqLwMRdtNLMlQrvflWTQPffQ +FjtGflGsbNqjsmjGGGbmqQQQBQBTjdpTpJTWvJBddj +CPrVRMnvvLSRHLnBpwdWTRBQwQzBzR +SnZMZPcHMlqchsvGGb +nnJnswzPCtmZDCpmhphD +rSVVLQQQGQjwpdmdNmpS +VvBcQvGcQgGLBgWrwznfJsncltJsJnssPM +dhbwLStzSGmmmzJJvFgJNvnrgvhv +VTsTsRscRsVBMRVTTsjZVPCnDNvfrPfDvNCfBrPNDJ +scHHQTpJZjHwzLSHHtqHSt +MHmFsBDmGpGTBfmCfWCffhzgvf +wcjwnRLPZRVbtCjtNttGCh +ZLGVJRrnPPPwQwPppqDHFpBFTpqFDr +GzMgVfGRdRVngDjhqcjctrtrzzzs +QbQSHwHSLbWwJJFwJPLPSWTQjrhqtjflThccsclCcscCCmmj +JFbNSbLvHHLQFLvwQJFWSBVgMNGdBBnBMVfddpGngB +sZHNJwMsvHswwvMWqBzhChWPMBzd +bHQQQRDHRcRcDljttBldlPBdggBCqB +QjnDbDjjjncRjbQnfZpvssZNHnppFNpvvp +NdmfPNMHMdNMHcffHBCwwsvsRRllvwlcqjwscw +VLhVGLpLShgvrjwFhjqfls +pppnnQtVpGZVWtzGgVzgSSfnCCDmdPBMDbmmDMmdNMBmWNmm +rrfgCrrMllfnBhBrdCFfWLFmmVFVWQvWwtwV +TmSGSqNzvwwTFVvj +NSGSmNbDzpmSpbHmSJqqlMgdMndcgdccdpgllRRh +bbPtLnLcLJzTjcJbbTcttLcSgwmvWfVvfVvBgfmWVJMJMJMW +ZsDNNGDRsrHzpNRwMlgRlgmMWvffWM +FGzQpZGGLFjnSFbF +DQZVDdWWNBtgWnJCnL +SSHSmbHRFqGrmqJrbbGzjmzCwrvgvwnBwnCvprwvpwwPvv +qFFFSmsRRzzFjcFsSsjmzJzflhlZTTThdhVflZlVDDhMcN +cdvrFddqDtDvqgCDtFtrvvvFSmShPShJVJmMJSJbVBgTlmbM +GzjpHzGHHfQNfJSlPQbJBSTJBM +HWpspsWjNsGRHfpwNszzLfGqnCnZtdvvcZvwqFCcZqMZCv +rhHhDhhDrRNwDRhNRLRqNPHjHSpVpVlljSSMnlHnjS +sVVBsFBJBtBSPSjtjPPZZS +JmddVTzsffcGNwzCqNqR +nQfqFtZWFZnFJWfpGqhDsGLLPLVbrPhr +CzjwMTgBgTNSGLVVDPbjbS +wMCmgNNdgvzGdRQcFGFdfJ +CbqCDnwFpDpCVfBPmPffPfRfpB +svcsjlGJGnlnvjvzgQQgGzsZPhBRcRPhWfBZBhPhWRRhPN +sJngnjSGGTGzgJGrrbCqLHrCLwSFqV +hnRnJrwMHnQRRRwMhRrnJRBLZtBPdPSdtZZjjstsLHBP +pBBzzcbTbzCcFzTvlSCZLCtSvvttdZ +FWmNzBFNDnRqNRDM +lvzlSPRDSpDJmNwNGgFpfsFN +WBHrtrLBbhWHtdrFwFFsjzwfFjsdsF +HWnrHnTWhWTCTzTBnRZqDDDCqZcclRvSJR +qcdVbpcMFQcdMGcMFjjpbCnCGmCnJHDHDGJChzCJCJ +wWwlSfBRgRNBDPJnCgCrgzms +tBTfTRwlwRLNwTRmWtNwQFZtqcjcdcqpbdQMqMdd +jJRzwDdwFdJddcjjFCFvQLvNlBhSBhCC +gMMpbHpmnHpWfnlCSBQCPmPllQSs +nHWHVfTGdTSjZzDT +sCVTsBPltgDSbLvRMMDT +WNrjNmWZwmZwfVLvLRbRNvMp +mrHGrmnjqVzjGqdmCltlhFFllgsHBPCg +wbglgTFRblnMRltJBNrDDWQbtdbN +dqCpcjPLGfHZQBJNGGvQDZ +SPssjVSqPCLpScfCgFRVmTlRwndlRwTR +hWMWMhTTDgWMzGMszQShGWJPCQmPVCNPffPfVJftqNQC +nbnHHwLrnswwPVCPZV +nsRvFHLsvplvrcsSWDDDddjjDlMTjT +HRCnhWZhCddgwRcwhdWZHHQLJzSLsSzjJwSjztsmtzsmLF +VlVVNNVqTlMVbTVVMqvqvrDTjQfFtjstJmzftfzsSbtStJQb +pQvvPpBqNBccPWWhcWWc +glJTndVWCTDDVFvnVndVlCvwmBmqBBwQmwPwmMPggGsPGm +NhcSrhNZHhZzRtHcNRrSMSMSFBMGmsQQGLMPPF +hcpRzbcHjRhRbZRzZRztzRpJVdCdnfCnlFvdDTnJCVDjWd +dqWvjjBdWWqMjdvvMJjWWjMGgcfchhzrhwbrwShwgzSqNb +mmmmsVTlVlsLQmnpsNcfgfwNLgczhcGhzw +RslpsnGGGlWdCZFMMRWR +pfSpZSrdSMVDVVLMMDDZpdgRWMPGqqPGqmqqGGhGHNRN +wwQBwtjvvJlvsnbTbvBRHgPmlqhlqWWHqZZgNm +JnQwJvjTtzTZwJnbzzfCrfLCfdfdddfD +PZcnljZFTVmQdlQh +JCLLqBBCSNCCqzJNzStBpStBmsdhVTdmVWsWmdhfLhWVdfrR +BpMzzqSzppMMqpJqqgzPFcjZjnTjgcjbPjPDPZ +HLHWmqBHHqWbMHFtbgWcdhspPcPchndPpn +ZRVSQZRfVZGRgnfsdhLgLndL +jzJRwJRSJJvSlZQGRVwlSGZDMqmmCCCmtNbCmtCMzFNLbF +fDhlBhhZmQRRfHwLdjHFFWQQjQ +ZMTssVVzvbCqJddsLwwH +TzgTbgGGzztMbbvzvVbGvSPBrlShRrfnNrnBDlNcRDZRZB +bjfqGfvFfcHvRwGFRHjbgQtddlQljWpWnQgdWWll +TSPVVSVwSzSDTDlntDndnlWddt +hTrrNCBCVrCrrVshThHHbZvFGscwbfFGRJcZ +jNhMjcgvMNgWggvttcFtchvPFFzdPPrQrrGGQQszRPQrRG +wSCqCmmppbTwPnGHrQdrGCCD +LlqwGmGScLcVthVt +dGGrWWDqmCnwCCQMQrMbFHbMHsPFgPVZbgFPgg +tLRTBwfvTBJcZFNFZRHSHPVN +zjJLTvjcwDzqqhGD +DzrWszFFrtBBhnhNCClHlnHbSbmlSn +ZLwLcVVZcLVpvRwLgMLpLJgPmmQSNSTNbtTvQmCHQCClCHCt +cfgZJwwVLJZPPVpRwzhzrrfGGBrGtDrBsf +BTsdCQsQnwwdcCqqdCnsFvGFpFBvGzrLLmmzpvfG +pjZjgPVlJVMVtgJSWLPvfFFFbNNmNbvbmL +ggVplgJtHSSggdCHsscChhdnnR +JddZcSlvvGFJNWVWFgQgVtFWhg +nDqsHqCszwjCCPMnfhfBhtdWggfg +bqppHqqHHbPLjLCppbwDdRNvdmcTmlNZGGbTTcNv +lcZDSvztcHHcMSZVHVvMZBqBNNFNhBNTTmssBqBcFB +bbGJQdQPpGfQJQdJfLFhmznhzLLNTFhNhf +JGpWpPJddbPpPwpjbtZSzltDgWDSgvtrVv +lJcNlNjPcmtFzHtHBJFg +VPZdwGGWVrsdPWhWwhzzCzzFppDFMBtttFCr +wshsLVfWTnGswdhwcmRjRmScqTcjlPNq +BsBshRZQQsVdsZQZSdsPDwJDHNNHBztNNFMGGwMF +nSTpLjcvHppzwwNt +jcqncjjvfmgrCfvqrnZbmdmSsdbVWlsmhRdW +FjjqRZjZFZWFqPvNvvPQpmbPDCmt +GSnHSnrScncHhrtncGshVbmTmbpVvppCmpCTmTCmCC +rHfnddwdfctlzFFgwqlj +wBwlBmmhwRVThVBmFHnvHMnfsmFfHq +jzwGSGJNZCCssHfsCPfv +GJbzbZdbwJdtdQphRVWQ +ztFZccVHFWHHLSDBpSBPhhZw +fmjsCmqnNTJnvbTvLRPDlCpBSPBpRShl +JqsGTSNJGqvqvNvttGQQGdFrQctrrF +mNZqjTFrZqrTNTTGSSSbrhrhRFRHcnLCzcCdHcLBdccHLzRC +JDDfJswJDWsvgVgwpWnRBlBzGCnlCLBlcCDl +vVGpfQWJpsPQMVgvppVwgWPJrqSZTrZqhTQTrhjbjqSSjZqt +fMSDzDHzpDDVsStdDgwwFZFrrMPCNngCZP +WmLnbWmvvWTTLWWQWRGQvLvrPFZJcgJFCZNrCgGCFCPNPF +QLhlqhljWvRQbbqlqnfStnHdBqVVfzpq +qWZtSQTSvJJvBfJVBBVFNDNHbbdRVPdpNFRF +fGcwwmCgsLhgwLchbpHdrrrphdPRPh +gMjllmcjwsLMgcwlMnSWzSqjSZJqZqZfjQWv +cdRHPjRFRdFVHGcFfFTHQTHVLSQBsbsqSCLqllBJqqbSqLJC +WwWppWgtNrnzzWDmrrmNvWJClJSSbqLJJCGbsCgJbLLg +MnvWpmwvWnvtGPjVRcHRRHMj +dLMDhdHGrcLTvvvstB +nPqgGGNPqRgRSjgmlWjbbTTPPBvpvpTcswwsTF +NRGmgjRnWgnZJqllmSqjnqSDhQzVrdQHDfDrDJQDMHDJzM +RgmcPmGNQwwNmSRwPPgfmrBlCDlGbvFFvtrCsvlrBB +nfdVnjHdMWnTqflFtbjrllrlsCDl +TZJVMhnfMnVMHnpRRNRzgJRzSzgwPR +nTbsblzlnGllmsNnbDwbcWQWwWBFJBQcWQvPWFJM +HRZRdSRdCdLdRftrHHZfSQBMWJMgMzQPFWMJCFWgvQ +HVzrLrrjRjLGnlTnlDlsjj +RQdTdZhWqlZhTdWTqblhNmTMVnnrQsnnpvgMVMHMgHMrgP +fjSSfjcCzGNBjCjsnpMVpnpzvpzsHp +GGwLGSccwjwLwBcGLGSqZWmmdLZLWThmRNZmWR +ncmBrmfdfcVcfGnQdVWRBRvgqNvDvWqzLRqg +PlpPbSbLFPLpFstsbqRqZMqWZqMWSDRzvq +sjtjHCwJwlHfdfjccmmLLQ +tGMtLHQGWzLHFVQtVfQtMWtbgrZNbdfSbccggrcTjTrfbm +swRChnwqhBCCCmSjcNSdcd +vnlnqDRlsRnJJqswJvGMFVMMdWtpVJFMQQFL +ffcHLzGmfvqqfWfF +rJrrRSPCPMCrPRQMNNWJQjJCnqFVVVTStqVnSBdqppBVtpqd +jNQQPjQMCRQwwQbRQbjMgwbNhwWZHHmzmlchlHHHDcLmWzhD +JzvrRHHJvCRZFPFnPgsQVVQNzQTQDttVsB +GSMjpqdbGNppBtDhPN +MbmqMwGbZPmPHJmv +ggVSVWzCNbbNCbRM +DfVhVsVQcQDmpmQTTQLjPjMjbDGNlbRMlNGG +sftTFJJccnphcfncTsfBvwZvrzgzZzZvBrVnzq +qqlClBNSCNSRQMvdrwFvnBrr +GDfhDtszhhsThpTDzsfpprMrFvQvrnnfvQrwHFbfFH +VtggWhpsmGVTGJWMjWjNjPWjLL +NSnShnjsswSsRPNsrnwcwMHfFwGqbvqCbFfg +LDJtzzmgVVlvqGbzvFfzff +mlJmQQpmJpZpBJJdjBNhrnnRdTTgNN +RtRRvbhDFPHHlhtPhRvPRtqjmzqzzwLjHQHLLLQVmVjq +WNNBBZfgfWnqVQwNqzmQcm +MZGfzSrTTnWrrWsTWnfSGbGllPCbGlJRvlPllCtt +phgcNfqgfpZsjjpdsS +brHHnWPbDPDbTPlDJJvJJPrMVVzRSdFzwdZZzFnsdzzVdVZs +SbStvJMDQgNmmtgg +lzDMDhfFRlfMFTfMGPMbFTlMpBHrmpjjCFjmBmrqBjtCmjjq +VvVswLLHZnJJwdndNsSSNBpCpjqjmNgrmCNtmmqm +nHcZWcSVsScTDlPPlTPb +DFMQSlMDpSpFDtDFccHvmqzvbHZjJmvzmmQH +CSgffrPssdgqRbqzzRqZ +dsdsfGsrBPsTVcMctMVNNhtStW +MDWRDWpgDvWpNptvNMnJCHJHMwHCndJfZn +blcrqTFmmcbhLTTTmlBZbjBJdBfBnCbQBdfn +TzlnhcnzTmhLRvSDsRzDPzWR +nwmmPnnPDjclhhjfFzzzwqbFFNHwVqVq +vSQrbpWCvMWQQWQMLgFJVHqzBzJVNqzBFL +CvCvQtWWQmcbtntPcb +qzvtzCCtLsLLzmQCHqpSsHSmfrnNrTrNWWMNGnWZTMZGBvWn +PglVFJwPhbcghVTBpBnWWhWnTMhB +FgjcJccVpwDcwFgVDsqzddqLqSDSCQQL +PLHsSVGGPvSLTffjMJWJJBjfBL +gNhwgTqDcqwpDqNhFpDFhFWfnndjcMJjMWzzBtntJBnW +DFhhQRRwbCbwRQChppmTHCVGTlslrsvrrSVZ +hHnRfSMmsSVrFvQqrmDPgr +jjcBzjZLpWccJLczBjZjWGwCnNzDvrgPCgQvFggvqrQFnr +jtZGpLwjWBpBWcfMTttfbHRnHTbT +swSHffFTVrJlHFSWrTpMZMPhMNBqBhTvhhqZ +bQbLQGGjQLdRCcQjGZBzpzBZqMBBBVdBqh +RjQDQGmgmVVbVcjjmjgcnWtJfrwsfrtHlwswnfHSFw +bVHbbMFDcbDbcmbbHVRbMRFgzSmdzSSTBtTjBdQTzlSldQjT +nqpqCMwJffqQSzTBQlqd +wvJhnnfrfsJrCNffvspRrPPFMbPMRRPPMZgZHR +FnJZnssHvMdJWJpW +mlDlllGrSGmttwlGvZgrzZNWgggzTzdT +bCltZCthtRcbcFbjFL +JGmHrJwGzzpllRZdzZLRcW +htbPSbVtFbbgjhffgPSfTVSDcHDDDLWscRdsZjdZcRssWc +vhfFbFvVHbtTVgFPhmJBCvBNrqBBrGCqQB +BcNQcvcBchSQNccLLvhTqbJZTrHrrrzzqTZMZMFZ +tpHDsnDRslllCCHtwnpsfjRgrJrVMfMmMrFrzVJFzrVZbZrr +tnDpjCwPLNSPdhPH +qnjvvBwBhSSFPgDQLVVDqgLr +WbszTbHTbsbHJWHLLMVZmJPQDrvmZL +ctlRbtCWWtvlSfjljjhBnBNB +TsnvssDDQlRbzMzjDMqHwq +tSGjZCfFZtCFLtVGWGZFbcqwHbhWdbzbwHbdwbdw +ZGBFJFZVBLjStZPBBZLRvlmsPTvsgrrnrTllvs +PgQdNsQFsdNwWqQBsQrTrTLpbrnTpGngnbTG +hCzzMJVDmfzmBDMCfSfhTMGcnpnTcjGrpjbMGjbL +CVVfvCflSHNHvPdBHW +DwlMjMNjStgmthMghg +PTlpHnJJTcZvTTbHZWZTvpqdHhmLgrgdfrhLLsmshmsLts +vncqTbPqcpCnbCPvccZbDBCGzzNBwjDlVVGFjjVR +QsdGGCztZVRddPgndf +DrNNBbwNHNwlbjFbbCNjNwDWWDPPVfDMgfmVMfnMWmmP +rvJBbbBNcLCtJZQL +NfLlqLhbNPddLPqLhpgHwFFwFHHTwRHWwPFTrT +MSMSCnjBnBjCscjVDVljTvHmmWnrwTrwFTrvTWTT +JCMMBzDMJcZZCjDzSBDNJgdfdQlqlLNdhgGLhp diff --git a/day3/solution.nim b/day3/solution.nim new file mode 100644 index 0000000..6df88f2 --- /dev/null +++ b/day3/solution.nim @@ -0,0 +1,47 @@ +import std/strutils +import std/sequtils +import std/sets + +proc Points(c: char): int = + if c.isLowerAscii(): + return ord(c) - ord('a') + 1 + else: + return ord(c) - ord('A') + 27 + +proc part1(content: seq[string]): int = + let ruckshacks = map( content, + proc(line: string): tuple[first: string, second: string] = + let pivot = int(line.len()/2) + (line[0 .. pivot-1], line[pivot .. ^1]) + ) + + var score = 0 + for ruckshack in ruckshacks: + let + uniqFirst = toHashSet(ruckshack.first) + uniqSecond = toHashSet(ruckshack.second) + + var c = toSeq(uniqFirst * uniqSecond)[0] + score += Points(c) + + return score + +proc part2(content: seq[string]): int = + assert(content.len() mod 3 == 0) + + let ruckshacks = content + var score = 0 + for i in countup(0, ruckshacks.len()-1, 3): + let + uniqFirst = toHashSet(ruckshacks[i]) + uniqSecond = toHashSet(ruckshacks[i+1]) + uniqThird = toHashSet(ruckshacks[i+2]) + + var c = toSeq(uniqFirst * uniqSecond * uniqThird)[0] + score += Points(c) + + return score + +let content = readFile("./input.txt").strip().split("\n") +echo part1(content) +echo part2(content) -- cgit v1.2.3