diff --git a/inputs/3.txt b/inputs/3.txt new file mode 100644 index 0000000..e3223a0 --- /dev/null +++ b/inputs/3.txt @@ -0,0 +1,300 @@ +hDsDDttbhsmshNNWMNWGbTNqZq +VQfjnlFvnQFRdZWdVtqMGdWW +zvvvRnFFfjjlRBlBPzgQgRvvmtrmhHcptLHCDhcHHmLsBmsB +FrzFvvdTDcTnmTzdDTTzdvWmjhgVPrhSljSQSPwPjPjPjSVC +sMsGbqGsbbRqRbBMBGRMbLpNSSpjhlQljHVClhjgPjjPhlVp +sNbGtJbMfssNtvcnWFVmnvDd +TNfmdFJmfdZMQffVRQVV +jVHBCcDSjWrMZjvg +SShSbCGpcBtBtwtVLJJddmtLmT +CtpNftbNWbtSJDHqGZJFLfLr +dPsHlsRBHcZdqDFDZwwJ +snjVlvTPlPjVlQlHWjpSmzgNNzSmtpSm +qhZtSVqCqThGcGzZnnfZcB +WbddWbDwrBzcpzHpBb +DBBMFWRJDrDFWLWljCqjQjFvtCsqTjqs +vhFTzRzzTmPvbplWFtQttQQZtZhMZqcqSQ +fJVCfDfJNCLDwJNGmssZgwqgZcmtgcms +VmdVNLHGGVDBdfLCHnLGHnbWpTplWbddRTlzplWPpbFp +smwtNVqRjNmZjZBDSvzSzl +FnTJFcTTFccCrJGTLncdCCcPJZfBBDSlSJwZDlggSffvgSSf +FWTFGLFWLCPWrCnFnQWNbQVVwphhmHHbptVsss +BrrgrtgfBpPFhhgMWq +ZGvsvDGClvsSRScpGBhPphWMPhhTNh +SBSBdBZCcdwHrVQwQr +qmFqdVtqsVdzqGbwMJwGPpmPHM +ZjTjLQLLDrrLjcFhlfrGHppfbJwGpMMpGHwRCC +BTlZjrBBBcLTcDrjBlThWBjBtWNqnSzSnsSdvsFggNnqVVnv +zVvmjGgpcJnbTTTJHRHSRb +NPFrFQfCLPrdRlbtQRRvBtHb +frMLqPFMrfrPLCwqqNvjczwwnmwggGmssnmnnm +HbFJhhshsffcvslmGmLFrQBrlFTG +jNRPwwPjSPCdCdvRzRBTlRzmGrmB +nCSWdNjCCPqvtttZnDscth +ScSrRTPcSSDRWSptWcdmmWGbmGGLmLJvNJNbbJ +flzHjFpZjFfjjgszjlqzJNnnvsmbMmGvJLNNbmJv +jFZFVpffpVlqfQhgtTwcTVtrTcRBwBTD +rHrdGSMSSbZbjShj +qZfDBBvllvvWLtqbbQwhJjbtwbnQgN +WzWlzZmLWBLZLzCzrHMVcRrMRFRCCccF +BzdplppDlBBrqWnjFMBWqNWq +whZhZSSHhhVSrvSgHPvgvjnFTPsFFnnNTcjTFnTTsc +HLCwVSfZLffSHhLvwtQbJbrdGlRRrGdmpztG +grDFfDlfCftCzCfNztclNFrBNQjbZjJjjPPVsjNvsbvPsj +HwwTpGpRwMdpHWhvjzVsPJjJGVvVZs +ShphRpwzMWdpHdwWHwMpnHwLDmmgcLCCDtLDCCSlcgcfCD +ccqqLLqCqTSlZMLQMllZTvnNfjddttmmDpRJjvhfpfthRmdf +rbVssWwggFrGsWzPbVFGJpftQRPDmQDpdPmdJmfR +bBHWWHzWHWWHrsVbsFgwbFqqMLTnBclTMMSnLnqLqMQZ +CcSPGCCPrdPtdjcsBLDghbVLhqDl +vMJwTHzPvzVwqBBDblls +QNvMFfRMJHPZHjnfWmdftSjSnp +dnBCPhhBCrQfChdbNVGLszzDzVDsTbWT +HgcJgpppPqqHwPwJSczVzDssNNVWTtqVVGts +JHRFpjFccplcRwPJpHPScpMPQmCdBQQfQjjhCfBCrQQvdmnn +rQGmVRLRbDRHmmZLGBGVLHBVFspSstWWWNJcsgpQTSsNppJS +qlldhPdfCgnspJFWCFsFNT +jMMzwndfhnwPfqPMjgjMVBrGBmrHDHLZbjRGHbHj +wzpZfzHRSRfzgHfffZwwStCtSrBhBBCTrtFhhBFG +QPjQQQDcDWJNFWtrtWrGmTCMtmBW +lDvvDQcdjQcQLvlDwnpFgbbznZZglZsl +RfMFTMFrVrSRFPlFSfVlHpLqgzpHBLzHBBVzVpHG +CchbhcwdmdJmwJJtGgnqzppLmGGBQqQp +hCsstCJwLvMRvsZsTR +fQlfMlNClQhhZhrlWrWw +njDbnTDTBtGjmrGvSh +bgshBdBcDbTTdnnnTqcqLgqfpfQppCsCMsHHVVpHHNCHFF +PbCnTbzJnqQNzbbTNDdpwcmjDmwjGQjccw +hWgvSdLvwcGjSpSm +vVfrFvvhHFTZndJq +FFvRVCRqVRcfsDLrgqGNWjjHfhQQzGWjQHzN +ppJPBwplwSBJTmPpTzWWStzHHjNNLNzHNh +wnwMPbLJMJllJJwBmJmnLVvCvsCsbFgDrRrsCsvrqc +jqHgVgdgGQttWCtNqNflmllgFnfDnmFFlpcl +TZZsrrwwhwrsrZRGmhcfSnhGlmSFcf +rsLvvbJPPLBGPCQqHWtMCMHN +WzzBpCBpMsBpCvCfsgnPPfHgbfFNfF +jtdTLLjGTGjDjLbbbGlDLLLmfFgmmfgrPrgmNPHSnnNnqFSq +jbRRbjlwlRVpvWwvzBpB +qpwzCzCznFznTcCvrcrvVcLb +cPmNMHSlMsLfvWgsrWvL +mMHGPDMBGSGPHlPBcBPzznnzpdQFBjqRFdwdnn +QGZLJzmJrZgZzZhNQFqDWlWPWDFCWNRlPW +hMMbhVbhHWCsPWCMRs +BwjbSHVBVvfcTfZgZzQhrzdGrt +cvPTjfDPpDmmBjbQjZMdlBZj +CHNnghNChVzNgrFVwCMJLMMMMMQQdbLZ +FNSzShrHhNnWgVnWfvfbpfpDGTfvsG +FFpVrZhpTlSQlQzTtRtZHfmPmJDbRtZJ +jNnwBLnWwBgNBNCwsNgsMsCLVfDWfmDJRffmRRtmfRmPDRtR +BnLdNdjnBNcLngdCVBndgllFlQrrpQlSSFrQphFcQq +JmVLJPMNjmVJpMLJSVmNQZZQZZrnTHqZQHTrTTMr +ltfdwChhwRdRswDDdnBQqqWNTqrrHrqZRr +dwdwwDwsGlhhDFtsCwhsJLcPmGPcGzSjSjjLzNPS +QgSbgQCLQSJFMccLFLVVzH +WBNffrBpBNdNRdWDfptBtdzWcMZZVPMVwHMmsVHFccHsDsVc +ptphRWrfGRGRnqlCSQvhqbCzJS +VvdMLMLMBMlVlVschsNpDGpdNsGc +tqFSmnmnnttGfDqNcfvNDD +nzRHnrwrrWRrrzHtbMlTMBjCvWLgBBMl +pCBlRvzwzlCzvZqqDwzmvgtsLsQdgZsgPNtdrsWrst +JbGjbGVGHSFbhbnhTShSTbQtQrPsLsHLQgNRtsgdQsLP +GnnbJbGMGbSjjbSbCzqlwMRRDzqzMBBv +TTVRJVMWMshSQtjSVTQJRQlcCBncJccdppnJcBBDngFpgP +frvfzfHrwzZNrtNwzzzZncCCZFdFFCgBDpPcBcBg +LwNGbqwvmvvtbNQjQlVVRWTGTQWM +RnggwVLRLDfCVZhfpDGGMGMGcGzGNHvv +jmmWBTSsBmFmSzctsqpccHvzpN +SBSrTblSQPbQhNwwZfPVdZPf +CCvCwzfNStLzfrbmMJbZMtlsbJMW +gPPPBqDjBcPFpVgBRbnMsVsbJZnWsdbSbM +qgDPHjHcPhpDRRpPBRpCGSLwvHQwGfzrHLGLTL +CLGqDZZLTdddPsdJpq +gbRbbnghnrWvgrdJdSTRSsVNJlld +hMnwrjnnjggvnLDwGffTfwCZZZ +NzJHbNHNNzJzgmHmzpQSvvLqbLsVVsVGvB +WtWhtWDdrZldDWrWTlZgppVVsqQTVQBqsGqBsQVp +jWjWRRRlPcHRwJgw +CCnnFTmnPCMCRNfnwGwdfzvwwl +VQQVShDSSshhDDtDLhjccGjLBBzBzlZflNZvwZzdwBzpSNNZ +QLHhJDDhDhgscgtjbGHTrWbrTbRmbFrm +CJbLvJvbwtFHqvLzwJqqqtHWTWRgDScDRSWQQjTRcWRDLT +mssGsMNphZMNsPPBnhSjRgdnQRdWgdjgrcDn +GGmBMMsffmslMGshZlMphGqCzHCbzlbvzqwzzgFJggCF +WCgWBphpWLQZQpgdhGdwmfbfFRVRjRTbbSFttdbSbT +qqrZnDNqZJDTVzRjVFbfSN +rPMvqJJqrJMPJnZMZZgLPgLWLggWQghwhmBh +CWGGzdHHmPPSmPsC +LqwlZwRLrPMQlMqrlbZrQRsSNsmssSNSsNcBNpgmsJ +lwLDQhrDMQqPGfhzGGjhGn +ZqDlZssCqJJMvpdBpBBmBQSMRp +wLgVcbgFLzTLTNNZmNNRdjdRmF +HZHbctWTwgVWgsfrnnPqlnsWlD +RSnwSPFcLnFPnRwjzctzbGNlZgNbbGdGpLhZdpgM +BqqBfMvTmmJqDgGNVdGVbVJJZG +vsTDfqBmHmMWQCwjtrHjjSFFnRSn +LsCmmcDHRjdtNMstwwzJ +TvThqfBFBNTnnndTtL +lvGQfbFQGblFrRccLRSSlPPVHS +qbLpqTHSqpbqbrPcQgjPDjcdDL +gnzhhBBwBWZzMglmjDrDPjvfdvQPdwtd +WZZzZZlZmhsMmFgRBBBzHHJpNJGVRSJVGTVpNqCH +JDphhGhDdGzWRBnvqqLDNLMnLw +gsrTHHffTHPcrPrlHCNZhvBZnZNLhPvBNwvh +sHVCSsSghJpSJjQh +JTMGlfjlTdqjnqbnqFwqmnbQ +PBZhBBcWRZprPZcZDDCZTZRgnnzwbbsbnvhbvznFsNFFvvNQ +BcWrVgCCZTDRDrlGttfVtMddSJlH +vwwvpVbSvnSRRmfMCmTHVHTBHB +QLZgDPgSDgGTMZfmTTBZ +QDDsQFDlzlgtJlLdFDgSJQFvvpRvjqzjRwwwzWvhvWwqjj +mRRTGGNNflGRGGmmgRblsGwCZwVZlZjVwjztpjZhpBCB +PMLLFLHPLPnLqDDLvFDrzzMjhwVCjtphBzjMhV +FDdSPSpLcDsNRRWSTNWN +STldJthdJbtTqljCRDDHmqmj +VVvNwwvNFssJFJPNNwVvRMCgCgDqjjjqrDqqMHqP +QBZwQfZwfVhtcSBtBJnT +TzjjPzsQTslNlNzPRVGJJJGGtTJmgJHtmTZC +dBDWScMBhhPGgdwwJPfw +SqSqbSPDBhqnMqvrrSWVNFpRVRLzVQslvpNjVL +bWFgFCPFtgvDZWgtChDNFJHvGVzHHpjzHnnzGzzHRR +qcScQbbmqdQmlQmrlcQwLmHlRRjzGHnHJnnGVjHzBHzG +TqQwmLmfcddfwrfCgbWCNPsZNfCb +pddprrtrCPdvJdMjwwwHnLwwjLWCLg +qhzZTmZcmRhmpFlVHcQQVwWQHVQwnH +lGmhfRfmBZRlmmbvDPBMvNbvJJpP +NsptgfGLLNwnNQSZbCvZnRnMCb +JldhdzwzBMCSZvrz +JFcdWTdwhPTFVDVmTJNqmstLqgLtLtjGGpsG +dVVTSgTDpHVDjgdWpdpHTZSbWGrnnvrNwzFGNrFwnNNwvh +CPRlMPJcMQcBcsmmLCMPrzbFfhwfrvLrNNwwGwfF +CRJmtbmJlQbsQlRBpZDVjTHTdjDtSjZt +rQVJrRFdrwDfzHQHQBTnpWTW +PCLbPcPCsgqCgPgLjScSqNbHTzMtWmWtzlTHmBtTlMssMT +cCqghSSPcvgScPbwFGdDDVZFfDhZGB +zrRQRdqzPHQtnMPrtzPMRRQMVBBblJJBSClBpJbpdCCbBlCC +hTcGwzswGwGmGfDvvfGmGNfBpllVSWbWppNCBNBVpCBClW +gvGFTmTgwDhTDccsTfzfmfGGQPgPPqrgRZPHnRqRZrQLnRgP +hvmmJllPbmCRMNGMMlNwNl +PFTpTVjTgpTpBRgMGMnRNHBB +WWrqzTTPVQDPqpjTqPJbmLtcfsQsftbLbvct +SzrmpjjcsjTZNzgnnNzN +BLHNDwBLBPLwLBhwDVLgdQCgCQGTngHQZCngZd +PPJBDvBVVBmppNjJjrrr +ZHBNQFhsqHBsgCfqtctcPvSwPqrV +LlnGTnJpJJTmdDpmLlmLndWfVrPvvRwDfcwwwRVwcfQtvP +GnbQblWmWGdTJQdTGnZHsHhZhFNsbCsjFgjC +hWfDzDTVndDMhddMlBWMBDfJRnRtvvSSQjCvZCtjtpJvSR +bGHsccFcbscsqGPHNGcrpjJZtvSRtFtQCZrjSj +GsbwGGwNNGLgPLwMzBzfMMVMTLdTCC +GBcNzTSSmGzmTLNgvwgpNCDqpDggpw +JRZMrJWFZZnZtJgvvjwbpbCJDd +rFMPRhZtZFnWrRtQGmPPDcLfmGLTfz +VdWnVdjhhdFjVWbndMlNLQspVMHCNVlClV +RSrJBRRJwJSBQpMBHLLDCL +TqwtRRRJzJTSqJSzSrtmqgWWhcncvPgnWbPQnbnWmb +VnDFpPpFssVSpFDVHbRbscCvgbMTvTCR +JfzqdQBfhBdddfBBGDLdGQvbrqMMcCRRMTgbqgMrbbqc +QDfzJNWBJLQBhmdGDzDGhQGGlFZwPtWjtFFppllSVpZZFnjj +qrLLNpJbJnRLNnpvQtRVhhRFCdlFFlFd +mmjzjvGjwPwmTsSTSQjDVlVWQjlCDthCCC +cSSmcTTPcSswScfSHmTSTzJqqNrnpBpqBbJLvZMrqfrL +NSvRZRfFvfHSZQcNJBLbzDLnrDFnhtFLFnrh +wmTGpmGCwsMplMsHllPlMnDLjznrgrzDjgnntznr +dsCVGGGwmpTGPplmCmPppVmHSSRJNfJvBNZQfWdBRJZRBZcR +TwQwqDPQtwNwzNDTZcnZbJvMnMMbFqZM +SzGSjrjLWrjHHspWVhvVVnFJbccVZcRJbllb +pHppszGSprhhWHLCLrsjdTtDDPfwdfwtdNfDgNCN +ftcvBtBFtmBlmvPFmmcczCChrgSCzzCSnCSSnGHf +sJddbdTDbDHdnJRggrGzGzrG +dppDVDZMMMsTTVsDTsTDpwVctNcvBZQPcPctqtQcHmvlvQ +jzbdzztbDqNqwvLvRmQZjvRH +FSJbFFWgJnZFLRZmHmRQ +TgVJTVSJGJcJlllgTMdqpdNsrztNNsNbMDDp +CCCVWbwVnlRbTcqSShqGhhGcnF +PgDBfDpMNlfgpPfNZZtcJgcqqhmmjqSmjFmhmS +tpfpsPrlpsPDDMDfBZrwLrVWLLLWRCdHLTwbVR +pjvfDGjSMpvDmDpDpSDnJmfqbPVsCMFsPqFVPqCrwrbMFV +NQlHtHNhZHgZZNBHhQgzPmCwbqqVFlsrPFrFCP +hgHtQdQchcHctHgcgNgBQdWNpmvTWvpGmLJDLGjTpLGnnjfv +QhgLLLmtlRqDtRGP +HLbnCZFWVHLZnFCJJRFrGJzDGDGJDD +WZHfndfMfCZbMnTVTfZhSNQQpdwSdLwhNcmdSN +sPwrPMgLFPFFsLZtmcclSSZDtcZs +qVzqdNdCnnNVVNCGmbncDBlmBlBBnRlZ +VTdCGVvVfffrjpfMQPwm +BPDldDTDPZcggjcccTdNMbbMNSQNqqjtzMbrRb +LvmWsfvssLGnQbQMRQqrSRnz +WpvsVmmpmmfpfJGrHfVCHVvmcDgpDlZphgFgdhclhdgdBlgF +VGwHbNzMMrzHbbHChhqgCqPNghgCqW +ZJVBvBvZWqvRvggP +JBJlBlBZcsBfcJVrHnLwQQGzLQMc +gBWfBPPPfhvVWFfSVfVdjjbvTvwwQppHcHcctTcQTHcZ +DnNnMJMqMJzqchbZtTQQrb +llRmNLDLDGlCsWSFCffWdshd +LpNMZZpqqpfTTwNqLZwGsZqZbdHRHbHGddnCBHRcmzGmmCdG +JFRtRlVStjPlhtjbBzBncmVWdzWBnb +rPhhSlrvQlFFFPgtJlJtFlhlDNTwRMfZTZfDZNrspZLMMsrq +zBLjLFBjLjmHWlzNZlzVCC +dcJrdfddbllJbdMTwDNMZWNVwVDwHT +gRcgJbcbqfgbftdjlqLhFFLPPhGBjm +WfBgBRzQGNNQqmmqZN +nFjCjCpLbtpPJtCDDnCDJpzncrSVbmdVqbhhdqNbSSmrdVSq +CLPJpDLlLlFDpFjjsGRsBGRfWwsHHglz +lSlSlpCRSsWTRLTlWRvlmMrBPjBPjpqrrmqPJMPZ +DDzbhVhQhDGzhQnGGfnHHQGBPZjMqJjBJMBVJmqMdrqqdT +NNGQbFwnHzNzwbQwFnwbfsLCLtsvLsWggFslsTggSc +nvzPvCnlvtwCrZWmWwvvZCQfbbfQfGbqSJJGmqGSFSbJ +LhTBWdsMNNRgNcgDWsDNcVSfQqJGFSFJqSSddQGSJF +HNgchHcWDRNhTNMWwtPrtZZjnHzrnvCz +djhnzRghMMVCBfhh +qjQTrTPQJCDDqBDJ +LQvGrLjTHLjNNPPTpQgtztSmmbFgmgLbFnmL +FRDNFBBRRVFFmbLZHPZBZvvH +QnhgMllglJTdGgJnhLQQJpZpvwZHpwsPTwpbsZHmsH +lnhnQGrMgthMlntlGfQhgWWcRSDcVCrLWzRSrRFDRN +PqrrrRnPBbrVhVqFrFVRPVhZLvNSNvLZcQvtJfRvNScJNJ +dDzWwwCTmmdwdddpDLWQZMSSMfSJtcWJfQSQZN +CCwmTdjsClVjFjnLBl +srjCvjPmQVlPjFPmQmPrdHHZhvHZDqHhDDwHHqfB +pLcnJQNQMZpqZDDZ +WNRbtNJgRPjjQVmz +NJJRmjmJbbJfqSVMNHFCSFzLLlrLLrFHTz +QvnsQGvBwWwQvgRHlGGDFPFCGlrR +QhvwBvBctBccZWZNRNmVfjpmjJjb +RMmGGMLRRCFmRPPfGFpGPFPJWZQWctrtlQvZvltfrQWcWWBq +gggwjjbjwwbZtwZBBcmQQv +SdNbDDVSgPMFmPzdMm +nZhnNZDnZPmZPWbppPpMlvRlzvrtMmRtqRzRfq +HcFwsCQLVQwFwLtLbvtzrlrLtt +GsgCFCgCQHHCVHsFQHcFdDPDbJDZTpZDbWJPNWWZDd +BBrBrGlGpgGjsNhlBlpBwpfSwZJdQwfcZwvSQnnn +LvWvHLmmVJQQHfQH +RPLRMvqFTbRTjGBhjNFsslls +cNZZZmZDcDDJmhzzrrlHtSbvgjSvgfPSWvPfjShv +VBwnndnVCqbqpRRpnspnqRWtGgWSSgvFBSGGSWgtGGSP +LqCMnTLVRwCRCpRLpbHDNzMMNcmmHNHQJQ +MMqDtnVnBlHtZvtB +WLWrWgdWwdrLCTFCwLlbbsJsJQsbQlQzlvrB +jFSvTdjfnfRmVcRR +ZLGqnvnqLzvbGRMfcRpwMpdV +fgfNNfgHHjVmRcVdgM +HsWDCDfCQCZBBZnvWtLq +bTZjqflqZhcrlczGzppGNgjmFNnp +PmmRSWWDMBQVNpWFznGF +SStRBDSCCSSSwPBwBDBwPmZhZlfZhqHTsTfltHHZfsHH +GbNbsSptQGqsdJCzsddcgzzv +DHRRnmWWmZnmRhllnHnnnMLvvLgcTVvjVhCTvgzcJgLj +RnWMlDZRlnHlmHWBFwGQqNGGPNQzPGqFwz +vSGvHpJnBLbGHBNCgfDzzChDgbCfzT +wFRslqmqTRgggQghPmQf +qjRFMjWqNNMMGHTL +fWGcQGGSRFQZhttZJfSSJflDDrwdClljVrNDdrdCFBCr +MTgvLLPPnHzMbDwdlNbMBwMM +mnTvnnPTcNmmJJWN +qqbbQQnbWrqGgnWqvZpVzMCZjCgfjZCSVM +ldcmDPDhmlFBHPDddLBVFDHLppZpjSCjjNfwNMwCpSMwhCMp +FtDdsHPcHmdHVPLtHsdtBHQnsbvnTRRTRsRRqbqvqWnJ +hhtBtPrgbbhhgjZjjCCHHNpNDHpffHWCvr +LGFLVwswsJMSgFwMMpddSvpHCCdDdvCpvm +sGsFsQLsVsLFnnFTJQthjcjQqhRcBZZtRg diff --git a/ocaml/3.ml b/ocaml/3.ml new file mode 100644 index 0000000..ce2ceb9 --- /dev/null +++ b/ocaml/3.ml @@ -0,0 +1,55 @@ +#use "lib/file_utils.ml" ;; + +let priority_of_item c = + (* ASCII lower case is 97-122, upper case is 65-90 *) + (* Lower case start at 1, upper case at 27 *) + let code = Char.code c in + if code > 90 + then code - 96 + else code - 65 + 27 +in + +let sum_of_priorities fn str = + let chars = List.sort_uniq compare (list_of_chars str) in + List.fold_left fn 0 chars +in + +let sum_rucksack_priorities lines = + let rucksack_priority str = + let len2 = (String.length str)/2 in + let comp1 = String.sub str 0 len2 in + let comp2 = String.sub str len2 len2 in + let char_priority agg c = + if String.contains comp2 c + then (agg + priority_of_item c) + else agg + in + sum_of_priorities char_priority comp1 + in + List.fold_left (+) 0 (List.map rucksack_priority lines) +in + +let rec sum_badge_priorities sum lines = + let common_badge_priority str1 str2 str3 = + let char_priority agg c = + if String.contains str2 c && String.contains str3 c + then (agg + priority_of_item c) + else agg + in + sum_of_priorities char_priority str1 + in + match lines with + | [] -> sum + | hd1 :: tl1 -> match tl1 with + | [] -> failwith "number of rows must be divisible by 3" + | hd2 :: tl2 -> match tl2 with + | [] -> failwith "number of rows must be divisible by 3" + | hd3 :: tl3 -> sum_badge_priorities (sum + common_badge_priority hd1 hd2 hd3) tl3 +in + +let contents = read_file "inputs/3.txt" in +let lines = List.filter (fun l -> String.trim l <> "") (String.split_on_char '\n' contents) in +let sum1 = sum_rucksack_priorities lines in +let sum2 = sum_badge_priorities 0 lines in +Printf.printf "Part 1: %d\n" sum1; +Printf.printf "Part 2: %d\n" sum2 diff --git a/ocaml/lib/file_utils.ml b/ocaml/lib/file_utils.ml index 9feeb39..6084d0b 100644 --- a/ocaml/lib/file_utils.ml +++ b/ocaml/lib/file_utils.ml @@ -4,3 +4,5 @@ let read_file filename = close_in ch; s ;; + +let list_of_chars str = List.init (String.length str) (String.get str)