diff options
-rw-r--r-- | 2022/03/input | 300 | ||||
-rwxr-xr-x | 2022/03/puzzle-1.py | 27 | ||||
-rwxr-xr-x | 2022/03/puzzle-2.py | 31 |
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() |