advent-of-code

Perserverance, or the lack thereof

git clone git://git.shimmy1996.com/advent-of-code.git
commit b9b487d3853dbbe986582904dc70052643adf208
parent cc16497716463dfe0109a978633d8c701638461f
Author: Shimmy Xu <shimmy.xu@shimmy1996.com>
Date:   Sat,  3 Dec 2022 08:17:39 -0500

Add 2022 day 03

Diffstat:
A2022/day03/input.txt | 300+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A2022/day03/main.rs | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 355 insertions(+), 0 deletions(-)
diff --git a/2022/day03/input.txt b/2022/day03/input.txt
@@ -0,0 +1,300 @@
+shzsFcPssFhjFssBzdpRcNHNZrpdJdJVJZ
+fwvMCntfCCbSbSbtDgDNrDtDtJHZVH
+GbCwwbwwnGrLhBzjFFFsWPhL
+PpCqRsqqmmtCwMJC
+LHFrLLHDSNHlfWNhDzmjzzJlJzPJMvPJjQ
+SGSWDNrhZhPDSWDZLgVVRgbRppgpGVnpnn
+GRRjbVjmJZlgMRzzrN
+FpDptHpfHfnpPTvDFTWpFPnPcMfNCClNrzcVcrMMzVsCZlsZ
+TFTQDnvLHPFDtVbLwbjdGjdwwJ
+lhljvvhCjjzhjszzBPmnmGVZMGzG
+FbTcTwbtSFdtcMPnTBPQVnnBZT
+SFMpHDtNDSSbSdwppvgJWjJCJJgWgvlJHH
+wzNCWpzCzJnWWpRRNdJrgHLhjfbLrHrchV
+lBMStmPmmLQDPQZlshrdhgrfrcrrddgHgs
+mvGDGQSvDPBlGMLGCvCWpNvpzRWFwqRw
+stBttBThtDZqPWssPWZp
+gRggwwggCGFSBBvPRpHZZrHdZLZq
+ccFJGCNJmmGQzbTDhnQhBBnB
+HJqMqtZbJMmJTqtLtVMqhpfphNdQfhfzzjhhlHll
+rWSBrnwFwWCvwWCwBgPgCgzjQccQhhgRzcdQzjfcNfzR
+CWBCwCvCvvwssWLMtJJGMdMZJsGV
+nFwSFQwsNrrsssSwCrhrCNnfcCRgJRMJTJcMfRzMCMCRvW
+DdbGdLZLttllWWvTzgzzgR
+ZqGzPdLtDjBjDZGPZVmnhQFwqrFQhVFnss
+sNNpCjttjsJjSpgpWjslCTnqqSVffrnhSfDhmhrhfm
+dBwcGzbPBHbbwZcwJbcTTFDFFFDVrdVmFdnDqf
+HzGcczQPHGwzPzGHRctWlvRgtvJlvNlJvRNj
+cFNCFdvcCHvFBCZcwBfRSpttGhDmCghGShmSRt
+QjLnTTzQVzTTnLMqhDgPhGDDSjGPrgSh
+TTJGnJJlLQdNWZWJNBJZ
+WHBpHcMDZHLDbHLtGCnmRmLNGmRqvsCC
+PzTFzPPTJzrSbGsvnmqfsqfqRz
+dJSQQdVFQgjTrjQPWcWHbBVcZVccZtWp
+JDtnRtJzNzTTNlHc
+rQPJFrLPGMMwrGPFwjFMVLjSTWHdWBTdSWdWZlcWTHlZ
+MGFrCvLLwrwPFVVhvLMGGtnqfsmRJgDnqbRgfbqmfC
+jnTtFjcSSvctJjznzvFmpqqPMqQDRVpRqPzqQzVQ
+bhHBfrWpfHsfGNllRrRCPqDCqPqq
+gsGZZpbWgbwHWGNgfZNjvLSTTjtnTgjSSSSJmL
+RLQNdVNnRQdQHVVLGpspNqvtsqptqpTtsp
+MlRWwbRBBFMFjCTFTTFDvj
+WmlWBmBwwmrndnmLRHRQ
+WnftJWlfnWSHGCjWWWSCFqFGBDqBwMcDmmMmGmqD
+pTNhpTrPhhhRPzbhrppLhThLgqDmwccwqPBmMMqnFBcwwmBB
+ZrhQTpzdjSVVtnvZ
+jgtnJtBjtlTdJBZJVQBngQGDCGWpPGCcPWCbWdWMbcpP
+wHstNNttSHPDmHcMCp
+rrFFSvLLNfsFtNSqrtfrhsNjjVTBVgVvnTBvTQvjTgjVZz
+qhZwlqFqFwlJwrDHqHcDvgcNzv
+RCCTQmjCbQTBtRTbjJRDpBrgDHPPpPDvHccDPc
+VmjVWstQJhlJlGVJ
+GggpGwZmgvgJMvbJFQQDbDFbBbFCQDCW
+rtrLzNLtNSPnNqDSQDcQCWlqBQ
+VtzdRPtztLtVRtZmmMTRwCGZpMwp
+vtvqjsCqtshfjcWFHWGjGFJj
+zGrnzDDMpPcTHcSTVTJP
+DbDwMbZRDrZdBBnMznZMGZDfwtlgQhsqCttClsqvsLfCff
+JLzLtLsrzsQdvrWRwMHwcc
+qPmCTzlPjljjFTZmWwcwwvHMMRWwHvMm
+PFqZnVCqTCNjCzNgQsbGBLzLQQ
+CBnppDHllVpPCBshBHpjDTSmZcSrfwvmJcDDTJfw
+dFRLdLFQzNSTBTSNmBJv
+FzFFzRMBFWtQlPlsjjPVMnhC
+CVCfwnfdVvBdBbTNTT
+LNzsHPNWsDjTZqDHqT
+PtLgQsGQLSzWLstPgGWcgQLSNrpplffrnrNhpVCwlGVlrwMn
+jPPVqPsHffzVnHzvSgMcCJGGMSVCll
+pdbpDpBLNmNNppJgcvgSllGjDSGQ
+hrbBwLpjLhhhNZLhNrhZZLHzfsztFzzsrtHfRFnFfRHf
+tdjBdbmSfdHBdHHmZlWjFrnlWQlqvMFvFn
+pDNDJhLhPVPLLLJphJLwNcwnQTcWWTqTrqMWTZvqMrlvFM
+gpVLhNwpgZJCghCLDNwphgmsBdzHHHmSstmfggzdbR
+TfMpfMBVftLMDBSjWDHgzHbgwLgHHvdzggzs
+QJnZcFFnZRHdHjJvwgdg
+RjjRRnmNmmZNjZqZnQcVffBrWqVTqrtffTSTVV
+fZTdTVcVjrjdBzdTnGtgnnGSHHNFGn
+thMWPtPMslmGnWnNnS
+thvbMvQMRphhLCjrzBjZVdcQfC
+MpmgZFgMGdrFrBCVnJ
+JsbJlTTlvLQbVffRRvBBRVjd
+LWlbhHlJhLTJmmGcMMHNmNgN
+bhvmhPrbhqNqQRRGzQjVvvRL
+wTwBZDBTwwggfnngcDfdsVVFQCdzCzDVRsFdQs
+pngWMcgzMgpZWncnMpWNrbNHrNbmHhltWlbl
+nPndBjLPscWSccBVGnScsSzMdhMppMthdMgpMgrzvhhp
+CCFTFDwqZqCCJmhvpDzztVzDNztp
+qQFJTbRVbmCfwTwfmnnssWBGnLnWlRLSGn
+JRlJDSvLRRCdvmDSvdlbZNVBSWZGNgWsZGNgZBVs
+QrjPMqMnLzzjLjFnNNgBpsgtgGGGVZ
+hrjrFqjqFrQfMHPhQzDvvCLJdwwwmvbJbwDH
+HDGrDDDpNsGQNdZQ
+jpjgtgjSjpjllfZZtZsvNdtshqqq
+cbgMfjclWTJcMwjWJfpfmVPLPBnVBHnmVbnmLBbD
+rPrMZNsNrsvrwqvFFFdgQWNzLJJzRW
+pStppStHmcmHpgVSllVcbVbWWDdLFhdbzdRRFhJFLLRF
+cltCHmCBmtSlgjpllgGvTwPZPMfZvPsCMCwZvC
+FRQQMdlFMDWRFQRQMQQDWdFbSSSVJSBbJSlBVVBnPJnzJL
+rsftPfhsrgwznSzzHSLgJG
+fhNsjrjhvsTTvdjcCRMRMRPcCW
+tRtJttHFrjtDQHHBQMMBgMBSghhZQb
+vqWPLpLvqrmPdmqwvqfmPhNBBBlSnbwbgnlnlhNSZZ
+pGpdfzLLspddmqsqPvfvvPpGTVcJJCDRjHrccRtDjcRDFD
+GJMHCdTMWJRhSTlhhSPllt
+fVvqpfBFrqvqNzzgVDFrpDPmSVtQSlSmhjwltlRtmVhn
+pzpBNDBzfDrsNsDRJJRdCssMLdLZWZ
+hFfvWWvdpCwwcwFhphpcZCMmllHLfmbQlbrQLBJmGgQrQm
+nVSNGjGzzSVNTsjzSJrbSrHBSHlrrmQHJB
+PttTNsTRVnNjNqRnzRzRWCCCcpMCWGPMwwFZvFwW
+DvZbFnDDsqDBwwRQgNBm
+HhWpWWRMWChlChdHLlGlGtQtggSNPSSpgPmNgPJQtw
+CMlWGMhhCVHlLCdHTHdrGHdbzjVqnzcvqqjRjFbbzbFFqR
+ZZgCNqqBmjZsNgZCqJgNBdrLFHbBrWlPdHWFbPnHPW
+TVwTDfzDwSDzmcSTcrzdbllnHPHdFlLzbF
+tvDQwVtVvDVmtRsNMgRpJg
+BBpDCpNJnmnpnDDmDGGmtTzqHcGTvTTjTbGjHLVcLb
+swNNhPwwHzTVwwHw
+rPRlPRhSQmmBDpnNfl
+pbRhffPzcPDmfcNTpVBLpBjMGBGjZLLg
+ssrCsqrszgJjZMqZLQ
+SzCwnsllCrssvdrvwzPmDmPPbFRbSThPTPDD
+QWLfcfczQQpcDTpLPfdZRRvRRVqbFWvZbvtqvv
+NsGGJBhCmNdZVqsbdssZ
+rMwwwBBJMrdzPfQMpzMnLQ
+rdtCQhrCtQQprtTWQCHFjPgGBPdFPgvBqRRPqB
+lsVsSnVSbLmmgBcgTLTFGgvq
+wTTDTszsbzMDppJrJhDQ
+ZlmsGLBVCBBZFCFFHqcHVvQhqVQSSHpH
+dbbTRMrRwwzDfrTbFtMvcptvHFQQpqtc
+gdJTDWgfwDwTwmgmNPnNsgFBlZ
+PWhWhGFzzzrLdHCPccbJQJcHPD
+NRpVTpTgRWVlHJNHMcHQMb
+pSRSpVSZWRSTZjgTRTWnFLdZLrrndhdzZvtvzn
+LgctLgVBVLhlPjqRhBLVcVlhbDDcGnNGfwCrbNDnrGbGCJNw
+HmppHMWWmQmMqZZHWQrDDfDCffJrDGJrCb
+qpWZsZZZMZWTLPhTRgTtThRP
+hfhQfFQWzBfhfTQdmzdLDtDjtvHLjt
+qsgpcqMNRmgpqsCwpCmZDvjwvdddHZHvZDtrrd
+SgmNmqScbTSJbhJQ
+dvMTQvTnZJsrQdbbSvMVZMblDwlflfDGgwwHcfGjPfjjrG
+FqBLpBpFpFzRzqNFmgjGlDRHcwPPGwgcgs
+tLNtWshsLLqWMJhTQVVbhvJd
+bgZLMZgzbbLCcPCbMZbcNMgBqSTqSWVtSzvvTTBTqBvRBW
+FhQpJQnGrlhGlrnTqRtTRJqSwDwtVR
+FqlnnFnqFHnGHHdNZdbZbCNMdPLMPb
+HHFnbftcfnfbbTbTnHTNVZZzJlPQlFrFzVJFZsdr
+mvpGCBgwqCvLCqvMQWWzsQQWlPzwzsrV
+hpGSGgqSvqbHcnhfVfct
+lGVrnHsGcnVHzscrlGjHcrHqqWPlJCPJClTLLqCSPLPdqS
+fRbwbtMQZtMMRFMSqfJTTWCTJPJCmd
+ggdvtvdbVVGnpDGg
+BnBjTcbnvhjjlMnNJJfnDnQDGdNDfP
+qwFqVSWwqLpWFmFVCSqFpDDCJNJRQTRfRDGPfdfDQN
+zwHwWVVWWFSqqwWTLqzzztHMvBhlcghblMlcttMllh
+PFFNPNPmlFllbctNLmcjBstrsVrQHJSSHHSnnB
+fddfDhdwGhTWWTDMwMggssjsjndsBsjsnSrVqSVV
+MCvvTWvRMwCvGPpzCcmbplpCVC
+thTqlPPTNbGNhGdqRRhRrNtFWnDnvvFZDpnFvfQDZtvWvv
+HcMzVcVVcHrgHzcMcmmgfQvFQnMjnWDjfnvjQFfQ
+VSmHJLHBJrTrJTlT
+NjnsHjLLjNRddNdBFBSR
+ftsbqfDcDqsrDtqsfSVBhJVFJgdBRVFS
+wvDqwtDlsDDczjzjHvLzLQQM
+qDwstwDtRfpJfVhBVZBMvnlRvv
+zSFzQHFWdgZBVTZhTzrp
+NHdggjGjWHQFPWHNPPbpJfPDtCwCtqDqJfbt
+pvnbqHvnTvlCCpjsBsMGBGWWPp
+RJSJhJCRVJmJwScrhSJdfwFsBGhZBjhGFFFFGgFPGhZW
+cdRrdmwtfcdSmLtcSCQlvQNqQTlqqvtTlv
+rnSlSrgWjVGpTTRhSffpRd
+HtgHPsNNgNHszPcTBphMdhHhBcTc
+JNNbZPZZsszNmtDbPgsmJlwFvWVnCwrlmWlnjnGvCC
+WrVBVgVGGQCrSTTqvVjDqDjv
+FmwRRwwRQhhLFMjFMzdqSSzS
+RcJtbnnLtQWrGHcfrP
+vpzssjmVjVZWNZzzQwtQwccpQhgtQCct
+qDdfLMnMrrTbBLqTqltlTfbGQnghgRwggGgRnhhccCJJcG
+MtdLfSSSddMftlrjjzsSWVSjFvjNvs
+qTRPpRPzJglzGJzpGRHWHljwDtbwffjtbhjfwNfHmwwf
+SZLVdsvrrdFdBcdZvsBdDCNtbmftNwfNbNhCNvtz
+MLzzddLsQRppRlQGPq
+PDDpdJgtpppGgttgdGdgJFzLjVcvVnnCTrVrRPTLvwnTTC
+ZSbHBsSNlZcsfNnnvRrnVjrHwvCC
+NmSmsfsfhmzcDmctJW
+NbrLfrrLqpqWQHtBzbFttJgcgB
+CmwjPPjjjShPvljwvwwjPBFttBtcHzFJcHTRHJRRmT
+CCljjDGhvPCVdVSCdPvrrNfnnQsGqMpqqMqnFW
+bdPdbcDZlddsZbHjrrgrmZmCZhCGjv
+BffLfLVFVMMBRfwMpfzhFGFhGWvWvrhNvvNj
+RMBpRSnffBJjSbJqdPHsDcbqtl
+BgwGwDDZttDDTNND
+WzNNnFRWFtTFlFsh
+WJjPpPqqzWRbrqnNqvVvgvvdcBwgdrVBZG
+FFbMVMFPvJppgvcvrZMjHlCJWHmHHBlqhCmqChCl
+RGQVdVVLnLsQnQnnqWBlBmDRBDWWlhBD
+SftLzQndGfVgFfjvvM
+npvLlFLTWWqdLnJCmBmmpjQjjmjB
+tfgDwzwVVVVtgtrsJtrbjSPQjQmjNBCNBNhPHDHC
+ggVzVtMRgzMrvJLqFnnRnnRT
+gZFZssWgNZTDwHDWzsFwWDQMMpqqpBPMjFtMPSQFqqqM
+vrmvhdnVvQpftStnMN
+JCdLddhhdJdcCdrrmCGhlgNsWDWDwWsgwHgHLZHW
+vSsSGjSPvjvRSGpFprFbqFpppRfp
+ZdmlndtBZbwrwfpWFn
+JmdHdBBHtgllZldBhJZldLLBjPVQTfvGPNzQQSjjzPgTGNTs
+TjTjBjVrTsLRRrMBsMMgzLqGGqgQHQdCQGgpgd
+nbZcmNnPNcbNftvhlhZpgQgCqdSpgCHCqPFzSH
+WfcNvtmmNmQlvNcbsWWjMwMVMRDVMDJM
+hHHnfZSwHDgHcfclSGSnvrnvBCvWWntvzvzbWWVq
+dTJTmspFTsFdRRLvtvLzvvVqtPVtrb
+VFMNFpRJNTppTpsJVRcMGgfGfgZwghgGfcGh
+lLGvwsMJLCMVnTrCrVdHRd
+tbzqtDNNBpNWBtqzfRrFFnrVTTdrQVSVGp
+tztfzmfzzPDzgWNNBbhGMlJLsvhJJjGJhGmM
+rHrVJQVQVJLggDQQLbTvdCCSTdWLLLbCbS
+pNtnwPthmZGRpmPFtqbMSzqffFSdTvbSzW
+GpvvshwtmwsZDljjssHjVBVj
+SmhJdtJhhzQSrzVhtQbtBRNfnFNSnDNGRfFGGMgR
+lHwqPjqwTjLHCWLvPpvNrNMvnNGNfNGNBffGRN
+lCrPTrwpPZWlqPlqpWWqZjsmJzbzVtVhhdsJcQdddZVJ
+QqpCWHdQdVQlWcQCqcfRjnZZZPDnSPqPhhqZ
+tmmzgWGgwJwwStSZZDRnZssR
+GbFbLLvgmMMwGgmLCrppQrWVlWrFTHHd
+qdqCgSVdVSVqfwsdZhpJspZsph
+RjZBbmRlrlmmJwLNNNhLpwhB
+vZlRrtTZCzCMfSPT
+JBjhCNwjrlJlHJJRsscZrTcvLLgTsLPP
+dDztmntCSgbLgqTzgc
+fGVWnSMFtVGMNNNQllBjWHJC
+dSDhVVdVZtnSgHQGThQvFNQQqF
+LcfLRpMpcBpbrJfsbsscBNWRNPRGHvqPdTGPGqPWFH
+spmrCcrdJJpLLmcmLLLDlzSzCCjVwZVtgnSZzn
+ZJtgPTHtZPZQGbtNzzprVWWVrbrpCD
+BRlfcRmBhSMVBqSVfBvNWrDrjWCjjzprCDCl
+LfMRSmfqfSLcnnMqVSfccnhZwJFHZFTGZQGFLggwZTZGPJ
+BChWddRRRcfmDbfhDP
+MgpMFFsvMfGwvLgPjQPzPPmDcztDtw
+NFgJpqvpLgqFnWWVNSfnNSCR
+zMMMRmMfJpfhpzQJLMVtjtjPntgBtlZlVgJP
+SdNbZvZbvbHTNbZbSWTdrTVBglBDlWBjDPDgntPqBDPt
+rrNcrFwNdSrfzwMzZMLQQs
+JPmCSfHTGJdTCbHgpgqLgRhghhffhg
+ZWSSFVSVFQghQvwpphgh
+lsDtZjVMMSdCNdbGCbjb
+PBQPvDvVVRvQDqLDzJTlzwjz
+tGcZTcdgGcncdrFrsTjzJSJqJqqwHSzzSZwq
+CgtgdFgcFCMnMgsGFGGQWPQpQTCBvbNpNVVWVT
+FHVFWMHMgVhnLWWMpnppfcdZNcPplnfn
+RSvSCBSqGgDRjqCpPlPpppTpPjlcNP
+zRzsGgJDqJwLVWVFwM
+ThhWhNthVWTWqbWbFWbTdBtWSdMlHSlGlCGCdsCMClmnSlMn
+DPPpvvfDHfLgDHvzpvPDsssMsmmzsMcClScMMcGG
+rgPLHHJJHgZfvvZQQZfrpfFqBBwFBTNTBNBwtthQwVqt
+JJgSWDSmSDQCFrhbRLSwLS
+VznqzVNsMsZLdqslbRChtbHdHRrwHb
+LVfNLMsLTmWDpBpf
+cbTsnNpcnnchllFQlMRgJhRP
+WddmdMVSBMWSBWjwCJVCPRwPFCQRRC
+DWSSfjdSrTpDnHHMbZ
+fgsVqqwQQtHhCrDfJH
+pvbnBZWBbvWbTdthrJbDmqrmHq
+TvZSNSNNSvFMBpqpnLnTBZBFGQwlQFggcFzcVGRlswsRll
+zfMcQHzPtRNvlllc
+BLnMhbZMLJLNNVtCdNgZgt
+BJGFpqMBhBLLMqnwBhbrbhLssjFzssjfDzsmFmjmQFQPjT
+JPBJPnpBFrqBJHtjlCjHJcCthM
+wQZggQWQGfZFVmmGfDRjlvvNcvlNDhcNttlctt
+SfmWfwVFwVGZWQVGSTdTbBpTPSqBbLnnrn
+RJqBRJbqpqqJGvqHMmcfczfcjvHQfm
+llgVnSWSlsssTnlWjhTcsZMcZcZMZMcccMNmcH
+TnFhhllnWCnVCTllLnhhVSrbDDPrdpjRRqjBPRBBpbFJ
+mRwRRNDjNTqwDNjNnNRTsQLcQWpQWZJLlLpQWs
+PMFGCSzzgbBVzCGShVQZcgWsQLLftttQtlZZ
+SlGVldCGGbBPMhPCVSBrNNdjRqjDrNmDnmrRwN
+mqGGqGHnqGBCMrnGCbbbLgTTFFNNghHNTj
+SdRfcsDPPcDdRzWPWltSlscwTSbShhgpQhgbFLbTQFjwhN
+DPWWZzzztsDDtfzlscsPdcWZnVMNVqqGJnBrVqCrMrVvZnBJ
+ZgglFCrrrlrWCJswHmwRVmFSwSsP
+zhzqBLcjjnpzMzjhTtcqnVGbwssVRmqbHNPbwPsVNH
+ftBjzLtptRWdvZlQQZQf
+nGpsMncVRMGSnfsBllZdppwrTljZrQ
+gcgHmtbCthHWhwBFBWZBlWlWrd
+bCDDqHhcqbbtqcqtvJMzsGRsvVfPsfnzJV
+TclPvSGZsPZRjhjWDgjp
+JtnwHFtJqtwfQfgWgRWhdhjtgdRM
+JBwnHwgFFqVJrsGmPvNTPsVvSN
+ZJnfZNnDNZJLzNntDtDNNzNWTVBPrrvRRGdBcVRfPPcvfdMr
+CFgjFmggQSQQmSggVMMvRdTvBVRjrdrc
+mbsqQFqFgwwmgmSbwQWWLDWzpLcLnzZzLbLL
+PnwSFSLSTwbbHdtstW
+RrDZVVfJNZCmDCfVDVlblZHbddtHScbWbMjt
+NmzqhzCCqmzffhCCqrhhLLnPvpnTPPgpGTTBSL
+ShhfLSDDFMPQddpMrDgNbjzffqqqzgcjbqZR
+sCstmwJwVBtmTltVmTVbRbcbcRvqvrZvBRvZbR
+VwCnwnVrrrWShWPHHDdQFL
+pbpDpWjZMmFCmmmb
+jTjtJLJgJncCFmnJFC
+LvhvhTQhBSdRNtLNsSszlGrHSGjZDlGf
+JrhvTNJJhhCrtVtcrNLwDBSBwqzDwQVbBLQS
+RnCgHmHHGMdPsGMfDlDqlSQbQnQQDbzD
+RdPMPsmWHmjfMffPcCWrptcprpFTFrFp
diff --git a/2022/day03/main.rs b/2022/day03/main.rs
@@ -0,0 +1,55 @@
+use std::collections::HashSet;
+
+fn get_priority(c: char) -> i32 {
+    match c {
+        'a'..='z' => c as i32 - 'a' as i32 + 1,
+        'A'..='Z' => c as i32 - 'A' as i32 + 27,
+        _ => unreachable!(),
+    }
+}
+
+fn main() {
+    let input = std::fs::read_to_string("input.txt")
+        .unwrap()
+        .trim()
+        .split("\n")
+        .map(|x| x.chars().collect())
+        .collect::<Vec<Vec<char>>>();
+    // 8185
+    println!("Part 1: {}", part_1(&input));
+    // 2817
+    println!("Part 2: {}", part_2(&input));
+}
+
+fn part_1(input: &Vec<Vec<char>>) -> i32 {
+    input
+        .iter()
+        .map(|cv| {
+            let first = cv[0..(cv.len() / 2)]
+                .iter()
+                .map(|&x| x)
+                .collect::<HashSet<char>>();
+            get_priority(
+                *cv[(cv.len() / 2)..cv.len()]
+                    .iter()
+                    .find(|c| first.contains(c))
+                    .unwrap(),
+            )
+        })
+        .sum()
+}
+
+fn part_2(input: &Vec<Vec<char>>) -> i32 {
+    input
+        .chunks(3)
+        .map(|cvv| {
+            let first = cvv[0].iter().map(|&x| x).collect::<HashSet<char>>();
+            let second = cvv[1]
+                .iter()
+                .filter(|c| first.contains(c))
+                .map(|&x| x)
+                .collect::<HashSet<char>>();
+            get_priority(*cvv[2].iter().find(|c| second.contains(c)).unwrap())
+        })
+        .sum()
+}