summaryrefslogtreecommitdiffstats
path: root/day3
diff options
context:
space:
mode:
Diffstat (limited to 'day3')
-rw-r--r--day3/__init__.py60
-rw-r--r--day3/example.txt6
-rw-r--r--day3/input.txt300
3 files changed, 366 insertions, 0 deletions
diff --git a/day3/__init__.py b/day3/__init__.py
new file mode 100644
index 0000000..a9e1506
--- /dev/null
+++ b/day3/__init__.py
@@ -0,0 +1,60 @@
1# -*- coding: utf-8 -*-
2from abc import ABC
3from typing import Iterator, Any, List, Tuple
4
5from aoc import BaseAssignment
6
7
8class Assignment(BaseAssignment, ABC):
9 def calculate_priority(self, item: str) -> int:
10 ascii_nr = ord(item)
11
12 if ascii_nr >= 97:
13 return ascii_nr - 96
14
15 return ascii_nr - 38
16
17
18class AssignmentOne(Assignment):
19 example_result = 157
20
21 def split_rucksack(self, rucksack: str) -> Tuple[str, str]:
22 half = len(rucksack) // 2
23 return rucksack[:half], rucksack[half:]
24
25 def find_common(self, rucksack: str) -> str:
26 compartment_one, compartment_two = self.split_rucksack(rucksack)
27 overlapping = set(compartment_one).intersection(compartment_two)
28
29 return overlapping.pop()
30
31 def run(self, input: Iterator) -> Any:
32 return sum(
33 [
34 self.calculate_priority(self.find_common(rucksack=rucksack))
35 for rucksack in input
36 ]
37 )
38
39
40class AssignmentTwo(Assignment):
41 example_result = 70
42
43 def run(self, input: Iterator) -> Any:
44 prioritisation = []
45
46 while True:
47 try:
48 rucksack_1 = set(next(input))
49 rucksack_2 = set(next(input))
50 rucksack_3 = set(next(input))
51
52 prioritisation.append(
53 self.calculate_priority(
54 rucksack_1.intersection(rucksack_2, rucksack_3).pop()
55 )
56 )
57 except StopIteration:
58 break
59
60 return sum(prioritisation)
diff --git a/day3/example.txt b/day3/example.txt
new file mode 100644
index 0000000..f17e726
--- /dev/null
+++ b/day3/example.txt
@@ -0,0 +1,6 @@
1vJrwpWtwJgWrhcsFMMfFFhFp
2jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
3PmmdzqPrVvPwwTWBwg
4wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
5ttgJtRGJQctTZtZT
6CrZsJsPPZsGzwwsLwLmpwMDw
diff --git a/day3/input.txt b/day3/input.txt
new file mode 100644
index 0000000..712656e
--- /dev/null
+++ b/day3/input.txt
@@ -0,0 +1,300 @@
1fzmmmfwDWFzlQQqjCQjDGnqq
2tJHJvLJVVttNsvTtTvgHHSVwCsQRQQZCZZMqQMQBnqBMQs
3LgThNJhNSgTJVgvgtghPhbpfWzfbwfPmpprb
4lDLnSnLZRjmWrlhrFF
5PffQJNqJbPZbpmjrrCVNFmCh
6qzbcbqfMfZMTfQTqqzzTPPLMHgBBBtHRStvgHRDBnSRL
7WPZfJlZZCMwwZPWCwWzVHQhsshVSsfNQHdvQNN
8FLGDGGnGdVjQQQDQ
9ccFFbggLnRcLFRtFBmnJzdZZzZBMpwJlZMppMp
10RZsnCZssCnDccJCnfcQfHTdzMzhdLdMTqdRqpRLwqq
11tNrGNrrvGhTThQqw
12rrFStPgrFWWgvmPgQjtmNtmJcfJcsJsZblDZfbfHDFHnfl
13RdTfgbbPbJWDDqRvsDsmVG
14NSQZLQZHpFGLqnLszrJm
15ZMSNMHhNZMMSQwhQJWPBJCbhbcgtgfcJ
16qZfqPvLnnZGpGpCJlvsMsMlHJJHB
17mTWFFFTTtVSJMzzjWgSH
18RbVdtdFtcrmbRQDDVHDQTbDNwLPLfnqZnhZhQnNwfNqnnn
19nhHfSGHGThhZjnhrrSnsSczdzlfzzdQQVzRNFNcFdl
20JJvCDvmCbtvpvbMmDvLbCJpmqdVVVcMcNGzRcNFcRRzRclQd
21vwDCwtLmwLBDJmCHHjHHWGZHBnsnnj
22QWTMqZhThbTbLwtGBrQfQQNr
23jdzSSccVPPcgcLrDBtDVwCfNNC
24vcBgcmssccplTnnTqsMhWW
25FlcwZhBhGZhFJnGtZZFwlGsWRLHdWqMzPjWRLTLJHHjdWq
26vfmrmbpfpMfzjHjfdM
27VCSmVpmrNDMZhSMcsFnh
28nHqQVtVZGGwwwnSF
29fMBBBWCsCfMMbWfbsGmGzFjQGQFCPhFQhF
30fbcsWpJRsWlcNVLtqtLLQcZQ
31rgNJdfNJpgpJVMMVfmfVJgCtCTqqqzwTqrBsTswcCCss
32lFLHGWLvHQFhnQFhbFnbHWWPBtwqzBPTcsPTswZCPBGCTC
33QQtbRtLhtjgdfMRMDV
34jTRhJpGhQPfPLsDhWh
35wVVMbqbHwVwwMplHWfsfNmWcSLqcLmSs
36lVCZlHnwHdRpRGvZTBGJ
37csppppDDbGLbSqndFHHNdHsH
38lVTlgWgjzCzfgvfggZWWlnHPPBHrSCqBmrSBrHHBnF
39QFgvFfjTvZjzlvVTWljvTtMbLcccbRRMbwLMMLQLbw
40tjhLjLJzpJpwjsqqfQqNrNfRnsRR
41WvwGBPwWZZrnbBNrNnnC
42PDvGVTgvTMGvZTGTPvWDZVJjljtLzhtmLlJjwJVJLm
43WbzpSNswNWszwSLgSNMcrrBfPJJcfsHMrvMv
44CFllhlGFDVFRCmhQDlDTBBcvgBCTcHPHrfrHTJ
45qGRgVFhDDZmDnDqhgQFGqzwtzSjddwZbzwpLNzjpdS
46FlpZrQSJJmQpSpqlQgbbRZCgGCZdDdbNdd
47WswHfjfnhWPFDsFRDcbBbR
48WjHvjjWTfTvHFjzvPnPtttVTTJVLtJSpmtlltp
49tnjrnnnnhNlPBtbbcWpZScpjbZSz
50wmsFqfqqqGHTLbzpLLbgzMcH
51FGJqsmQGRVFwwQJschPdhPrBndBhtPhrQQ
52dRdJRfTnCRNlJjPBDmBJsbBDzm
53wSFWSgGVSLwpFhpLhQjzgPzbtDPDbPBsztrP
54WMGvVMLLBCclNHHRlM
55gfSffQBDBtZvwwpWDHcbwb
56JnCmmJCRmztsVPJRFjFchcGGWFWcGcHFvGLvHF
57VCPzJnsPVCjtPjdMsMdmVmMBfgTZBTMfSfZSSlfNNgSSfg
58lwHJSVZHWWVwJQwbbVVtwWVVdpdPfRfgDLPZLTZLDLgRDTZL
59hhBrBqRcnhsFFfddmdmmCmmppn
60MNNBBRRshNHbtVMzQJMM
61NBsSNtLNTtNsvlTBBRLgFSCbFmbHFCFhgcghSm
62WJWWDdVzDZJjDJQcCDHmmhCnmHmHFm
63zQVdQZQwqVQHjqzWWWdHpzMwGMBlGLLtTvRvRNsMwwNN
64ZCztttSjGSqRZgRPDNQQNr
65hLvmHshLmLcFwwhhwLqMVRRRJQQVNnRJMVRDNNRr
66HFhTpFqqLcssmqmFftblBSjCjStjbGWBfj
67crffjHDfrQfnfpLPgbgP
68TmFvFCmFTFFCtNsmMsRvlRTpPbLGMnGSngPppShGpbdgGJ
69vmslmwTNmtstzFsCvRFrHBrDZzcQnWqcDDHqQB
70LQLPVLGdGrRPRhHgwMhllhhs
71ZbSZTNqSZfNqNCtSSmTttbpSWMlzWlslpWHsWgJWhwJzBMlz
72bqjqqFFjHqTTTZTmSNbfmdrFQnDdcvVDGQDvvVnQnr
73mQdcdsSThlccSWhMgDnQnFtjQPtnjPNvtR
74zzsGwzrrHGBfZJGrJpDtNHFjvNvDvVRvNRtV
75wZBCGrbrszTbThcTcLcb
76gJDDDDcPQgQfNFPhhZGDDcZZSLVtlCqzsMlzqpszlsVtFSql
77bBrdwHTrHWTrTtzLlSMCCCprCq
78dnBwRvmnbmBvTpbnbWbTjZPQJhhchmJcmcQPfmGNcJ
79sjMGBLWGZjsLjJTBCCbvNrBCHC
80mpcRfDSSdqDdlRqdwRvFrHFbrHJFJVvDVrTb
81qvlgqwpcSQSfLjjhzgnMzsnP
82VgmLHHNRNVLNhsNgRHLltjjbCWnCWZbldntW
83GGMFPJqPwJGTvvCCdqdqlqCj
84rGwGrMQzJQBjJwTVHgDQDHcsfhVhVg
85pblwGBlFlWwwlgCSFwbLvQZFvzvZhzvmQTLLzJ
86HfqccHzVDNqLmmPmPPQZ
87MNtrVdDjHtrzGBdbGWCblw
88NNhnnLdnnfhdhVjvThvqVvCj
89tHtHBzBGWHBWGtPBSvvpGZVbSsTFjSqqVbscgjCjqqSC
90HBtzJHzzpDZpzMWpGPtWHvZwQmNLlmQnmNdfMmNRmwmlwd
91QzGqGwmbfTdPBgRRcgmMPC
92NtNZhljrNjrSrtltWlCJCJJfcVVRcJcRgPjf
93NlWSZZWsHhWWlprSSvZWHrWfQLLQbLGfQpQzzTFQbwzQdd
94gcwcSnccnwLRRSzcBQRvZZdvtNtvRbQJQv
95CqrCrrPsVstvbfDfbb
96TPlPVhWFFMGMnMjbcT
97gjjHGvcHgsgbSRQbRFWbjC
98ttnBTNSSfwBLzplWPPdlLlMPlMCQ
99TBZpDtmnnZNvhJDHggqqgS
100zfqzzGwMbllcJFqm
101NpHgpRZrRpSrSZLghlTjchNlNbhFmchb
102RHLWHgLBggZpHpgHRZrLgZLQCMzCfDWGMCzMQQGvPmvvfC
103bBWWlFFBBFdVMLfvsfjrtBvTrr
104qZsgNZzcwfjZrfPf
105gcnNNcDncsDGzggDnNRJnzHhmlMVSSbhVVVmMbbhVmMlGl
106dNNRQszqRhPNfddWltvDltMMNlnncv
107ZjZbpgpSpjpJgpCCpbFlTnSDTlzclDnMvnnMlT
108GCJpjbgzJCpwZwrHZrgHsRBwBVRRsqdqPhLBQqsP
109mnnVCcwGwnsVJntmfnBtBhTDzpzzpDWbDbsLLzpWDz
110FcHQdZSRHbhZZWWhrW
111dNljMlPPHdMPvRlHMRdjRRNBnwJfCVqwqqffCfCwtcBV
112ZGtGzBBGjvdZvLWLcrPVcZcsNVNmVpcH
113MnlgngCJMgJbhfDbCDPrHHVcNNrVpbVpVmmcVq
114lSPhlClftSSBvdGS
115jFhGqVCcPMMdGFqczBltzrtglrsrjBgB
116wWgwvfDZvnpmnHwHTfNpDbtRWbzltRlSrRlbBSbbzt
117fHJvJvvTwwJPhCccgQCM
118BrrrBVgNppDVBbTgDvqWdWZqWqwNmNNHvH
119sHsHnHlcJjFwMMFFvGdPvv
120HllCQCJQJsnjgtVTbBgpQrSr
121JgLPLwbhBrCbLBCJPFFlPFZRTNTZFRqlRq
122pmffSWvDcfSfGmvsNHZsTRsWllssbT
123vDddMmScdStfzGcpzzwhJwJwnCbLwwLLCwht
124sWSSvmsZsdZPWdLPRRsmSrrnlnvJjfnggfrgtfjnjr
125VWWWBhhHBBHtljMMfJHrrt
126WWqpWVqQqLNGRNZP
127QHjjGVBQpffpjqppQsSsQHWJcVVgJFWcFTWgNLggFPNc
128bzzmbzzZnZztFTNJWRqmqcgJ
129zDZlqMtbwhCBBfppvHDGvf
130BNTdfWJmzHNHHzzTdLCfCfCswQjRjljVsh
131FbGnrFnrPGSSvGPFZFFPGClLQpjQRwLjLplQhRlsrQ
132GbnvvgvPFwbwcnZMMGSFvFHdNHmTBNJNmmmDTJDBmWcT
133rBhRPrjJrRtTHtWHWcjc
134SDdGqmhdFSqblLGlHHfHWl
135DSSmFqhsFqFdzqFgwsVnvBQPPQPQVrnRsJMR
136NZcgQdmSwZgdPFPVNFPqqVVF
137hlhhjMhGjLhLDGDhCBJDCrRFRrqqpLPfpfPRVPprPm
138MlhjlMDDJTCmZddQQSTcTT
139zRddrwzwNhrzrtCLtLfsLrqflC
140MbSDZvVwGZpJwvHvBVfsqtjqlsPPfsqsfclb
141vJpvJvZTVgTdTgwdTn
142SZMsTTScDMqwtDDJ
143VWrbzFvnrvFQQtnhzdPFmfwGfqmGPfDwmfPJ
144rrLbrnVrLvVQpLHSHjsTBBjZBt
145bSrpbWpPpfzPRWrWvhJgddrcccgFnFss
146ljGNTCtMNLGQjNMjQMGtZJDDggcldcFcvhdFddnhhF
147vNCmQMjmvGzpRPPzzmfw
148BrbdcqcdSZRLQltNDqFpCpHH
149jnTzWsWjWjwTQnzMvFlCzNDhNhDCFGpHpH
150wmmvjVQMvwmsQMMwnsTPgVfgJcLcgfSbbBdBbJSdbSBS
151bJFbMdcmgFSFgmggJFcGwjRdzPWZWGDDGGRwGD
152hrttffCVVCTVlrttQwzRzwWTqRGDGwjTvG
153rfLChHhlpHrfHlnWlpWCpQVcMSmMmSJMmggbmMSMLFNSSs
154JRMBJfMJQJTcNNdD
155LHsLmspghmmpdwwwcwRCpPTT
156ttLLlRSlqjrMqFtZ
157VjtHVHtvVqttCdnGpHtplcshglNgprrlMhrcNghw
158WTWRvRWFZQLWDvDWzwscNfcflcshlshFlw
159WQmBQWPTVGnJPnvn
160cpRwjcQwVfQzQPQl
161BZgGDBZBsgWBDDJzlhfhJVmzVfmThm
162FqWDDGrGDFNqFrDZFnplNHnSwtnSRwRplN
163VMLVRhRLRfhfgGdfVdZWRdTHNqHCDTrSJNBBBgJNQgND
164swlcpsFPcPwzpSlTTDrNrQPQqQBBrH
165zsppFscsscmbzsFsbsZbMfRZdVdVMbVSWhLG
166NjcjHFjrHHFpjGtVtGWVZW
167fwPlsJqdndPnwJfQdfllwNtWGdtWMMbtbmbGWbMWGN
168CPlwnCwnwqClTJThTDzzFcHNSShrRh
169llqlsNsPNTpDNTDNNf
170cnvcWFjSrMSFnvWHTzTggHCcllzLpg
171wjJSSrFrrMMJGrFFFGjGvJnFswsRwRdmBdZbbqqsPtQqPZls
172jlclpqjcRqpjzjnVPgTmBmjCrC
173vGvsFNGGMZNvdGshQNJvJgbVMrnbrHVBgBTTbBBPBT
174SvJNGhvvvFdfQvFshSpqPqLzRRPctRcLWwlf
175LWSSqLVBbNqqLrWHLSHzWbbqQfFgZtmtJCQZzgtCFCQCCnJQ