summaryrefslogtreecommitdiff
path: root/aoc22/day3
diff options
context:
space:
mode:
authorMathias Magnusson <mathias@magnusson.space>2024-07-06 14:10:15 +0200
committerMathias Magnusson <mathias@magnusson.space>2024-07-06 14:12:06 +0200
commit8ab3bcb7992ecd4d0234ff31ab2e50d1562f67ba (patch)
treef13ddef97559d6d14004357f77ea153a732f217e /aoc22/day3
parent4e8ac826929117f95baeb37e1518773d1169d900 (diff)
downloadprogramming-problem-solving-8ab3bcb7992ecd4d0234ff31ab2e50d1562f67ba.tar.gz
Some old uncommited aoc22
Diffstat (limited to 'aoc22/day3')
-rw-r--r--aoc22/day3/Cargo.toml8
-rw-r--r--aoc22/day3/input300
-rw-r--r--aoc22/day3/src/main.rs59
3 files changed, 367 insertions, 0 deletions
diff --git a/aoc22/day3/Cargo.toml b/aoc22/day3/Cargo.toml
new file mode 100644
index 0000000..898e70d
--- /dev/null
+++ b/aoc22/day3/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "day3"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/aoc22/day3/input b/aoc22/day3/input
new file mode 100644
index 0000000..51d8036
--- /dev/null
+++ b/aoc22/day3/input
@@ -0,0 +1,300 @@
+lvcNpRHDCnTLCJlL
+RFZggsMrjTFGCJmdmd
+srsBZgBqwBqRZbzqtHpzzDNtHDqV
+CCTPpCvlpzzZQQQflrzbQDttTJcgcggJcHtcddtdhT
+nMLBRnGsFFLznRFRLMMNBnNLDRDdhScJccctdSccJJgDDHhH
+GVBGVBsLjsrrvfzpjpfQ
+dzVRSPVVBVDSPzDBQVSQFFlrclMplpMJMtPJlJvHZCMt
+TjmGmbhjTnTmwhmrvvrHcZvCHZMl
+fnLwwqfwfqjghHwGThwfTGGBFVDFFsszSRVzRBsdBDgFsV
+CCWFCcdDWwcWFpSvggnzRRQszngJwT
+mGtqqLrqfmmLNtNrgTjgJzNQlvJTvznJ
+tnhVbhMLLZZrnWHPSHDBWbWBFd
+nQhvgnCQjSSSTTSMCsLDsfPfDlsPJMWLzL
+qrqBFFBbrVRLszLfsqdqPW
+bNFFRbBcFZNrZRRRbprNpFrHSwznTnvSwgHvzCSSSjnCQwgz
+tnnZZVmwmqtvVdZqnddQQHHTHQLsFTnsPrrgrQ
+MzMflMGpzGzPGPgjLgHrGj
+zPfhMJDDMJfzlhcRJvVwcVtwVcmcbqqtbv
+GVzrBVcPVfGrzVVBcQJlGGRCZSSRtSdRnGLJ
+wbjvHWbLvhFppjZdtwZRNddtJwlR
+pvMmbpFFbqqqvWHMFvzrLDMMrMTTrVTPzVzc
+qPmgpmwpwqWWPHdjdTNStzNLMztSWtMNtz
+lVFfJrFJbbcsvcRVRZzQCzQNSZTZ
+DGbvFSDGbDjnqgjwmGdq
+DMnpnpwwnpmRRmcRBDnDwpbRQHssHqhHCHHSsQddHZQQcqqs
+JlZjjlJgNSddfsgQdf
+GvrWvzNjvPVLDpbPZwBP
+drQDzHsHrdZWqDSSPwmmJDDbvbSJ
+hphBhCMFlBtBtGTJMJsscPwTjMJv
+tlBCGFgVFNpGClFFVGGtFBZrdZQznfdQQrRWVRQdRsVf
+NjdCLdjzzlNdjwBBtZqpqPJQbN
+CsDWcHcGHtcBbJPpbP
+mGHSssSgSsHFSgGrSgmlLzCdldllrCVCLdnfnT
+rDLLzRmbcLJRtRSvSBdZtSTp
+MFswshwgsCsjghgFBsGssjlZpfpvdSHfTdCZTSpHtfddTH
+llwlwGjMPMQQnBMswsFgglPVcWcDcbWqLWbbLJVDzrqnVr
+pqmmcSTLfSSSMFlf
+rHWtPWnHtlrlDntzWwtBFdzCFMRCfjRQFfgMRMjC
+PWWHDVZPDDJVlWHncGGbqqTVvVmpGTmm
+wLBtWhGWJBdMmZMs
+jgvNCFvvGppGnmNJ
+DDRQTgcvjTPFqGHhRVhLRSVL
+tPPwLpBpDpgLSPvgQCvsLPjdjNZrJZsdZjsrsnZNjbZc
+lMWzWMBhmMhRGfVRffHmMjJcJjrNNZnjJcWjNqJnZJ
+mFMzhTmBGfHTwgPgtptFpPgP
+qCcqJQHslgtsQsCZmPWNSRNZTPBBCN
+nnLpjjnvwwvDnrGwFvbFjwPgPWRTPrrPShNhmmNSRRPN
+bnwdDLjnzGgvFqdJQcqVfQVqHt
+DfCzDCCTDLDBCsdjzwdrHjbRgjGH
+MSStMScccJtPptJNJZtJJSrFdwPGjFFHHwsggrwdwRdP
+nStlpVlhhNSshZlcNZnMcctpBChWBQLqCWqmqvmBCBmQBqmL
+RfLHNvfLfLZQBtRZsBfffjVqGvqpGSmJpgrJpjGjrp
+FDbPCMzbTTDDPmzrVzqppJBrBj
+DPcWPWDhlbCcWBsQZZfHtdwf
+fbHfPfHHfPZWgZfSGpqNBqdBBjpjdPBJqv
+rnVNCwwrhhDrmmvcmjdDqcmB
+hFRrslFRNhFzVthllRCRCCwnQtSGfQgZZbbSWQLSSTZWbQTt
+nmVqTFCmTVbnvVCnqwFrffjhZLffhNrNJF
+StBHWDgMBpHMBHDzLjffjWwZJNNfNZjL
+wBBcDcgzdVbbQcnQlq
+MfGCtqGDhjDqHhrjGCcJZZBwHRcspZsBsHRc
+PFFpLFSpzVdSTPgnzzdPPZBRcZBwBJRcWJBmJW
+vdTTzVpNVpfCChMGqMvr
+VtZzBzhtlrhznFlBfgrfZgFrPjGRMGjRTmSjRjRTHjfRHmRv
+DQpnsbJCsNNnpNNJsDQdCDcRmHPGTHTHRSmRmHjvjHSpSS
+cQbnQdNLdJJQJJJDJWnFwzgwBthrgZBwBgFLZV
+VhRRgmhpFjFFBDVPGPWQPzvvMMWfjf
+qcnbnCbfLqJrCnrcdbbLrGSlzWsQvsWWzvWGdMWGQl
+bnfbwrcwCrHqnHcZhFBTBVRDFmpBHB
+lrtqltJJJqSTWJqVHRnsRhphdbfbzBdhsRsd
+vSZCgZMMLSNvCQLPLDPNgZgnznzBfsGGnQnQGdnsfhsfzb
+CMFLgmPgFFNMFDDCgLLcrWrjTTjtmSJqlWTTwWSr
+LdjljBdZMFdZFLLLgPvWzQRzCsCmCVssmFSW
+TJttwDhnnTlWsQzSQQDvWm
+HtcnfctJwtwrHhrwhfHhJpjNLMZBMgZLrBlbbLNPNj
+qqhNchPdpqTTNqpDmmvvGzVfzfmvdH
+cwccjsFwFjnwGwQDfVVVVv
+FbWjcRsLLFngBrjpbJqCJZTbJZNClq
+lhznMTSzSnjhQGtVPQBdGB
+msfNDDJLWslJgfNgCrmLdtGQFVvdGQPZVttBFP
+RCrJJJDrJRsfgmbsrNsrlDMTSMHcjqwzScjMqqTjbbSc
+nNgsvNWDRvgnRNVCFddTNZTNZQCTFZ
+lffHJfHSPmSfvLlbLmpZrCTFTtrTQHqtTrCCrq
+cpzblplpbvMzWnsDDB
+CgtvQvJvMtWttvwftCdWvDQrfsFcrqnlcnqZZFRcRqsnhF
+HzLzVBNLjHqnhzFlWFlr
+NmBjLbVVbmbTLpTjBNVLHNdCtTSWQvCgdwSwJtWQwdSD
+lncHcnlccVSLNSQNslncLcrZJCrgPfJZDrggJCCvZPHC
+jRqqRmmqFwRFppfPPppPBfpWBvZf
+wmMqjtTdjFwGGdtNhQbVfhntcNLVbL
+HFBgMjpbpddMpbHdgHLLRNwhwFLDtNSRDLLD
+zsCnfqZflrlnhhrtwNgggNNL
+CGqnQzlqlWWMWgVBGg
+pQnvzjztpzpCmtzzjzpnBHrJNGlqggMMqgqlNWgfNNqNCP
+sVTSwddRRDVShwRwRTWgPNqMGQMGNqMWslsg
+hDSTQhcQcHrtcBmZHv
+QRmQfvQpWpswfZWWvNbhlMglgFbZDldlbL
+rzHqtcnqqVjqjGcHdLdFdCFdCbLDnMCh
+DGcGGSPDpWTsSfpv
+llfMHTmvHlfZlFZRzgQzsFBLtLzFGF
+wrWNJrdJhRmhGmNh
+DWrrJjwPjCdPDwdmwnrTZnZZcqZfnqbvZfHvql
+mPmVJJmNZJmlVBPPrZpWcFWbGWbjgqNbdqjSjg
+nMhzwRhwvhMDMgWHRdGHgccggd
+sMvnhQshMwwvdvMMCwBtlZtplZpTmPBVZVlC
+ltlRzpncRglplzhFwFwzZZMWLWZBqnDVZLDVZQQQ
+SJcdvJscNSsGcSGCSJmsTQDTVZQTLTQQWCTTMQCW
+sPdJmcvsJvGJmdJmfpwftfrlztrRlPfP
+LdPrWcMCWCfPdMJgdFsbRRHsRSHRHHcFpH
+hVVTQmQTnRFLFsmzps
+qthVVwZqlQLQhNttDDDWrffDJJJDrgNP
+BTjTNjtlPrBjjrljbnMFfhVWFFhlMWMfHdll
+mzcgZvDggDDCJCZLvsLJLcmVqWVSVqFLfdHHMWVWWWffnF
+cmmcmzQDZQJmZCnDRgQCTTwjpTtwRjrbNjpPpwrj
+rMbchQphhCSbGnzSbl
+qFtgvTTqFFFFJGzWJG
+NZjGqGBNjNHQrhpPNHQr
+LnLmbtTtTwtLcVfFFLtPrfPrfqqqsqhSvrhrhh
+BzJWzZRZJzJvlZJCZgZZpJHCqQDhNQPDqDDrjNsjPPNrhSCN
+lpJWZzJpgHWdWMgHlJMZzgpJLGVLGGvwVwtmcGbvGMGVvncn
+WdBgdqRgWqHmNNwsGgcQ
+ptPVbPbSbMJrmsVzRzhwmcGQ
+SSbvrJbJtCDZfTqdRfCdBZ
+WDNNWvPpvNJRRbGLsGMnnbmG
+qgFdBwgVdjwdtjjdBgMgGmLQsnZrnZssGswsmLrw
+FqTCTtqjdjVqgCqSMJMTvPThTJMNDh
+brSSSpZjVVWdfVrHPhRBggNNGwHr
+fDlLzFCLMvnMMJLNHNCBQwNhRgwRPP
+MJqMmfzDvFtLDtmsVsZZTsSScWcsbq
+CSZlllhSdnDrrDdJjqjzbSGzGvwbfHMb
+gTNvVNLQtsFpQHqfwfBfVMfHzf
+QgNmWTtmTcmmdmrZRvnlPl
+SmzfvfjvjbjLNJjD
+cFhWMhGHTPhccMQQGBTFGwbVVwdbddJDvVJLvDDHvd
+GFMBGcWTWhcGrhFZTTchQsSfgtmnnRvnmnnRgRCrRS
+ZTQHVZsZSQpQQGBMGqfBRbRB
+CwtLDtNFcPnllwnqvMgbvGVfVfBG
+VClLWWFPPhlhctsTrrSpWpmszjZj
+HChzPltNnnHtnpqSpHpFpSfSvS
+mJmQssZJLdTQLcbjlGLGfSgMbqwwSFSMSFMMqMwS
+JdBLlGTjLjjjjdmmBPnRzCBRNPhPtPWPtr
+FPLHMHqqPMgFLLggsMghTJhwtDSSJDltJvtwdvST
+WQfmjQZsjfZNQCrZCNZQQWQBCSClvdwTSClwSwlTJvtwJdbT
+BpmzrWcpBrfmpsGPGFqPRgzqVPLM
+bHjccpHwGHJTfPlffPwr
+VtChMZVhhStZdfTCfJvcPRCTJn
+sLNLZcdNZZqZqqVqSNWtjQDGHssHGHgQHDBgmsDg
+CdWgCpddwgClFlmmVTBbRtRtbntBVVds
+vcJGhPLPhJvChLhMLfccrvfvsVVbsGBTTBnVbRzBVstsGnbz
+vJJHhjcCLPPjQPHLrSZmpgmqwlWZZgZZQm
+VpTFCFtrjCdJdjHVFnSjszSllDjsDzgvzl
+fhmhZBMtfZfGBNfNcmsbZnzSlRsRggslsbnv
+qPLPhMcLhPfNWPpFrdFdFTtJ
+nlgQJhJFlncMzMWZMFvw
+mDdsDfHjHsjHdjTLfpDsbDcNzzwcRbZNZPMcCPWMRPMc
+sqqdwffHjTmdmpffmLddTTGDnSJtJBShVVhrGVJtShrlBBnJ
+CrcMcMDBCmLlZdSd
+qPjGjnQPqWjgZmTdlFwTmqLJ
+bnPnnzHjbPznzVpdpVDcvprr
+TCScMQcQCrssJPQhQs
+VpfnqqfdVVwpqvqwGbDPPsjgPShDSsJhlnSl
+qffdmGpfwfbfvVqpfwwfbdqRMTSTWNMWTmZLTzTCZTMLWC
+QQPpPbPbDNplSJrCCj
+VdMzffgnRmVdfVWRvlrCTjRlNBvrrlrr
+mGgNdthhGgMWWtsFcHcHwqLqtH
+HrPFVqVppVpDjFDrVbCpDFJSLsmwjhjGLLmthJLJLmZs
+WWgRdMdRMnQnRzWvPSssPWssJmhsshtG
+MnfvMlnQccvfMlcTRMQdRfpHPDDDpPrDTbTBNbHbHDCq
+GWWRsSwLhWsRsSbsPttThZqrNBJJBgPNCJCCqNMNgP
+HpVDTHzfFDpFfzHzFVcrBZCggMJBvNrNgcNNrM
+jlVpVpVVQDHdFVlmmmQTlzpjjGstWLsSbsnnnStWLRhnht
+prLMDDjNCLZbdFLGngdLBv
+VQHmhWSSzhWHmPJRJhSmVHJPFvgTbtnTbBtGqbQnbdqgTFqG
+RzwzzhwhwNCvvfpc
+wQgmZnhmWVtwQmnnnQbQhzwsFcRPrFPvRJhPlPPBBBFvJv
+DdjqMMGLLMMGqTGdMqdMLdBBJsJPJBJJrrBFcqRlPlqr
+DsddsfMsWgfzftZb
+lcqlFSFwBBPlNwPlvSlQfWsVLTQjzjWVfLsWVq
+HMMbMHMtJHgFzzFrVVtfFQ
+RMFpCDDFcCNBcZvP
+gwDrClhppDDPwPhnmPlwDrlDjMFfMTjMTjJmRHHJBJRMJHGj
+LbbZBSvSLVRHffHJHJGZ
+WztdtLsSvNQStbbtzdStthWhnwnPBDclgwwnrwllCC
+MnMMBppMBDWMhpnCDBgCBmRbstvPvvbGltSPVGlVPWVv
+TrrddJHjNcTqrrqdFcqZwSvLSlGGPbtFRbLvFVSRPG
+JTccqTcwNQcTJrZwNJcJqHwJBQDfhCBCpCQpmpDfMRfCfBpn
+njVcjHfGjVjpTCpMWprW
+tsSsQDvSqQshDhtmWpnQnmMmbrpdzM
+FNhsDDLNLnNllBqfRJGBVHBPHRRBZZ
+hFVdlFSFlfZdRhgWgdWnnnfGpMNfnLMQzQQjMD
+RsrJRHsvBcvHBHjDMMpDQDjjzDHj
+BcCmBqvrbbqJgmFZtWdRVSVV
+FzzdDJrJCFSFRqLlwsgspsBCpL
+HQdWhMZMVwqLMllw
+bbQtcvZcmHtNPZcWthWRvrdrRzrSDfRSrzjJjR
+bTFZzHjZNJHzLggsJgbdsWcdcShWCwsSSdvGvv
+VDBmntntfCBGGGGhRc
+fMnnPDfmDlmnMPmtmttnVlHzZzNLbFbLbhzJJjMgJFbb
+GzgJGPRrMSgTgpgH
+hcvWhBdhcfPFvmFQvwfbHMsMMbpDpTDSSHsHpd
+LmcvFFlcWQlFlfPnRZPVCJzJClCz
+DdCHCHrmHRgghTHH
+pFVZFwfssMsgghML
+tSnphvhtctSSQNDqNdmrWGvq
+rqmtRmGmcWrRRQprRRnfbGMMlPGGPblwMbTP
+BHHhVZSvDNdhvBVhshbzfPbTmDfnwPwzPgbl
+ddvBsSSdsLdshLsLpmWqcWrCCrtFpQ
+wZPCwdPCHrnLQCGZDcPRqllzqqBzjlqc
+gMmgnJspsvTmWNVWNpTNWNcDcqVjqDcclhSzllRSDzqR
+JnWsgMnngmttFWWMdrwCZwHfZfdfGdFd
+wwgNgrsWvbfBrqqsWbjDCDDDCDCmFbSmLDLlSC
+QdpdzQTVdzRMTVVzcHTQLnlFmZHPSChCmlDPPHnP
+dRMLVttzzVtTVQVqrrrgBtsvWWwtNw
+vtBvntlqMvfnTfPDPhdRNbhdTFzF
+QLWcmrrcgmCgCcsgcQWlWWrrDjjzzjsdFDdRhPNDhhhzDzPF
+GGWHcCQcCCSlmmBVMGVBfMqwJtqv
+cfqfhDRwhqZgRgRzRvcfhBSrsBnrDBBJWrnrWrSmmr
+VCTVjGCTCjFddQntmrsVsJvrtrrW
+PFQGpFbvPRMNqgRq
+MmDgZZGMjZGfZRFztzCtCjzSrF
+cBNpPJpBdNntcBHBccJlsSVVzzSwlCRrCnzsFw
+PPBJLPPBBLPHBNQgqfMQtmTftGGvhq
+bbZnbnVVgVSnbgZtntZrltsprpMCJvpqdJmsCMMmvvCq
+BjDcjLLDzNjLDcjDzhcDNLLLHdpmpHJsqsMMNfCHfJpspqvp
+dFLTFBcBzjFLgTbQtRgTVTlZ
+nqNnrBRjLnjLZCqGGlqSGWlWDS
+mTJTTcTJJfJfhhhwMbQDPWCQFCRlbDCSDDPl
+dhMcRgJmgRrBrrrNgrLZ
+GvJvJSGZFrGmmbmCrWnhjncLctcWttVqjLBB
+wDlTzwlHTncRTqnRBt
+gspglgzDzdPDfpgfdDzsgMPGvZJBrrbZGJNFmCFvmFvFvM
+RLjMZZzfvNLBdjQfBfQdhRfSTVlcVqGbGcLGlbmqLVccmm
+FggHCwsggrWWtCHJDDHtWrTNNlqSnlTlnGVTmWGcbcbm
+PtpttrwsJssPsdRQvphZNzdMBh
+NqqpZBHqTBpPNpPpGwwMPGTJjjLjQljGmtLfftllbJQfGf
+nHczcrSFnVWSlrltrgJmjLLQ
+SvzcDDVVFzdzhndCFSvnhcDspRDRDMPpMHRNPPZqppwM
+FRSbVCSFFCDMFjRMjSSVFSWggMmWtWngJWttWmmJctnt
+BPwcQQcQqQmWHfgrfwrh
+PPlBQdNQvdLzzvclczdNRSbpLSbRbDjFZFFZVsFs
+wtrrVhBbpcZSSjBfSfmm
+MDWTvTMGMRCDCTQWsvfrRjjFfHlFmjlmLlHl
+gQrTQvQDssdNWGsTstcbptwVPqcbpNqttP
+jtGSwGQczrzjtGzrcsJwMRqMVMwRVMWFvVTWFV
+DhLgnDLndDHmLvWqpTHqHHVNqF
+LhdmPhfgZnZDlPCPmDfljQtGsJtBsWjGJzJSWBjC
+zHDjcjBjTfjjfGpf
+NNFTnNwPNNdqnJdFnqqTgmgftfftrWCZGbmrpWttmW
+FLJqVNVNhnwnTRsRQBlQzShs
+HJGJGJzzHHQHfJHsnNsGMbccMrTgbr
+vddSCCjdmVvDDmvmBVbbBchcrrcscMTTnscn
+VjWdFCVVMWWmjdSVFSVpqwwZttfJJltJZqltppLw
+SnmPBPBnMLnPBsSgSDqRNRRccDfNcNQQRg
+lZVWtWVzCjvZzCCGzDwbwRwtqJwJNTtDfD
+zCzHZFFFfdLnBfFf
+NRBFpNNJgNbWbJLRpRbWNtNpZllCZdjjZfjPVljTVCZQltlV
+sDqHmsHcDrwHhMDlfCQfVBjDPCTd
+MnGGcqwhhsrchcmGpzRJSSGGJWJzbJBR
+LBzjQQzcjWvHWLnVDdnHRffHDCVR
+rmJSrPJJsbNZssGSPrFpddfGwDRRpVjVpCGdCp
+mPsrmsNTrPNLTjQlWQhqLc
+MSDFszbhbRRTRdwhtw
+PWmCZCmZVvGqMcjmJRpdTTtdLpqwdlll
+MWGmmCVHvMSBDSNbbHHS
+mBwSBSfSPHZCLPZSWwfPppTndVpdVncFgcgPpP
+rhQJjzQjrltJzGqCrGJTvgqRpnTgFgcFTVFqFR
+QbhGMJrhzrhQGQCsjwMDNWBDSZBZwSBLmM
+bQfDPgDQbQNGPgflWfvMZcRMMFmcvMfZ
+BLqSssjnzpBwszqwzFCNMvzWvRvzCCZFvc
+BpNpjnNHnSpssqLqrBLLHjdhTPPDgbggllldhTPdrrQh
+CvCMqNWVVqqPvNvvChhhdSnFHwBdWwhfdS
+gqTZGGjlmclrZjlmSndSDwfFhhDBHm
+tRrZpgrcctbbltRpgtqCVJCvPsRvsvPCQPCLPz
+dTjRdWDBRzvjfzTfvTJPtJttsSLqHsSQJw
+hrJNmbnFNZrbhlCsqltqcQcQSQqwPL
+pVNhFgZphZmjzvjGDJWzVJ
+gWzQhCWbQnCCFgCJnFQnWCzwjrHjjHGTwHGrhLwjjjtStL
+splcpqDNDqqcZqRlspwHbjVrjjHTrwSbtVNV
+BpMslDqDmRDRsBRBJPPnbzCfvQgmCWJb
+tRtgRQWCwlTglHZHTglCtTdbbfvhWpbSBbhWzzbfGpfhbb
+cqZVMJmLqmNrsJMDbzGrGSvzGBhvvG
+mmnJPMZcclFRdnQtCQ
+QVQVqfFzVVQQrQwZsCTrBtTrccTtctcJRRjT
+vNNPnvGbBtWBLvBf
+mMHbfDfHdHGmnhDDqZFDzVSQzF
+NNlTNFCRTrfllTZsPWSsFPfzJdVQVpDQVszQVtpbzJMVbJ
+LNHjNHjmLLjNqvGgvVQJQDVLbDVDpdQQzQ
+nqmqGHjwgHvgwGHjGgccNTSWrrlCZrFfPSFFCP
+qWzCQqhPCHjHmqJhqvqmjRgSFMTFggMFTFVRVVTgTm
+SptGsDlnGfnDLgTMTwgRFFFs
+bBcntZdpGZZcctlGtDfnDnBCSWqJvQhqjqzjhJqJQCQWPd
+SjZJrSSDShddqLvPqzzdwq
+nTssfRpQQmQCHlPBBgGmwVGzwm
+TWQsbCRQFHFWQRTpzRHRsRrMtDrjhjbtMbccrttJjJht
+cCChVMwPPMHCPCCPrvJnntdTJSvTtdrSRt
+FGfFDBhGGlfGGfWJWdbSRSnRNbTvdn
+fGpGlDmBhflgfDFmmfFpcVzMzqZZzcCPQVZzqP
+SmgtSjGPjppBjbqqWTCZDQTHHHTg
+VsFfCzLvsMfzNfNRhVMslzlHqrWrQDQcqDqTrLWHcrWJJW
+dsRdsNCvNMVpwPdnnGbbPb
diff --git a/aoc22/day3/src/main.rs b/aoc22/day3/src/main.rs
new file mode 100644
index 0000000..81a3fe7
--- /dev/null
+++ b/aoc22/day3/src/main.rs
@@ -0,0 +1,59 @@
+#![feature(iter_next_chunk)]
+
+use std::collections::HashSet;
+
+fn main() {
+ part1();
+ part2();
+}
+
+fn part1() {
+ let input = include_str!("../input");
+
+ let ans: u32 = input.lines().map(|line| {
+ let first = &line[..line.len()/2];
+ let second = &line[line.len()/2..];
+ let first: HashSet<char> = first.chars().collect();
+ let second: HashSet<char> = second.chars().collect();
+ let common = *first.intersection(&second).next().unwrap();
+ let priority = match common {
+ 'a'..='z' => 1 + common as u32 - 'a' as u32,
+ 'A'..='Z' => 27 + common as u32 - 'A' as u32,
+ _ => unreachable!(),
+ };
+
+ priority
+ }).sum();
+
+ println!("{}", ans);
+}
+
+fn part2() {
+ let input = include_str!("../input");
+
+ let mut lines = input.lines();
+
+ let mut sum = 0;
+ while let Ok([first, second, third]) = lines.next_chunk::<3>() {
+ let first: HashSet<char> = first.chars().collect();
+ let second: HashSet<char> = second.chars().collect();
+ let third: HashSet<char> = third.chars().collect();
+ let common = *first
+ .intersection(&second)
+ .copied()
+ .collect::<HashSet<char>>()
+ .intersection(&third)
+ .next()
+ .unwrap();
+
+ let priority = match common {
+ 'a'..='z' => 1 + common as u32 - 'a' as u32,
+ 'A'..='Z' => 27 + common as u32 - 'A' as u32,
+ _ => unreachable!(),
+ };
+
+ sum += priority;
+ }
+
+ println!("{}", sum);
+}