From ec6efad8f7a1bed09bfacbfb2868f6353c3c7f4e Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Sat, 3 Dec 2022 17:12:06 +1030 Subject: [PATCH] 2022 Day 3 Scala --- 2022/day3-input | 300 ++++++++++++++++++++++++++++++++++++++++++++++++ 2022/day3.scala | 23 ++++ 2 files changed, 323 insertions(+) create mode 100644 2022/day3-input create mode 100644 2022/day3.scala diff --git a/2022/day3-input b/2022/day3-input new file mode 100644 index 0000000..1524f4b --- /dev/null +++ b/2022/day3-input @@ -0,0 +1,300 @@ +ZTmtZvZLTFNLMQMNRvZncdcHwcScJvcdHnVfwV +zqjqrzqjCqrjtqWhqChqrznhcfdfVnVSVgcffcgJcSgd +rtDGpzjjqjlrGsWqBWFRsbTPFQMTbRNRFmbs +FFlnlnVlmQqcBVhBRrSrGSwVdRJbztSt +NPPNsffWfNztRZSJNG +WpgpTTHDpgTDDpMLPGgMHslmBmmHcBQnFmcqhmnjlqQm +VlVNLlPQhtnDRPnP +QgqTffzZqgvgzWmqqZmGcDthtRFvnnFnhJtJJDDt +WGTBzSqBQTQmZBWHswpNbswLbSNCNl +PFzFQDdLjMzzQDhnDNmwZmqwRsmRRmMVNM +GtSbbtlttvvtBvtHBmqqNqVVwsVgCmRw +brlvctHfrlrqvGvcTpjDdFnLDhdfjLhQpn +fTqzgFrcmzTrTNgMzFzTrgtbMtVMVPSLVbvSStRttPVV +lsHnlQhplQpsHhlDJsswNwZPZZVNwvnSZSVvVS +BJpsGWhWQQHdGHlpWpfgrmqgNBmTTBqzTrzr +PLPPrDNHDBnrWNBmjDmjbqqgzjgjQC +GJpFwpvFFsJpwvwwGwJZJRptzdQSSZTmCjTQmTSQjjZSggQQ +ffwGGtJGCfLcNMNNfNLW +nlTzllGwlQHHGMSrrhQLcvbcghgcvL +fFNpttBRFFRNtJJnfNWmqbhhZrZrcjgpvLrvrvcvbr +JBftFFsVRWtNWRsmWtRfftGHGPDDCnTDHSCwzwVnwGSw +LsrZLbLmPSTZtPcc +zpnpljpdwhRpfNLlPWPtTPcnMWPcctTV +qlhNNjldqdpgqdfhjpphdsgmmrDBBJJQgHrmDHLQJb +ndDrsBbpqspHCjzVBCHjMj +LWFcQFQtVVdcCMHC +RLthwTWLTSLwTllRLLlLNlPpPGfrGnqDdGqsZqsZsZhb +jHnJLJrcBbrRHJpnLBBjdHbjfgvGwstwWwdsWWshfhFzFfhv +PZDQMNTMQwtgvGTGhf +lqlPPQZQVSQCPSCPDmLppjqRqHngLHjRgLnL +MfQrhdzNMfMPsNNmPmqPLCLCVLBnbP +WVtcVvJJVjvFZZmgGjnjLBjmnnHB +FFtcZRpWJcSDTwlVMhMDwrrDzM +bSMbrQGZwwqbrbGMdTQGMwQdfFBLDLHLHssDgsHHBJDsFfwL +lpPPCccvVPvccPzcWLDJFJBsBzJJHsqHjg +tnqlPlVlNvNZZSSrGGZb +NlBBBBBwmwcMgLwLVVLLLscHdnMDdbHJCbdvJbPdDDJHvn +ZRWQWSfGhtSjqZhffZhhRjtdvPFHvCJbFdCFFDdHJdPb +fpqGhQWWZRhfqRSqrpGllLcVLmscgrLwBmgCzN +wHHHwDNCzZwzZfpzwsswzfzvnvnMDMgMhMGGFGRVdMnvcF +mLtttqTPBtSJTSBQWlmcMvVdclnvhFggdGhRdn +QBLPSLQQWmLtTBtBSjZfsbwbHzpjGzHfpzzw +zDPBqBPqwzzsqlTzzPzqjttNbCPJVtPCbrvjvCZP +MFhMhGfFfGpWWpHhFfRpHjVNbDbJjVMjrVvVNtMtbt +gfRSmpggSFRgfGRphFGgfgBSBTqzSsdlTLqdsnsDBqLw +QTTdWZZZTrhCZrjhVt +SBJJNRRvvRpwwspNSpTPjCMVhhtCjGThjBjB +fJJpvRRwNRSwvzRzRvzSgSRNqFTFDbFmqncQTbdFfnbDQnLW +wSjwwjWhbhhjWjdqSVpqSndvMdmM +NTvPBrZgPPHDFrFHGvZHRBqVBpCQVRRdmpRppdqM +TgDHZPsNTWbbwsjtvw +HVRPRwJVppQNpGmvMvmqqq +WcttbWsWsdDdbFDSSWclZGvFLMvfvjfzNvLGzLmfqv +tglcmSldWlBQBThRQBhg +LDGGfPFLGsfFnGLfMzfJVccNzmcmwm +qggSRgtjgCRtdtNZCJMCcZwTZVcm +RBbHbbRRnLBDDrvN +pThhMtMtTsWspWTnGjpsVHPdjdjvHdgVvLDVVSjd +JQNrrwCFrSRLRVLnSN +JQcJFCfcnfQmrbblQqlthGqzpZpGTBMWTMqtst +DzVmzDDgsNdHHLGJhJppPPllqSgbql +jrBWjcQMCRchPShwSblpbW +ZjRrSCtnnrtBQTcrSZmGtGFFNDHmHVVmVtzz +GSbGbrTGRRScMlVFjfbqqjdF +tvDmZhtNtHDttBhCmHDJHNwlpjslMwfflvpqldsFpMlf +HdBhLDhJDLWWLDCSQGcrQPGccLTGcQ +tNzrCdJBrrtQdtgQdlQQtrnMZhMTqzHqqTFZZFqTHFMV +bwbsRDvfwfsfcfSFqMmqDqFVNMNVVH +PRvfbSjNvPWPlLllLJ +MjMRRNRMjZtGVGpBCMMCDV +vwfhFzhvcJQQwJlQSddzQwFWGqcDpCDqBqDTcGZTTVTCWG +dvFJzrfZJhddLNLPHsrtRbPr +BmbsFNBhszGgGtGl +MSHVwdSwZflGlcqqpM +QvwZCnnnSvZdCSWrNmDlPPBPDhPmjW +MDwpRzRwMzMsdVSjdMWWMQdW +gmlftnDtHnHHVWSWBjWjWgvW +HbtrhbbGRNDpbCDz +cjVGqQqVqBFhDtvB +ZnTTfTffZZmDhBtJZG +fNzbpzlHTlgHNzlRTlRNbHrWwrCwWSSdQddNjwVcjGSd +WWrPMhwhnjpSLCpDlSSW +sNGBGdmTbZNGsmbstNLZGZDBRSlqSRCfRSCqRRDDqCqp +NvvcGtsLdTNZmLTmdJPcnnMFjFMcrVJhMF +wMRQMSQZHznRsqRbWp +ddgDDhfDrrDdjthHmdHrzpbVCVWFpfVqCWpWqpFs +hdvNdHtjMLJZvJwM +nWzZtWzHzZWgQHMNLDMDfDBfQbdD +MCPmRGGhqdmNjbDN +FRPlMlRChCvFggWZsHsZHn +ZGhhjdgwgcZHsPnRnSnbWscn +tltlfMQQQftDFJpMQJsWJWJsnWBnRSBbrBWP +lfLDpQMFMNfLjGjPPgZzwh +HcmvWcqnHLLPDzPPHM +MGGSfdJRdCglfrLjrjrLzLPzlF +CsgRgfwgdCwhsssJBBwvcnQnQNMvQtQm +nrVbwgnSTSgSnrZpjpWWqmWNHlqqpV +BcBPhSdsDlHNtNlJNP +RLFCQLQRRsBDDcRdGDddhCRDfwzvSCnzrbfrMfMgznwwfbZv +HJLzLNwBNzNJLzBJztRGzQVnDgwsjbgwssZwnDZbDQ +PhvlSvvPfMRlDbDsggbSjQSg +mFfhMlMrfchvPPpFTPvMvPzLBHWRHJNtzJGzzHpzBtCC +FLsgSLzLswdFgLBbWZnJDWHcmZnnBjHM +rpbrrqfqpvCbqqQQvvpClblRDHmjmmjJJZZnWMJmmJmmcRMc +qTppQvCfhzSVVTzbdL +ThTJtlqfDrDtffwqRCFCCnLwdnmpzRdF +WPQSSFsGMgQZWvFQgZgZQcCdmmzLMLCpNzCCddmLzdzm +cvVPGPQQGsZsgGPjVFccbHhThJHhDqfhDDjHqDrr +CgnCCnPMnMtGHDbMFQ +zLpwpRTwwRwhRchHwmqmGvvGbqmTmNQqvq +sHdhzlwrRVrdLzRrprrfjgfjVBnBCfSBZZgPfJ +SPMdWwWPrZwdrrWrSPLFDfgbQDfwDFfFglDQ +qLGBtGLpjzqmvQbvvpDvfFpR +jhLqqHBLGjtLqSZCssSTZZMshP +MhJCpPDpRRFRzQQNNqbcZjNZmVhjNm +LLSlLnGDmNqLbNjb +sfBngrBSTTSnSGHlTsHBGsBpFFdRdQPDCFPWRMzzdQWM +ZQtmgtWfPcgPgcsb +pvMhFThpHVTvPbcFcFJLJDsd +MTVHchVVHjHHTcpjMVBjjnQnGqQZnlqBmrWQQBffQQ +HfcRNJpJfhCmpGSqqGNjsjBnQl +tTdPwwtLTrrTVPSnQsbGPsnnlFllFQ +VvvTSTwWMrSZVwwrrmRmczJchHcHCZhRzD +wfRwhmLRnvrHqHhV +bJlBHlWlHMBPJzDlzMMJJSBlFnrGVrqspGGvpVGPVpGsVqvp +DWdStDMztCCHgZCtmZ +MHdsznVDDfcjcjDcdDjmMSCQwQpCpFCvqSZQqFzQpQ +lhJnLJJnTNrWTRqvqqPrFwZvwqQp +NghhtJBtnWLRTNjmcMDtjdsMfGDH +jgsvPffVmHfDqPSrNwnQwnwNhSvw +PZbGbCdcGdRCGtntQLQQLLwtpLNw +RbcPFBRFcdZBBJDBmTHjsD +dTTFJdzhmmmQpzVz +jtNLcctGGjtfrnVMsNQNQVVWnv +GcrcrfLtDggLftDFhZFdJFHJBVFBgZ +TTbqTgqCqZCrwmhQnnmrgh +MhpfsMLhfmrznLrQrF +RsStRMtjpHMfDtWsWsNDppsqlZqBlhNlbcNdTPClPqcvBP +lRhZPgnpRGZlSrmsLSvSzLVl +wwHdHCfDQCJHdwdDMdHCcDsLmNVvzVsWrcVNcVzLbrLz +dMCCwCtJdwDQJMtjhnvhpPhRZBhR +pBqMZfDffmBnvnNmPt +rhwLHCChrLPCMNWMCNmW +GSMVRSVwHLMRJDQJTZlJZR +sfstzPGRRBSngMfQLNNqgWLQLZZNgq +scVDjjjCDTVhHlDhHdvvjwjHrZmWQmJmrJJWqNqLJbrcQqZq +VvHlVHldTjvhpVplhVThhwjlPFSzPfGzpGBnsRffRRBPPGGF +WNFNfnWTSLSJTnWShTvVZCnvrdPrZvddVCrt +QwsMjppcpHCPdHsvPZ +lcwMGgpcGbzQpMgQwbDjDQZSJTRfShffWNJSSNFFbhSb +JDNgTgqDTggQbQGbZDWbJmVJrPVfPjlPfPwlljJC +FZzHFSznZZtptHzcSmCVrwfPVcwwVrCcdm +nMSStvnZFSHpLLtBtMzHnMWQvNhgDgGNRGNhgqRWTgqg +SJcrhvbBLBLrDpllvnwHQRnllHnQ +ffsjfMMZfVdCCgCfgTzmzslRtwFwFtTnqqHTJRQnqRqq +CVPgmdggVjCJSrhrbrPrrSLW +LPtcLtgddLMRRCMRpTBRrZnppvvGRvBw +WNNJjDjqSjJSqWqzNqzlSlBTGGFvrppSrwTFpn +qbNDWNNHbJqVtctwVmsfLCLP +FvSSLMqgvVSQjQfgwpwWpj +BthszRPRRNbNtzmHRbHNRNPfwJGcsswWQpffJpfsJcQFwJ +bBtzPmRrbBRHtNCzPhqdCLFMLSSvdnvCTnML +VPHWJPDjVLDDjDSFDJhgdnNGdbblzTzNjlnNbl +ZprsRZMQwwmGZsvtQZgTfggqnbfdTzrbqlTd +GZMtsscmsRZswwBQHBhDDJJPPCPWSWCJ +mNDNNmmVMSVgGgGGqsqGLhQqsLGhLq +nZBTZpJPhCpnnrsqbbcfczJfFccz +HpBZZRPRHjnPPjrHnRtCZnBdShDVlMDNDgVmtmDdVDWSdN +tBftztmztGBBCBSGHBmhvHHcchbshhThpbLJHJ +wwzMrrMnQdldVdMvJTcLNnphphbLJv +ZzwPVrWQlwrdStGGCWqDSSGW +QwfrQPvhwPfzQrvWWpQpvVGGTDGsjbgNNcbfsGTsDFgG +CtddSdZMRRdnJhRnHtZtlRMbGGDjDgggjNTZDNgTGFgGjc +mdmdCnHhVWmLmwwL +zLcWSWFcPJLWrWLSZrJLjVjHtjVsrdtstHdtVQgg +nChlwwnmhlCNqhhjHMgDjVVdwMjdtd +CNnBmNNThhhdhCdlBGGlGvNpcJbJLSbcZzcFJzpJTWPbzc +LdPZTPVpLCVTtCNsNsfFnlDC +SMwqcqcWQMbMhWQzBnsNfsFwrnnNNlrs +WMMWhvQRNNNjvLgZ +DWFGzrtfsZHZZMLt +pNwNzNCNTpppmnvNMTLVjHLBLLjMRTLH +PPdlPmJJNNClDdcdDDfWhzrW +nSJVSHQQnwLThnhrML +ddsjfRdGZjmGjRTwwTZhwrMwWwtb +qCdfRdMmgssPfjsdjdPspBzQpScSSCBpzNBQzcQz +fJnmRMJrlrmRmTRmbqssWVdqNVQdswdNNb +GZggFHGhHHgHSFvtHPPPsfwgwNsVqjqNpNjNNssN +PPSPDDBPBmBMlLfmLr +BdqdCBqqCVPVTZBrlJcTcTJTcfcbwwmcgv +WjGGLzLMhpWQmRGhpHfbhcDhHHHhgcsbJD +tQzSGjWRzWBntntrZmVB +clfLQLgfzfTLDMwNrNrrNDGCGG +tmbpFtBvvmvdQQdFQwMJCG +SnbtnqnSbnQQsBqzgLgVsLZTLTPfVg +QnQBQQBVzqqzpmfgBpnqSDFPjhhWsFVhlsFFsDstFs +MGGrTHcvRTTrrrCDpjvWtFPlFlsvjp +bZbpTpJJBBQmBmJf +dNVgDdVtPcNPhgTLPLpTPlnTHHRn +WrvjvwjWwfwWjGJsrwBjQJjTQLbnSTTmpTRQSTClHTbLmn +JqWWGvBJBwGJfJJGvwqZZddFtDFhgDqZhHNM +VwJcNgbfvfJbfcmGLZfPhZLfZGTDhP +CnnrlBlprsBnzQFntnZLqDhZZqThWGtWWSPL +FllFdCjzlsCzjJNJGGJwHHVg +fTbVBmNJCJRVbTmbfJFHsDjQHDHQjnQRsvDn +cLWcrGtttddMPhrPhPtPrtzsnSQQBvHjFpFSpDHsMjnvjD +PrPgPdhGWLrrqgdqcVCffbNblBwfVmwqwC +gmBfbmlbBDqrdfrDcJ +PwVWrQphQWWhQsJFcMPqzDdcJq +QWCSSHpSQWCttQpCRCHNSlZBtrmBZTjvGgZjmBZjBn +JrnhMPvtVtPVHJGrBrQwTmQmRGGB +pSSZCFClCbbSLbljZlSlFFszzBwcZNwTzQNDmBwGTBNTBz +ldsCCjpFjCqdLgsFjpsLFQgtnfqtJvnMtnvhWnHHMnnVWV +hzNHzHjWNzwHjjhprpGvGgvGvvpv +PLBVVRPDLdrgCdMrdrdC +FmBTqTmLPrsFqTBDcTTVtNNJztqWQNQtWWtJqNNz +fFffFvFBgHQWHdvfGglBWbqbPSSbSwVntPhZwwbS +jJCMzNMCjNCLNMjjphPSPqhbqnwPZLSqZh +rNpJJDzpcNMzzdBnGcQTccBvgv +FRFMwsrzVtwstgbCHHJJPgNb +hfZGhZDnnTTHTCCNzJjH +hppDvznmZphZQVFQwFVWlRqFls +jrjrgdHdFBZsBlcCGghWNgpgbCCp +QwJJqQQMLwPTwLMMwzvzwwzhCWbvcNcCChWpchWbNGfFff +qqFQJTmwJSPjZsrlnBjdHm +QfffRppWfHpQSrWVpSGmGMMccSjBjmmGmc +qdzLvbwzwdsWwnFdBBcBhMjMDvBBcBhc +bPdZPqddqzFsZVRptZZQHVWNpN +BzBQQHNjTSzzJDDFZFgJDJ +qLvCnLpfCpqCnLJhntRglFncDrGrllmZFZlDrc +JpqvfhRhLddfpbbtsdJWjHSwHHTNSQNPTVHQTb +qVQCCVlQZWgHZMqgqWlrtScFwrmtmcJqSSsSJS +MzdnddpNLzhRpzbzNPPBbPScjcnmrwSFjSjSJFtrwjcF +ddTzRMPLdLbvhBRdLWGQClVVCWQZQDTGGf +DHHTsldDNdPnVDCRDCNHllHwcMpprSMpRmphhRWhrhmzSS +qJLBqQLvJLQgftgPjJrhrMMWSmWMmMrrSqrc +FjfFftgLBjJPBLQZGvvZtNClnTTNGCdHTbCCNsnslH +jHHNsNqhjsShsshdRRCDMfMbCWHBrGGC +TJQFmnpgmTpBDCgCMCDZCGDC +FwpQzwQTmVvwTJmFJzTcQSdhBNztNPNjSlqLhBNhSh +vBCfSDcRMfRcRHSRRZZtPwrWWNtdSmrNVGSdwm +gbLnTzqTbjhGqFzgWrtttQtrPQTtNPmP +zbhjzglgzzlBGcsflsCl +jNHDNNHjVGVDNQFDTQSFZzDQTd +vvLwhbnpvPPgClwnfFTmTZQgffFFtTfc +LrhrLvwrnJvhCHVVRZNMjsRJVB +ShfcBWfvdhhJBBVwCJjHTRNwRVNC +qQzlDqMDDDslPqGVLTNZVpPwTRZZpV +bgbDbsqzsDTcfrgFFdgg +vlRHvvHwvMMMTTlvjmRtBjSJmSnDnpdrpSSrJJnDQrLp +cPfCgZZzNzzcGhNszcTPNZLrnVSJpJhDrrhSSQSpDDQn +FbTgbGcgNgcFbPFHMqvjjRtjRWvFvt +fZTnqfFFDNglcjdjZcfLGQJBwrGGQwbGQTBBJz +VhvfvsPpWRChmphvRGBbBLGhSbLrBQBSwb +pCsCsHvsstPsfRMMMtmDqFjngdFZqDHFnNFFjl +PVVwffMlfGWMDDSwfDwVpRpsZRjBHgpSsjJSpBSp +TdnFbqTFdmbjctcqcbRBZtJJZgsBzBBzvgHJ +bNmbcqnnbNFLChCVCfjDfWlMjVDPCr +JBLLjBQccLLJhcBDDlSrdFDsVhrVsR +HgNWCgqWGbvCRRZvGWvZmszsSlrWdSdFrWzSldDF +qvGCZGHggRNHvGTgvLnBjpjjPJwTPjLcJj +GCGwQrwBZMZdGVdLzbqbbp +TRfTTCtgcDmhtDmsTDVSbvpLdNpzNVRqVdVL +CfDJjscgTcsjfhtFZljPZWZMWPlZjQ +WsrjjfRfjjZjwjWjBpDpVpVhMBsMMSBT +JgmqHnCHHPCCtCJgSZMgZppDTgzvzZMz +HCGCGqqqCtmnHnqLFHWjlFrWRRbfjZccNWrR +BJBfSfPLPvdhvrbbvpDsHgDTzgpdzgZpgN +cVcmRnCWCqGngHpZsZsTsqNN +jmGCVwWjjnWFMjGwcwmrLJbBJPbLSrPPTbFBTr +SPZmmtlmqjZlZMwhlrtggqGGcCLCpfGLgqdCqF +FBBVDVTVDJfgcddLCDdp +zzVHvVNTbWJJTTRbVWBFJbWHmwmSPlMjPSShjlhMhhrrml +GJZJZTsnhsDJtVZdtsZJZrBCQpLjQgBnrQgjCjQQQj +RPSfqcRShHbFcPSfBqLLprBCwrQQQCqg +zPzPRHbFPcRRRHPclMhSfvfZsJZVTTZsJNVMGWGVdGTWWD +lCZrCLWCwVllGzWPPBMTFpsbGdsTpsbNMgFb +RDjtjHcHjcHctDRtjnhtnHTgMqTMqhTbdbdZbgFqZdMN +vfDmvfjtmvtcHmjZfSRZHQzBLrVLCJLJLfJBPzVJlwPw +JMTHVZMWNSCwCwMS +nsddQbDCnQQdDBPdCQCSvwpDvwffhfSvpmppvp +BssqBFtqRHgTqVRC +cWTTthtrgrzpCdCddtpz +SSSLNJLGLSLfCJfJFQCJzQ +swMPMZVMMSlMSZMqVSSHznzcqgzWTHgTnhbnrr +RJjjgMjWShPqchtbVBPV +DDddwCnZMHLLvDnfLrvvbVbbBtpwVBVPwtVpbcbb +zrvnvLrlZCHrfZZLffHZHHTsTmsQgFQSFTMjjQlFTRmR +zhTTMLRVTzLbVqwVRJgDQQsSCgCDNgsZCpqp +rrmrBmmWrWnHjWnGWrnGnhDHSQgNSpQsCgSNgtNtDDHZ +fBrGPGmGPBcTMfLhJVTc +TbTCjTBSbCncHsDZDZPhZbzv +rMwplFdlWWJMJzhhpGtHtvHSSP +fMMfwWdWrNfJNdlVgMcTLTmLffjTqnLScCjL +SwhTllwJDwqqBWLBbNtfhjBB +mvllZMmRMZGFZRfctLWtWttzfNLR +MGvHMCGpVnFGlgvVFFnpnGmmsHrDJJdSsqPqJSqDJJdTTDqD +QTTcqJZJhHSpShhFpFzjDDwwsFzpdg +NBMnBvmBPvwrqvgvvqgD +bNNGmWmbbClQTQRqchhQbf diff --git a/2022/day3.scala b/2022/day3.scala new file mode 100644 index 0000000..08cd55e --- /dev/null +++ b/2022/day3.scala @@ -0,0 +1,23 @@ +import scala.io.Source + +extension (s: String) def splitHalf: (String, String) = (s.substring(0, s.length()/2), s.substring(s.length()/2)) + +def priorityScore(c: Char): Int = c match + case c if 'a' to 'z' contains c => (c - 'a' + 1) + case c if 'A' to 'Z' contains c => (c - 'A' + 27) + case _ => 0 + + +@main def main() = + val inputLines = Source.fromFile("day3-input").getLines.toArray // Can't leave it lazy as Part 1 will consume it + + // Part 1 - find items common between first half and second half of each line + println(inputLines.map(line => + val (knapsack1, knapsack2) = line.splitHalf + priorityScore((knapsack1.toSet & knapsack2.toSet).head) + ).sum) + + // Part 2 - find items common between lines in groups of 3 lines + println(inputLines.grouped(3).map(group => + priorityScore(group.map(_.toSet).reduce(_&_).head) + ).sum)