diff --git a/day3/README.md b/day3/README.md new file mode 100644 index 0000000..ff308a2 --- /dev/null +++ b/day3/README.md @@ -0,0 +1,48 @@ +# Day 3: Rucksack Reorganization + +One Elf has the important job of loading all the rucksacks with supplies for the jungle journey. Unfortunately, that +Elf didn't quite follow the packing instructions, and so a few items now need to be rearranged. + +Each rucksack has two large **compartments**. All items of a given type are meant to go into exactly one of the two +compartments. The Elf that did the packing failed to follow this rule for exactly one item type per rucksack. + +The Elves have made a list of all the items currently in each rucksack (your puzzle input), but they need your help +finding the errors. Every item type is identified by a single lowercase or uppercase letter (that is, `a` and `A` refer to +different types of items). + +The list of items for each rucksack is given as characters all on a single line. A given rucksack always has the same +number of items in each of its two compartments, so the first half of the characters represent items in the first +compartment, while the second half of the characters represent items in the second compartment. + +For example, suppose you have the following list of contents from six rucksacks: + +``` +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw +``` + +- The first rucksack contains the items `vJrwpWtwJgWrhcsFMMfFFhFp`, which means its first compartment contains the items + `vJrwpWtwJgWr`, while the second compartment contains the items `hcsFMMfFFhFp`. The only item type that appears in + both + compartments is lowercase **p**. +- The second rucksack's compartments contain `jqHRNqRjqzjGDLGL` and `rsFMfFZSrLrFZsSL`. The only item type that appears + in + both compartments is uppercase **L**. +- The third rucksack's compartments contain `PmmdzqPrV` and `vPwwTWBwg`; the only common item type is uppercase **P**. +- The fourth rucksack's compartments only share item type **v**. +- The fifth rucksack's compartments only share item type **t**. +- The sixth rucksack's compartments only share item type **s**. + +To help prioritize item rearrangement, every item type can be converted to a **priority**: + +- Lowercase item types a through z have priorities 1 through 26. +- Uppercase item types A through Z have priorities 27 through 52. +In the above example, the priority of the item type that appears in both compartments of each rucksack is 16 (p), 38 ( +L), 42 (P), 22 (v), 20 (t), and 19 (s); the sum of these is `157`. + +Find the item type that appears in both compartments of each rucksack. **What is the sum of the priorities of those item +types?** \ No newline at end of file diff --git a/day3/__init__.py b/day3/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/day3/input.txt b/day3/input.txt new file mode 100644 index 0000000..8b1be7f --- /dev/null +++ b/day3/input.txt @@ -0,0 +1,300 @@ +DPstqDdrsqdDtqrFDJDDrmtsJHflSJCLgCphgHHgRHJCRRff +BcBGcQzVBVZcvznTTTvZcGTpCRRRfRCggLflHlhhCZpZCj +vGQnQvnzTzNTTbVnzGBqMqwqDLdPtMmbwqqLLM +wLRFRqvFsFRjfrHddbdbjzdH +lcsnSJPSSVVlGmGrHzbbrGNrdzbz +mSmlnnPlmJmncVDSlSZSlmLBCvtwBvtLCqqswsDBCTWW +pfqPrPgmmhvqdlsdWq +nfjHLJfZcLbVtQWWtndhls +CzJJFLzRzfDwrmggpC +CWfllmlCDFlZZqMfmFBWmWLJVRLVwNNtRVGPpwtGpqbJ +jHndndndcjhscnhHNtRbVtLbGpJbRRcb +HSrvnQzQSMDlLzBCfg +BQRVbgQQBJBbBtVBSSSRWMQbdNvvRPjZjCCdPLNZNNsNCCzd +HwpFpnlGpGZWGvjzPd +FTDmFrrwDpFMtmQVQQcWgc +VhbPshVDPDFWhWsgDNMMbVtmBjwBffpwBntnmnqfnswt +QzzGrTZZdrdlTcCLpRBnmBRRjBCqtptt +rJdGlmLTJdJrvZDbSbDSWDNbFJgD +qrcqTBHTcHgwWWdHRjdWBglBbGPpGvvPbszGzsbPpQfPLwPz +nFVmjhMjFJCSJsQQPQLbLpzCPQ +SnMSVVZSJMNMZNDVFtJtNRBdqBrWrRHWZTllrrjgHq +ZqdqcrPqqrwnQqnrZqjVcqrQwwmNbzNzwbNLzvFbHLbNmBLF +LCDsCsRTfLTDszzNbsbNNHbs +gLfCgShfCgMPlPrVcqrQgn +QSNSLDQDLfqqPwwBNLqgqJMMmmRRCTzHnCHhRzHmfCmh +lGvdbdWdVvsVszpDhHmmlnMpTC +ctbdtVsbbvvsbWZFdVQJqPtgLQBDBwBQPJwJ +dggSSDCPddRWPnSSPWRDgdSrTDsDQDTzQGGTMbsMMVsQfTfV +jmBvtFpBcBhhjljZHphztMsCbsTTCbzsqGqsfz +hccpLmhFlcwCrPLrCPnL +MMHZnGrCfJnfCPggSSGGSSSgLW +qhFhRlDFDlqFsgdvJdWdDdcSvp +wVlhqTbbRNFqswlVVRNbZfHCrntMBrTTZnJMCfnn +sHGZscVGHJMtmRrqzRqqqTqt +SjvvNgjLShWWhhSQNWqmrBzlRllTTgBqnRmq +LNQWLfWhSQvLdCddWWPHMcbHHrJcDGFZCJssFM +mSDjSVQbVGbmqDVbHmqqJTZzPHTHhhRJhwsRPcRJ +tFfFFttFdsNntfpMMppJWwZTzJczJcZPzwWcdJ +vNtgCrpgNptptgCCbbmjbSbvsVjSsjGG +VCQlZJCTPRWsBsjTTT +wvNrnbbvnhdNhLMfGsrGpRFpGpjp +dwndHbHbbLqwwhNcLsqSHSCHJClQtJSttQDPSJ +ZlrvrdvpGBBhlDrshdqJHRPHqPTJzRPPqw +tcftfSgFFgcgLPmPmpnqFwJRHP +pWLCcWNNNNttMNgZvlsvrBrsrjWDjB +wgdCJgDMDwMCwDMCMJsJJfpffVpVfbfrrrrgjgllZp +QFRhvttRthtQzzmpBWbWzWZSVpbSpl +btRttRLttGNqvbFHLwCdDcMwnPPJDnDD +VhmMNllLqGLJQNhRfZHgSPfgSPTqZj +sBwDcwBtsdzvvHZRlPRjDZTgPZ +pWvvBBcBCdzNLVQVWQlNlW +NsSppvSjSPNBNLJJLh +fCGtqQbZZGZQZTbtzbqbCZThddcMBddlJGhdlBMcddgLlJ +zZFTqwLtTRFqTQwvmprnRVSsDrnvVR +FttFTzzvlVHFzTjpbvzbFSDDdVGhdqLGWGJdVDDfsLqG +cmBNCRnwsCcBPMfLLfJGcWhWqfdh +BwPmZZMmZMCsnrwMrmbHHbjbSvSbjvrlHpzj +sZQHCBFHQQQPGQCCHCHwsHFshhtSnnqjbRSSPngnhbRjqVPn +mzLvmDvNNWvNvrzzrMTzJNjqndqbnSnnRgTdtjdbjhTt +WzzWDlJLzLDvMWJJlMzmLJWcpHFQBpBgBHGQGBHfwwBfQQlG +gdpFrdrmrDsqqswdtccgWWCMlChSbhqSlCzBlSqh +TTvjrfjNJPnRQNTQjvNnCSWBVBVbClPSVSbSVhSh +HRvnfTfvjjHZTDsmcHDsrDsdmp +bFChjhbpbjqsntjtns +vdWcfMHfddvrlNMNdWWTNgBqDngBBZBBQZshgSfgnD +JlwrlrlhlcJWcWMwhWNVFpLzwPbbLRFPppVLzm +DtBtgLvgcHzllsTwzSTg +vhhjZrCrZdVdZVSwPMwwTTMGwT +nmpfqrnZJbqBBvRc +nMvSLvWSWPVPvWnSLShFLBjVbpNVGGbVQbbNcBcBBc +sTzJsJszbbQbdQJb +DsDrwTtsCTFhLQSShRwh +RNFQhTQqHNNGRsNqQFNsHhFCwwPLwPqwzfPrrPBwpJSJJw +vMMMblZjddlvWbjbBBfbwCrPPLJppwCL +jDmvcDBlBdjVglgddmvDQRNFtFRGtQhstHNsGFHV +rhLHmZnMrRsZSstZLLtZnhSCNbbmPJVcblTNNTlccpNTjJTj +WFgGddGFFgFDddMblpJjlTJTPc +QGWqBBfWgBqWwFwzMGvzDqSSrHnCHsrssCRZrfRhHLfH +HHzcWqNPmZcqFHPZGBdMRBMDlllWpRDJMl +tTgSvPhbMDJlbJQb +SCTtvtSPftswjvPhTgffVqmGZLmqmCCcqZzZHFNznF +QNpppRrdZvdgzpQZNpgRRgbSwmDDvFGGqwJSsvSGSqGG +HchWBMcBVnnWcHPjHhWcjHTqJFDGMSSqDMwJJbGwSsGGSb +tcCVcBjPjhnWlFrCFNZflQNr +HsVMrqrPqvvgprSrLG +THJWBJDwRFvBgGSzgF +DmhfHnmQncMNVMqPqbcd +SqZmMJqvHJBhHJLp +wsgTVTSsPssjjFVrTrFlhLhCFlBBnHplHLLHfF +zgggdwPrRrsrjjgRwVwdwdQTmvMvZqDZbWqqMSNWNbGQbGZN +fBDBfLZnTLZVVmmDcQMDDV +jPFtJFpHpJqfJFrptwrJdRWRWNpQVmQRMWNVVVNVvQ +zHwJgtFrTlslfghf +wMwTttCCTTSTfBmPzPVZnPZLVVtbnN +ldRRRlRHggGcvcRbZsNzvBVWnnPBWv +hdlJHgpcJccJhQdJrcrhwFMpDqCwCMBqjSqjqpTC +fJfnwJJnnHJgJHTgjsjDccNjcbgNjm +VdLqRRqGVqpRrPpppMBjDNmDctdsBlNjmZdZ +PDQvPQSvpGDrTwfJzzfFnTnS +MnHvnHHMRMzPTlDLPPRGcl +dFnfhFVwhdBPBfGWlPcP +JNrQFsnVtwsgvNzvmMjpzS +BZVPFpNpcNZpmRRPpzcVNhLLnssDjjDGnqjjLDFDjq +mMJbJvtJQQHlJDGCDnjvChDSsv +MQwWJHdQwWrJltQrgfNPmfBcBrpBpZ +ZWZqDsZZqWsWvWLPwPbpHjdtSbSjSCSPPSCp +MFVNMLmFmNzcTTrFrLbjdjbpCdCSbTCShRSd +czNzLrznlGNNrMzMwDlJwJWDwJwqJDvW +GlgchGGVShlQcQfDhzZrNFnFNFNjFzNFcn +dwCtpwHTtPTWpdFNfJJzRzvJNR +tLBBmWHftBttPbLwCHWTsSSQVglqgMsMBDSMGlQS +RDDDGhGfvPPTTPTThn +ZFLMmjpCpfMZzFqmqsCmPjdVBlVBVnWBPNTVbnTV +zHqJMCzLvftRQQHG +nTcbnvPsvdvFzpczVZmMGg +BCCJwSDqhQLJmMMpzGZVFVFB +qhrwJwrJrrzJNqwWLsTTnlTlbnsvbstWsW +vHRbqPJZvRPZhShJvTZllZtgzwlfBGBlsm +VdQjVVCssQVrWrQmTBgBzglmgCBGml +NnpQNpcFpNWshPRLsbSFsH +cVGmVZVwVVMLdvcRttTdbB +ppCQrwzHBtLrttLb +hsFJQzFWCpCqjZGVwlhlPP +HDGRzgWhgfzVWfRpspwRwbwStSwt +ZBPPPmmmTMQMPcZrBmSptSbbQCwtlsNqCwjC +TTLMMmZvPTrMZvFMmcmvrTccDDnfGHJgJhHhnhnLfVhSWDJz +pNrpjzthZPnGrzzWbJLLLbbJZwgSvZCV +MQsFFFDTfMNfRFfBFMdBdwLSvgbSTVCqTgVbbTLvwV +BQlQDMFccQsNmWpPGhpcjr +CTgGRCRglLlLTllL +vMJmhPJcmPBMvhqPDnNNqlWnwDWqsRQs +hcBfcJRPFfvvRvJZBrfMPZdpbSSGtSdtdgtzzSZzbV +NQLzNzzJcrLrSgZSSGgZrR +bTsjqHvcmTHvjgZGDvDpGZRfpg +WqTVPbdnMlLJncQC +hZLBrqLGLMbzLLBhfMMrnnNJlnNnlnJJNNdCJdzN +TWTsWqvtvpTSgRHpVFdjgjCPdgJlCFCFnF +swSTsTwpTVRmVRRRqMDMfqfDwLfbrhLr +NTQHWNQWrQwSTDWlcPPBHZBZbPgZJZ +nmfjCRCfRhndJcjBbcbcbg +nsppRfssfzCnqgzTzrwTwQVTWM +mFjQmDGmbbGjmChrCwdQBHCHWh +qvZZnPvvnngMpnlqpMZnpsTgWHTRCWrVdVDBWRhHBrhHDHhd +vqZgnnqgLvqlPllpnjGDjmNjNLfftftLFD +rfGsjsMNnFMMFddMsttDMgLHGlmJLCPPmHHGmHPlmm +vZcbhQbrRbVZPJLwPTgCLlgb +hchzSBqzQvphnWnrjFdWMqff +WmfPWfVsfqszRDqPqgpvHhvdwddGMmGghM +QtTrtTcSBjtQCctStrTrzhpwjGvGHhngwMHGHvMv +TtTQlQFcSSJlcccBbltQQTTRsPZDsWzRFzWFzPNfsssLPs +QpNNMrjcNMccGNdvLBBlBsBjnsnF +tTSqbbbqCtWWCTWSVTmmCJPwVwnwvFPnsPVnnPfddlvf +HmhJTZWqHqCJJJltqpNGRgzZDcQNrgzDGM +HcLVRhhTRsLRRVjslTscqNQmVNQQgQttqNwNZtmw +nJdBJJhfFPSCbJBJBMbzFbFgmNmtgmvgNgnntNwZQQNNmw +bMbPzJbzCBPrJfdfbBbdCrGHlLTTpWjsGhGTTRTRlc +sJCCpQJQCrfCfnSCrT +vmqgNggzgmZqmPShqBhThfhDhjDhhB +RZNzHRzZSQwHwHVVWc +jtVtvVHgvjJbHjjQPMZdCcwlMdNbdFlNlc +WppSBDzGfBzTBqQWwCFMlwZMwMcZ +zBfnqpRGnSSqTfqpTpSnnHQsjJgQvPJshHtHVh +qJMRMcPPVzVhmsDWfhWT +BglQBNlgZtQBHLHHBnTjWSWmFmwDmWjSsnmF +BdHvgHBvBtZbTpJRPCdcdpGrGJ +pcGcWGWlvQZpzmDbgFmz +HqqnddDdddjzTTggjZgFtT +sHqRwrRsJswLHrMLLRJdqNVVrGffPGWcvSSWlDfGfc +lttTbgRvqvtQRhjLzGjLVh +JJfrHfrdffZJQmZhLLZVVwFj +sBjCfSNNTTqnCnqD +qMtWjSrHftGfjqrJGMqzVzFmBBrzQQwzgBVQVQ +LDChPbThbTcTpCTcnPPQPQzVPvvzQBBWgVBQ +ZLspppLpdZZttdHttqdWMf +htJcJhpMQQWjhNWdJQSCFCTvFBPCTDlMmDCFlM +jjbbsfjwZbLGVVqHCFPvmvDmClTfmP +zjVVRwZwnRJtnNQt +PCPVSzLMMRqGwgMmHmQmDQ +slrrbZZgsfcdsgdhrHFGQHQFwvfwFwDGTv +NclhgpctrrNjllcZdcrpZnPPqzLLSSLqJLtJWCWzCn +PBLSBPVBwpTVppfT +lZCqQQtCQGPJJPtPHHwTwZTTZpwHsfRH +mCtGFDqFGDGQjPGqjJMMlqPgdWgSSgBWWcWzLdgvMzgBMg +cLBrfchhFBcnrgvqvPGvvwSS +QpzpstDDZMwDZqwh +WzpbWTjsbhpQtjThsjJFRNLnfLbfRLRBLlFB +ngnWWqnfgqtfsrWftqsrFWPSdSSdRCTHRSwpRGTfGmSG +VhJhVczJQcvbvvlhBpvlPdmlwHRTGHSRPTSCRGTd +zVcBcMhzcVcvMJJJDpWrsqrtrWLWsgZZFtFD +fbccrJlrffTwJDJTtBtB +hRNNFddsgsFPLLRVVwthMCQTtBwrtT +jrsPGLNjsqPlvGbZbcvScz +HFPmmgQrQzFgrLVPPrLFPNDJNJzzcGbJTbsSzbGGNc +MtvCMhJBdnMhwfhlwnfBfMDCDSjGbqDNGNGqGjDDjsDC +wwnhhdtBBptwdlhlRntRldJFVWRFPmWZFmHRZZmFQPRWmm +WrHNNTBNTTTBwHHcSTrBnSzJPFnpJfpLVfpDVdJLFJLFdD +hRthQvhRQlQmDpfVJFdLlLLj +hMZZbCMvgQgBTBGNGDcWbr +HvQjMRMTzjsCQzHTCFfVVZLPVvfLfPVpZg +GtlbBtSGlSbDdStrhSFCPVDgZgLLgPpPJWPF +rmwSbcbcdbrbGljQjCzCCwnHRqQT +bbgNSHPPgnmMMZtNcMpp +VFzFDFVtCBFDCVFdMlhZMhdhmhmplwZL +JVtBjGRFRttFCGDFGJJDQQgSgTWPPfSSfWbQnHvPWW +NvdBpwNvGNFvpBGGBmLFblrtVTwDttlhtlblfQbQ +SCMMsWCMSRZCqsmWcRWgRRsVtlrtrQbtQftThrQTQtqrtQ +WRscMgZJJCJWzZgSWNLFdBNHGzpFGmBFFG +qghqRVzhLNRLqzLhVztgQdLFdrccCnSpcZdSZcTS +DwvmHDJDsmvDGmHbQBlslMDDCrTCnppTndrdBrFnFTSdCCnZ +GGwJHlGwwvMHJljwwDMVtfhtWWhzqVPPjfQRqz +BsDMPrqPzsDwwCLGmqjpjm +VfFJQlVQcvfwJLJCJppLNp +vfcSHCglCgbgbbbFvSlvQfPsrsZrPzZzDWWStPhtZPDP +gjMsnFgbnllbjMfSZBHHtpHvvvFwhv +DDRZDLdVCLNLJwBCShQHHwwBzv +DNJNTLJRTqWmjWZnjrlmjW +ZTSVSFZCLTnvzfzqvnNL +PfPcJljfMpvtlnztvQtw +PsJMMMWpGcgMHMfjRBThrgrTbBSBFdVSTF +GccBRWjgtQqsTcVQcw +JhJCMJHPLffMChlfLCLHMMrDQsQqDVQsqTDbVvGqDhhzqD +dHGlfnCHlJrNmtdptggpmW +wnDDSBCSBSDLzLLmHLrlwlmpTTqzGJJfpjfjNpfqbpbdpG +MMRhFWWRvZPZRZQhFZMVhVSNqjqpNQffJjbjfbjdTJbp +VMMsWcZRWgMPvRSrSHmsrrtwSHnr +TQchPTgjBcNgPHhhThtNzQdzdsCmRDJnzCCmCdCm +vllVwrfvbSBVFSbVGwlrFGlqRCDzRJCJdzvJRzsdLDDLsdCm +VrMrqSWbfqWbBhhpWjNTttpjjP +rsfvSHHcvwrMPtcQZgnDhGdvJzngLzzJLJ +lWmVlfbCCNFCpBCmTpFFJgzhDLGhmRGhLhmGdgGR +pNBfflVTNpfWTWbWWbjNVqBsscqsqrZSwMwZrMPZSZrZrs +PJPHPJmhhHhlHPQgCndngTbWnqCWDGTD +tSwccFpFqwMcFbGFWvnnWvCW +MwLwLMSwpNBBtctSctfhZHJQhhqmlRlZRNPH +GNzdZhVGvtGZVVgGgtfHHWhpLPPpLWpWWnHf +RjwqRcDTvCrWJWWnlLnnqn +DbrDDwwBwjjsrbDTRTBmwgZmgGgmdttvQvQFSQGFtg +jRgcZRfhmHfZjPZRgHffLFTzzddBTBBFzLDZzBTF +VtsJwSbcStlwMqbtwbvWBWddGGdrFDDWJWrzTT +VwsQQvlbVbVlbNllVwbMmmpnjpfChfQpnhfcCCnH +dFnFjWjTQTFzFWPWPgqhRQRqgVhRqfRqQJ +bStrbpmNGHSrBDmrNBtHBhMVLLqLqVVglrllPVLgPg +tSsbBDmBbbGmmSHDbtmHbtNCjnzscZccjnPcTcdzWcvjswFz +lFCjDhqggMlDvMhFDgqFFzHHwHwwwTpLBwmwqmmpBpwT +GPdPnStGncQGNStZPpBmVZmRmfzTRmVVfL +tWtNdPWzsbtMDCbrCbrjrv +BJHMgLlcMTBLCtbqmMDGppmmMM +ZFPsrrdvwrNvrdNZsvhrrzzRSmJRbJSmbztsmpRSSm +NwhfPZFNdFQPVQdvZFNgjglJLTCQngQWllBcTT +jGlQQvQvpRQRGfnPLfcfGTnP +BMqmdBVBwmFdVMFZdcTPqgLnnggTTLSzPS +FVtMMVcbZVrcZMQCHjHWJJCJDvrW +rPPwVwbpRbbVlllTLCTRqTLL +dNdZssBBCBszHsjhDTQgqLDvlTgDZgll +dSsCNNHMdsdWWWmpGfmPFS +rzCLrsjgZjwcwSZc +wNBNRJpRltHNWWRHBlGlJtRcTZSVBmZDVqZTfBVVTDTVTD +NWPtGJPNGWHvpvtwvWgzQvdvQQzhnsnCvCLM +HHbJhzddMPbPgnDWbZ +BLnjLNvBrrcvvvwnwLrnqrgpPRgRNCWgZDPPpDgRpRWp +jtsBqScStfJQnnVF +QVFSVgQFZZQlQqQSlgQpRppSbRTSTppJJbRpLb +cGwCDwjrnrGvzBzGnwwvDBjnpLbsLTTqRPbsJPMJMWpPns +tcGzrCdtGdQmVZqVNQ +RtTRhncVMTVccShRTctLdfPdJpLPqJhZphHpJs +BzssCmFNWWqWwqwPLH +svzvvsmmFBmsggrGlGMVSMtMRRncSQScRRRl +rmmqrQQwLbbGrrGr +cNJzzzWtWmLCGGbLWWbv +cVtMppchzMBVMcNJcMsRwqZFMlgmggmRgg +mQsQBHFMrbddbRqH +NzhcQNfNNtzvWwZdSrgbrprPrwLbgb +zcJVhTtNNcvcfVZmBmQMGMMljTCmlB +FlldqjSlCgfvPFfvFF +rbnDtVBMbprTsbVVcTDTrpMcmNwgHPgghTmNfLwvfPNLwhdT +drMppdnbbtQDBtbnsBbcrrtbSqSSRCjlQZWllllSRlWRGCCC +nqdCsqbbwdsrHFVJHcwFTc +jPPjtWjPWgRltRLsBRrNpHFDHVFWVVJNNHrD +fgllPGQjBffLjtzSsqvbSSzGvnhS +zsVBzMfHHnzlwwVlqcJJFT +ZzRLvLDzQzTmlWlqWRWF +GbQQvpGvSSpjdQjSQZpQZGLfrgBCsHzrdtCsnfCBHsBgdH +zBLbLWzqqwLMnMZTnHlnsHTvFlFHNT +fjhdcrjjdVdrGSmmdfccGclPvlvPTlGHTFgNvNgqFFvg +pmmcrcRrjSVJchqVccjpRwZMDwCJQBbLDCCbwBWLzL +TDMBgBgLlcjBfMfcVJVmGnnJjvPVCPVv +zzptqHstJqFzzdJJZNvNpvNpnNvGnNZm +dHszrWQhdzHQqdztwQBLSfglfDbfJlJTLg +VTmvrldtGGwmlvmGDHlLnFDCCplFQHLH +ssgjzSzzJCQSSFVVQF +WsRWhgVqRtfvwcddhc +bdlDwznhnNlffMcPTPfzzQ +srCRGRrZCmVTBfBBfTQcZb +brSrrGvRVvWmRsrHrWSbjNJwdDFhnNlwtlnSdnhN +QQqqRfdQQSdjgPmZfBmmPgRhphphJtLmJhTJJhVbTtLhTb +vvlNGzDDDcslcsGDlWHtCFVpcCbThFTtbJFtCh +DrMGlzMVwNGWsWMHDMvlzlMfZdQdQPZfSZRfdrPBfqRZgj +qVHfHNJCHVvvFFbfFlHHnCQQDhLnhhhPZrZnPZPn +mSMszWRMQmhqrnZL +GjtzjSSdRGSjsRtdRMttgGgsqqFNfFcGVvVVvlbHFFGFVFwb \ No newline at end of file diff --git a/day3/main.py b/day3/main.py new file mode 100644 index 0000000..106164c --- /dev/null +++ b/day3/main.py @@ -0,0 +1,35 @@ +from string import ascii_letters + +test_dataset = [ + "vJrwpWtwJgWrhcsFMMfFFhFp", + "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL", + "PmmdzqPrVvPwwTWBwg", + "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn", + "ttgJtRGJQctTZtZT", + "CrZsJsPPZsGzwwsLwLmpwMDw", +] + + +def priority_shared_items_sum_1(data: list[str]) -> int: + return sum(process(line) for line in data) + + +def process(rucksack: str) -> int: + size = len(rucksack) + a = rucksack[: size // 2] + b = rucksack[size // 2 :] + a = set(a) + b = set(b) + item = a.intersection(b) + return ascii_letters.index(item.pop()) + 1 + + +def read_data() -> list[str]: + with open("./input.txt", "r") as f: + return [line.strip() for line in f.readlines()] + + +if __name__ == "__main__": + dataset = read_data() + res = priority_shared_items_sum_1(dataset) + assert res == 157, f"{res} is not the right value"