aboutsummaryrefslogtreecommitdiff
path: root/2022/03
diff options
context:
space:
mode:
authorMarvin Borner2022-12-03 06:11:39 +0100
committerMarvin Borner2022-12-03 06:11:39 +0100
commitfc738bf428da8381136855b8de478349ea239e13 (patch)
tree4437bd6ec5be29d7e34db5f3f6055ab89f6825a1 /2022/03
parenta1819f735e5939bad4f92ca90fd8163f4723eb31 (diff)
lesgo
Diffstat (limited to '2022/03')
-rw-r--r--2022/03/input300
-rw-r--r--2022/03/solve.py30
2 files changed, 330 insertions, 0 deletions
diff --git a/2022/03/input b/2022/03/input
new file mode 100644
index 0000000..5282006
--- /dev/null
+++ b/2022/03/input
@@ -0,0 +1,300 @@
+NLBLfrNNLvqwbMfDqSjSzzSJjjggcdVs
+lTRGPPZnRRHszcsZdSsccZ
+CFTTFtFHTtCtDDzrmBtrBD
+BJldgBWnRgWNWtllSlWShMcLcVSvVjbVVVvDVVVL
+HFGFwqQPQGwHrTFpwmThMbDDVcVmLvvshj
+HrpHrGPZZCQrfqlNdtMlzfMltlgn
+hQLhBtBtQNQjBjNLvtLjzLJpWbjJdppSwjpCCplllJdj
+FGFsmccSPTVPfVVHpJJgwlJwwWJWpCmR
+sFPfPFHZTHScnzBttqzvQzqZ
+MNTGMTnGWvTwwwnZhNZnWDPPdSjqsSPWjmBCSBWS
+RJrtVfRlLrfHgblHJVBjqqFmjCdBJjDmJdSD
+tgRftftRcRLftrpHpflHlctVwNNvZNcTwZnznQzwTzmhQwQh
+sQPpQpQhnlNsJpJSQphHcZffLfgLHSfHVHHFZZ
+zBCvrrWzTwqzcbtbqCbrCCwWLMfVVmmHVfqHFHFgGHLZGmVG
+rvvjBzTjrwQRcpjNsRss
+RrnNWJJNrplbLJBBWWZstVpmtZftptfmfsMM
+GHjnwndzGcqjGgqtfMsvfsMmMvZZ
+cQgwHTPjPwGwjdHHTjwccQBDLlWNrLJLNrnWrBRBlS
+BBBQJGQslJtcGqfgHpPnfftwqw
+RDMLDWLNTLTTNjNgvdqbqRnwqbfwPRzbVHHV
+mgdNgdTSMWmSQsQsBQcFSQJr
+RqQhRpsdqnvdlPBfzdVlVJPM
+SSZsDmSmssGZbJVwPBSzBBMfCf
+LFFNGLgLHFWrWHFmLWrLWLrsQshqQnspNcRTjnpTtjRRjh
+DshNcgmDVClpCfRs
+TnZjTWrtrqtWnGTrbqqTTZZwMpSVRSflRMflMjRCSfpJMSJl
+wHbGHrWHWrbnbFtTZcLzLgHzzgcmpNzzzz
+hfWQdhQHmPWhqdhQqpdQqWtzvwtCMCRvNCwNzMtNsHsz
+lBLnJZLlFBlZjGFbVjjlJRSMzzSszzpGpstSpvMNtN
+rVZVgZVgLnjFVlVQDDfhcfmWrQdTfp
+zqTrVZvDLGdMMLtcpR
+bClsCmQbjFtjljllntsGjGWPdcRWhMppPcpddR
+mbggmBtQtlVqVzgrzDzv
+LtpnGnGNFtbGntbbQPhTlRpRTzDlcClPCl
+mSZHgZMhZVmWPHccllzPzcCP
+sZhWvSsBqmBSqmgMqWZjQjfjrLbvGbtNFjvLtb
+TvMZMTTzWHNNFPsNbvDG
+dhVmwfhcnhRnRfdlGsDNNGqNLFNNTGdq
+JTcVVTlThmfmrrWQZHMrpZtJ
+zGMBMzPNDNcNZLBzcmLvbHltDbWjbthhqvvHtg
+rdJSQSTfQrRnsRfJJQHhWgbhtQblgHWgWH
+nTrlpVfSpswsrsTSdnRsfnJJPBZmMBcBZZGmZBmBMmcCNzpC
+nfzcnSlRJJScTZTzJZnsNjNrHQqrWBjsBRdWBr
+LgHwDLwmMDCphttsqDjNNssBGNsGQB
+hvwgwvghPbpggLtmmbCmSfzFfVSlZnncJTPZHSnF
+DbsnzDCsBPHDQHFD
+GGcWWnrGSjBMrMlhfr
+GNpqddqWLqdScWqcVnCswmzJRVzVVbJp
+NzPpPBppzjbpCrrQhggqvwwqRwrwQl
+SDddnLcDLncghQBWvvgR
+tfSLLBmmmDJGFDLJmMMsZZssZzPTzjTpzZzP
+RRCrJbSfNrRQjvvHppmpbZvv
+llhVGGGMPVTMlTdVzcPVHZmvqpvqZFhHFqmjFrHF
+ccGlzPMVwBGfBrLCDJrDLf
+VcVGZZVMlncjTqcjsWWf
+hzJRtRphQJtBRhzFpdrfrqrFsqswWrmsTmFr
+LJHzBQJRhPHpzQWBRzphHRQSMZlnbGMVMVnLMGbDvvbMVl
+sVdHFFmhPGVTdFmVFsgPdBBtBZjSpGSvtpBztpGjzt
+HCHwlncHfpnjSSpBzz
+wWQwlWWlfWcQMfCrfwTRDrHsDmPDgFVTRVsV
+qllqNlmglNNdzLDddGGNSHScMHMWPcPSqptQSSHJ
+bhhbChVsRjwGRCbZCcSZPpPMMWJSPMtPpW
+BhTVBsbrhCTrhfbrCTTTRRfngzrnnLvdzgGvNzdzLNvrLm
+nNwNPnjzPsNRHpFDHLLsLVHF
+MSBMgMZmWqScCFGWWDFGVvwW
+JBghBwTrgchrTbQRjztQPQbfhQ
+PPBpBHGfBHGpRRPDLMmnscRLdnzmdw
+bMFVTNVTVjbbrCWCsndsDwjDzwmwsnms
+QQbJrCCMWCVCVMShHGPQlHhghGlt
+dBQMdJQHbWMWHZLRRsmPVJmppJqG
+FSrzFnPnGNrlsGps
+FvwTnCzDznTwzhtHjZvbdbjQfZgPMv
+gJjVQzLgLvPJdMrsDsQtdQrw
+hBpmWfSfHCWNfmSppMrDDMwwMbDMlMcbcB
+fhphGpfNCpNSNRhGhqPVvjvjjjTzVRPzLr
+TsnznnrZsNwGNrbWbSvVgWzVSbgv
+mBBFBFQFBhSHggVnmvfW
+BJFcRLFFBhLpMNcdNCscZNnqld
+vqwQGZNSwNQHQQZNSwvpwMdlnMfBClZBTzBnTfTJCB
+sbcrjscccmPmrtFRrtcsPssmVJBfTCldnJJdVzMlBnBJTBlR
+tbDmhtdDrPjbDcrDWSHGqQqvHpWSgNHh
+VVWSwCpWTVWWwVbbvPJDwvDtwtMttLtH
+nfNLcNsfZNnGggZNNqGlMPPDDrlvGHHrtPJMHP
+fhgqfznczcjpVRjFLSLz
+pvcBCrPrcPBpTccGjrQhQdwMsqdGQddswqhS
+FggLnnFzzNFNmstlShMVwQtsgq
+RnbzHmNfRHmmnLzRnLDRZHRrCPJBvCWWpcjvJpwWfjwvrc
+HfdzzrGfRrQqrGVnznQvgjcjhhlMTlFjchFMVL
+swwWWBPNwPwZbvPMFTLjTlgP
+BJBJJDZtSrJqnFFfFJ
+lqqMSMBMttLMjtHjqjrdBnSfcpfwCTGbCffwCcwbSfTcJf
+gVFhVRZgVzJshFZVTbbFfvpcwCTCfbcG
+hRWZzRVVZmsWJVRQsQmqqndQrnqnQLqnQqtBlr
+SgPhCGGzczlCDVDWrlTL
+jvdvFvjqwfdrNfNDlzLzRW
+jzjFHnvdtdnmHZttqmbFdFqFsSBJspcgcSPQpsQPBPgpgmSG
+qqmQFmrbbWWrtqTVVrgLJTzzNzrJ
+nCjMGncHMJvzmmHmVV
+DpjPDGwnmDhbwQqZtqqW
+JlTTLLMRqlMlJMJgBLLnnCZCFrrrdTGrjPjGFr
+vwVpHVHVwvHmQVsFFPZQrjrrrZPNdn
+wtvmtwvpmbwVvssPflSBlRBqLMlLJBzSLb
+rtrTtBwTsfjZrnqJQplNTcqqlvQT
+sHzdWFzSzmGDDRVGVDGHWVhvcLLpNpqJCQqLhClhlcvqpC
+VRbmRmRHGdsnggbPMMftZB
+LMhtCSSftfTzdCdMhSCdMsQGQbGnbGQQMQggDNgR
+FjFHWJwJjRNvQggwnDsm
+plBVRRqWRHVHWFTdTthTLCfzflzh
+VjVdrHFWPmTjRGSRGq
+DMWMZDncQDcfpQzmTQTSQRGTGqNz
+WMnsCZJCffDnfCfvnZCPhwVrHBVrBlVHrhswLh
+TCZltglCZWQsMhqRHhsrHC
+vbbNBbGBmNLzczNmNjrRVbhqHMsVqwHVRwqH
+mzBSmzDLvPDPzcLPvGzWWSnsJstWlSsSlddWZJ
+nlFJZTlBbFBVZldFnlZlCQvQrsMQzzsCdCLszvLD
+hPwgVqSwmRcgSRmWgSwmsfrLPssLvQQfDPDvfMfD
+htSwtWHWVRNtWmwgtnJplnbFpBbNTnBTFN
+vnhBfSSvRttPJnlctl
+frHVDHFwfDLVzVlJMNTHllJHMNlZ
+bGGFFbqVLVVbzrFwGfdgFdwvhpCqmBpRqWpBpQpSSpSQSm
+RMBMMZBBmmmhZmPjTZhZRPnNQvwWfcSvDfQWBSfdQSNdDc
+LHzlVGHqVGzHGzsbCbqglbJddCcvJNDDvdDCJSQvWfwf
+HlzrHHgsqbHsVGHqbsGsbbsqFmmjnTTFmnjmRQRPFTFPZtrj
+LSLWRMLrLHqqwCBJqCstsG
+vbQfPjndQnbcQfmndRwttBNZRsGdsCBJ
+bmcnTfbvvPRRRFcmfhjHgzMrSrSMSLzSWgVhML
+cqWNtsdsWdlsnBsDJwZJSzFFBZ
+RhfvggPfffbVbfPmpMvRRFrZDFFbzDDZZrHwJDbwzb
+QhRgvpTVpPgJVGTWWNcTtqNLtG
+nppPsSPtPZtFdSWdvFvSnnPscRjjHRTLLjCmRLTmCCscrRcc
+wwGqDqfMrGqlhllqhhNwzGNTjCRTmRLTHzJjzBmmRmjCLc
+qrblfrVwGwbhwqghfqVhNMhtWSvFdPdQtQdgtWpvWPQWQv
+cLJvcccHNcLDwCdRDvjdDR
+ttPChbqhZmtWGCtZQwBdsQPQdwwsddQF
+WnqbbgGVZCZnnlWhCVtbtVgMMrJLLJNrNcHMJNJTJNMp
+vLvWghFhBWqGsVTV
+JdpdmbrBmsQGGlVqdw
+CJZMHPMZJHmzCnZHHrMjSvcDLDccNSBCDDFDjj
+mDgnmRVmqgCSScsVllCj
+HLTTMTHZQjZzTzprTGPwtcdlLcllWllWtCSwld
+QMHHPzNrQBQGNHzQqbjnBbBbmbfjbqjb
+tgPNgzzsSPhjSgbPztSbpDJZRJDTRLTTpRHpNRHZ
+crlfGGFlBGBrBcrnFlrFFFCrLpHHJTcLRJJVJvDHtHZRDDRR
+tFFtrdmGffnndmzhbWPgzPdsWQPW
+JHhvgvzJhBGSLHhgBBSBHzdBflDfllTqLlwLqflfMcctCcfl
+RjWQWrnjpjjdNQmmNNWZWpCZtqtDtMwwwcwtcDqcTDqC
+PpNPjQspmWpPWRWnVQQpQsWVvvggJBvBSGGdJVhJSJBFdb
+FrPTcrCGbcTCChrwNMRDMRvWRdHvzVRVTR
+LJmQSmQfJnssmjsHSRFHSHzdVzSFHV
+nQtgssgfstjLnmplttgFLLPPpGBrcrchBhCbhhqwPPCC
+qFtZtFzstvvPvqttNrCJFWJRFCJFRRWR
+ffBBfjQdmdQBfQfmLVQRPRpNNCgPNNRThdWPrr
+fQVQlHnBQjBLjlvDqsvPqHMsctSb
+rqhJnTTJqTchnTdhncmmgMVqtSBsBspgBtHLLWsBBWpWBHSH
+bPldNljGZjNCbFCbwwGDWtBDDtsDtLwt
+NjvlvvzQFFQhQqdQnMTM
+DJHGghhFhHgsGgThrtrQWBPPJWWCzzzP
+lTpffNTdZfrcwlCwCrWz
+dmvdvffSSpjTLjFhFMRRbnRbjj
+LfSqfmvfWPBPdljNNFVFzVJLNjJz
+QZQnQcpMhwhZchQnwbvCCDNDCNpzpFsJpsRsRj
+rchgQnvHHhQgvnwHGTffdmdTddTGfWHW
+SzZGtmTjgzQCpJwpVqrVzz
+NWddPllPDvdbccgcHJLCpClFLLVpFLLVLV
+bbdRRWDNdPfgfWPWhdccNddRmBQTSGTTTZnmBQZjmsmnhGst
+LgvFffmfVFczCWWmWCSh
+MbwbTBDwbZtwBDMhSCGhscWSwVCsSw
+QMtdQbqtbZTjVbMtZDMgffnFnJpFvrvFprgvgq
+pztdqqzCrpvFqpJQwCvWBRGRWLWcWNBsNNQcNR
+HdbjSbVhfhcRscRmNm
+MDPffbjbjgFgzCZdFdgt
+BmDQZbmmfbmbvhvhbgCsCl
+GqVqMHwpGTLHLzwqJlCgsgShhvGvJgGS
+LTpzpLFprpfmNrBBlfQP
+RjRhBqZbwBbjcwgjPmRtZjZfWFfFznWQNVzQFQQnFzWmMN
+vpTPDCdpPSpTSSMzNHzMvFQNNWNM
+PDCpLGlGPdrlqRqbqbBhRLqR
+PmHZWmJzzzppHfHdHfddDMDLhRbMRgRMNNnPgNMM
+TCwBCSSjwqwVqQldTSQTtjVhtbbhbgLLbLLbMggMbDRttc
+QBrwFlqCfdzHdvzF
+GvgGvgfvlzlHGQWRjGMpjZLjZpGW
+DVsqJtnDsJTsTqjpLTdcmWWLpTMp
+NNqVhsPrrhqnJNnJNzgBvvjHCCPSjCvQQQ
+pqnswpqrrtqrnMsMPMqzVfgGzHBVGVftfBGzGG
+QWFQhhmDhJDmJJhhJLcTcfHVvTlTFTfVvgzG
+ZDZLddWWSgDCggChRSMPspMjpnqjMPjj
+MGwMFLFfssfffcGcDrnCllZtnHQCnDCZWD
+dbTvTThtvVVVNWVHClWQzzlQ
+TjbgBqTBvBvjRvbqvRmPGMcwSPJPfstSsfMBMf
+VtCjjqgwvhCCQdSPJJdGnwwLTT
+brrBsmNWlzBpSDcpSWLcWD
+SSFsrrrBrCqHVVQFjj
+LQQNLgvNDnNPHPDQjtGjnmjttBjVhSmJ
+sbWfsMFwdCpdCdwWJVVSltVJlLSlLSft
+TFcdMTbpdbwdwgTDQLgDNNrTNz
+gfgSsnmnWnhhctcJ
+ljjMfwwRTNbRqNlzVzjbtDvPvchvPCccChtJtPVW
+GjwpwMpbjMbRMNwqzwpQgQQBfdHfSFrBmQBg
+FmcmmTTMdPTGHjtGGnctcN
+DgqzTqCgDgpZTrqhSbSpzZfpnHjHlnbtbHBGnGjtQHnlNGWt
+zppLhfZTfDqsLMPdMVRwwM
+RtsMZJSFRWbRsJbFnFzVBpBqgdRdGzGBpDDj
+cTmvrlMQLHLllrhwlmfdQqBpdVpDqGdVpjVzBq
+wvTfcHhhmHlhTNLFCnFnNnFnFnMFZJ
+grjsjJhhNscgJFgPBnbHwLsRHzHfRLbH
+ldMMSSvqtSMGmSSMqLRnlRwbrLlRLRRWwL
+VtvDdTGGGCvMDMDTvdjhQjZppPNrJVpZPVFg
+wctlscwwBTDnJcLNLHDN
+bhhMnhqjzFRjjjPdNDDSvLdJ
+MWzMzbrZZZmWQzhWbMhwlspstmnswswllBCgpG
+rzmddBcmgFjRzSHHDR
+vqpgbnGpqwgbpHtbtRjHTjTfFH
+WWqCwvCqCJvCJvwpqvMvnvJMdPgZQQdZcWhBBBrPlLlmdQdm
+ZdHTtNPNPSRBbFjjTTsr
+WmDhGggmgWWJcZmMhVllzjJCrbjFzbsFFRCj
+MMGDmMGGgDGgnWGWpNnvSHStLnwffZtHnw
+ddZqRdqjvjZdndlfjwZQQCzmqcHLzzTTHTHzchHTmT
+BPVPBBWVLbFFrWgJLpNHcPSHCPSCSCChcCPHTH
+VFNbBJrGGJVZGGLwQGnjQL
+NllFnzNNnNnNzmrHmDFGLGcccRGjGwHChGwwGh
+StMZgPdBgbbBLLvCwCvgGwwj
+PsfPtBJMtPZMJPbZVVPPMMDnjDlNlmrnmWnmqzpqmVFm
+mGGCppgGWWgmGBzMVzBBBbBS
+HnrRdvZvTMtSBtbZ
+rHwRrjlrRwrnJrCsCDlLWCqcmCMM
+zHhDNmDMNNJHfMNJzjsdvvsvbvjGdCGW
+tVwttwwVVFBSFSZqSLjsqLdLCWCvGWcdLs
+ZwZgwgpBFGlHgNQmGM
+TNqhqvqFNWFrlqFqtDTrhTSTbLfjmjzbwMmMbjzLPDwGLPPP
+scVRRQHVQVVHcRHpVgJJCRHMMZGMzCwwLZPZGMMCzLGwZw
+dHsnQdHHdnBHspJRsVppFlNTSGGNBWBtTShNTFvG
+hdZthMghfbbHCgQgBp
+mLjTTjWrTrSCbZsLSbCS
+VVPJrjqcWVmrjcmWRWTZTPcWldMNqvhnhMFdvdMhfNdldGNM
+sFlsgtZFLFZzSZzpnQrJ
+DjRbcjRdBrpRQpMJMJ
+jNcfDqqfcDBbmqDFggpFCTpgCNhWWG
+LMGGbbpLcpVVbfcpcpdvPVQPmZzJZjqSjSjgZgzqZgzTmm
+BrRnBWrtRlhBjmqZCnqJgCSM
+FDWWrBHHBBDHhFHttrWFttNpfLppbfcGGsfcGsFfccpcMd
+jzHqjHLVqQQlHfzqlbbzqHQscvNsVrvnNZTtvNvvvcrGtv
+gJCSRwRpJRtNNSTstnTT
+wCMnFgnpCMPnJgpDQbqdQdQQLbzqDHfH
+MpqJWmqlNNHmmwwBLLvL
+QzFDFfdfQTtSGzTDVMdSFQDwHLBhHLjHjbTbHvLggccwHb
+VQfsSDfGftfsdGSDSSQSFssZJCCMlMWWZPWPJMZlRp
+lcqqhSsgTMgcqBBZnqZTBJJpdGpGVdRNMJHNGjRJdd
+VbfCmPbtttfwwWHdGGrjHPdrRrHN
+CffFFmwmDWmtCtvQbSVnTlBSDsqZhVBBSc
+gPZTgmwvcnqPzhnW
+GJVbDhpjsbWzjfNNNNMj
+DFCbrBJsFJpBhbVFJCtvTgmtRTtQQltmwm
+BLZgTJPqZzFgCGgCFlFF
+ljfcDvNDtHcftNdMCQnCRnhnGjCChG
+mVvSdDNDHlmHfNVlSWcSDmtpbpTzppwLPPLPPJLwTwBLPS
+FHRzMqvQHvndJnFlNdhZ
+fcjWWsjsSmmrgsGgjGcGWsPsnhZddffRdTtNDnZlnDnDThhT
+WSPcPsGPSRGCmLcGgpHCzBVqzbQBVpqwwQ
+PJzwjrVHzLPrZJHgSsNWbNbmNQtnLSSs
+hGhqpTBRRGFFpMpBqGpSNlQQmWlntDbmTQSsml
+MpcvMqBRhpFRNCcjwZwPZwJfwjHz
+QWJsVCQDbVWbprrWSZWFcmrS
+wMwvjRftMLhHfjhdMhRhjtMZrmrmZqBSpBSprvSpTzBTSF
+dLNNjhhhVDlNDspN
+MNmmtzlQPQmlttlQlHBGFFsHsPnGnFGWgs
+CwhhwVZcRVRcCRDWLDFHWWFGss
+hwdwdCwCZVSwZcrvhVwCJtbtQtpzmzQHvtpzQmmmpp
+CccMdVLJcnCVhCfmjGjlfwwwMwWG
+HDSbggDTNbRDHtTgrDpwmnGFfpGgfWfBFmlm
+HbDzvQNzHbQLnQddZCcn
+jWlqRjWwsqjHHqRDDPMPgpMLpgSMnggC
+VQvFfFbdTcfhbcvCpvPrnZgLLpSgLp
+PNQVbNTTcbdbfQdbmdVVGfbhBJlHWqGljJqBlqJJlsJJwqqR
+WFGnWBTrvtgnjBWsFWggTPlhSfmRSRhZMcSfhZZpRmtZ
+CdswHJHNsCbHLVVcZclphwcchfphZZ
+LdDCLHsHzbNNNQDsJLNGgPPBvFzjggPrPTrrFB
+pGFwwLTPjDcSCPpSdsqtMRMDdVQdVVQz
+JBJjZgWgJHvHJgJJbBhNJvgZzsQVRqzdfQQQMMBszRzRzRfV
+nlNZWZlJngbvNjgZhNvHhJvprcTclFCcTPSlTCcSpFcLrG
+PdHJVCbSJmSVHdLdHbsbsqRwnlDWhZnZccWqDwqDVw
+NvMFlGrQTvgpggFNwZhwWWhhqRWRhTqz
+gMjvtMpNMrfFrvlffgmdjLLjCmmLHBddLJBS
+zNrlzhJGdlHGHplCJQQVbLhRFRbccDSbVDLqRb
+WwmwnWjvjmjZPPFFFRDZqVbqqJBS
+tmjMJstnWnjvnsTnQMfrQMldrGlCrGfl
+MqWfZlpjMPBgffgPNNQnVnnqRsNVLVmR
+TcwGCTSvthpzCCTNVnsQVSnRnRQnNn
+TbrpDvvCvCwTGDzvzhpzDzljHBZbHWZgHPZJZjJJHfPf
+DWNNQQHRpsRWDQPQqHqqgJBCsjjsFFFngBzgjJzl
+tMhMwTrTDLMdmMLtMMrbmVbZhJJnnFCCjnlJjjjjBzFBgZ
+ttTtDmbfqWcWfqPp
+QhvTQqggFsmvjsFTmqZrzzwZrHnwpnplpZ
+WCJVGCSLtDPPtHDbHDbdpnrMnMrrpwlZrwpznLpl
+VVJbbVfStVHJJVtGmvsfjvssFFTvvsQj
+pBCqCqhWjpnWCnffJDjfWzJBZdcvwcPdvJvJcgcrdGdvggrv
+tlhbHbmNTbQgbGRvbZGrcg
+tVFLQNVlmTmQLQhpzMCBzCpzjjFMnz
+qhWHwNqLHrLJjqgHddFchMdnnGnRhMcR
+pTzTPVfZQPffNVtVVZfptRGsRbbbbcDsMMZsMZMdRn
+CfzPVzCfPBzPBqvWqgBwjNLjjS
diff --git a/2022/03/solve.py b/2022/03/solve.py
new file mode 100644
index 0000000..68b58c2
--- /dev/null
+++ b/2022/03/solve.py
@@ -0,0 +1,30 @@
+data = [dat.strip() for dat in open("input").read().split("\n") if dat != '']
+
+def part1():
+ res = 0
+
+ for line in data:
+ comp1 = list(line[len(line)//2:])
+ comp2 = list(line[:len(line)//2])
+ inter = list(set(comp1).intersection(comp2))[0]
+ if inter.islower():
+ res += ord(inter) - ord('a') + 1
+ elif inter.isupper():
+ res += ord(inter) - ord('A') + 27
+
+ return res
+
+def part2():
+ res = 0
+
+ for i in range(0, len(data), 3):
+ common = list(set(data[i]).intersection(data[i+1]).intersection(data[i+2]))[0]
+ if common.islower():
+ res += ord(common) - ord('a') + 1
+ elif common.isupper():
+ res += ord(common) - ord('A') + 27
+
+ return res
+
+print(f"Part 1: {part1()}")
+print(f"Part 2: {part2()}")