aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2022-12-03 06:29:07 +0100
committerThomas Voss <mail@thomasvoss.com> 2022-12-03 06:29:07 +0100
commit3be62b50f80c1d67d9867775242c33e88266fec8 (patch)
tree76181d3c464612e7b5d000a68cd33dc7b9ecf851
parent3cc1430b049cd5cd713fcb2e8bfc2ca14ac1502f (diff)
Add 2022 day 3 solutions
-rw-r--r--2022/03/input300
-rwxr-xr-x2022/03/puzzle-1.py27
-rwxr-xr-x2022/03/puzzle-2.py31
3 files changed, 358 insertions, 0 deletions
diff --git a/2022/03/input b/2022/03/input
new file mode 100644
index 0000000..e3223a0
--- /dev/null
+++ b/2022/03/input
@@ -0,0 +1,300 @@
+hDsDDttbhsmshNNWMNWGbTNqZq
+VQfjnlFvnQFRdZWdVtqMGdWW
+zvvvRnFFfjjlRBlBPzgQgRvvmtrmhHcptLHCDhcHHmLsBmsB
+FrzFvvdTDcTnmTzdDTTzdvWmjhgVPrhSljSQSPwPjPjPjSVC
+sMsGbqGsbbRqRbBMBGRMbLpNSSpjhlQljHVClhjgPjjPhlVp
+sNbGtJbMfssNtvcnWFVmnvDd
+TNfmdFJmfdZMQffVRQVV
+jVHBCcDSjWrMZjvg
+SShSbCGpcBtBtwtVLJJddmtLmT
+CtpNftbNWbtSJDHqGZJFLfLr
+dPsHlsRBHcZdqDFDZwwJ
+snjVlvTPlPjVlQlHWjpSmzgNNzSmtpSm
+qhZtSVqCqThGcGzZnnfZcB
+WbddWbDwrBzcpzHpBb
+DBBMFWRJDrDFWLWljCqjQjFvtCsqTjqs
+vhFTzRzzTmPvbplWFtQttQQZtZhMZqcqSQ
+fJVCfDfJNCLDwJNGmssZgwqgZcmtgcms
+VmdVNLHGGVDBdfLCHnLGHnbWpTplWbddRTlzplWPpbFp
+smwtNVqRjNmZjZBDSvzSzl
+FnTJFcTTFccCrJGTLncdCCcPJZfBBDSlSJwZDlggSffvgSSf
+FWTFGLFWLCPWrCnFnQWNbQVVwphhmHHbptVsss
+BrrgrtgfBpPFhhgMWq
+ZGvsvDGClvsSRScpGBhPphWMPhhTNh
+SBSBdBZCcdwHrVQwQr
+qmFqdVtqsVdzqGbwMJwGPpmPHM
+ZjTjLQLLDrrLjcFhlfrGHppfbJwGpMMpGHwRCC
+BTlZjrBBBcLTcDrjBlThWBjBtWNqnSzSnsSdvsFggNnqVVnv
+zVvmjGgpcJnbTTTJHRHSRb
+NPFrFQfCLPrdRlbtQRRvBtHb
+frMLqPFMrfrPLCwqqNvjczwwnmwggGmssnmnnm
+HbFJhhshsffcvslmGmLFrQBrlFTG
+jNRPwwPjSPCdCdvRzRBTlRzmGrmB
+nCSWdNjCCPqvtttZnDscth
+ScSrRTPcSSDRWSptWcdmmWGbmGGLmLJvNJNbbJ
+flzHjFpZjFfjjgszjlqzJNnnvsmbMmGvJLNNbmJv
+jFZFVpffpVlqfQhgtTwcTVtrTcRBwBTD
+rHrdGSMSSbZbjShj
+qZfDBBvllvvWLtqbbQwhJjbtwbnQgN
+WzWlzZmLWBLZLzCzrHMVcRrMRFRCCccF
+BzdplppDlBBrqWnjFMBWqNWq
+whZhZSSHhhVSrvSgHPvgvjnFTPsFFnnNTcjTFnTTsc
+HLCwVSfZLffSHhLvwtQbJbrdGlRRrGdmpztG
+grDFfDlfCftCzCfNztclNFrBNQjbZjJjjPPVsjNvsbvPsj
+HwwTpGpRwMdpHWhvjzVsPJjJGVvVZs
+ShphRpwzMWdpHdwWHwMpnHwLDmmgcLCCDtLDCCSlcgcfCD
+ccqqLLqCqTSlZMLQMllZTvnNfjddttmmDpRJjvhfpfthRmdf
+rbVssWwggFrGsWzPbVFGJpftQRPDmQDpdPmdJmfR
+bBHWWHzWHWWHrsVbsFgwbFqqMLTnBclTMMSnLnqLqMQZ
+CcSPGCCPrdPtdjcsBLDghbVLhqDl
+vMJwTHzPvzVwqBBDblls
+QNvMFfRMJHPZHjnfWmdftSjSnp
+dnBCPhhBCrQfChdbNVGLszzDzVDsTbWT
+HgcJgpppPqqHwPwJSczVzDssNNVWTtqVVGts
+JHRFpjFccplcRwPJpHPScpMPQmCdBQQfQjjhCfBCrQQvdmnn
+rQGmVRLRbDRHmmZLGBGVLHBVFspSstWWWNJcsgpQTSsNppJS
+qlldhPdfCgnspJFWCFsFNT
+jMMzwndfhnwPfqPMjgjMVBrGBmrHDHLZbjRGHbHj
+wzpZfzHRSRfzgHfffZwwStCtSrBhBBCTrtFhhBFG
+QPjQQQDcDWJNFWtrtWrGmTCMtmBW
+lDvvDQcdjQcQLvlDwnpFgbbznZZglZsl
+RfMFTMFrVrSRFPlFSfVlHpLqgzpHBLzHBBVzVpHG
+CchbhcwdmdJmwJJtGgnqzppLmGGBQqQp
+hCsstCJwLvMRvsZsTR
+fQlfMlNClQhhZhrlWrWw
+njDbnTDTBtGjmrGvSh
+bgshBdBcDbTTdnnnTqcqLgqfpfQppCsCMsHHVVpHHNCHFF
+PbCnTbzJnqQNzbbTNDdpwcmjDmwjGQjccw
+hWgvSdLvwcGjSpSm
+vVfrFvvhHFTZndJq
+FFvRVCRqVRcfsDLrgqGNWjjHfhQQzGWjQHzN
+ppJPBwplwSBJTmPpTzWWStzHHjNNLNzHNh
+wnwMPbLJMJllJJwBmJmnLVvCvsCsbFgDrRrsCsvrqc
+jqHgVgdgGQttWCtNqNflmllgFnfDnmFFlpcl
+TZZsrrwwhwrsrZRGmhcfSnhGlmSFcf
+rsLvvbJPPLBGPCQqHWtMCMHN
+WzzBpCBpMsBpCvCfsgnPPfHgbfFNfF
+jtdTLLjGTGjDjLbbbGlDLLLmfFgmmfgrPrgmNPHSnnNnqFSq
+jbRRbjlwlRVpvWwvzBpB
+qpwzCzCznFznTcCvrcrvVcLb
+cPmNMHSlMsLfvWgsrWvL
+mMHGPDMBGSGPHlPBcBPzznnzpdQFBjqRFdwdnn
+QGZLJzmJrZgZzZhNQFqDWlWPWDFCWNRlPW
+hMMbhVbhHWCsPWCMRs
+BwjbSHVBVvfcTfZgZzQhrzdGrt
+cvPTjfDPpDmmBjbQjZMdlBZj
+CHNnghNChVzNgrFVwCMJLMMMMMQQdbLZ
+FNSzShrHhNnWgVnWfvfbpfpDGTfvsG
+FFpVrZhpTlSQlQzTtRtZHfmPmJDbRtZJ
+jNnwBLnWwBgNBNCwsNgsMsCLVfDWfmDJRffmRRtmfRmPDRtR
+BnLdNdjnBNcLngdCVBndgllFlQrrpQlSSFrQphFcQq
+JmVLJPMNjmVJpMLJSVmNQZZQZZrnTHqZQHTrTTMr
+ltfdwChhwRdRswDDdnBQqqWNTqrrHrqZRr
+dwdwwDwsGlhhDFtsCwhsJLcPmGPcGzSjSjjLzNPS
+QgSbgQCLQSJFMccLFLVVzH
+WBNffrBpBNdNRdWDfptBtdzWcMZZVPMVwHMmsVHFccHsDsVc
+ptphRWrfGRGRnqlCSQvhqbCzJS
+VvdMLMLMBMlVlVschsNpDGpdNsGc
+tqFSmnmnnttGfDqNcfvNDD
+nzRHnrwrrWRrrzHtbMlTMBjCvWLgBBMl
+pCBlRvzwzlCzvZqqDwzmvgtsLsQdgZsgPNtdrsWrst
+JbGjbGVGHSFbhbnhTShSTbQtQrPsLsHLQgNRtsgdQsLP
+GnnbJbGMGbSjjbSbCzqlwMRRDzqzMBBv
+TTVRJVMWMshSQtjSVTQJRQlcCBncJccdppnJcBBDngFpgP
+frvfzfHrwzZNrtNwzzzZncCCZFdFFCgBDpPcBcBg
+LwNGbqwvmvvtbNQjQlVVRWTGTQWM
+RnggwVLRLDfCVZhfpDGGMGMGcGzGNHvv
+jmmWBTSsBmFmSzctsqpccHvzpN
+SBSrTblSQPbQhNwwZfPVdZPf
+CCvCwzfNStLzfrbmMJbZMtlsbJMW
+gPPPBqDjBcPFpVgBRbnMsVsbJZnWsdbSbM
+qgDPHjHcPhpDRRpPBRpCGSLwvHQwGfzrHLGLTL
+CLGqDZZLTdddPsdJpq
+gbRbbnghnrWvgrdJdSTRSsVNJlld
+hMnwrjnnjggvnLDwGffTfwCZZZ
+NzJHbNHNNzJzgmHmzpQSvvLqbLsVVsVGvB
+WtWhtWDdrZldDWrWTlZgppVVsqQTVQBqsGqBsQVp
+jWjWRRRlPcHRwJgw
+CCnnFTmnPCMCRNfnwGwdfzvwwl
+VQQVShDSSshhDDtDLhjccGjLBBzBzlZflNZvwZzdwBzpSNNZ
+QLHhJDDhDhgscgtjbGHTrWbrTbRmbFrm
+CJbLvJvbwtFHqvLzwJqqqtHWTWRgDScDRSWQQjTRcWRDLT
+mssGsMNphZMNsPPBnhSjRgdnQRdWgdjgrcDn
+GGmBMMsffmslMGshZlMphGqCzHCbzlbvzqwzzgFJggCF
+WCgWBphpWLQZQpgdhGdwmfbfFRVRjRTbbSFttdbSbT
+qqrZnDNqZJDTVzRjVFbfSN
+rPMvqJJqrJMPJnZMZZgLPgLWLggWQghwhmBh
+CWGGzdHHmPPSmPsC
+LqwlZwRLrPMQlMqrlbZrQRsSNsmssSNSsNcBNpgmsJ
+lwLDQhrDMQqPGfhzGGjhGn
+ZqDlZssCqJJMvpdBpBBmBQSMRp
+wLgVcbgFLzTLTNNZmNNRdjdRmF
+HZHbctWTwgVWgsfrnnPqlnsWlD
+RSnwSPFcLnFPnRwjzctzbGNlZgNbbGdGpLhZdpgM
+BqqBfMvTmmJqDgGNVdGVbVJJZG
+vsTDfqBmHmMWQCwjtrHjjSFFnRSn
+LsCmmcDHRjdtNMstwwzJ
+TvThqfBFBNTnnndTtL
+lvGQfbFQGblFrRccLRSSlPPVHS
+qbLpqTHSqpbqbrPcQgjPDjcdDL
+gnzhhBBwBWZzMglmjDrDPjvfdvQPdwtd
+WZZzZZlZmhsMmFgRBBBzHHJpNJGVRSJVGTVpNqCH
+JDphhGhDdGzWRBnvqqLDNLMnLw
+gsrTHHffTHPcrPrlHCNZhvBZnZNLhPvBNwvh
+sHVCSsSghJpSJjQh
+JTMGlfjlTdqjnqbnqFwqmnbQ
+PBZhBBcWRZprPZcZDDCZTZRgnnzwbbsbnvhbvznFsNFFvvNQ
+BcWrVgCCZTDRDrlGttfVtMddSJlH
+vwwvpVbSvnSRRmfMCmTHVHTBHB
+QLZgDPgSDgGTMZfmTTBZ
+QDDsQFDlzlgtJlLdFDgSJQFvvpRvjqzjRwwwzWvhvWwqjj
+mRRTGGNNflGRGGmmgRblsGwCZwVZlZjVwjztpjZhpBCB
+PMLLFLHPLPnLqDDLvFDrzzMjhwVCjtphBzjMhV
+FDdSPSpLcDsNRRWSTNWN
+STldJthdJbtTqljCRDDHmqmj
+VVvNwwvNFssJFJPNNwVvRMCgCgDqjjjqrDqqMHqP
+QBZwQfZwfVhtcSBtBJnT
+TzjjPzsQTslNlNzPRVGJJJGGtTJmgJHtmTZC
+dBDWScMBhhPGgdwwJPfw
+SqSqbSPDBhqnMqvrrSWVNFpRVRLzVQslvpNjVL
+bWFgFCPFtgvDZWgtChDNFJHvGVzHHpjzHnnzGzzHRR
+qcScQbbmqdQmlQmrlcQwLmHlRRjzGHnHJnnGVjHzBHzG
+TqQwmLmfcddfwrfCgbWCNPsZNfCb
+pddprrtrCPdvJdMjwwwHnLwwjLWCLg
+qhzZTmZcmRhmpFlVHcQQVwWQHVQwnH
+lGmhfRfmBZRlmmbvDPBMvNbvJJpP
+NsptgfGLLNwnNQSZbCvZnRnMCb
+JldhdzwzBMCSZvrz
+JFcdWTdwhPTFVDVmTJNqmstLqgLtLtjGGpsG
+dVVTSgTDpHVDjgdWpdpHTZSbWGrnnvrNwzFGNrFwnNNwvh
+CPRlMPJcMQcBcsmmLCMPrzbFfhwfrvLrNNwwGwfF
+CRJmtbmJlQbsQlRBpZDVjTHTdjDtSjZt
+rQVJrRFdrwDfzHQHQBTnpWTW
+PCLbPcPCsgqCgPgLjScSqNbHTzMtWmWtzlTHmBtTlMssMT
+cCqghSSPcvgScPbwFGdDDVZFfDhZGB
+zrRQRdqzPHQtnMPrtzPMRRQMVBBblJJBSClBpJbpdCCbBlCC
+hTcGwzswGwGmGfDvvfGmGNfBpllVSWbWppNCBNBVpCBClW
+gvGFTmTgwDhTDccsTfzfmfGGQPgPPqrgRZPHnRqRZrQLnRgP
+hvmmJllPbmCRMNGMMlNwNl
+PFTpTVjTgpTpBRgMGMnRNHBB
+WWrqzTTPVQDPqpjTqPJbmLtcfsQsftbLbvct
+SzrmpjjcsjTZNzgnnNzN
+BLHNDwBLBPLwLBhwDVLgdQCgCQGTngHQZCngZd
+PPJBDvBVVBmppNjJjrrr
+ZHBNQFhsqHBsgCfqtctcPvSwPqrV
+LlnGTnJpJJTmdDpmLlmLndWfVrPvvRwDfcwwwRVwcfQtvP
+GnbQblWmWGdTJQdTGnZHsHhZhFNsbCsjFgjC
+hWfDzDTVndDMhddMlBWMBDfJRnRtvvSSQjCvZCtjtpJvSR
+bGHsccFcbscsqGPHNGcrpjJZtvSRtFtQCZrjSj
+GsbwGGwNNGLgPLwMzBzfMMVMTLdTCC
+GBcNzTSSmGzmTLNgvwgpNCDqpDggpw
+JRZMrJWFZZnZtJgvvjwbpbCJDd
+rFMPRhZtZFnWrRtQGmPPDcLfmGLTfz
+VdWnVdjhhdFjVWbndMlNLQspVMHCNVlClV
+RSrJBRRJwJSBQpMBHLLDCL
+TqwtRRRJzJTSqJSzSrtmqgWWhcncvPgnWbPQnbnWmb
+VnDFpPpFssVSpFDVHbRbscCvgbMTvTCR
+JfzqdQBfhBdddfBBGDLdGQvbrqMMcCRRMTgbqgMrbbqc
+QDfzJNWBJLQBhmdGDzDGhQGGlFZwPtWjtFFppllSVpZZFnjj
+qrLLNpJbJnRLNnpvQtRVhhRFCdlFFlFd
+mmjzjvGjwPwmTsSTSQjDVlVWQjlCDthCCC
+cSSmcTTPcSswScfSHmTSTzJqqNrnpBpqBbJLvZMrqfrL
+NSvRZRfFvfHSZQcNJBLbzDLnrDFnhtFLFnrh
+wmTGpmGCwsMplMsHllPlMnDLjznrgrzDjgnntznr
+dsCVGGGwmpTGPplmCmPppVmHSSRJNfJvBNZQfWdBRJZRBZcR
+TwQwqDPQtwNwzNDTZcnZbJvMnMMbFqZM
+SzGSjrjLWrjHHspWVhvVVnFJbccVZcRJbllb
+pHppszGSprhhWHLCLrsjdTtDDPfwdfwtdNfDgNCN
+ftcvBtBFtmBlmvPFmmcczCChrgSCzzCSnCSSnGHf
+sJddbdTDbDHdnJRggrGzGzrG
+dppDVDZMMMsTTVsDTsTDpwVctNcvBZQPcPctqtQcHmvlvQ
+jzbdzztbDqNqwvLvRmQZjvRH
+FSJbFFWgJnZFLRZmHmRQ
+TgVJTVSJGJcJlllgTMdqpdNsrztNNsNbMDDp
+CCCVWbwVnlRbTcqSShqGhhGcnF
+PgDBfDpMNlfgpPfNZZtcJgcqqhmmjqSmjFmhmS
+tpfpsPrlpsPDDMDfBZrwLrVWLLLWRCdHLTwbVR
+pjvfDGjSMpvDmDpDpSDnJmfqbPVsCMFsPqFVPqCrwrbMFV
+NQlHtHNhZHgZZNBHhQgzPmCwbqqVFlsrPFrFCP
+hgHtQdQchcHctHgcgNgBQdWNpmvTWvpGmLJDLGjTpLGnnjfv
+QhgLLLmtlRqDtRGP
+HLbnCZFWVHLZnFCJJRFrGJzDGDGJDD
+WZHfndfMfCZbMnTVTfZhSNQQpdwSdLwhNcmdSN
+sPwrPMgLFPFFsLZtmcclSSZDtcZs
+qVzqdNdCnnNVVNCGmbncDBlmBlBBnRlZ
+VTdCGVvVfffrjpfMQPwm
+BPDldDTDPZcggjcccTdNMbbMNSQNqqjtzMbrRb
+LvmWsfvssLGnQbQMRQqrSRnz
+WpvsVmmpmmfpfJGrHfVCHVvmcDgpDlZphgFgdhclhdgdBlgF
+VGwHbNzMMrzHbbHChhqgCqPNghgCqW
+ZJVBvBvZWqvRvggP
+JBJlBlBZcsBfcJVrHnLwQQGzLQMc
+gBWfBPPPfhvVWFfSVfVdjjbvTvwwQppHcHcctTcQTHcZ
+DnNnMJMqMJzqchbZtTQQrb
+llRmNLDLDGlCsWSFCffWdshd
+LpNMZZpqqpfTTwNqLZwGsZqZbdHRHbHGddnCBHRcmzGmmCdG
+JFRtRlVStjPlhtjbBzBncmVWdzWBnb
+rPhhSlrvQlFFFPgtJlJtFlhlDNTwRMfZTZfDZNrspZLMMsrq
+zBLjLFBjLjmHWlzNZlzVCC
+dcJrdfddbllJbdMTwDNMZWNVwVDwHT
+gRcgJbcbqfgbftdjlqLhFFLPPhGBjm
+WfBgBRzQGNNQqmmqZN
+nFjCjCpLbtpPJtCDDnCDJpzncrSVbmdVqbhhdqNbSSmrdVSq
+CLPJpDLlLlFDpFjjsGRsBGRfWwsHHglz
+lSlSlpCRSsWTRLTlWRvlmMrBPjBPjpqrrmqPJMPZ
+DDzbhVhQhDGzhQnGGfnHHQGBPZjMqJjBJMBVJmqMdrqqdT
+NNGQbFwnHzNzwbQwFnwbfsLCLtsvLsWggFslsTggSc
+nvzPvCnlvtwCrZWmWwvvZCQfbbfQfGbqSJJGmqGSFSbJ
+LhTBWdsMNNRgNcgDWsDNcVSfQqJGFSFJqSSddQGSJF
+HNgchHcWDRNhTNMWwtPrtZZjnHzrnvCz
+djhnzRghMMVCBfhh
+qjQTrTPQJCDDqBDJ
+LQvGrLjTHLjNNPPTpQgtztSmmbFgmgLbFnmL
+FRDNFBBRRVFFmbLZHPZBZvvH
+QnhgMllglJTdGgJnhLQQJpZpvwZHpwsPTwpbsZHmsH
+lnhnQGrMgthMlntlGfQhgWWcRSDcVCrLWzRSrRFDRN
+PqrrrRnPBbrVhVqFrFVRPVhZLvNSNvLZcQvtJfRvNScJNJ
+dDzWwwCTmmdwdddpDLWQZMSSMfSJtcWJfQSQZN
+CCwmTdjsClVjFjnLBl
+srjCvjPmQVlPjFPmQmPrdHHZhvHZDqHhDDwHHqfB
+pLcnJQNQMZpqZDDZ
+WNRbtNJgRPjjQVmz
+NJJRmjmJbbJfqSVMNHFCSFzLLlrLLrFHTz
+QvnsQGvBwWwQvgRHlGGDFPFCGlrR
+QhvwBvBctBccZWZNRNmVfjpmjJjb
+RMmGGMLRRCFmRPPfGFpGPFPJWZQWctrtlQvZvltfrQWcWWBq
+gggwjjbjwwbZtwZBBcmQQv
+SdNbDDVSgPMFmPzdMm
+nZhnNZDnZPmZPWbppPpMlvRlzvrtMmRtqRzRfq
+HcFwsCQLVQwFwLtLbvtzrlrLtt
+GsgCFCgCQHHCVHsFQHcFdDPDbJDZTpZDbWJPNWWZDd
+BBrBrGlGpgGjsNhlBlpBwpfSwZJdQwfcZwvSQnnn
+LvWvHLmmVJQQHfQH
+RPLRMvqFTbRTjGBhjNFsslls
+cNZZZmZDcDDJmhzzrrlHtSbvgjSvgfPSWvPfjShv
+VBwnndnVCqbqpRRpnspnqRWtGgWSSgvFBSGGSWgtGGSP
+LqCMnTLVRwCRCpRLpbHDNzMMNcmmHNHQJQ
+MMqDtnVnBlHtZvtB
+WLWrWgdWwdrLCTFCwLlbbsJsJQsbQlQzlvrB
+jFSvTdjfnfRmVcRR
+ZLGqnvnqLzvbGRMfcRpwMpdV
+fgfNNfgHHjVmRcVdgM
+HsWDCDfCQCZBBZnvWtLq
+bTZjqflqZhcrlczGzppGNgjmFNnp
+PmmRSWWDMBQVNpWFznGF
+SStRBDSCCSSSwPBwBDBwPmZhZlfZhqHTsTfltHHZfsHH
+GbNbsSptQGqsdJCzsddcgzzv
+DHRRnmWWmZnmRhllnHnnnMLvvLgcTVvjVhCTvgzcJgLj
+RnWMlDZRlnHlmHWBFwGQqNGGPNQzPGqFwz
+vSGvHpJnBLbGHBNCgfDzzChDgbCfzT
+wFRslqmqTRgggQghPmQf
+qjRFMjWqNNMMGHTL
+fWGcQGGSRFQZhttZJfSSJflDDrwdClljVrNDdrdCFBCr
+MTgvLLPPnHzMbDwdlNbMBwMM
+mnTvnnPTcNmmJJWN
+qqbbQQnbWrqGgnWqvZpVzMCZjCgfjZCSVM
+ldcmDPDhmlFBHPDddLBVFDHLppZpjSCjjNfwNMwCpSMwhCMp
+FtDdsHPcHmdHVPLtHsdtBHQnsbvnTRRTRsRRqbqvqWnJ
+hhtBtPrgbbhhgjZjjCCHHNpNDHpffHWCvr
+LGFLVwswsJMSgFwMMpddSvpHCCdDdvCpvm
+sGsFsQLsVsLFnnFTJQthjcjQqhRcBZZtRg
diff --git a/2022/03/puzzle-1.py b/2022/03/puzzle-1.py
new file mode 100755
index 0000000..713e282
--- /dev/null
+++ b/2022/03/puzzle-1.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python3
+
+def cut(s: str) -> (str, str):
+ n = len(s) // 2
+ return s[:n], s[n:]
+
+
+def main() -> None:
+ with open("input", "r") as f:
+ data = f.readlines()
+
+ acc = 0
+ for line in data:
+ car, cdr = cut(line)
+ for c in car:
+ if cdr.find(c) != -1:
+ if "a" <= c <= "z":
+ acc += ord(c) - ord("a") + 1
+ else:
+ acc += ord(c) - ord("A") + 27
+ break
+
+ print(acc)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/2022/03/puzzle-2.py b/2022/03/puzzle-2.py
new file mode 100755
index 0000000..7be3e84
--- /dev/null
+++ b/2022/03/puzzle-2.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python3
+
+from itertools import zip_longest
+
+
+def grouper(xs: list[str], n: int) -> list[list[str]]:
+ args = [iter(xs)] * n
+ return zip_longest(*args)
+
+
+def main() -> None:
+ with open("input", "r") as f:
+ data = f.readlines()
+
+ acc = 0
+ data = grouper(data, 3)
+
+ for group in data:
+ for c in group[0]:
+ if group[1].find(c) != -1 and group[2].find(c) != -1:
+ if 'a' <= c <= 'z':
+ acc += ord(c) - ord('a') + 1
+ else:
+ acc += ord(c) - ord('A') + 27
+ break
+
+ print(acc)
+
+
+if __name__ == "__main__":
+ main()