diff --git a/2022/.idea/runConfigurations/Day_03.xml b/2022/.idea/runConfigurations/Day_03.xml new file mode 100644 index 0000000..577ee0c --- /dev/null +++ b/2022/.idea/runConfigurations/Day_03.xml @@ -0,0 +1,24 @@ +<component name="ProjectRunConfigurationManager"> + <configuration default="false" name="Day 03" type="PythonConfigurationType" factoryName="Python"> + <module name="2022" /> + <option name="INTERPRETER_OPTIONS" value="" /> + <option name="PARENT_ENVS" value="true" /> + <envs> + <env name="PYTHONUNBUFFERED" value="1" /> + </envs> + <option name="SDK_HOME" value="" /> + <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/03" /> + <option name="IS_MODULE_SDK" value="true" /> + <option name="ADD_CONTENT_ROOTS" value="true" /> + <option name="ADD_SOURCE_ROOTS" value="true" /> + <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> + <option name="SCRIPT_NAME" value="$PROJECT_DIR$/03/main.py" /> + <option name="PARAMETERS" value="" /> + <option name="SHOW_COMMAND_LINE" value="false" /> + <option name="EMULATE_TERMINAL" value="false" /> + <option name="MODULE_MODE" value="false" /> + <option name="REDIRECT_INPUT" value="false" /> + <option name="INPUT_FILE" value="" /> + <method v="2" /> + </configuration> +</component> \ No newline at end of file diff --git a/2022/03/input.txt b/2022/03/input.txt new file mode 100644 index 0000000..0b6d449 --- /dev/null +++ b/2022/03/input.txt @@ -0,0 +1,300 @@ +VdzVHmNpdVmBBCpmQLTNfTtMhMJnhFhTTf +FgqsZbqDDFqRrhhJnsnLMTfhJG +bRRRPrRRwSwbDqgjvDZbRbQzpzmQVWCzzBdvQBFCzlWV +GcDdRdvhRssRhGDdShCRtqWjlQzqWgqzNfNjfQWWjt +mwwnnPFwmVrPmJmzfNzqCjQCbgVlgC +nPnHHLrHwmJTrCTJpThBscBSdSLGZvZBvRhZ +RVQQcVlcSRclfZCCCnMJJTSTnC +NdHwjdwjbBBZrrZrbJDZJJ +wmhjGGBGwwmjtjtdPlfRcpVQlhRppVJF +pplbNBPPrppllrFNbpvppSTcwqcWFhTTShhJDTchqd +RGzRfLjjmZmfmwLftTWhStStJWTdWmDm +nfsMjQssnpPvNnrPrw +SjjBgllzlQjBZvlBBgcFbgJHsMhJqbMHPggJbM +hRLRVDdRRWnJqnnHTqMCnH +GRfLddRRpVhNVrWSjwQQzSzcGSBQSc +qMwNqqBdQdnTVBBVVhMVnVFzTHPggTPjGRDzvPTjjmvPDj +sbSrWJpStrtPtRPttzmmDD +pfbJJcbsrcLpWLllsnFmcqcwQncnQQqVNQ +RBTWCMwCwdZThPZcZZ +pVmVpHLFFFHHVgVmvNmHSQNvddlPPzZJMPcdhclhjczLdZMP +vnnNnFStGMRDwWnn +fWDdJTpDJzdBBBdmDSbSRHRwPqbPbHgSbz +slQtQvNsMVvrrgPRgRglnhwWPH +sGMMQFrsjvNMfWmdpfFDFZBf +vnMRMWCMJwWWwwWPjmSdVmLdzvVbLrhL +HsNfDHQlZpNqfQzbLbrqhjLmVdjd +dfDZQsNpstHHHptZDDtZWgngtgBMPMMRwCPtBBGW +HwQwwbwFNWHwHBVFQFLQzRznZnSzcjjjpPbcPpSP +vTfTJsCmsftJZmTSSdPvzdjRSvPdjd +TrGtTJfmGDfDhrhJJJsqrZhDBFLHHLLQWFwwlWBVBBVwgLFD +FFTJRLccQgmTbSsbGm +PBPPqCvCwqwhQQVhQngmVmSgglmGnHbnmb +zqthvtQPBfCCzPwQPtwQzPwNLfNRFNLdLRLFRFFNLFdFdW +nszjQnsPwjznzCCrhJqvjqhmBv +tFWdHGWFGtctlNNpZBBhmqTrrbWqvTBT +dlFtcpHDVVVHFdNGHGpGfQgsPDzSMsQwwPwgLLBQ +TzQqTJGvnnSzqrWTnvfbbcflQcVltfcCMPVM +jFjNZFFJLpFwmBwblcpptcVtfbbVlR +jmmJdBBLNdGDWDDrdzqn +pzddqQmGgbqgGpbJmmdnLZDCRZnZvFlLRZLSlLRT +rVwchcBBMwVBHhHTZCTSGSCRTZlTDr +HtccPfjfBhMtVBGHWpNqJdJdpjNJppWz +WThTWWhtPbZRvvWbbvRTSRMjVRLLgFssgLpVsfSF +JdwrlJcCwfzdqwwjsjzpLMgVsMFgML +lQrwHNGJHClvTmfhBmPQmt +lbRLhcLRpLJzgdGddF +qvhwqDDCVtBDVhfMVGFnzGGzTBnGzGGgFg +VjCwCWCMtjVDtChvQhtffcSmHpNWrrcHZHHZpplWbp +DJVDVdvpmZdPgrCbgbgCJC +lzczcWwwznGhBgPSvTlCrNgqNC +wGzzQhzGGsBBGRBcQwGwnwjmmRHpRfmmMpppMjjHDvLL +HJjJQWjFmmWtFmJTMchghhDwNMhVMWML +SznPSRfRSSPdrrPSShbDVhbLPwcwGGwVNh +ddRfzdRrCrRsZDSnFjspvFvqFqFqTvJt +lflfjQfjvljfbfMLTTDCmHNLNVbL +HSJnRrrJZJssnGRrnsrcqqRnDCLBMhVCTLVLhVNVJBBBhhBm +SsrGGqqnSsWSnnqWHSrPfzftvFdvWlwfQgQwWvzz +nQlsGnFGwwqNJWmJJjpplt +HMTLPTRdvsTCCThDCZdLdLDNNpJBWJbjJMpBmbtNptBWmm +DLCzPzTzZDdLdGSGfSGrsnQGzr +LNPPLHNPHQNQSBFDWDPgggFv +hszfWCWJhrBMsSSBgvFD +GGZjfmJTjmZfrJrZrZJRGwNQnlLNHWjLVjlwdVNHpV +BdNVdTcGVclmTwrTnwPwrHCr +zttBWzfLsCggHPwDrf +szsWSMbWzzbqBbzJjtjsvMzzvdmdVpGllpcRNZZhmRpZcGGc +CjdbMmmmZFnzzgHlttGBVqtBGtsldG +LvPPWNcFSSRslWhBsllT +ppccvLPpcSNwLLwrDNNpLvwJHCMDmbCJbFzgmZZmFgbgnM +TTNRwZqhcTTjsNTTsmrJlvrmmmqqHSrlJH +fLQCCdtcfCDDVbVVQdFbQbdJHMHrJHrHnMllHdMHPrMdln +WfQLQWWDbwRTWcRssN +HQGQWHPDHNjMNQGNWNTWCvZllzqFZqzvvzhCtvFj +DfgwdgfcFpchztvt +sRggdwwVdgmnSTnnDBPBNWLn +WbCZCfTVTTJjSwGdWNDGGw +MMRqggMsqhlmlhrssHgRnRmRvdzdczvdNGNLzScGDrNzrLNc +lRqsnRhmqqQnQpgQMlgDqRfBTJVFbJZQtBCbZQJVZFFb +JnhQcCnmLDsmgmgr +bbMZppRFGGRPfBMMRGMZssTTrLlLfsLlVLdsLsdn +GZGSpPGMZtGGPFFRGBCwhvwjjcnJctvQcvHq +vvrPrHZMGJNRMnqn +BVChWWcDVWsBwCWwGrJNhRLJJnJtLqnq +cjDfcfpWWsfWccBsHgPgrPTdpZbbgggv +GshtVtVtjSCVtVvVGtlVvFZLMvLRZmHmZwbLwZdLdZmR +JWzNDQzjcgJgQBJgzgMwLLHZZcdPwRLwRdHZ +QWTppBWfDrrNBTTfffhFCpVSjnhCGsFtsqSl +nmbCnzHHNzCjCJHJNSCWHLBLrvBrrSGRBDhrDRLrGL +TVtPllwcgdmTRhLQTQhT +fdFtccFcpPmggfdfNzHzCMsbCnWnJs +fMgddvjgRRvjvjVJVdTlZGGtGnrlnqTccNjl +HHSFSWSmmpbBpZlGncrNGbNtrn +WDWBDDBDBDCwPBWBDWNQDgzvVvLRvsVLRwvwdJVLwL +ZSmmvcpsmcJmJvqgBZgZqqtCtZjl +WhDwhFSDgtBFjnFg +rTrSTLWTTHNMNwNrMVddwNNhsmJGQcRsRcJGsJzQJsrzPsPm +GBtLmPsCQqsGqgghZHDzzgLbFz +zjjVTzTlRjRJfznrvrfpnNhFSghbbNFgHrbHZbDHbH +vpfcTJVpcVlfcQPMPCGzCBsd +HMhZNffcPZfNMrzjjFdGcJDjvJ +VSBVVLlSQQmTVSWpSQzDrHzTTvDvFjFdGGzT +mQSplVHWbHLSgWQnShNwsZMZPfbsNCRNCt +MMqvDzLwZzlMqQfdGWPfgPffPglH +ShTcJshsrRdnrdfrrfHp +VVRtFhsCJVJVvwQqDdbDQd +dmnNMlFNvmvljnbpMWNDFQvfQJJGvfPCfHGgQQgcJg +bRVzLBSSTRBRBBrwTrVtRwCfcGHcsJgJgzgGsggHCzcC +ZbtVTTrrqrSSVwhqqwBRwFWMDFNdjdZpWjdDDppjMW +MTzqtbLtwFzJgbHgfbdWWH +VMNBjNVjvNfhhhhfNPhP +jmGMvlDZZnVMtzlwzqqCpwFt +PpzGspGmpPsFLrTnTLzzBg +QCWvfjfWjRPFZgrvqrBvTg +wwNRCNQQVNRWjNWfQbHCCClHGDGJdGhpdhtPGhltDlJD +dhbpGzhllzGlPvnzNcvtNVnc +gcFMsTJDMMwrZqfjjqvvfnPtqJ +sWRWTRFwrTgLDDFWgMsTlpSlpbSCdWWdcbmpChGd +QccdFFFcFbcQPQPHMgpPMp +NJlNSSMLDfJfmlSqHZRNpRqNBRPRPq +LlMmJfvDVVTJSmVMscsCFtvwcjWjrjCj +NVVMGWFSMRVGWSthwhTJWzcJCcJsTs +jqRLqlfRZcmjcCzT +rlRRrdrflpdvPbHpflfPlfDBgBMQpGVQMgpVDGMggBDV +VwRhccRsnQStRhtGQVQVsmjgDgqJdggDjqLDgJlLzmLl +BWFZpWHBNCBCNBzBNvWBpzHZqqlMqgNdlllDdqDgJDLlfDdd +pFbTrrrBzbzTtSwStQnnsrVn +DRfFbFqzbddfPFtsJnJRsnClJRsn +cgjgQgWvSLVQgmWWgWVjVSSSBTltThLnqJssnTCZsTThntZT +qjwpSrmWgcSrGMfdFDFdwHFd +RWjDDWDjDNjjgDtSRRgjcjzFpnzwdFbFNdbFbpnldwFF +vQfPfTQJbZdThTzL +PrBQJQsfQqrrbfmPqMBfJbggjRVgWjttsHRSgRctDjSs +NgqNWqqWWdnJdqpBNFtCmJGCDHttDGDsHsHm +BjvzhRLTrTBQhTMQRjRRcjPGtmDCZZDZSCmmMSSZmVmSSt +vQzRvRzQcPcvfQzRnddppFgnFfWwBFlb +nnPvfvgrtPDHgvvGTRRRPZQGpGCLLV +FlBsBdbllFdfWpbGMCVMZLVbZQ +lhchNcqFsJBlBszztvwHjvzgrzmzffgH +zZhdjTpJJpjmmpPZhvqnnZHqZcggvgMbgv +tFpFQFSFtBGlFNwFfNMnHfbHcnvcvcfvcqrM +GBFlNLSNVGVSSGtQSLLBBlNtphDdzpmmPmTPhRmdzdVCCDdR +rpRCCDLpmnCdJCjn +vMhSFvgsMGLmnmWMmm +wVqFFvwvPPHhFhhgHPwHshpqrDDzqlfRbpftRLblrllr +CRNDzdJCVDWzVgDjdjzRJzWRMTbHsMNZNbZMMbsfhTtMTLMB +wSlwQcSpqPpcqcqFSqpwslsTfZtLhtlthtBHtTMZ +SPGFGFFmpcPGDrWDmjDJVffR +dsmdtJthJphWqHRPnRRsvvnnfR +cDBMDDDlBZglDZTMDfzVvNRrvNPVHzRRTV +PGMCCDClBDDbbFqmmhqQdpWGmmWp +BJjcGhcvCnBdGHsmHSzZDzSDMHmRMQ +qLWPLVrTwWlwwwrfrFfGDNmDQRMbQMzzmmbQLNMM +rVWrFlGqlqwVwVGgWGphnvgBBsnvsjdBnCBnBg +sNNsfBsmcGmgNTcHHSpnTWHnpV +QlrhlrlMglhDQrdFblvFtMdnDWwSHDWWwnTSjLwVDSwwwT +QtdMvltZhbFlPPZbQtQthZQdqCsJJGzBqqCBmCNCqgRCBsfP +SZnQnnHRWRQRVjHnqlJTQPfdlqfJftqG +pDzmbDBFbBLvvzttfdlTTl +gsDLLpcmsSZVwlnRsV +LHsWjwjWqCLsqCHcLsjdLqcdbpMGZPPtBhthbZBpBhMllwPG +VFnVbbvJSfbgphSpGlhRBBSP +JrrTgmFgzvNbrmNnmnvzgTLjCQWDLDCsTjssjqcHLc +QmwwqTqsrdqNNqgtvnVDVcGNNtvv +WBFBpzzjSJBJzJbfntgPzVzcvPnzDf +HcpbHZJBFpjpcSZrZsdRQZrCwrwd +JqmLmbtTWThBTWvWGVSrrVDsSGSG +wwzRzNjNNbsPVPds +jfgQRZwpQclQfffHgpRpwpfTcqtLLqCbbFFFLmbmTTBnFB +fGpcccNNqcctqGMprvMPmbbzFSflSRzPBBlBbS +JCjnjTZTTGPSGmTFPb +ZWHhJjHLDVDgHLLDGjnhctsstwqctNwWqNwwQrtv +sDwQhcwhBDDwrhGsQnRBQHHMHHMNJMZFCFRbCRftMM +zjjlmjqfdTqlWdzTqmLzlzVjNCHJNHNFMFtbJNZgVNMMCCtN +vPTfLmPTLWBsPDnSscnS +ngznwDPPTzhPPDCTQnTTDQBQqHNNrHFVppbbjRFFqFhHqRqr +tZJtcGsGtLLcctRqVBbbqrspbHNq +BmZSvGBMdWPzMPgnnz +MpNWPVNWWZWVVNZHVcvJjgBjJMStMJSjjg +rzdCzrCTTLRCslvJDSjjdScgDm +RLhCQzqTCssThRQzRzwGQrrCFffbfWppNpWNWVcHqZbHpVPp +zQzCVWdSSjCdjpchWcGftflGZcgG +RwnJTJwmvFHTBFmtBccZZfBGMstllM +wwvvHRwqDnHFrmqnrSbQVVQfSbqQjbqjbQ +ttDftStSlftPgSHmJbFwnMnFwzbrLHMMzz +GqTBqhBqBvppBvMMTznrCbCnLwfr +RBjjpZZvvZqGcNhjjpNmDPfDcsgfDfgScsQQQg +rsSFccvBHppHPsvQrSHSprFjnbLGdbzLfbGLLtLjjzLzvl +JWWJhmwwTDTGtnzlhdbtLG +CWNqWRNCwnCJVppQFFFFNrgHBB +MSRVnMjnVRVnPlcsrtMtschgDl +NWHBwJBwBBQCHHqwWQGBNgdrFFtsthcqdltdDsqttq +CCTTGCNCCBfNJNNWbGGnvVzDSRfDRSZvLPSzRn +MpRfjRjWpZzzzRzZSpjzZjTCQcGdHLWNGqdBdcBWWBLccn +lrbrsPQDPQglDtwggcLCqnCdNNdHBLsqNd +blwbJggvgbwlvQbvtgwmvVwRfTzfMMjFVfSFjZjMTSTSzj +ttSGjHWVrwWrWWvhzvhmhDfR +qMBdNNsccQgfDRzRmqlhRl +gQJdfJPdQBsMggMjPrTCLjrGrCrtVT +tGFdlwDwGFdNtStghWWdQFSnTVfCfZhrfVTVCVprnRRhVn +cLsBPQJsQPmbmPHTnRRnHprCVfns +MjmvPqqQjPbQzjLwwDWDSlzSlGSgwl +NSCpFgfbscbZZZwrtgPZJT +zGCQlVGmmQGVqqJwGtHZGrPHHRTH +qQvVmvzmqCdhhjzCQLjljLQMnMDSFWcSfnMfpbfnNcFFbFDN +zFgqjQBmWNlWlfHrHdLc +wnbCpSSZZTJSJSnmdrtHfGtftlcpltpH +ZSwhVPPJgNVmNFzs +WNVJthVHRRfLqpqN +gdCGcCgJBCrgScRLzbjQQLfRRR +SCFdGSFvlhTJsnvW +FFZwFZZwRmFFhHtNLNLGRtsqjLMt +gbDnnrMbMCffMPbPLNjGNlcppNtspp +rgbzrzDrgVgnrBzFWMWmWBwHWHShSB +zjRVjDqzRjvSBnBGGsfsrFsV +fLccLLZpJMctwJWWWJWpJGCwFwsgnngFBPsCnnTBPT +LbJlZNWMtpMlHRNHzdfSDfdj +VGbbnJGSTsVTssTTnVVWMtfBBmvftRHfHBMJJfZp +ghqtrzgPrjdzQCjmZMHfRHZHBmQmmB +gltFtDqFVlTVWlTl +HqNqZDTvNvVTLPSTvzfrfHfdndffwnbdnwrH +MpSJlFcMJmcpFlmClcMcRnWbWtthrnfwnCGrrWfrwC +RjcJJmSFMRQpMRFjMNVvTZjNPPvLTBPBBB +MzClDtlzJzFzNGGm +bjcLRHlTBsFJGmRm +HcPSSfTSpLZLbSwtrtvMnlDCDPCl +gWWgQJCsVhgRLCWsdjpmcBHvfvrrnvCvBB +TqDtztqtStlbNTPtllqZpvmcFHjNjvjNvHvmrrmj +ztPPGZqTPSbJgchGgwRQgQ +wVrdtTqtCCvbNgbNTTDN +mhGzWhGzMGWGrRmbFLBHZRNHNvZvgB +hhGhShpnsSrqVCVSSj +HnlbmGnlHZHnlBcjgwfDVfwLsGLGLDgR +WhWMWTvQPWPLDMFRCDMsVD +QdzJQPSPZqJnJRnZ +TTjTjFBcRBGjwsDTBLmrCftfRVrrCftCVNRP +WnqbJWnnQJhSqVfVPfDnggfrVN +hSlDMllvhbQqllZlSWQdSQTBjsFHBjTwGdHBTBszLzcc +rNWqWDLZWcqFqLLLgQQJnndnQdNzzJVMzd +cPtsPvChtRsGswHPGbwcPcdVnpzvnmBmVvJBJdJVJdzn +PfRfRGtsHsSRftbbbbHhwCCsjZgSTgSZWDTcgDZjLqgqFWLq +BNzPnPJNNMwHJRhBGRWRdjFQddFlFjWd +npbZrgnLSCSrWFjjdlZGlcDF +gqtmmngSbmgHJqfqzNBHBJ +stgzttBPRRRdpSVVpdpS +WJFcLQmJZHcCFLJmcZLMfbpGSWMNpGftSSpMrb +mcvvQvHmtLCJmHZQHZHCDHJJnjqPjjPzwvwhnwPqTjPBzPnB +DDmbbPqgFSbSQPtPQJttrltJ +CRfcnZWmRRhJNVtsVnQlsp +fcBvWvWzcZWCzTTCTTvccFMBHGDdSwGFFbqwFSGSmF +tCRBPCPRjzsJszBmtjmCvSpHcppJpvZdHHHcHZJG +qbrlLnWlQDQDNvmHHHHcrZZvdm +nmnWnnWmgQsCFzFCRVCg +sHMHCDZfcwMcRcLMcZDCRCHMPdJqgjvVdvqgdgfdJbQgvWQb +FFhTzmzGrnmtjTBjBBprrmFtqGgQqvVdPbbgqQQWJvvWJQqV +TrNjrnFSlwNZNlNL +JQGdsdzSzsdFQFSdssnndNlZjNPTJZNljVjTPhVPhT +GgGLfRmHGLhNVjjNTLhV +HvGvwpbHHRwpBrvBgSSzSFndtzndCrsFMd +DptFshMrhDhDwmPPhwSNhmmS +RLdcdRvBjnvRVcvlcLbCcbCwwpGBwSmfZqqPPPPwzmfqZq +VlRLvVjCJLnlpvvRdllLcJJWDHgMMHDDHtWFFDDQgH +SsSdrndpDlCdLftd +VGPVJgmQrVGHHZfwLlfCTmfwlDlT +PcJHcGgcWWbJpjRrphRbFpRn +PdPSMHMLzPPSShBdffMMzMRHQQrpppcqTCQQpCccTGTRCnCQ +vsbWmFbmJmZFFsmsbfpGVrGnWrrpVpnnVcTV +JZslstfZNNSSPdlSMwlM +bLLzRzZLbRqJJrDGGVZdwssDvGQw +FCtNJlTFtmPfldSvDvQFVVsjSv +PmCPHBhhPpWLWgzgHJ +qwmwFHCgPgPPqPwMCrHHFBVVRBttVRRffVfmsjVNNB +WSvcSnvbSWbhcbjlQbvlSQhlfBGcspVVsVGfVscpzpNcpBtN +hJSLhlvlTjPFHMLCCq +bggDpTggncGVVWbQcG +sRvSwwwFBSpFzvRvMFZqmPmMVqmcmPPVqhqqWq +SRBBrFZZwrddBFRjlptnLgDnTggdtd +PPfMcZMflbMQcMllPVfTVMwjWWmZvpWWpWhhjjpdWWww +sDQNnzsnQgDNsFzFqtGjGmWWSpWrGhdpvphdSW +nNQNqLBHLqzDnHgnVJfPJPCRBbfCcJlT +fppppWsjcSDPjjDpGhgwbfTgHTCbHJwbHbTR +rLBdQnvMNMmFPbLqHqTqgLHCgL +nrFznvMNMQdttrBcScsDstWcPGtWSc +lclnRSDnGZtvSwnZDZzhLffqdsCNwTBCBBdNsd +mPjmjmrFFpmQjMJQjlNdlhCsCLsTlNLs +ggmrHHVVQVPJpWrgpWScRvzZzGGRnZvlgzZn +GjGJGQJGcMTVfFDQzNVQzP +mHqdbmmdnJqVzVhRVNzPbR +wStmHJsJsLZLjTvM +QssMbVGdMQjZPjwVwHVZPZClllvgSgvlTgwwSSCgSCtC +WmmFBmJrcFRBFrJJBFchzWCStgCTgvhvTlfsNqfTlvTv +sFzzssDLzrBPjDVVddHMQD +fztDZSGrNrlnbnPTgFFpln +jvvQMMcLcjJmQwHdJvjQJnnbTbRFRphnnpsWgmFRPR +vTLHHCQLHBBjJCSZrVCZtSfSfrft +gHfHffHLjwHrRjLrLRZVMnTdTBsNTBwTVBsBnN +DWPhqhhDhvSGvWPzSzMBQBQVMMBBmvssvQvQ +CDGbqCDbChSbWGrHcHRgbcVcfrLJ +frlTLmtllbbbdpJS +qFjhzjThjHTFGHTjqhhjMzBhVpVpdbBnSJQRpBnVVdbRRQJd +vjWPWjWPPPWgwmfCrNvTvZ diff --git a/2022/03/main.py b/2022/03/main.py new file mode 100644 index 0000000..3e82655 --- /dev/null +++ b/2022/03/main.py @@ -0,0 +1,26 @@ +from itertools import chain + +from utils.input import read_input_lines + + +def middle(iterable) -> int: + return int(len(iterable) / 2) + + +lines = read_input_lines() +compartments = ((set(line[middle(line):]), set(line[:middle(line)])) for line in lines) +misplaced_item_sets = (set.intersection(*compartment) for compartment in compartments) +misplaced_items = chain.from_iterable(misplaced_item_sets) + + +def get_priority(item: chr) -> int: + if 'a' <= item <= 'z': + return ord(item) - ord('a') + 1 + elif 'A' <= item <= 'Z': + return ord(item) - ord('A') + 27 + else: + raise ValueError(f"Invalid item: {item}") + + +total_priority = sum(map(get_priority, misplaced_items)) +print(f"Total priority: {total_priority}") diff --git a/README.md b/README.md index d0e2a87..f9b2540 100644 --- a/README.md +++ b/README.md @@ -60,3 +60,4 @@ The versions should not matter, but I used Visual Studio 2019 with `MSVC v142 (1 |-----:|----:|----------| | 2022 | 01 | Python | | 2022 | 02 | Python | +| 2022 | 03 | Python |