From c52761fb458705ec51484b76abd10ce9038c2b1c Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Sat, 3 Dec 2022 15:55:02 +1000 Subject: [PATCH] Day 3 part 1 --- 2022/input/day_3.txt | 300 ++++++++++++++++++++++++++++++++++++++ 2022/src/days/day_3.gleam | 100 +++++++++++++ 2 files changed, 400 insertions(+) create mode 100644 2022/input/day_3.txt create mode 100644 2022/src/days/day_3.gleam diff --git a/2022/input/day_3.txt b/2022/input/day_3.txt new file mode 100644 index 0000000..46aefe5 --- /dev/null +++ b/2022/input/day_3.txt @@ -0,0 +1,300 @@ +ZNNvFWHqLNPZHHqPTHHnTGBhrrpjvmwfMmpfpjBjwpmw +sbdzQgzgssgbglRtmjlwhjBlfrSrMt +zgsCRzJbsdRVQCDbcgLGWWLnZNGVLLZMNZnq +tvHhRtZGMvMHvfsrBBCTRbwbccRc +qznnlpzzDppWlDpQpCrcrwnBNwTZnBTZrn +PdVZJJqVZdllDPFtMjMgLjGMHvSgMF +csbhhVDDvzlVDcbccGGvfRjDHCjNLRHRCLfmnZfR +dFrStSTTmrrrHVfV +MMgQMMTMVTdgWtwTPwSgWSgGbbppJzlplvhBlPbzhlhbzG +FDJSTtSGhpPFDmFTZDpTFPmCBBrHqsCBhgBlqqrqrlRrHH +dQwMtfdzVwWfwctwnfnQCHllzRrsNzrrgNlCgqsr +fLfQnVjfwQfMdfvfnVvWDvtJPFGDpvZGbZpmbSPP +TzzCrJcDrTDdLDCJDvGNPCFqlZWlvNvWpq +RRHfjsQBFsjgjBQsWqGpNvZQqQlPPQPN +VnHBnRVssnnjsSfBwbMSrrbTwJTcwSDF +HJCgHCCFFFVGJWTlbqDdlqTDDpgl +cZccSmLrfZcrmmzSQftdpDtTHdbQTDMQ +NZZccrrBwZRPNNzmcLSSjJhGhVWCnsFnHBjGChsJ +qwwwJHTHqdFDtZBFPfFBZFzM +gVRcLnnWVgggnnnQgVWWNZtZrBfLBzZzBrMPPrZvPv +GQgQSVRtsVnNRGSCdpmwspmbmDpHmhwd +bhNgNfgwpbLMhCZMGQBmDm +FrcHrSllcqcFFMGLBDQlMDTGlT +FVSddRSJRjLwbjJPJw +wzhhrTwwTrSsdHQjjSHnBjQj +gRDCmVgRgMvtMfVMRBBBhWCHQQHGJHZJQZ +NtgVgttVbMNmvsNlpcrLhLTNPw +MCgjsfnscgjjgnGgJHHqHDgdHbGr +QSSmRFPpRtPFQLQRmPzvBzzzDWqrqWWHJGGNrJJbdtVWHJDV +BdSFdLQzRFlSLmQplffwncfscChhcsMj +GfVmfnmJVnNVFhnhGmbmhpHvqjrzHZBjfvrtBHHZrwBt +ddWQldlMdWMlQsLWTLQgMNwBrvjrZjNrwzZjswHqrv +QQdTRcgTRPDlMQlQPQdhcNNnbJmbGpVnGchFmm +CjjZCCZfvWZRHHhRtwhvPN +mrnqlqMqBlSSLnBTLBwmHPPWhPPHtFRPWzwt +rBVTrrMMSMLQBrndGcddWQbbdZfCZJ +LFtdjHjLjLqHqstLTjFLFqNMnMhhZdDDNMVbWdDDbhnZ +CrBpBGnzrzmczcllrphCZZWJMDWRbbZNMDMR +GwgvzpzvrcmBrnfHjTgqTsgHjF +rMPPZcplCZlZPwtSwhtBwCQQzB +FvDGffLqqmQFwmmhzt +TjJjJfHHVDVnHVgZZlQppcVscP +hVcqHwhgwwwjHjjGWbvrbBGrsWVWGn +CttPRpMmPDTWbWltlLBnGl +pZmDFMmPMfnZwqqwfcqJdHgz +bSJWhWJCbGGWJPStWTgRQwzDjgQQjsDW +nFBBVQVrVBrNFMFZVpBBZFZrDgdTldgsRsslsljsRzTRjzns +rMcZcHcBQPvbbHGP +mSfmwqfmzrfHwFfmrwvPHqPmMFRlMDDZBCVVRCVZVlZpMRRR +TWjdTWhTsssLTGsJNWhTQddjRMDMtNNBSCDBllMMBVtDMVRZ +QhWTQcdhjThsdGbTLGjWHmffnmHwnwHrwqmmfcwS +LmrsMQnnpfmMLllvTvqvFFzvFHNN +WGRFVWdwZWZvCbJzcvJNzw +VjGhDtWGSFRGjVVSFdjjDPBfspPnnMBLPLrrpMMm +qqqCCJjtqtqCtqLZspHWBdSrWWSzzbzHFWBldb +GhwwcwPFVDcNFRRGwwzmlBrBWvllrvSzlrcd +DGGhQNNDhTpZZqqLQFQQ +QfZmgQQZCCMLfNrgprdNvvdrTg +hhttsBmBDcFRBlJshJcRrnjnTvNqpddNNqvndp +JtsGJGtGGJJJHDbctllhZHmMwMQSPVPzHSLMPZmV +DScSjZcNBZqjDDcLLfFtPfCfjfPvfv +pTmRlWhdMwTLGwCf +mRdWCVVglWrCmVHVrVCmdrbSzNcBDBqBZDNHqssscNzqNc +sPMHGFMsrPNCPnNS +ffJzllbzpZBllttBtfglgBTbSCVCmmrNFmmbFNvCFLLb +cpZqpfgZZJtJqJJJfWHWhHdHWHjcdRdFHD +ZZPfppvzMrlNBFcvFB +shJgstJwWLVJwcrFFVFrBVNNqFFB +HwWJdLHWWLcQgssHwwSQSQtQzCnZZMpZCmdzZCzpPzpCPRCj +QCpLRbsCCQQLbQzCBQDQBBfTTffWtTctJVRNVtnfwtWV +GvlqqlGlmMrdsvrhmlcTvwJtwNwTvfJfcWTW +lMhgqGhddjqFFCzBBpbsSQpD +JJwGJwVQQwVSsSMhQMQgHfgfTtrrfVTNgNNfrt +dFDWCDdFppvDFmWWWnJTPllHmHlgrqrgggtH +DzFbWjdRpbdFCjjRbnFbQBGhhQBBJZwMhScwZwJz +HttvHpHmpJWtHmFNvlvdMSVdPMtLVCCMMMfcfL +GjgzhGSGSSdCcRMVjMdc +QshbnghgnGDnqsFrNSJFrsNs +wJpjMwzjzdVbzPPVpbCHnqGnBqnsBrNCwgrC +ftTLLDTQtLTGTGtFrgHrvqgQnrvQsCHH +fTcFFfLSfFFcGFllcFhPJPjWWJSjSWzMWPdS +ZjNdmjVQVZmvNNZNNZHWZmWtsJnwTpJJswpWwGqJhJqGpp +FcRRcDblDMLRcRMLFFMDGsJnqhwpqTTJGwnsfnlp +LRBrcLbbgLFgBbFqDvdHQvCCjNzzzVrZdV +BdbLWrgdvgWvVJgWnDfNhVnqhCCpDpcq +tSQPSTSGPMmlMPtQQPJGtGQRCcnqqfnRhCcChDqnCfRScf +jTssPsjMQMmszPjlTtsJdFBFrJzrbJdHZFHdWH +vCccctvvTTtZcgLGcZTbssbMWnpMpmLWqnNjpfPPfPjMPp +wwBBlRBBwDDVFRhFlRhdRRVWPnnpMpffmmffrpWqVNPm +ddhddRzHlQHFJcGsCztTgbNzST +fJctfpVWcnfRLfrRwP +vmmnvDQDZTNTmGGTqTMTvMqwBdLjBvRzBRrRBRLjjBPzBB +GMnmqSTFFQqttcbcJWgsSt +rHNfmfRsmfRGfDNcRmcmMQlLCGSnQwwPPCSnzQlSCl +bsJTBsVhFsVpqFWFgPCwnQwBZzwQzZLlzn +qggTTqvqgqbbTTFqVqgWqvNmmMMRdffftNfMDMmscR +rFWQFszrwjsjFWvshPTCmLZLSTLwSLlgSP +BQbcqVHNVqVpVpmClJgJJHSmZLJm +qBNNNVdDMGBpDcDWsvdQsFrFnjttfj +qGhmttmzhtMvhbrLdSHbdSHRzb +WCBgQJJpjCQlgdHZrfPRPSRbNg +jBTTDjlnjnJDJTQCVntcwtwMSvqcGFDhcvsh +ZTrnTqMWWWnfrddMGJPgPLlPbw +VvmGRVpBpNNmvNvjVjtpNpCNLLLJHHBdgLPdwsdsbLlwwlwb +GmCVSCRVGmpCRVvttmpDrQZfhnzhzqnDWnrZZTQq +DQBZHHtWHzSvZvDQWchgqsqqhrrhhcqrcZ +jdMfwlFfFlTfndwpjjwGnNrqhPTmPSPTPPhmgrPSrh +jlGbwGMdlnJpGFGjpnFCSJzzDDtWHCBBQBvtVC +RrbBWBRRWSRsBBVvsPHZDwSjjPdnHwtPtH +fTgfzMmNJpmJgfllgpjVQtDDndVQpdnHVtPp +gGmlNclTGmGFhLVcVrvLqrvc +QcpCTVCZVcCwLcCVvHvvVsCcNzNNSbPRzsDRDSBlsNNzDRtb +fggMfJqgrWFpmjWMggmrfMWNSbRSPBDbNtJRtPJzlStBbN +gdnmpWGnZvdQCvdv +tqqcLqqDDqNtDrqHrrPWlTlTWZTMzTFzQlMPSZ +pfnpmmppmppRGjwbjmnjwspWbQQQTMWZbCTSZCSQlCllZF +gmpVnGmmmpjDvVLBFqqvrH +LqBvJHZvbHGBHrBtGGQTmSVprVzhpVPDPQzQ +CRdRgwCfhTVDzSdQ +fRCcjgSMjfNgMMLGbGZtvBbGHv +HgvtDDzDpvwgvvqdHPZWdMssTTddSs +rJFrGNFVQmNFVmRnWhhsrTbhwhZTrdTd +VQGBBBVNQClpcBvBwD +PWlSzZGmdmGmlGmhggBpvMjvMjFgPJ +TtLRDtQQfTVcQQQRtBsJFFccFjWhJJFMBs +HqVCNtWHCDwdnlGwGqSr +RwdRJgCJRGGmdMbcGbdnTnTtttLLnptMtMtMqZ +DWsWPFrPqVPPLVCB +zQWWsslsQHFhDSszDSFQzJJJmvcgblRgmNvCJmvNgw +tpmFrWTtRpRTtggsSlnQpsnnlSHPsn +bZwZjNNZGLSrVsGndPPV +NvrcjCfbvvLBDBWfWFgRRm +WWFMgWmMhhwDcMMMDcmLWLtQwwsjbsQHvZHbRjZfsZzH +PTCplTCdSJJCpvPGNSvsbsfHtbQZzdHjQtjjsj +vNGJPpqJvJvqghgFgWFmLD +RlRpLTZCjWRjRWwpRsjHjbSbqMqMvvnbnGMnGGqQCq +gddfDNczmgPthNcDdgPVnbbzbnJrJJGSSVJJQS +BmDmcDmcmhffdBHlRwjRLpwlWQ +prQlfzlWRPzgQWzlMPMRppssHHsDsHjwnHHbWDwwbwjL +vFBJJtZNShJvZFtdSqtmqjTDVHVGDHbwVHDVsDnThH +vcjBZZdZqvCfpzRfcgRp +cggpqgRlSpNsgNggbjjj +ZZSSJVLVLFDZWNGjCWWbCjsF +vZLvfZQQfQtJVJDQShLrLfMmnldmwqwTqqMcMTMTndrm +bQBMtBPddtMFbJFhRGzMfzvnRGRSvWnW +TmHTqlVHwVpQqjmwGvSgSpnLpzfWGWSn +TTrDQCDrrTmDCCCVHHQZBdZFPdsNdFBtFDhtFB +fjpQvNZcGhGGTtQS +DVJzvbVmHbbtSTSTRStzTM +VDvmqllmJfjWlnplNs +ZmdHZJjvQLdRjpmLJrqqZBhhtCschPfBPcrDfPffCD +MWWSMMwnwlSgzWFFgSwzVwzqcfDCfChCbbtssbfDChcD +NMqFTwGqMwgwwgjHRdHRjdmQmQTm +TTqWPCWRhTWqPNjPJMNtrlbJFttQwwrBrlbwlc +GfpSDGZvpQffSHDgggDZrHctFmrHncnnwwbBtBrt +SQGfLsSLZsqMTRNMPT +HdBdnBZJTZBBmsfwwBlh +MjCVjzwqWrfzplzW +vVbqCjjRgjwMbnbGHJScScZHLL +dwwwtCdznvDDFrMrrw +GmWLQmgQmHgcdGcsTgTDqDbSfFWfMDMfbSNqvr +QhTLmVQHLmdLTjGGVptRnZpZBZVRpPpP +CzjFpzRHdtBFBCqNqSbJZWcQJTSbQjMTWZ +wGwVLlGrdVGwDnwsgfMSZvJMbWJcWlvbbMSc +rDfsgggrGnGngsPwdVLfDnmDtzzFNCPHtzCtFHpBRqhPztzR +mrgWzBcDtVCcQcCCdscf +LRJhjRjPZvqSRGhGjLgMCdHpMNwQCpMHpHMS +GRvGJRJjqPZbvGGhRjnqLJWtgFgtzTzDrFnTWrlTlllW +cbmcddlffvbTfvFflpZzsMVNznNVlnqnzqHMNM +StWJBQRWLRWNPNMCswRVHC +BJQBhSWhjSthJQGGWWggJDDDfbdbbfHbddbrFrddvFvv +jFqvqvWZWDtBJrrlrq +TzGcbHcrmVzMGNSmTcGDtBthJCNtsJDlBCghgP +bTrnTccnLSrrTHbnwfLjfdvRRwZFdwfR +drHVrdVDfsDbVsdVDbVqRwbZZwCRCCCJlJThwRgT +jFPcFpBSvtNPzSFcjcQpcQjpThZCRltGRRRJhwCwGhwgwhRm +SQSzPBjjPPSvLqqssdnqLZLMsM +bQTWlWlvQclNwwWlCCLStCRSSjStpj +zVZZDdBnBmgzVsjsLthSpshdCL +DfBnrmBmgzHBfDHmnGrNFCwQvTPvqCTwqTFGbF +srSWJnrbmlWlbhzsWszSvPGwvgDhcjdjjfvhjvGv +BRRQFLtNfQNMpqpQHDjdDjDcZZcvwZZHPH +NLCNCtRQfRttRFRCTqMBqQQrzrbzrlJmVVbsSWmVrTbSzJ +RHLfLcSRTFSghLRHGbwZmMZddgJswZsbMm +ptqjtCzzQztqCjDlBGpDpbMZdwmMbZsdwNmdJpbs +tttzCVllDCtDQnQBVHGHWvWTLWcLSLHf +FVlNnPqbGTHftghggJqf +zLcZWZpWWrcrZLLZDWrwMcrhBFBttChBmBgptChhtFftmf +LZZLrDrrDDMrcwrDwsWFzdTlnGQPQQVbdbnsvnvsVQ +BbPNMJNbQvDbvPLwHflczlwwzf +pZjWZGZjFGdgpnVgZhghdmcflrlswzzcstlrLwhtwc +WZSdqFjqSqSWdGFjZpdMTTDNTvLCRRLLqRQMCN +FqgFGtbgTvRwrLqhvw +JCCWJWCdJMQNNsSWsMPQRDDLDSDLwTrrvnwfDvnD +HdPJlBBHCCQdBMWdTtVbgHczGVGjmtzG +PLlZDLZDsFCvbDQv +HVcTmVmJqVzqczfzbjvvCFMRfCsWjMvR +cqHzTqJTTTTzzmnmrctrBlLlvSlgLdZvSwSlpw +SbMMNJjmgMnJdSSbjVFZVSQrlQfWVQVWZh +PtqDqPGcLHzHpqLcRzRsfQFfZlfRfZfRFVsl +cTDLcqGCzDTqzzDLDzqPTtJvbBJMnmvjbdlmJNvmdgNC +tDJDlZVqJGbvHNQbNFFsFPmLns +ppczpzpffGwfBNLGmn +WShzgTTpWzhWztJJGJSvtvvtjq +TbZFTFScnCZFQRTCqQdBjdJqjBqjjQDB +rmmLpLLfzrlmslMBHvdRddNDDJDrqD +MWwLPzmWfpsMmmlMPMWLwRTZTZnnTcVCcZFCwSnZ +SqmClqHssNWCqPTcWcGhBTchVV +ZnnnDflRpBVTTVhPBZ +DpgfvnvMfCsqlMtSll +ZzLMRZpLMwwppZqnQGvQgBSvlNVlBFFNFVrg +HcqhTmhmdDTPFTJgTTFBSgJN +mccPdDDHbssbtwZMqpbzCRGM +TgqnTltgWqLRSRnlqddngFfrvHvrBTfCCFrFVTvVCf +cwNJmPzQwNzczzNsJGhhHfhrfvVHGvtvVVfC +jjtbtDswcmPWlbgRnRdMZL +TmpTBBwvspTptRmsmTGLQDGRHGgVGLSQSMHQ +ZlPWqjWrzjPqdrlzbrbrwfrWLHVMLnHDMVDQnLQfQfVngQLS +zNwbrrFWbFJpmpmvvt +RMQQMwHMMzcFsWsDrWfcpJpS +LLhZmGVLhVlTZfWWfWpCrDsGSp +VLVTnqjjZngtQRFjvzDM +gmRBpjrpRvCfRCrBgvjHShnbnngbgSJnNsHMHS +ZDPTwGWtqwHhSnbcMNJw +DWGGqtVVqldWZzMzWmvjrjprLRFjRVvvff +tCzVzsVtDFzssnSsgdqJdCNqJhmgmpqq +PZccPGvQfRLMQwNdhpwhNh +jLrcbRjPZBrcPdjRHFlWnVtBFslSWznW +vvvbJbWrLvFWHzZzZRhB +chtwTmCNlRRZzRPT +hmcCssCswrMDGMSrsr +LStGBsQLlllhzMzs +dzVZDNWRDdZNDTZTPvWVhhphpMlfMccRmfnlMlRn +VFvgTrNPdFWNNFNFTzTFFSjSQBCqrtQwSBGLLBGwGL +qGJSJhWStdSfWvSvtGRRnzRDDggrgvnzsmRP +lTTLpcljjGlLlLNBpjwFQDQmRnrRDPrPscRrDDng +NCNjFlHNCTVjpwGqGSVbJddqZZJM +MbWdgvHFlMvmzTzShvmm +tqjqpLsNsrrsjstNLpQrGVhVBzrhVcfmchDcTPVVmc +RqwjqjqsGjjGGQNjGpQZpqRFJgmMHwdbFWgnHMFdwmmCFW +HHHLcCcVHjTHglsB +wDSRwzzRpMSdNSPSwSpRbqvgBsdqlgTvBFBjgFvvgB +RpbzPssDMWwNRbRNRPDsDhJthLQVGLJcctQCJQfQJCLm +WsZgbNgZVCCWbVVVmgZbCCRPccGnzPBqJjzWJBJPzvBvGz +SpfThHtrHFBPPzJvPntj +QHDhhrhpTQpHhQHnfwnTCNlbZCCDLNllZlVsNCNl +QtzJFRQLMRnZcZsfcphlPQ +qSBbjmWSCNmVldSqqSqmjCSZshfwfrPPZZfcPVZfhgsgPg +HqBbHqBGSlNBbltnLLHFJMtRvRTD +tcGtDdMcttttHNBlMctldlwjwwqqCLCwDwZjFCZhmnwC +VrJgvWWsPvRgVgrJQvfQfzgVzZwCbLZmnmwCwZqmnhjZbnLj +sJpffsRWWRJVWWpHltSpnMHGcMTl +zNqRbqSbfdcTLLfS +ZVPzPnVvdLwLDPfF +VWnzQCVWZVMzQRHgqgqrHGtGMp +PbHpWfWPvRfbzWPFfRpPDtBwSHMwCBgDwBjDtMMM +hTTdZQlcnTcmqVTdcddrDgBSwsjjBgqBtsCgMD +hlldTmdJJmJdZvzfFfNJFJgRzR +PJWvJBbWsfLQWsLvmCqHCcNLHqHLLcwDqV +dQztrZrdwHhptqDH +ZrMGjgMSrdzQGQRJPvGGbm +RmjljZChlDZBCRRvlmNSLSqMNLzwLvppwQSQ +sTnVnPrVGsGTPddJrfgQgqLgGpMNQtgNtNzg +sbbTfTdcJPnHbsJfHsdcmDDmmqBZlClmjBRDCZ +CJmHLmHFFCFbHsbJsJqvqhQqLDhQZvnQDZnn +wGwppTjdWPdgFpGcScBqNnNqNhQlDqnDlZZW +pGcgGgTpGjFdwpSFVgSdpPjrMCMffzJzRzztRfHCRsVmtbsz +CgBClZfCflPflNZRvfQswwmwmwQsQhgppdhm +qbzDGrjLLNLDHDqtJmmhhmQdhwpQhhbp +NLGqVqjDjjGrMFrvFWPBRBZnCvfFnT +tbrrHsgsVmmmbtgwVsQRqjJMmqMjQfJfLFLD +ZvlBGzdvjGfRFJQJ +dBppnnBBhdzZncBPlznpnNdWHSsbWthbSCgHrVfgSSwVgr +VRvMtRVFHQLvMRQFQtBctrthshTTgCmhTrgWhWZsZZ +lzJlGBSPPhzjgZsTCr +wJlpJPfDSpwBnddqJDdpPpcvMFHFMvNbvnNMFHHRVVbR +CPShbbdlGCdQqlRPGPdlDWDFzjtFjggCDJgWczfF +mrHrTrrBMBsmNsrwsBpnfpggDDcjjDDpjzFJzzjtJz +BvsNvBLHrrrNvwBTNNsNGbdQhlPGGfqhhRGqLGdl +PSSlPtlStGhPNMtwPMPJzDddnbnDNTDDnJqjbz +FFVHRwVLvFvVrVHrZcLmRHggjDmdDnDnznnznzQjzdmJddbn +WrvgRgcRcRrrcRvgcVrHVrwCCSfsCsGsllhMSSSSMttlSCpG +hBPJqVZTqqPSlGlfddfddZvl +JWWMJCpnMrmztzdjnzld +RbWsrwMrpbRspbWgpwhLJPccNVqLLPSVgVPV +hcTrWqcfhwGfWrWMjHjGvDHPmJMDzF +ZtlsnZZtLBSbSssnbndjDJJFHFHJPHPsHMTHHM +ntRZtSbtZgZStTqchwQfRwNpcq +GfLqrsqQGgPgjjQGVcNvTpTpNFcWPvPPpT +bRnRLnMZFdCMcpvT +RnRhzRlmlhhHhhmhRsqLrfzrGVSrGBSGrL +fbMffwdZsncrGcfG +qDBjSSLqhLBSmDbjqNhqTLjCGrCHGrvcGWcpWcrGWnCrpm +STLDqbhTLqNTNSRhlwZlJlRQFFRwMdPQ +TVVGNFggcjPPJzwvQlRRwRvSlcSc +frsBbWhtSRzSLfRf +qDCqddbsWrqzhsdNmdJNJHjTggFFVV +NTWTDrSdFTLtPTGf +lZqjHlVRvRltLtRWFMtFLL +qvjWzzvVbZpjqllggscdchwDrCphwsdhrD diff --git a/2022/src/days/day_3.gleam b/2022/src/days/day_3.gleam new file mode 100644 index 0000000..33545e8 --- /dev/null +++ b/2022/src/days/day_3.gleam @@ -0,0 +1,100 @@ +import gleam/int +import gleam/set +import gleam/list.{map} +import gleam/string + +type Rucksack = + #(List(String), List(String)) + +pub fn pt_1(input: String) -> Int { + string.split(input, on: "\n") + |> list.map(string.to_graphemes) + |> list.map(split_in_half) + |> list.map(common_item) + |> list.map(priority) + |> int.sum +} + +pub fn pt_2(input: String) -> Int { + todo +} + +fn split_in_half(l: List(String)) -> Rucksack { + list.split(l, at: list.length(l) / 2) +} + +fn common_item(rucksack: Rucksack) -> String { + let one = set.from_list(rucksack.0) + let two = set.from_list(rucksack.1) + let inter = set.intersection(one, two) + assert 1 = set.size(inter) + assert Ok(common) = + inter + |> set.to_list + |> list.first + common +} + +// Lowercase item types a through z have priorities 1 through 26. +// Uppercase item types A through Z have priorities 27 through 52. +// I can't find a way to get a codepoint or match on a range with Gleam so this +// will have to do. +fn priority(item: String) -> Int { + // case <> { + // <> -> a + // } + case item { + "a" -> 1 + "b" -> 2 + "c" -> 3 + "d" -> 4 + "e" -> 5 + "f" -> 6 + "g" -> 7 + "h" -> 8 + "i" -> 9 + "j" -> 10 + "k" -> 11 + "l" -> 12 + "m" -> 13 + "n" -> 14 + "o" -> 15 + "p" -> 16 + "q" -> 17 + "r" -> 18 + "s" -> 19 + "t" -> 20 + "u" -> 21 + "v" -> 22 + "w" -> 23 + "x" -> 24 + "y" -> 25 + "z" -> 26 + "A" -> 27 + "B" -> 28 + "C" -> 29 + "D" -> 30 + "E" -> 31 + "F" -> 32 + "G" -> 33 + "H" -> 34 + "I" -> 35 + "J" -> 36 + "K" -> 37 + "L" -> 38 + "M" -> 39 + "N" -> 40 + "O" -> 41 + "P" -> 42 + "Q" -> 43 + "R" -> 44 + "S" -> 45 + "T" -> 46 + "U" -> 47 + "V" -> 48 + "W" -> 49 + "X" -> 50 + "Y" -> 51 + "Z" -> 52 + } +}