diff options
| -rw-r--r-- | resources/day03_actual.txt | 300 | ||||
| -rw-r--r-- | resources/day03_sample.txt | 6 | ||||
| -rw-r--r-- | src/aoc_2022/day03.clj | 55 |
3 files changed, 361 insertions, 0 deletions
diff --git a/resources/day03_actual.txt b/resources/day03_actual.txt new file mode 100644 index 0000000..5533a94 --- /dev/null +++ b/resources/day03_actual.txt @@ -0,0 +1,300 @@ +zBBtHnnHtwwHplmlRlzPLCpp +vvhJccJFGFcNsdNNJbhJsJQplQMRLQMlfdfTPCLfQQCT +GPhjcjhZDjWtnSVH +BNhHVhrGNVTbDHdDJdJRPJdSQQSJwPjR +lvtsfbsqzwSnJcvjSm +MftttFLftZMLgtgMbltMqZzbDNrTpVGhNWrDTrpTGNpZGZhD +VSSHcTgTtTdtllZlzmmbljTn +RqMqsFfQLLFLQFMMfRLPZLvPpCfWrbpmCbjCnfjlWmnrmmnm +hqRDqPDRsqNHwtHSNBZtJd +tNFDpDFrtdjfmjjjFmFFdScpZhZScTJgpHccHhMJgS +lLzSlSCQqbsVhBghggBZgCcJ +zRLVVLQnvQqVVzRldfWrwffjjdwSdfjv +bpWqqqWvHBpwGBCCRl +hJdjdJFQqdBBDMMC +tFFzJZFtJSqtZJQsWLbNSTnffHfvTH +lFhRZhFjPlqMlJqZJlJcRLwrLrwStRwtsVVtVSrgRV +WcpDvDfBmpDHzWBDbpbmWmNVSSTzLTtrVswgttVVzwwr +pbWfmGBpHfDmWnvvGbmWnjjMqPJMlMFPdGcjqPqPhP +NjFNRlpVLFCSSlbBWWfw +pssPZQQsMnzmtnQPttzDBbBJBcrrJWbrZSBJSbfC +QTHPHspMNGHdhvRR +QfPdSJfFJmthSthtwbsNLbPLlLTLpbvP +nHnMBnZqqgBMnWrZMqnZVcbCqRwNsvblRwppbllTsRNp +nZHBHznMnWgcrnVBtjFdfmzQNtNddjNF +hFhfPghppPhpRNhzsjsvHVzjpsGnWz +tTjlCCwMqtdMjMctGJWHwWnVwWnwvWGs +rZdrjBBtqdCtlcdgFZQLfhRLFSgRNP +RDHSWrJWffJFlJCgCMCDjCvzjPMP +QtGTndBwBtNzBVjBCMgB +LdwwMpTdwsRHsqSHqHJl +RfsfzvLLFvFzCSvSbDsTpTGMPMZPPTMt +jqWBjwBBNwWqwPGZbTwVwVtD +BnhgglhhNNngqjBjHNWrZLlFLSCJSFFCCQzQvQFCFF +HLvLDQbvnDQDvbHTLhntSnGBSlfGldddcmfMMf +NgFjZjrZZJrlfJfSVcBJGc +scWCNFZpsjzrDLwLhbQzhQwD +SlqJlThDPqpwSTwhcbDdbWDbZGcZNcDb +MsnWWjHjvLvfscjjgdzNdbgbcc +vQQvWVQFLLHfHVBWfsfmFFpJRhhSplqlRJqpBwlqTCPC +DZbDzzZDjQbPGZFFSSgSlFCzTgzm +qLnvwvhddrqMrwrCTLLFJjmtSlFlSH +VdhvsWqdVWvvRhsvqbpbPcZfPpjZGBQNRj +mJNtNFmzDZtzdzrLtwwRqJSchgfGcRfwRB +pWpjQjCTQnHMWCCpjQpHvTqcwTwScfRcBcSGBRThwS +MQHjvjVCCqsvljWnVQzLtNPZzmzLVNLddtPN +QVRPRVDgsRjLssnL +TTGDJDJfbfLHSnsMWWbs +qGqqTFFDqgQgQQQq +nlMnRRjbMjCdJVQJCZ +nGqfLwfNLFNLnPPGFVVCdVGZJtCtCCVzJz +LHHfPNHnPqqLwqPqDPWfNFvMglbhhbMgmclgcllDmgmrcl +cLLWWSThtdLpRcddcgPRZFDMCVPPMCCPCPCZ +NfGbGNzrBNffGNJjbPPZsZmZZPmDHpMH +zlJBfzlQzNjNjfJcpwSdvWhcvLwQWt +cVVQfVCJVrVcTJnfNvlDFmDrmlvrFWlL +snZHpMhZtMbtPNvzHWWvNFNvNW +gppnbbbRgMnZbswRqRwbqTcCCSTCJJdGjgfVGTdcCG +jplgNdrHrrNZgdHmlHNJHddlDSPPSTlzTSlTSDSzCQLfzf +vscvWWWvGWGGscbFMpRWFwQTPzfLQwQwPfLbzSzzDL +GvGBWpqcMVRNNZHgdHdtBJ +LchbZhjjZFjwSmPRqRffqbdtggdR +vWHMWlHJdGqtRqHV +MvzCJlnMnlTNnNNLLdhjjCdjjhDjjL +FNCllHFvCGvwQcPQJfgfmwgh +zjtRpbDLjtsrzbLLQmfBTgTBQQfhbfQB +WLgqRzqsrWvFGFZFZC +qjLlNcLjcNWpQLlQMmvmhCvCgsMZZghj +tGSDJtRGJzHMMGDVZCfvmfhzmZZgZsmv +BSSRDRHBGHtSSSbGJSwHbNcLQddqMNlrqcMQMldBWc +JSfctrtctDpszHvzVQHr +glCWjhWmFjlmlhmdWPhVVznvcHjszbvvpHvznv +FgBmFhCBCGFqglgmhCFmSTSRLJLLZfSRJcDSGMtM +vZGlFFtLMLdShSSShRVtVf +rQNvmznWPNCPNsrCsbWbsPCvjShhhfHBBHJjSJRhjSRnHhSj +mCNsQCmqszNcQzrzrrzWvGgGMgpdFpMLlFZGwcLDdg +QJRJQDlcqLlWbNGL +HCnwwsCrnstLWqtWNgZNgg +rsnTrTCHTnnVwnsVPqqDQcRjcczMPvPRzM +qCzjqnzVdzrdhnhddDbDBMPttcGBDBDPnc +sZgRQWHgWHHLsgsRRZsJbpJlDcDGNcTDFtGNFFcJNFPBPBTc +WggbRQSRRgRSsWWmbHqvVffVwhzvCdmfhmdV +lhqWcNpQGcNmmHmNPWCsQzQsgrQrBMCMbMVM +wDLFFDJvSFFZRDZSzCrzTzsRgVWbCrMW +dFwDtZfdjFZWFFfmHGPnPPmqfmPNcN +lcMRNJRGGLJnNVFbVrwrwZrD +tjCzQjQhQwgWFShVFS +ffHQsQssQTzBsPnLpMPRwsJP +MQSMSBSRFMQLJChLChjTBh +WmVlPrwnpwDlflNpDrNnDlDwThJCCdLJhhdhCfJTccGjvscd +gnDVnNnwgglwDwptSZFzgQHqbjZgZZ +nwBcFgwTDcNrpZMD +WQWCLZmvhMRvNjsNSD +CGGWmZGHHhtVzHbTqgTdbgzz +RmcTCwvssRbsThTcVRJJfSPqfJwJFqfjfMFq +zQNZDWtQlDZGBQPfFQqjJLjL +rrglggZGWnrnrrHlDhsbsPTVCsCVsTRpHv +wFGfzSvCPGttSzqwmtqmvvPRDDRCWgWWDTBTMcBcBWbCRM +hVJJHQHnpWnDTNnnDb +LJsVVdhQqvmdbbSf +srlJztzsVVsSsVtRlNllTWzzmqGhqWLPCDCgmChPLDdqCmCP +bZQMZpbvMBMgmDGmZLSPZd +MpScMSMpvfjMBcBcfMfSBnzlTjssNszrNrtlTVzlzFVN +rCtgrgClprGGClnJCZmwtMjZRjbjjcjZQv +PWVfBHWPdbNfbbRmRj +sPsVqFPsHWLhBVVqHFqPVddWSDLJgpTCnnrRRLGpJSSTRrgT +zjqpGjrQjGqSHCVvCrRZDN +cTdshMhdmcMNmddRHBhvCCBCCvHZDC +JTmTmJnLTdwzNQpPWJWgpP +BmpZmrzZnznHbpprSbQSQbqdSVqbPQcV +fRGTGJZRTTDwJTJRGDfgJgNFlSSFcldfdccFVlPlFFQPSQ +GvTTTZZLmsntzmCL +VhMcrmbhvzMSnhvftbRbllLtglBBtf +HqqqJqDqPjJPNjjDVFDZCdqBtRtGBGlGRfQQgttQfHlTQl +pCZJPqqZpmhvhpVh +dWLBJHJhGJGMBJRcDLDSQsSQpvcR +ZlnnPqglblfRRpSvSsnz +sPTgZVjjmwVTljrwTTlbwVGdJhBNNdFdMGNHHJMjBNFN +FhFrfbfgbLRdfqfrmvDgLdjrcQtSNStHHHQlSjJJPllt +CnspzZWTpCnMVzzZZGZRCzttHNjNlQlSNtNlNjVcjlQS +GCZsZBRwnvwfbqwFwb +bZnJFJgLFRnqQZqJQJFQGpCLNcGlLllClNtccjGc +rVfvwPDhPHGtlcbClr +mBhshsfMvBvqsQJdTbgnqQ +jgWHqMSWMGqWjWjqbWGJQDfVqLfrfDfJhVLfTr +pPplwsRZPFZFtLhfwgfwrhJL +zlRsdgFcRgmjdBCMHdjHWB +qJSGJSPQWzcprtQZtt +mBMVfsNBnZzcNtcc +LMLBsmMlvBgFsghVVvfgLBvbJJSqgGHqPGPtCWwbJHqCPG +ZvZLcdMGVMlHDvDpvqhH +NNSrQNbJbrTnnWZDDZqqhqpW +wbgNJrsrCwwJQZbsrJBFzjCCdzGdjcGzMdzj +JbVmdVLJJJdQMnzmmMgHjPqqjNgvqwngHNNP +ZfffDZZsRpcpRDcCRrlpplcWSSgwgSwjvvsjPSwhNSWggh +cCtfppZrpjtMMmdQQTLz +TtbnmbdmTmgTlPNhqvqj +wrwrLsVZRsJJJsfHjvPPWfhjHqRN +sDZwDvsCCQLJZQJQsMCMzZBtSMpndcSFnnSBFtSBmdBc +mWFTZdmQdZFrFQbCRsrspjSjnvCLRS +GwlDqcNHDzwGfHSRqCgJsSpnvpSL +NGlcNwHLLGfDDHDhDwDcwVczbPddZtMFWttWWtdPPdQdhPWd +mnfcZgcdZqnqdfFqPmHfhqsbgVMCJNMtvCJtMvtblTJtvb +rRLDDjPSjjPDGBQSBNbtLVtbMNNJlTMtbl +SzjDDzRRpGQDDDPHzdsmnnhsqcqdFq +ZDGNRDGjSdwnnmnsVNsHJJ +tMBWWrddLPLhvWTTPLccvmmbVpgsJHmccppJ +ClPrtBWWrhrFLBPlCRzjzGqdRzjRdRGZjF +csTRNQNJcNBDLfhfMf +qGmWpGHqrqPLChPRhVFPDD +tgHrtnrrJnZRTZcv +FLqrfmLDrqCmqjTqcbGqRTGVvb +FMtWMSWzzFStJzPzhWzhQvTvHVjjTjHTTHvbHc +PgtWWstWtSpZWPzWwnrBsdBDdFLfllLlfC +mThbMDMQDCDbwLqWpqPpdhwR +zgrcffgHNZltZSgHLsRsLLWRWgLqppsW +SVlSrfSHlSSVlrJfVctlNDMCmMFbnbRDbDBFJFbBRM +PrBrWqtRPdBLLrBwqpswgpwhgpnZhhzsgw +FTFRSVJQVJflFfQQgggGMZngGQZszZ +TbmfFJFSDFblSTDSFFbmVSDrPLLWtcmBqqRmBtmcLtcrjP +DjPsMwDjLVVTsvNNRTNTRT +ztdQQHqHlFNtfRNNNMgg +FzhMhHQlDcCrhCCc +zSHGzzmHgnnMDLTNTG +lPVBtvhQjpNSMWTLBD +VCftbjvbVCfPbZwsJsrSgSSZwC +CbwgmvMnmnCwMmwRQqJBGBgHZHpJHdtdZpJt +zVSlNSDlrzNhqlNTScDzVWfBBZZZZGBstGsdsWFpdHdJsW +NDlLzhrVcqRPCMRwLLLw +TjTHHLwnLjVlTwLjgVfvsFvDsdWfvDvFMd +qbRRRpmpcmDcczppztSqSvWFssFGfWdMvfQWdfsG +RZpqDBmtrzhzphjTgjHlnwjgJhgJ +dLmMgdgzwDLzDWFhBWvzFzzBZJ +tTVcppbSTfstTMMHfTbhBchhJFCWcjWBZhjGGB +SSSSNbsNRpRRsRrfVHfRpNtlPgQDLPdMmlDLlrPnqPdPLl +qqbTCSqdqqFZdRLZhwhZ +HWWlHtlrBfGtVssnsLnHfJVPPMMFzhPRwMPwFhzPZzPMGM +nfmtsrlsnrfVnHJrVBWlsVfgbbNTNSvmvvpcTjLjLbqvvS +GGhFvGPFcThqffPdnfNLqZZCSwtQSwZpwQQBsL +RglMRrJJgHBCBZSQQpdr +WmbRHHbzDgJMDzRDMdWmWHzHNFFvvGGhnvVvvfcvnFfcbvnT +QsfQmsLfZZZcshnJ +dSgdWgSVVFvzSpqFdqTgWRHbJNcbZNCTJCNNZRRCCh +FcpVjgDvVVFdVWFvzjwwQtBMLtBBGDwftPrB +rqsRrHsvsPqswNcJcNJrnnBrNn +bFjgGFdbVRNNnpRQpV +GSthhggGDSvMRqtHvMfM +ZwVPgMsgVsGzVsRZpgpzzgpFMrNbbLFrDLFFrrSDLfrNBN +qvnjBhQhntbfDLrF +CJlHHcHcTWqvpBdsWRpdPdgs +BjmTDjJBCBWrgQRPFlWWlW +dHphshtdtVHVhpJqspdvRrqFPgrLPPFPrrRPvQ +sdMsMtStVszpwMzHjJGjCcZjmScNfCDf +DmGdDffgDSDDdJstqdJldlRt +MhnvMCZCbbZHMvsCHtrcVrPjJcRqVtlt +LsQbsFZvZhQzZwhQWTNgBWpNwSGpTmfS +RRJQnCzbZZLTZJCBtWvFtsfqBqtfWb +prjlChGNldGNdlSVMhWfqWtfsvwvqsFtdtsq +GGjNDNhpMGMGVhrnZZTzcTHCCJcDHc +RmbMmjgpPjMBsBMfchhVsc +HwFWFTztSrtFpcQvBsSqVscBBC +zWwnJFHtWWHDgbGgdpGpnl +mnbWbRRLRFnmmWcCDTBVwCDBlwNW +ggJPtpdHGfdZtMHgtZgVPPBCVsPNBcsBTTDDCC +hpvJJTpGhdhtJdMHqvmmnLvSbmnFnRFm +WWtrWrNgVbRjMrQCNzqJFwQJFNTJ +LdHPhcdchQQssLzJrz +pBccnHpnrrcGHnnSlWjnRMSlbt +NMMfNFnZgMVThhTMcgTDJDJjsVvvJJqJmHsqHG +LQpwwprCQzBNBdGjGjHswswdvm +CBCzzCrbWbSlNQnTRgPPfFRWnfgc +RFwHVQRwFgTQSFVhdsdHsBdDBnnqnq +LGftLtPGGMzlNrhlPqPsrJ +fvGpWpMtccpTwwpRRQhh +TTJCGdTGtZRQQCnzcnCv +FWWHPSFNFbDbDDqSWnVmLRRjRRQLhcmLjS +qPwPWwFppbwggGZGfdJZgdnGdd +zSTWzrzWTLWpCtCGpqqGgplc +nZWwsJVZZBnJHJCclHllgtChgCgc +DFnVBJsFssVVFBFnBdfvjDSmTMWzrmMfRmTv +MJmgMssrsggqqMVstbwTcTbPbTTwThmw +NRBBGRjHVRRcRbCp +QnSfzLWzNHzNVQQVjrglJMsMFvgJdFWrgZ +ggLLGnhgnPvJHZnN +VBtmVSldbSBVlcNPHvjmNcwNZZ +tdWqSVSSBztVWGrThLhfrfvG +TDqrjdSwLqDppdTCdzPBFmmjQmhHFPFQhPFR +zlGbMcVcVtsPHFRhWRRsPF +btgvlVVcDZZZqgrz +DgwlgbbFDDjjPTHDrmddPhPV +WqtMBBtQsttMNWQBqsbJpGGzdPdTHLVmTzJhmTPhHHPTmH +qQsqGZNQtZGMNsNtZpFnjnCRbZffwwSRljFf +gMdFLCdnMZCTFFCqnTgWLCHfSgPgPHStcQQmfSBBSfHg +vrwwrwzbGjjswjvhGGsjPQmqRmHPbBtcBQtqfmcH +qzJllVsGVGljjsrzwDzhwzDGTddNLFnZWNdpCVWTNTZTLZCF +LtwMhDtctwbwwppdWBJQJBWPvPfDfqvG +FTzrNrgSRFrgzFRHNVFQJvlqHjBvQWlQWqPBfq +sFgNzmVmNzgTvVTMwhMhstMwZtsbsc +MrBDQVzzlrvhQzQrDMVQrzrzgRJnRRwwRbwSwwVRRNSgwwwJ +qFTPTvfTHcqqncpcwR +LmtdGGPmTPGCTLHLWsZMhvZMMMzrzzdlMQ +ZVNpjfpZNpfNgNjzNVfWtnbbWmBHtsZWBSZBGS +MrDrQvvDrPLDMvFvdmBGGsBBCtsHrnrGCm +ltRMwLLDDRlvQwvlQcwhqfcJNpgzjJpjhJ +sRRRlRbcFbBBdnFBwCGppNvGrTCDDGVNlr +PPSLQzHjzZZPLZPjgTNTgpCbVJvGrNCTGr +ZLHHPQjhQmWWSRRnssdtbnmfwF +GRwrMrHJGwJPGWsgfqQgsc +VbTvLQCZLSWWsgWf +TVDvVCvppvTDmzZVTbZpTzBBNQQQJlJBBJBNNJmRBwRH +shJRWJsjZGNjSTrjFS +dMLCddggldQzMCCVgzVVLmLvTwNFFSqpNSqSbFGSqTTpMTFN +VGQvVglCLcVzgdddCDVvlsPZRRBDJPHZWZZnBsWJRR +CrwlwhRCMrswnsHBFccHHWFc +QJTmtfQgLtzQfLQfdPcWSFHHDDSpcFpFBg +jTQTqbfQfmLbLQJbJrRCWjljZGjNrZlZlC +JmthDmLShtJmHphphJQCwjdjdFDzFgzFdgdNlC +sbMTVBrWMbNvVMnsWMnVzjsjwCfjFgfZzfdgdzlj +NvqbbBcMMPPSqLSpGGthmp +RfGWFHlPFFNWGFZRZBjvwCvzBwhhrvvjzmrr +sLJSLMSTSJTbStJtMSqSqbpMrvmrzWdvhmjDCzzwrrpjdDDv +SbQqsqsWcZPcQGFG +BjqbMqMVBsfqGqFqGLmF +ZZQbQPddPcwbPnRQltdtQZdnmFNrvfhGrhrWWFNWWtmNFNNW +dJJQccnRPpcbQcMHsSgSMsDMTJSg +WWGBBvPflnWbBWhvhbPvNfnnVCFZmVRVZmVGMVwRLCCCGwVC +gjszgTMrgzgqCRRdmJRjJLVw +grzQHzqczMSzqSHcgQsqPvPlbNblpPhhPPbHvnhp +sJDDNWdnRLTTvqwSFPCmLCCrCq +thzplgfjglflFcbMclpppMfcwPqCZQCmqCwrzCqmQmHSqPqq +MhcpFBMBlhjbBTdnNJWvNvsvBd +czwwghnWWfcfgwfWthfrvVvrjdrdvDDVrbzrLF +RHPPMRpQPRMPPJRjJQsZsrrvvJBDDVDVdFqrBrFdBv +smjMsGZHRsHSmRQNGHPpSTwwttCflwngnChcCtWW +bprrrwrtLDtrWwrQjRDQDbPPVHVmmmmHNWlPlVNPZZlv +hqqhfnBCTfnnhzJwzsqzfPZZMCCVZVHHFvZMFvZmlC +TzhhdJTqJzcBdJJnzjtQrLdjwgLtpbgrLQ +qzQvzzgWSCqtqqGpddGc +jLrZNZhZrNRLHNffhrjNjNdtdZtGcPFwFwpbGwbVpdwC +nHnhrLNCCMHmhHBMhrzvgJvsWSWMWzzWzSlv +RzcbzdRFzbbzbzbFdZFTHMZPhVhVQMLrlrQPhLZlMM +BNGfBvsNttVmMhlMLm +BwGjpllswfjwpcFDWcWcbpdb +SjzpswrLSDjVSpwlmZJBTBdNJLvBNvHQZT +rCcCtbqgCfthggtbGGMqqghqZQvvQTBNJQHQZQTcZTJFZFFd +CggGMtqMfWbbGghPhhbCMtmsSppSspjpmWzjVSWlVrrm +PmWTPThTQWnLWQFl +VNcSVfMbtsddBQNnNpdl +sSjctwjVSzzccjgnTnDTHRDhqjRR +WfMWfCNCjWWHNTccMjRjfRcMbqSwfVwqwsfGGbssrJSrswVw +llLFQLlvlPFnhQBPBZQBqvBwzSzGGhShJVwShmsJbbmzSG +lnPqvQZBFFBnnpgplFvtvHDjTdcTjTMMjCRNCMWgRC +rprFNFFNjNLmMdgcqL +BvzCQQbBQgffsDbvVHMdbcVqmLVqlmqq +JvJCzBDJwnsRnQDszCBnnnQBrjZPjFpgZFTFZRpTrpZFGFtT +wBHQQZHVCcpwDgdZdMsZjvMZFn +GPSzlNlJLfzzzvsWdWLMmFWLMM +NfqGSfrTNzRTqJfRbptQHFQFrwrFHBHw +sNjVMVNVMzPzQgghcMsNzJtjSJtTFDTJtJnnDLjDnL +CHwrdCpvCrwrWdpZqcpFttJSFJTLLHLJfbnbfD +qrlZCwlqZrqqpWdlRqCRqdqcVNsVMzQzmNgNPBsRhVQVVzMs diff --git a/resources/day03_sample.txt b/resources/day03_sample.txt new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/resources/day03_sample.txt @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw diff --git a/src/aoc_2022/day03.clj b/src/aoc_2022/day03.clj new file mode 100644 index 0000000..38ae011 --- /dev/null +++ b/src/aoc_2022/day03.clj @@ -0,0 +1,55 @@ +(ns aoc-2022.day03) +(require '[clojure.java.io :as io]) +(require '[aoc-2022.utils :as utils]) + +(defn compartments [sack] + (let [n (count sack)] + [(take (/ n 2) sack) + (drop (/ n 2) sack)])) + +(defn find-common [needles haystack] + (let [needle (first needles) + occurs (fn [hs] (filter #(= needle %) hs))] + (cond + (nil? needle) nil + (not (empty? (occurs haystack))) needle + :else (find-common (rest needles) haystack)))) + +(defn priority-of [item] + (cond + (<= (int item) (int \Z)) (+ 27 (- (int item) (int \A))) + :else (+ 1 (- (int item) (int \a))))) + +(defn task1 [rows] + (->> rows + (map compartments) + (map (fn [[c1 c2]] (find-common c1 c2))) + (map priority-of) + (reduce +) + )) + +(defn find-common2 [needles hs1 hs2] + (let [needle (first needles) + occurs (fn [hs] (filter #(= needle %) hs))] + (cond + (nil? needle) + nil + (and + (not (empty? (occurs hs1))) + (not (empty? (occurs hs2)))) + needle + :else + (find-common2 (rest needles) hs1 hs2)))) + +(defn task2 [rows] + (->> rows + (partition 3) + (map (fn [[c1 c2 c3]] (find-common2 c1 c2 c3))) + (map priority-of) + (reduce +))) + +(with-open [rdr (io/reader "resources/day03_actual.txt")] + (let [rows (line-seq rdr)] + (do + (println "task1:" (task1 rows)) + (println "task2:" (task2 rows))))) |
