From 949178dd0ccb2a598ff693ce3ff0ee17ff6a07c5 Mon Sep 17 00:00:00 2001 From: Lennart ten Wolde Date: Sat, 17 Dec 2022 19:38:50 +0100 Subject: [PATCH] Day 3 --- day_03/input.txt | 300 +++++++++++++++++++++++++++++++++++++++++++++++ day_03/solve.nim | 43 +++++++ make_day.sh | 6 + template.nim | 13 ++ 4 files changed, 362 insertions(+) create mode 100644 day_03/input.txt create mode 100644 day_03/solve.nim create mode 100755 make_day.sh create mode 100644 template.nim diff --git a/day_03/input.txt b/day_03/input.txt new file mode 100644 index 0000000..7c07c0c --- /dev/null +++ b/day_03/input.txt @@ -0,0 +1,300 @@ +lDDWVvlVVQfDMlWjGJTRjQCgTGLCLj +ZLZpwzLBhwZhSLBsjntGCtgJRjbnJgSG +qppdZzzsdsmZphrNsNwZhllDHLcVVDWFPvFWcWdFlv +ztdhgJDBJghmQtPFQPpmbw +lVlLRcnfllcfVcccGnSQVLcsTPFbpwsPFspTSqmbpswpbF +cCHRGcGcCRGlGrGcVGnrdWHWBDzBNhhQZWWNBhJz +NfnSSQpdnRSSpvWdSsjZDGNDjGDwTGTjHG +wlPzPqzPFbMmqPCFCJmbsjbHLDDHDZjDjbGHsT +gwMlgmtmPcqVVvhVnvcRnn +cBNBBCHhbhNhblBcCCvcBHSwTwDQSqRwDQpDRsjHST +dPmzMVWdmmMnnZJtZVdqjTSrjTjrpQrsTTVwQRSj +qzmZMmdZPtnGqclblGlbGvgBFc +ZfpmNDfRhzbbqDnD +SFtFjTTZVTFvVTjHrsVvqGBJqhnSSnbJznLGJwJq +TjdPPtdMPPWCcZgW +qsbmGCsjHNhmhmhzTDznpnlQZlbWlZ +LTSSfSvggVVgBgfLtvvtTSczzpWnZQZnlnzpBcnWpQWc +FrLvrrrVPgdPftSHHdNsjTHjmGThhm +wGQlMjvMwpvjvZjZTZlWjplWJJTggDTgfCnntPgTJPbtPgSP +qNhJmcVmdJqhHnPnDNtnPDCg +LrrchqhRdLVzRdmhJcFFQWGGMjpGlvZzlQQv +ZqZMbZMfQZptpjlF +PJCggvHlwWHvSSvCJNvSPvDBtFDQThFQjtRQhhFTsVThQtsF +PwWCnBBCClcMMznMdG +rNwwQJrJrnQswrQrRRwCShBSLndZpdnhpGFSdhBp +PvzzWVzbclGFhLFGdZll +VWjPWvbjcVbVcGVzjcgzgwQQRRRrqwRJQwwstCRR +zjBMMzznjbssrBrMBbvHDmrlprlrpwGpwQDV +LhRwPPTLLNRZqScPWPWPTSmQvQQDGGdQHVDlmVpQGD +NtfhNwhLLNwRwRNcTBgnJMCBzsBFjsJfCz +jZjsWNDlPfClfMlM +GjqbVSqjhgvgSVSBCPmMmCmfpwTBfh +nGbjqtqcGzsLDFcJLs +ZQtmZdtdQcLndRncdQQLFjWWDHNPfhpnqhqsHNNDnpHs +TrMBGbJTwwlmDPPPWshWHfJq +wmVzbrwbwvBlBlVGtSVLSdFjdFtdjLVR +LBhZFhRPbbnPddMdPPlD +NQszQNczlCSlJSsg +mwmrVQwpQVWwTlvBpHHHFhZj +pzzDffWpQBzMpHvzMfRnTNhZdrdBcnLrcdrTLZ +msgJgtmbgmqJJcdrGcJjGn +bSVPgwntmVnngQWvWSSMpMMHWH +gmGMDHHdpngdrGmGcwbNCCnNcbbCSLwL +zQPPPffQQlVlsPFQFzQchZZbLZNVcbqbNqbZgq +PRjQzfRgRfjQBTfJQTlPFRHWmmvmWHGWrWvWWtjrdHpD +vfrHfqrLfLwwNHdvnthpnnFFpstn +gWcMclgmcRcWgDMWgBgGGFnntqQnGphdQhtbdFnh +qRWmRDlcDqWBBPwPNrZHrwSHjTfr +HVVbhdCdndhZSShMzRrzSM +qBjWqvtWvDJjTjjGJtJtnqBvZMrgSGZlgfSgSRrMQGQRMgMR +wmwtJsvjtTJwsNnVsHpdnsHdds +FCJNZDMPNCNvzqQJHqzGqv +hwjWcSTHwRpSWnQtGgQgGStgQQ +WpwhRHTRpcLRjwlwwTWBcWdlFbCrsPrrLCMDrZCFsCDPrZPM +DJjjShSGhGDSNdpfrWWcLFzrDWrDlF +wtqZgwMBBPVMCBPQggMwqMMzfLlWrWLLzsWcFzTzVTzLss +tgtwQqZBQQZbBZtPgbHpNJnJShcmJppSHh +tHrWmrdzzdHflmHmHrSmqswlqhqNgssMhGgghssn +pJcCBPPQPCcPpRpgwZNZBMnDhMsMBw +RJCvRRVcQpjLpCJPWrftWvSnrFffWbrz +jzlwwzDzTlQftzlWjfrBGBgVHBgpgBtPGVtP +vhsshbMbNhZpgZrrrpHcZr +qhdMqqSLSSbSJMqqSwwjzFzmjFQQFfHzLQ +gDhHNnphPPPNCprHFhHFdbdczzjNqbzjVcdbQTcc +tVJWBtVVZRWtjQbctjqcdj +RfvlGLvLLLlLMZBmZBRhHDVPnVHPHCgFCnhlpn +RFhZFTZvFdjlqqlRNCPwSSPCNPBSwC +spHGswpnWgJLLJCPGg +cWpDrVVbWfWbVfbsdQqcQzjjzlhdwqll +WWJPpQwWdQQPNpQvqlvvCblbvbvwLL +cmRMBMBTbSrTDRMcGBscTGfLZfvfvsCqhLlChZlLhfsC +TVbzGSMGVVgdpdPJpQ +lwsFfsZWGsGmsnlGQcPdBBdMbcPHfcCN +RVvSLtSTrTVrTFPcBdCHRcPHbNNb +LrqzLFTLrgSJLLLtTgJjVJvWlDDnjDWnWWlhlGWGhZWZhn +GQJCMGbrMbbCGrrGtcwhctGjNSvWpVVVRjNJqVqqBBRRJq +ssnglHHsnHzFmHnzHFPVDDSDRgVjvWDNpSSNpB +PZfHmndFzzfPZPZfCdwchwGcbwwhCdMW +DRGVQGmGQVnnGVmnnFpNbzCNRbRttCbpLztC +qdqHBdjTqPlcTchBjJMvvvLtLCcLggLvtmgb +fqhlHjdwqjjJTwldDmDmrGrrWFrDGZwD +wFscLVLrrVhwWgZPrcswgZWFTnQdtTMnpQtjdpqdqvqQMt +JRbHmmbDDSzDmDNpTnBBdpMHQtqtvp +JmCCbvRGzbbGJsLgZsVhgLwwGW +WDQwsBzWbBlMjdVpzTJVMj +fncRngntnPCpJgmdFpFWgm +RGZPZtZCfvWSvRZGSLvPccHwsrHbwHLrwHHQQsBDbllB +PlNZhwgpppccgrqVvttbBfrlls +CznSDDdHDRnRStVsVfDvfrtDZq +QCddZFSFLTmccQmw +rnwfVnclGPPFfSPSqBWZvvBBWqZvqWFh +zLgLQgJssspmQTJmsgjZNmqqzqdHbthDdDDWHbhqBBqb +QgmmjpNgCCZpjJLpmTrfrSrVRPfnrClfPwnS +zDzPPwvwqvPPBqjnqvDqBffSfcSNJpNVfccLLNffBR +MdTMZbgbmmTWGGdmssRCSNsSNVVVcJsNppsC +MJghbhHhbtMMdWhbJhHgdmWvnFzHDQPDjQDvHHwvQwvzwF +gGbqqRDrqDMdcBpVlpMG +WzhPCnWfqMcpBnnNLZ +fCqPHHJCfJhStwhWHbrrgvjFgbQbSbmbQs +fhcchnSpfsNpjVVqnqjrGHqq +zzlFLlPLWdggFqRBjqsrHrBTzz +FDwgFLZWlbbchpwshsCNcw +CmPlqqRJDHRDDsFv +MfSpBQQNNfBfrfVZsmVVdzzrHZmH +QSBSLSgmQBmwPCtgClhjPP +NPNsHHHNsPsvHwDqgpwlqt +rTRWSRrWRzgTzZrRVVLRQzjpbtmmGLlGDDbDwwmtblvDvw +nRzSRrjSVRrnjrgZfrfzNdPdMPBfBMhJhhBcPhcJ +LLhzQSDHDHNpNzHHJBQBMvMBqBRJBBqw +rmbdtmlWCCMnvJrn +FTVdmVgtjdtbWsvjjmdLSDcgHpDzShzDLPLSHh +VFFJQVWHtQVHHWbJRRRHwqPvpMLpLZZWLwlwMllL +jsngsdGssLvlqnZqZw +hhmfDjDsmDNjjNRNVqNVJRtQHJ +jvTnffrgFTwvqMzqGdMMSW +sPbCtCCQQLffZGdWNLWDDzLzGM +PQPBBtfZCZsmJPPplwwmTwpcTcmcgj +NBmBRCCsBTRNTndGdswnlwvwnw +fvbqrbPLqpGwScGGwbbb +HJDPJFJLJtpJHCvCFBBBBNNWvF +HJHgNQJBSlRRbJDRDb +RptsfnshscWMLMZDZp +njmrnPznnsTRTtPzFzRTswgQwqvVVwBNwwvjqCHqHq +CBMgBJCTNgQcsQspPpWjRrWrsWsn +mwLvHLGbdHbGzSHmvmvHzrhjjjPptjWGqZPPZhPRWWGP +vbbrLFwLFDJFDfFN +TnPvZSnQgQPHnnnQvgMSWppWNfWRpWfMtthMNDhN +wLJmLBmGFBFdLBbCBbVCVlsGsWhtHqthRRhqhtHHGqqf +LmHLbCjjBLVZzZSgzQgjrc +wdSwfpBhtFbStpftjSVhBwFrGrsQnQgnGrQmqCPmDrmmDb +zJvzLJLNZNscLzNHHLrGPvGGPrDDqGgDPDgC +RWsNNRMsHTHLHTlMczLHZLWtpFwfpthSjFtwFhjSVplwtj +QbrBDLGGRJMQJQJDbQbGvNscWNnTdvnvtnLcccvl +fqZgpVPZHPmfgPPjBFgcscvNNccdddtdNvdFTs +CgPpghfjjPgVmfBMMCRJQQJzJBwM +jLWDqLdWdwLfHwJwzSSfwS +gCgRRltMrlrCcCMzcBSVfZQfVNZNVSBVNNNh +gMrcPntccGgzgTMlMPrtDWFvLqqdLnDsmLLFFqvp +ttHJNccRRwmnsnHnHWMSwqfgvgfwSQZfQf +ShpLhhzTPBMpQqQgvM +zhbFjVdrjFjVljrVbdPddSTPHNssHnHlRNCHtRtsctJtGsRJ +zMVTscVhQhGGhClv +LfMJmgSBpLRfHmBPgpmJPSBdvQNtlHvrHvNNtNNNClGdGN +JFJmmSFFbFFbRJPBgFPmSBPMzzWWTDjjTsTqqwjVWbjjVVsZ +HZpCnwnggfFggbgLDcTb +SjvWjGzNGGzRjSGmMcLhvhMhFMCcmv +rjrVJNjVrzVNPrwtPwPCHBPB +SWwFbTzsSjPzpjFbsWPTWTcWLCLgLgLBZjGVDjCVBBgCBGCZ +lrJJttQcHqrHrvggHVBgBLffBC +lnhhcqNRJWzhTdsWFz +vzldvzlclbFjFvmtjZ +DDNMNStMsSsGnhSMwQjTQVgVbwMbVTTQ +DsDSCNNGpLtsNLpnNsqLppDzCBcdJHBzllcJfzJBPBdBlR +qWNfDvffbJBFDpNfmpbwhGhwjLgTrGwhbGGwrj +ZctMVCcVVQtTpthlnLtppw +QMcRSPMZcpCZqDFNRFHNJFFF +RmztpGSssNMzJRpCvqsCrqdHCBlBdw +gffPFDcqVbgqWgjlPlwCCrdBdllnBH +cFFZcbcqfQhgbcNJZRSMRtmNJptS +PZthPBWlPNPSPtmHHggFGgBJJbwg +qqzDvLLrfDpvvDLzqvnLzqpzbrCRGJRHwFCmHRwGwgwbbRCj +nnpnMfpMLTVqfmthmsMNSScMhS +dflvbdvpfffzpnNLNbWqtblqHjmVhVRhHrwrwrswhHnjsmwh +gSGMdMcJBgMTGPSPDVZhHhHZmDZhrwwjVm +CPJQGBGGPcSTFcTCScFtLLdWvptWLbNpNzvWQL +WThqhvvRDJDRhwcrscNDNFgDHNct +fnrZVnfVjrSGGLzZbnLzZLjVHstHHHQtgQbPpPcpHsscsFpN +SVjZSzZdndVCdSSZmTRvMWBRWvvWlrvmhJ +BcllhPPmMMBPcbRwgQtgHHgtmwgzmt +rpLqbrbTnNvqjLqLNqrNLvHzDtwpDCzFwggttFFHCQFQ +LrrrNLqjZSTsZZsvjbLjPhcBBlBsBcGPPcPlPVGP +HHhrggvSHDtCDsfF +ZMpLblppNZBDBwLzLLpMssCntfWdCFCnfCCtRNtq +lbmJlzzLMPMmlBzhSJVccSJhTvSTDh +sdjBBFqHscFnHTzCnRSnzgVTlC +LpWWtvZfrpbLpZpWftprLCCNMzCZMmmzTNNTmSSVSM +pLVtrtbGvpbpGLfPddHBscBQJJGcwsQq +hLcLnVVcfQBLZPVZnThfVVmjqjHNjgvNfdvpNdrrvvfp +lbRlWFHJtGNGpqmrqrCN +DzRRDFsbDtFtDJtWRztzJZVBQMhTsLhQZMZHVLcLcP +WgbdmgMmWDDvcPcpbz +jffpllHSpHRptRRGRntSVwvLSCCJDzcCcDLvCzPP +tRFrnlGfZrQpBpgQQsgF +TpbBZbCCHCGZNHbzGqgFdNlcFSdNlStSqg +wvWnWwLCPjJPJhMWtWdMfFSMgcdM +hhmvmJrJLJJJPvvhDjswCRGHHrHzBBHGVRQBzRRQ +zChCSBbpSsQscDHHQh +LNJJRgGltJDvfcrfgHfZ +lJNRGlLnNJtTGVMlFTbwSWqjBbzWWHSW +NDTJQDVwCTCJhVGDLfbBbBfbGqbfHBfBHb +lMgMrggMrmmtzMcgWdlmMlbsRjSRBsTRBWsSHSBTHRBj +cMPlgztzrPMznnMPpgddgdzpwDDNNwhNFCTwNZQFLTVTwV +ZgshQgzQnnwMtDwBwv +SFWFlFZRRcmlWmWRBCDwvwwftBtLmfLf +PjRFdTdWGddrGlPjcsJZpJzTqhzQJzNHhz +PgHQgddszgdGPWpMjljMcj +bSqTqnZLnDJSmnmZmtllGsnVtnWjGGWtjl +fqSLDbRSfBdHsRwsFdHd +RwHWZpCWhHvwvHCBMBpJMJGPJJnJgc +lztljTFljRRBBzBnBMnJMS +QbRljFtQfljbbFqNFrdZVrZfdCCwVwvddH +sHzztVzLTgnssPggHHsnCtzBmfBMrMccBBmqmrBqBCRqMf +ZhDQJhFDqjmSMrRF +dZpwDhNhhZpQJdDQpwnsGttGwLtRRTLRts +QJNhClVgPTTtPNCJJCtJhlNPZZRVZfvfzZzmvvzvsmZsvmzR +blBWBpdbLBDqBpszzffRsvdzjvvd +BLWpqBbqnDHqBbGlnWGBPcPJcHTTPrhtgNtCtgPc +jWVJqVwgsJcHCVlQVVQNBp +vGhGhTPtSSNCddSBCH +ZCCDtbDftZsqrrcnWW +hJThjThhVzVTZZwnNZRdgmzt +lrbSSddsrbPQpsvNtgPRmtHmvtnR +GQrspWdSGbDcsFFLBhCGVBjhjj +rHdlHdZDlTcflcNfcrCgcTWWpWQFsRWsFjRCsCjWCmhF +BnqbvQPLGLBPwqGmsVshsSWShGms +PzzPPQJPMJtJbbznPnDdrHlNldDNltrgtfDg +SmmMQhPSlmTwPpmnpllMSMPrccFDqFrDFGgqrDcCwfDgwq +bVdLLNvdQWVbJbQLVGfGDGfDgrFrqgqJgg +vjjWsbQdBsszhsHlhhPPSHsM +PqzJqNzsJgsgNqPdLJPPPNVpMMVWGlFWNFGMpWppGF +ZnZBjttQZcQZRTQDjQwGFlWMlGdGWVrWWlGn +ZRDBRSZDSdSLsqJHfSbzzL +rljJqtZlJqlJcvBNJBNQfQ +TVMWznvPMTFWznwPFFvwFbbBNBgbcNpQdNcBFQpb +mDnLWsPLvLMnnnmTzLzVCtlRRtjSljCZhDlhtqSq +fgWMHClGMWfgRWWWGCfmfgCSVQNTDFHTtddVQQDZNLDZtVVL +wSqbsvzpwpbpdFTNLQwLNTFN +zscjPnPqsJlmPJCJSC +GZSwQjGwGrCGwrTjdCTwdTBpqqlmNmVpNrNvplJqNNpl +zMfJnDcbRRDRFbzDFRLFBtqNmqqtNBmNBvNm +sHcJRRHzzfQTjjCjQjCH +wJCVVbJgCLCwGsMbbGTlsRWHsztZPZWtPrPrWrHzrz +DBqdvfqDBqFpWZFrtppZJp +djqNfQcjDQjMgbbwLjlJGn +TSwfZMfpQwcCCCCrbbCZ +PLJmGJnjqjrsCjMMVj +LnNNLLLnFFWmLFMGNMDgfRpDQSfwSfgQzBHwTS +CdjNCMmdCrVmCjJdVjFNMtMzhWwpGbpBhPZZZDbGPpDhpr +QSfHzlvgTQffSSHHclgfHnqPbPPPppBhpWDhwWvPhvbwwh +cQfQRgQnQsnsQSgHRQJsCFMsCjLzJJFjCdNC +ltLlJttmQdfVRhNmhB +gWWDrPSvCSWgMMMZBVBdTQPQZNZVPR +vCbwQzcQrCrLFHwJpHHGpp +VbRVvVHRbJVTzVLBVPtt +cSdgSZSZZFhnFcFwdDQcZZhgzpTlzLDzlWTvBWLztBtpLplT +hZZvdrcSZQZSSwncdHCqHmGHqJrCJqbNbq +lwWmsQlDbCZbVWZq +rRShhhhPjTsjTRvHhqfzqfqvBZZvBCZffC +scPThhRSjQmmNpplcg +FChtDTThDqZtjppjvgNvjl +LBwsVdVHLVvvpVGjjgjS +BbHLBfRcsHcBdMbdWJQPWFCQCZZhWrJPQp +zMtWCstzNrQLpbplFwQwhb +gDTDHGvvHVfVdGZVJGDGdnmbwmWFwfhpbnfjwwjpLl +GJcHVJdvZJVGZWHSSvTZMCzrzzRNSBtBNPBMqNBB +pLzZVVGGZmZVlmDsQglgsllc +WSvrjRjrMMFFnFjnrnrdjBRRgdsblQQPbpggsclNDDbPstDs +SMWRBrrrvSRBSSvWWWBTMTCqpZzLCCTCwJZwwzGZzqHL +TvfGwGZpPnSNgSSnGh +srLVHLcjsjVtHqjjrjFjcCqPBggqNQQnMqhgngnznNNB +VtdmPHLmtVHFLdmZWRJlWpWWWlmWfp +SbSbdTsrVrdhfSdDGJWGmNwWWPwTGP +BqlRpBMmllpmnpvvDJPZWPJwZcJgDD +FFRMCnRFtCMRlMplqMBRBppVbtzdrdhssrmHzVVSsVhVHz +dNrhhLsrshSmmRcPhm +WMCngCzCvzvMMpplQvzWlRBPcVStSmTSQbbVSPQmwm +MpzvWnllglJfqfMgsNdZHqNjdDsPHqqZ +rNvGZRsRcRRBtBCttB +DwPPQWnWWnPQnJlPhmTtBFBmqzhpmnFh +QwQQQlbPPMWwDdDwlVDJJPPdvdSjrjdrsgssLLsZLNBrNNNr +VjMMVzngnjQQfJDchZqGNqFPcg +SWBwTtWSFTHwFClHHmwBPcJJDhNGPJNPPhPPGhJt +CBvSBBBWHdmRTvRWRQFLQRnjnfLLzVbs +flSpvLlmZpCpZmVSBtlvHHjFHTdssZdjHFdTWdNh +RmQMQJRQJQmPgrzJrPcRQRJcWdNTGTGGFhGTdFhHThHGMTsF +RzJrqqcqPRqqJDDqttCpmtlwBpDflSLt +hBjPZbPBbWvTRnLRWntD +MNGQNsQwfzsdGfgTGfzQwwffmnCRDVmJLRLCvnvLDvJCDgRL +wTTdFldNHzTMljjFqphrBqhrZb +wDcMCbZbzPDcZDWQdrJLrQrZBLRBQr +FFSHStjtHgllgFdSNmlfFStBqRRssRsRJrLrjrrJBRVhLJ +fGggtfHtgWMwbCGdCT +RQrQDDbVGrRSfbVbGtmGtwHFWsCCzsJSJJHsJPJvWC +hphQnhZQNjlBBcMMpCsHwFjvvHWHWsFvjC +ppcnnBZqllTQfmrffbtGTDGt +dsDFsBZBhCFhshFrpBFnmLQmHmRgRbLqmmmRQDLm +PPBBNNNtGTwJNfTJffNttfLQgqLgHvHbqRwlgmblRvll +NSNTGTJTWPjGWMPSJJzrBSpzdFSddCFdncrs +bPzRlMPTzTMldJMnhswcjzfQVccQhc +HCCqNmNmQQmQssJn +pHptprtgRStTtMJt +nTmhrsPMsTfmHHGcSgtj +bJJwdlrJQLlvwlQDDwSbgffGVNjfgjNtVbcf +QlpDQFJdvdFqJdFpLvDFpLLnzZMnBMRRzMTqnrzqTRPznz +qRVRqBzgwqRpqRgVqQRPpQJJPrPhPGJnsGrCFdFJrZdG +ZvWDmMvmSvCndssrsJ +WcZcNWlcMjBQpzNTqVBp +DpLPZLDDlcgmDmhVgfgfWWRwhwwt +VrVMdbCrrBTjCMQQtMwQNSqMQW +VCBHdJHdvrrFsbsdrBJTdTzZcpmZGDGPlmzmlccFDZDn \ No newline at end of file diff --git a/day_03/solve.nim b/day_03/solve.nim new file mode 100644 index 0000000..cdd8082 --- /dev/null +++ b/day_03/solve.nim @@ -0,0 +1,43 @@ +import std/[strutils, sugar, options] + +let priorityReference = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + +const input = readFile("day_03/input.txt") + +proc priority(c: char): int {.inline.} = + priorityReference.find(c) + 1 + +proc first[T](s: openArray[T], test: T -> bool): Option[T] = + for item in s: + if item.test: + return some(item) + return none[T]() + +iterator groups(s: string): seq[string] = + let lines = s.splitLines() + var i = 0 + while i < lines.len: + yield lines[i..i+2] + i += 3 + +# Find the item type that appears in both compartments of each rucksack. +# What is the sum of the priorities of those item types? +proc solvePart1() = + var sum = 0 + for runsack in input.splitLines: + let compartment1 = runsack.substr(0, int(runsack.len / 2) - 1) + let compartment2 = runsack.substr(int(runsack.len / 2), runsack.len - 1) + sum += compartment1.first(c => compartment2.contains(c)).map(c => c.priority).get(0) + echo "Sum of misaligned items: " & $sum + +# 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? +proc solvePart2() = + var sum = 0 + for group in groups(input): + sum += group[0].first(c => group[1].contains(c) and group[2].contains(c)).map(c => c.priority).get(0) + echo "Sum of group badges: " & $sum + +if isMainModule: + solvePart1() + solvePart2() diff --git a/make_day.sh b/make_day.sh new file mode 100755 index 0000000..382b853 --- /dev/null +++ b/make_day.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +echo "Making day_$1" +mkdir day_$1 +cp template.nim day_$1 +touch day_$1/input.txt diff --git a/template.nim b/template.nim new file mode 100644 index 0000000..74a0938 --- /dev/null +++ b/template.nim @@ -0,0 +1,13 @@ +import std/[] + +const input = readFile("input.txt") + +proc solvePart1() = + echo "TODO" + +proc solvePart2() = + echo "TODO" + +if isMainModule: + solvePart1() + solvePart2()