summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-03 18:03:54 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-03 18:03:54 +0100
commit64a9220b62976636f012e4b1e2e6ac8cbde9827e (patch)
treea6e42102456356d76dae73cba27126dab82a884c
parentcf4757ad43823aafa4c6c0547265359e961245a8 (diff)
download2022-64a9220b62976636f012e4b1e2e6ac8cbde9827e.tar.gz
2022-64a9220b62976636f012e4b1e2e6ac8cbde9827e.tar.bz2
2022-64a9220b62976636f012e4b1e2e6ac8cbde9827e.zip
Day 3
-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
176PlldGDGdjGsMPhssjPmQZFJQQZQghChZQJgv
177jwMcMpsPRRdsRjPwNpTWBLSBqVqTNJWT
178hWnMWgTffWFbMLfHnFMNfHgjtBSNRzjBBSzSBBcStdzBtz
179VGrVCGcVJswvPqJQjtQppBzpSwdjpt
180ZqqsCrmmsfmWcHhngg
181vnNnssMcZnlnlMFMsnFcZMGqJCbLbNLNqgLbgLNTCpLgwC
182hmjzBzHmRSfBfmqgQwpQQJbQJmwT
183WVVtthRtRdsdqtddZd
184LhZBLfZpmcsFpFzm
185vTRRwTRRPnCTwlFgmsczzLmgLvFs
186HVVVNCPPHTTtClRVNSnwLTHSQHBMMHrHWBhrQbJhWMMbZbJZ
187WPTnnDPjvPlChhJPcgCC
188DRQdBqsDQHQLHsBSmVLBcbwgCClbgCGlJghgmhgw
189dHMHQDVVRBsMWTNfWfzWzf
190PlgFPFFJGgJhhMGZwGbpBtQjjjStBttptlSb
191TTcDzmHvdvnDDzdTVnTDmSspWspQLpWmSsmqppsWtb
192CHVdcHvdbrwJCMPRGJwP
193BtBfcPfBhBGDhwHMlCmrNSCM
194dQdzLFTQnRnQVvgLnNlrCCpFrJCNrHJrwm
195zRVLZQRRvQGbwtWfbGZb
196PPcWcwMmCwwgnphCCLpjHp
197TtZsJTzzJSSSZJsdJtTrpblhRlHHHMngpLnnjHps
198ZDrvdFZtJqtStrZfMcGDVwfwffmWmP
199wCwSzzsHChhMVMhCPsSVLFWcdcWGPccRdjFdJjDR
200wBTTlBfgTlfpQQltmfgGGctRdGJJJFDJDDWdDt
201TppwnmlnQQqnlpqlmmwqlpphHqrVrZZSzshzShqzsrZVqs
202CCqCTgmdMCCCMMsWgqqnTCmJDGJcGGJfrGNGrSrrQpwFFSwG
203vZbDZvhDbzHzwNzwNGFNpNGc
204ZjBRVHPRtRLjLMWsCDlmgMdBmW
205MMsstRChwbChqRBqDrJNpNDsHdlNlJdr
206vLmPLfGGGGcTmFfTSgvPCvpZQlHHZpdrFJplQdZHQdHH
207GgPLmvGVSPfmfcfgBtjwCRwwjBbtVWbh
208LPPgFPccLPRswfsHfJgDsH
209bpbpTnCCrnmCtjBnTfDshHDwQVTwsDhQ
210BbrjnjnWCbBWZbPWzLDzDWdNlMWS
211pnncvLbcppBHgBRpddGd
212MtJfjVMtMmFJDjWSjVWzGdGgNQRBzBGNBMCGNB
213ZdDdsJFdDmtJmLTbwcvcbcnwZv
214FGsfFdNdhfbDdbhbLMhbNNTPJVCCZTLJnCRVJLPCRTVR
215qHjsczptHpmgHZBBVVTrrPzrBP
216lmpSlcglQtqWtcWjpQQfWsGDMhGFwdbGGNWhDv
217hNNNjMFMwthjFfvZBjFFvNSdnzSGGdGmHzHgGWSfHWSR
218ppJpcCVslpQJpJJDWHCHmRHHWWGSDn
219QbsrJQTQJVJNMNnZTZNZvZ
220NmRNLtGNmfcRrtDtrJCnWHJD
221blSzzSBssgfslWCCCJWFWHrsZF
222zTzbPBhMlTVSzMlMldlgMvvvvMLGcQRmqLLfvRwQ
223nnZsfsPLLfZfHLWdsZWZHdmcSpTcGmNScJTRGsTJmNcF
224gqVqDMgBlDbwwCqVbQFpTNFcTRSJNSrqqTSm
225jlMVMjljQBjMwhLfWWzhhfhZtmLH
226bfHwMvzwFBNpRjfZ
227nddcVJpGVpGqPVBBFBmhBhmsNRJs
228DWcPgPcPgnqCPlWWVWGMwbzwvQSSLbvgLpHHMz
229NMVqtdPVHgVlrfVrpnjCwNjjpCpNNpCb
230zhSvfWWzRfRLfvSpQjwbmmmvQvwwCD
231LBRRTRcLJSgqqMJlVVft
232GpgNzzSMGpGTrgzgMzJTrPgzjRwBdBlBbLRBjdBwVbLRVbSR
233sQWCfQcflhtQQcWCmsmlsbLnRdwqqBmmbBVbLVLwnB
234fCtQWFWDZFCQhCctFDsftNpzPPzZJpgJJNTgNlPZgH
235DqLtMSDLLttjdDSRdjZtdpdqVWFslFWrqWPqhwhfFwwCFw
236CvTbNvvTJNGHnVJwPfwFFFwsrh
237cQBzGBHnTQGgcNtdMMBpDBtCdtLL
238QsNDfdDNQsSTtrQZQtJJZC
239lLvRWMVMLzWbRjvVgVVGvmTtCrZBrTFFbmJCmsBCrr
240lljvlgpMGgRpsjsRlGGsMdqDdpDqNqfhqqSdncpqdP
241sVSJVmmtmsCCwschrbNMbcBs
242ZgLLfqvzzqgfdqHQLnTLfQQFhFMrhbNGBwgGbMlNcFclwN
243LTzqZrHHQvjLHnHdQTdTQvZQJjCpCJDPmCRRtCpStRRmVtmm
244ccQVcVHwnnDqNqSWNnVvqwcgJblgRslgmdGlssmGbQdddb
245rpFtPrzrMFZvZTLPpglhdssFshssJhsggG
246pTtLtBMjZLfHvNWqcBHf
247PZnSjnnsVfjfLLff
248crvccpglrtHfNbzbHLzmGN
249lptTLFFpdgvttFWltTclplDvhJMSMPhJPhChShPBZBMJhPMT
250mPSPdnhznPdhSmPGchJdFDtBhghgFgWpFBQhTBMg
251rHNNvbqHHHwZwMGMWtgtQMZQFQ
252wRqqRffvvNHwrHqrNqLvCrqvmPnzdsGJsSsSdSsLPVVPnjsn
253CzlngWpClJlzRJpDnpmzCndrhBcrhwcsBcLsNcsmLdQQ
254qqSjqFGTFbPFSPTVjcBcBsDdQrwBVLrNcc
255PtDDtZTvGDvFCMzZlRJCfWfJ
256vtQDpvpvVvvcSFrrljZZsVjFrV
257RqcTTRddRrlsjZrwrT
258zmbdRdMmMgbPDcGhGmnDpcQn
259gZqJRZRZdltFVGZQDZwV
260MCMSRHCMRHBBVtVCGwDCFGtD
261jcHsTMBNSSrBMjmMrcTMpRqpJggllnprqzRPzdlP
262mWSWHdmHWZWjBnGs
263TvchwtTfcTvhzwVGNtdrbjnnBnsnNr
264JTdwghvMzwfdcMVJqPmQFRPpCDJRJFFC
265DsHDCrszvvhHsshvsrrsgwdPpdLFgWLpbRpWFfMjWjWF
266BVJPJmPmGZVnfbVfMWpdLMWb
267cNGtnttqmJHNvNzDPPHN
268gpjmMQMrfmMntCSCNmSNCm
269vDRqphDhzHSdtqdCNH
270LFLLcbJRJLppFQlpMFfF
271SnSdvchzZZczndNvwcwnQrGfqrTTfhhTDgRGGLQQ
272lVWHWMmWmttsFBMLLqLTRRRqqDBGTf
273bsFPbFFssmFjWRmjVFjHbczvpZCwvwZccndpvzpzCP
274jzngbHrlHQllcbcTCtHGWtftGCHqWC
275JJgmsJRwFqChLGtqGs
276SmJmSmDdSPRwSMppJdPPwVvvzNQvjrNMNjMZZrQgZNgQ
277PvPlPcZPZFllzNzCDdhhdHjrpHNjHBHB
278VmgWtJWrqbQmqGDBdGQjjhBGdG
279tmbgggbgnMWnStttgnfnTzrCfPvFnccnPclT
280RQQbdSRdpprQSNVqqqfrffjvnjnJnhnVvHhBhVjJtjJz
281WGgGgLmLgGZMPDBhDJDHjMBFnD
282WPPwPGwlLgZwmWlslCLRNbrsTrfRrNNQqsspBT
283dNNpHpchLppdccTNtZZTRRPSSnwPPSbSnhhrhnSJ
284qfqsFsqffgQMznJrPznbMrrB
285vglfqQCgDgFjglCDCjLZpTHNPHttdcZVVN
286FWtDHDStZwrFCDwrgWPFDsWQJZzlMdpZzlNpNjdjjQzNzj
287BqnVGVcbTmGfHLGVzvpQpvJvQlflMdJp
288ThRRchnHqLTGbFCCCrrSSFhFCs
289wJrwdZPnJwqPbJPCnjFZdvHtMvsLsTsDtHsHDDqvpH
290RWzNRWjRfgjNMMLvcMcLNt
291WGGRQzzRmRmVQSgwrwJjjCbJhnbShJ
292cjngcvcwbMwWnbMWjbgvnsjPftsqfthqsBtsJJJJBt
293HrGFmDDzpmLTHpDsPfsBNBPfzZNPqN
294DDVmDplDrpGSVSTTHGlpLnPwCRnWcvWCdPbbMvcVdW
295BVRlBfPBffWswVWQsfwBNNPMFMmmGFZGnWZGtztrzMZMnz
296HqSJchHTHbTgHhGhvmRzFmnFtzRF
297RJqHTpgDLJDSqLJJPNVjsfPwBVsVLlfN
298NDrBlSmrFBlbbJllmtHHwhNNhZztqHVRzQ
299CMTCGLcvvtfCdCcCvCnMTMcTzjHwVZVRLjRRjQjRHRwzwjVH
300dfGdgGMGPggnvfvgbtDtlSJPDSFJPslJ