Skip to content

Commit bf2aabb

Browse files
committed
feat: aoc 2022 day 3 solution + tests
1 parent 47781d6 commit bf2aabb

File tree

5 files changed

+430
-0
lines changed

5 files changed

+430
-0
lines changed

_2022/data/day03/puzzle_input.txt

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
jLnFTjhwFTLFDGDDvLgvDssBJBbVRNZJPPJBGzBNRVJNRB
2+
QWmffSmMZCfWrmHlCflQWfSNBpVBNbPSbbJNppcVVzzpcp
3+
lflrqrWMmfdMlrtWWmZgDjsqwFwhFDsngnvhqs
4+
CNBGwsWVsdWDNCCVvfPLfQfgZHPBvpgf
5+
qhJqJlmcFnhJclllPgZjvpHpvfZpPbLn
6+
lpMJJhhcSMDMMwws
7+
jphtLMfVpjJRjJscMJptssnrwdNwQrNbwNzQTbcNrwQT
8+
gSPPSqGGGrdLrNQGrr
9+
PvWPDvWWCSSBBZPjLVDfhjsLLsDhtR
10+
hlLwDGLNnTrbNdtbdb
11+
ZfsvJbsJTrsttHTR
12+
vjPQJPFcmZjVFZFvbbVcJZJPBBhLMnDBznnGMDLMwBhlmBBl
13+
JdTJFtwHjJTzPMqPccqzjB
14+
rggffSCvNBCbWBWt
15+
ZsSpnnRpLStrZpTDwTVwGTJHDLdH
16+
sZqswsrcRpCrsCsrrbtpbpDlttlFbbpGtj
17+
LhNgNvNNhTQMhQMWhvvhfWhllbGGPbPtlPmFlDbjHHdlmg
18+
ffNBNMhDvQDhvzhBhNTBnSzzrZCZnrsVCSwcnrCC
19+
hHGhjLjwtFGwGhhhhtwjtlhrDBQrRBHczRcMvsBcRrDDMH
20+
TTfbZdZbPbVCmCdmnZmCVdfrJBczMrrznvBvQBzzzcBscn
21+
fdbPZTVVfSdmbfdvjjSGljhhtNGGhL
22+
fMrGQbPrbnfljjzVLQzNCzVv
23+
WcDqlSpctSJNzSFJLCzN
24+
hBBWcHtWgWDmZlwwrsPrRTRTMrmn
25+
ZJTVdgpzPpLVVwZgPzTPLwgWdhcWhSQCbcSbBtSWdSWchb
26+
qnDGnNjqDqNlqsCSWhMtlMltWSQB
27+
NnNrFQGjDRgLrgrpPr
28+
nCrhsmVrlrzsTvsnVvmTTlpvPJPWWMPJWWPCJMPNPgPJMjJj
29+
ctDqBLHLRLBSBqFRDBFqFFNGgjjrGGMrWftWJPGgwfGN
30+
HFcqZqqdcFQRQBdrlnplhspQlTmmvlph
31+
mllQMvMTMMdNNdTzTGmLgWjBgGtBqWHhGWjHtB
32+
PPsbbZPCVfJFJRJZsBHjjHhHcjqSSWBt
33+
wCVJFVRJDDpCPqZlTlwQnrvzmMdmml
34+
JfCJtCwfsffBJmFmgFmFhhdwgV
35+
lzHzsSHvSRlDRjlHTgqVVmmVPZqqmggmqS
36+
GzNNRTWvbWGvGQtfLnbfMbJfsC
37+
FnPrwqrFqsPrrsrwqwnbZFPwBQMhhdBHQZhTVBMdDHVhQQVh
38+
zlLWlLvLgtgbMdhfVDdzfd
39+
NWRNjLmWblGFsssNnSwPsw
40+
gnmCjzwnmCPTPhBwPjzBgqPjllJJSWlhfhQDSrpJRhDSlfJl
41+
rLHNHrLHVNbVHMMctZFHsbcsDSDWpSDSGfSRsRWSRllfGSSG
42+
NNtdMVrLNdZNvLvLZrzCndqBgwwPmwgjggBn
43+
tGSBRwwStBftfBHRScHwfcrCgQgDnjQhQDqgBqgCCDnnqg
44+
LNlbZmlPVNzWlLZVFPQqgDTQTmjqCQDQqmsQ
45+
bpZNZLNNZlLNLZNNZbLlbLZbwrwSHGJSwrGwRtRpcjjtMttw
46+
JvGNPWhLPLBffwhGCrbgnFDbgcZwbVnb
47+
TqzSTlQzdHQQpTTjSddHTSnbqnZDcrrFnFVFVbVVcbhc
48+
mlpdjhhTHWBmWWBJvG
49+
ScrppccsbMRRvltvrvrj
50+
HRTVTnDwDLJJJZwwVQTmNlvqBNtvWBBBQvhNfqlB
51+
TLJdLLCJZHJCVHHTwRdcsGpSbgsczcdcgS
52+
tffHzJctHsSHHHGTtzvttZFlZZhVjglVmgDhDdjgjS
53+
qCBMCqbpqfQPMBPpPljQVDDZdddZdgFlDV
54+
fWwLfbbWNzGGrzvWHJ
55+
VnNFqrrJdfQhCDFPhttD
56+
pGpTTzHmRTNTTLRRtbBBbzhPtbtbPPBt
57+
HLpHpmSRHTpllcLTSgVvNrJVfJvqMnZN
58+
tHzgwJCgzZlLFLnWJTnc
59+
NnNnmsMnBDFSFWdqssFd
60+
mDMBNmRRjjMNnvrPnjjRQQvfRgwpgHHpppHhZbzfCpbHtH
61+
TTwBnnZwBnNQZZWLWTTFNFbsCGrGFCNvDDDGFj
62+
lzPRfVVRMclPRMRcbFDjfCCGvvsdGCDd
63+
hSmmlMlVztlhRlVbqQpLnWqSqLZZwZQT
64+
zzVTcqmVqzdmhZJbFpQZQQtLLWLLbp
65+
TGwvGgTnGTRHLNtMftWHNbWf
66+
vljTGwvvlCljsgSnCBslDPPJrPdVzrSmhdqhVDPP
67+
LzCGCGLBGNlLmFFmmSSBBqSc
68+
ZJfbdfbWtbgVlblJtjcFcqTmFqqjtFHtjj
69+
QgZhZgQVdlfddlWPhfvMCGRGPDMMRvDNGvND
70+
nLdpLJSSnLMwjCDwnQhw
71+
NZGNgmsgPtPTgWqqCGwRbrDCQbCwhMjr
72+
gNqPTqTPttPZqcWfHLlBvccFvhpvJc
73+
GNdGhMMvRBjmMVjM
74+
trcZJJFmCgfZtcrQCfCZSpqSRjBQpQRQBbBqsSqR
75+
JcTmwtTtcrmThLGDhNTThvNW
76+
ZqhmtzzfZRsSfRmSTThMpLNgpgJQThMG
77+
jdnvdHWFvvjFdCWFrvVVnvFDQrJJMpgMJGNLJNJTPPgQGJGR
78+
vnHjDVHBWjdncDRbRzzzmmBsSSzt
79+
VZNZSCPTJPpvNTNsCrbnVrLccbLnnRVfWb
80+
MlqQBlBztFlhQJdFhccbhnRWWfnggfGc
81+
lzJqllwQtmzdHZpvwjPPNspj
82+
wTnCMnwQCQvTTJdfqhdtrrSmhttmmm
83+
LZlZglZBvjgbHHSrHpbr
84+
GWvPjPNGljBzMzJVMwNJMw
85+
CSlChlvPPGvdddqPqSJhPdbNbcMTMTbDbcRNDFcFLMLJ
86+
HWjgngmBZGQgRRNbFRcHbbzT
87+
BmnpnQBBssBsQBnPptSStllGhdCGrS
88+
nhQCnCvjchBBjMNrwbRwZvvSvSWW
89+
qgHlfqblVbPfVqlbGgPGfdfLSdNssWWLZsNsLZsdNdLSZZ
90+
gbGHzzbzHtPfcJhczmMnQBJn
91+
TTGJJPPZJGRzDwtQjTjzDC
92+
VbnrmNVWVWbffbVMsrbrnvFRjzCzQCjvQDDStDFS
93+
MhrRfMmfMmsHgsqPLLGdBqJJGHqd
94+
FMCMbmSQTHdCBmpFHprdHcDNqqfqJdJsDcclDDZlNf
95+
wzwRjwwtRhnzjRBWRnvtnWtnNsfsVDlDlsqVNNNqcqVlDvqf
96+
PtnGWjtwLBwtjCFPFpMpMbSrQm
97+
PWzrtrtzBBfjjWGbfNWvLJLgVSjRLVlSlllLpS
98+
HhZmHGGhGZRpQlpLpL
99+
dTdnHCnhmhcHcntrPPGfzfrcNtPz
100+
PfmWWWPwWdPdWPTVCdpjRnzhjDbrFnGbnQGQrrDR
101+
LSBnZLnJBQDLRGcQGc
102+
NHNqqBqvMMBsJgNvgsstBHNsdwwfTtwdpfTTmVmnWmtmWVlp
103+
zjzwTHCzDzbDzNTDjzDCCHRZmmSGmfgPmZGtHtgLmf
104+
hsqJMcQltLtPhLgL
105+
QWWWcMsWFJssrnsWrdlcPBwNTdzwTvvBvjwpTbBzpT
106+
LRvWZdLzzZWSqdpBzLdzLgRmbHPVHtFHMFFMCtHCfHcbVcqb
107+
sGGjNDnGTnlSSwsrTwcFVMHwCPPPcVfVHwPM
108+
GDQsDlJlQhSDTrpvhhWBLWvdRvWh
109+
sWhhdhdhbHSVBbFLZLnnCmCmtTTCCV
110+
RcQvjNrcrwGNcGNRJJmTpppgCCgppNgTtFmp
111+
GRRRGRGclfjwRsbfHFhWBDhdFs
112+
jfRTfgHqgDZHClcPcrGhnbcqrr
113+
FztdMLGBzpFJpcnzzclblcnbbl
114+
pdNBtdNLdvsNtdLpdGLTZDTgDjmvCZjCRCDDHg
115+
bdrbdZbJtZhrMrWRHHvRHRvHllqZ
116+
GGjCNgDVDFsCCwFNHjlrPrlSRWPcSlvl
117+
CNVDgDwVrQggDDQVsDwNwgTQdJtbfbLhtTdtLmnfbJMntnft
118+
mjznjLchnPPcLLnwCTFFvPgJJWdqJqJJdJJr
119+
bMlQRzbSBbRBMlMfMBBZFrqggvVvfqdDVDVDWWFd
120+
ZSSsRGQtSpBBpZMSbSpZsbtsjhCHTHcLCcjzjCwTTHhmNHtT
121+
ThCHLCfVfDTtDnDppTqclFfSclNrwNPwNfFr
122+
JmsQjJPJMWRRMddZGZWsdsMZrmcqvNSFSwrScrvwSwcccFFw
123+
ZWdJQGGzPJsMRZBGtHLgCHTTVTLBDtgn
124+
JVGJfttHgTLVTsnHgVHfwVBDjQDNQSjQwjbNbQjBbddS
125+
rPvZcZpcvtzcZddmNQjWQSjDpp
126+
rrRZPzRMztFFFqMZFtRVgnsLnVHfVHqJnghHJL
127+
grrZZbJSggQDLgrvSSDBVsGdjHjnGnBGVsLGHj
128+
pCtWtPtffPRcWdBsGsGRBRvhBj
129+
zmvNNclfZJJFZQbN
130+
DDqCgPPDgtDSPPDbgCqcmBMBTQLQZBWwQZbsMWZZMw
131+
RNlNvpvNvndNjMZtBpwMTWLBZt
132+
VlNJvRzdlGFRFGRRRjFVJRRggtPPHgHzgStqCcHHmHqcrc
133+
RfmdFgbtFLHlsjRPsL
134+
LqrhvCTvNNhWBvBTrThrDWZrPjMQPQMcjzsPcQHTlVHQjcMM
135+
BhhrJWJLvCbfJbwgtgJn
136+
FWpRfFRjtjFpVvbTTZFPhJhJLdCLdWBhPmHmCW
137+
McMzNlGrgGGsHcqmdLqbhJmd
138+
lNMwsnMzzsSSGtVVSfvZTtSppb
139+
JrJQDJDVvGwGVwvcGCRRcCBBqsWBRZqWZZ
140+
bNdmhvMpjmHbNbpNvmbBqlRWlCtCqlRZqRtW
141+
HmTjNdmMfTTVvLSzvz
142+
WMQWmfGfQfVnMGWGmGtGWHzZtdLzpZhwrtZcwZzdps
143+
jBgljNPbNjPFRbggNlNBCcHsrLLLHlrLslhlzdhdHppp
144+
BBPBJbFCTGJcVQMGMv
145+
fdmfmmjbPmjlmfhfGglTNLCNvPNSpPvpvSLCPCpS
146+
MtJwMrwrZJVHMgqJHtwVJzVVLCvpNLvDrLvQSQSNcCNpFNLS
147+
wWMVWZzqqMRHztwJZzRqVtjGlBdhbGGbThhTlnTBTWgb
148+
ShhrjPrvhlljnHrggPvvSqRMBZZqBTZmMmTmTMdD
149+
ctLzbcpWCJbNWRQqBBdZFMBdfZdJBm
150+
GQWpzLcVpVNpRggHrhhgvnGPwj
151+
PdzSrmmqSgWWddNQds
152+
TZbwCTLZbHLWptQHhpgNsc
153+
MZjBLjMLDTDqrrGflsjjrf
154+
DBHTnlGGBPjPmwRWhn
155+
hgLgZccSrcMgLMSpCLJjNWmPWjmVWdwJjd
156+
MfQMScQrMSprrTGHBhqTvqlGQT
157+
CDvLRCCzQDWzcGQGvRcpVFVsgTsFrgllrTpF
158+
mjbqtHqHbspspnMv
159+
ZvvqdqqHvLhDhJWzJd
160+
ThHnbRTVbQHSWvBVVBCPBW
161+
FFJgfqfqNwNrvDCBNppP
162+
jzsFfqwqssLzJjffJcssHQHQdnMdhTGHLbddbCnn
163+
gwMHHhbSwnqHrgMqMbnBcldhzBLQBQhBLtLttQ
164+
dCRmpfvpCzcQllflQz
165+
TjPsCJmvZPNPsvZpPTTRCpprjdbrHngqDwqMrDnMbMbHgM
166+
CgNQpgTCgNltHTNQlHpRnRnzBfJnPnmpcpfq
167+
LGrrvGSMGvrsWPBmnJPmPfmrqr
168+
VGsSvdJvbSHVtlttNVHT
169+
LnZDtzpzNpPsCbfBbDCDBC
170+
gSGRSSghqhhSvSRvvhvVqFJdsfBsCHJbVfddCJ
171+
vglRRjQSmnQQCNrL
172+
HwhVddVVwRcGHGjlfS
173+
MbBvDBGvWqpNWvMbzDMNZZlLcjlSclflcjqgfCRg
174+
bvDWDWQbspPPWWQMnGdnFnJtJFGJhhPJ
175+
nDJDdQdPDlDJnnbRQDlTqVfFwfVtjJjjFfqqFqgN
176+
hScrSmSCTZvZCSmZLFwfffqgjfhNGwjhfw
177+
zCzsCCTcMBmSLmsMWHdPWRQPQPddDQ
178+
lzGflPZLSqSlccpqjpdNCwjdsjCnCsJp
179+
VghPQDVMFQNdJjRNBw
180+
tVrhDVmHTlPlGrzL
181+
gfSJJlzvGgRPpggR
182+
VLDDHhHtlZnnZqbGmtqPmmmmWN
183+
VVDBnddDBFFzlscC
184+
cmmzRzcRjFrGncTHqc
185+
ghJfwJJvqhbrdndWgddWBH
186+
fQbSpJwSthbhtvpCwqQbsDPMNLlpRmplzPlRMPzM
187+
bBVQDgBpTzbhpgQVhTmBVBzgrvcnrncsnZrwzHJZfnHcZfrP
188+
tdWlFLMHGFGRGMRLNFHlfwJcrPwcsnfwcvZPfr
189+
RLWGjHLjSjtjmBQVgpQhhg
190+
ttRRJBrCfpprmFqSJVTSwNJNTWlVTn
191+
nLsMghDbQdnhwWNLjcwNSlVH
192+
ZZDgnDQvDdndPCmfrRqzvFqpmp
193+
PPzCrcGGlnhPcsdfNZZdpLLNZsfd
194+
RjjWHjVWDvjWqVMHjHJjVlHdwwJbLfNZdfdgfpppgpfpZw
195+
lBVvqjQqBDBlVmCFGChhnSmTTrmr
196+
BZnGZFvGvBGGrwLBZlzNgmzMhMdfmwgmdmmt
197+
cpDHtVjDWjCtDTCcDNhhzNJszgzMTJhmgg
198+
VWWcRWDpPDPPtHtScqFrLlBFFFSFBqZLSF
199+
qBFcCGFcHHGBldzBLtdzSrdR
200+
fpmfpswfQNQmfPHfPPgJNwRtngTtSTRzdTrLRnSnldLd
201+
fsHNpNPwQZwhVHMFGqvvMcqWFGVF
202+
FwFJlqDDwwgFHQdmFmSQ
203+
pPtzcrLHZrQfdsBsdLdf
204+
bHrrHjbrjbrJvDvbqMVNqJ
205+
WVVpPHPfWnHmpccpnpvQcrgNNMSCTMjMgjjMMN
206+
RsZbhRFTDDJtZFJhTLRRLMrMrCdSNCdSMjrNhjNGSQ
207+
LLqtqqzwqmmflPTq
208+
mmLhdZSdqhqnqMZShLQrMWcrcWQwTgrWVVWc
209+
CCvjjsfJRCCJbDbFsbGJvzgWWGlWrWlwTQrwQGGcHlBg
210+
NRDbRCNsNjQPSSLZNdLn
211+
cmVLcQZPSHBGlSddBf
212+
DFNzDNszlbBlgHNN
213+
tWRzFjsWWtrtlDztzwjDjThLPhRMpppLMhmMhnmncRcn
214+
LFFcgdNLpLQggZQMFMcNJggRHCHsTtRtHTzCTZHRsfSRfs
215+
qnhlhmGrrhhnqdmGhdhWbnSRzSfsBRSTSRtBflRffzfz
216+
PnbmrmGjWMVNvdPFLp
217+
swcWsMMmVwWwFtWlbnnZnFBhbNfrhN
218+
dQLZHjpDQCfBBBBTGTTC
219+
DJvDpDSzSDQZMWsWwPqVtwcS
220+
NVTMjjGGNBqhNttdTTjtcqjCfDlhZhSWCFFJmSmZmWJhmZ
221+
rznsHPnRLzwspZDWfGZJSLZZDC
222+
QzPRRvRQszQsGQcVNqTBBdVj
223+
rHGBglBNLpbqCgFC
224+
PbmbRnmMSbRPDWRnDVSMPMWmvvcvqqppTLZZFpvCpczLcCVv
225+
dsdMSPtMdPnSffQwGGsBBbQw
226+
nqjTlGPGnqWsMPPwGdGjQvQvJCCQBvmvCvQJtmCw
227+
DDhVbDrcVVFZLzHrZBRNCWStmQWztJvtCm
228+
VHDLhFFDpcHZcHGWfsGlspTTMqps
229+
FTPZwBzHHFLTTSwHLJTwVQqnDrzgRRVgQpDVRprn
230+
jJMjsWlvQqVrqgWW
231+
CjNsjjvlmslbcJmmbtCtCThdwhHLhhhLPdBCSPFh
232+
jfgllWfLrfmlTjsCjcjDNNDnNcHJnd
233+
MMBRSRZGppGFpBbbBGvVnFHhcCJqNcNcHCFNgnnn
234+
pMZZgBRVZVGRtRSMbMbvRQmTswWfzLzLzWLrPQmfwLlW
235+
tzpdHLNpfpPnlNFHnpssbgShtqcgTTggrsqg
236+
JZwWGCWMCcbsSHgWjq
237+
QCmDZCJwmvZvCVCVRQGCDMFBNlfHmfLLzPPfdpfBLlPB
238+
PCvRTdPPBVBTGgLGrGqMrMnv
239+
twQwStrsQwstjSHmmpqZpwqNGnGnNnZgLN
240+
mJScfjbttQjQtjcmfbbQJHFTBfdfRhhrPhhTfPVVhPPB
241+
DMPJmLLjhJwNBCNBww
242+
TpccnsZsbTHpsTHVszbpbGHSNwBtWlfrtCtCfrtlBlFZlf
243+
HsHvccvzbqsGzqnnHvLQPghQNNDDvLLjdjLR
244+
zmgVMrrjjMGbbzzdqqrgVbRTHqTTThpNHphNTvvvTNnv
245+
QLSmZmSJTvTnZTvn
246+
SfDtDDmQCFDwWmSrjPPGfjMjjGfMgV
247+
hdNHNHjnGHMTcpWlhBchRBJR
248+
fPztCTPtttLwLzVbwqSVtCBBDpWvlcRRlBpbDBQWcDWJ
249+
ftrCVzfTCFFzTFPrPjNZFHnNsMdZgjHdss
250+
TVcTbdqLqzHHRNHM
251+
PppQTWffPfCPQSsCprzRwRJDzMDzNwRBRPHN
252+
pjCTZjTjmTtsZhGcGdLvdlgv
253+
VJRhVfJRBgbdrrrvJpJJ
254+
cCSSHSHnZPwDFNHCDCQdbQQdvqnMsrpqQnvq
255+
NFFCwSrDzCNrwhtgzhWtBhgzWB
256+
RRBRczzcvmfzVRzVPvPTlCWnnlTGqGMgTTnG
257+
tNLdSdNSMFhsFttddtjlwGqllqQglqTWqwnThT
258+
rLSsLrNdZbbHjLdSFFMjLLtSfVRJzVJJVZcRfvZVRfDpVvRz
259+
DBsdssbdbDfPnnqzzJbqStqzjjJS
260+
RcGMGwwmrJjFFHPG
261+
mCgwMLPgCPmmwWDBDZvWvBCWfZ
262+
cJCGJJMZcMGWMhWCJTfFSfDmmgFmtshggffr
263+
vBVQBDbNstQmFsfm
264+
RVwHNblzwHvNdvBwNjVHGZJZLJTMLMJDZLGRMDGG
265+
LNCssCldDbrnNtVWNQ
266+
mmcpRBMBRBTZzgMMhtFFvrWQrQmWFtvn
267+
MZTgzMZSzTfSMDHwCfPlLLDnwL
268+
HlPcjMSHsMSPbgLhFPFNzP
269+
ZfRhtVdGBNLFzLqf
270+
DRtGGtRGJJTJDZDGdCJrVJmlWvHWcvjMsMWmhQsmCMjW
271+
swpQcsBvvHFpBHHcCHJvJddvbbWPdzhzzqqWdhPnhP
272+
gDDGTgjNWZTMTNjjggRLggldSPqSqGznnhnbdfnbqfhh
273+
WDMDtDNDctVFJstJ
274+
rFDbGjrGbpBBbrCbrwpvvZQZZhgTLVVVVLgThCTggg
275+
NlfHpttqzltMzRSMSdWRNSfSTTmqgcLgQVcQTcmgQgmZVPVZ
276+
HWSWpMHNpNWlpNMsMzWGGwwBvvwBnwBvsnnvnB
277+
mZVVHmmRZlvdjvNpHh
278+
DFBnFDtnFbBMrQbBMvFLvgtjjNpcLpJdNzJJdhWNpJNWcN
279+
QTsbrQggBsvsgVTwRVGZCfGZfR
280+
RGNGlGTWJnJlMcRMGqvSmnDtvDDvtLSLvr
281+
HfsFhPPdVshfbggDVmzcvSwvStVzDq
282+
BPPfCgCFfcBbPbHbBHZPFsbBpMGlClRNJRlQTjQWjWpTTlGT
283+
HQNqQbbRQHbZPZQPqbZTvWFWmCjvFRvRTSrRrr
284+
lBpBpzLLdBwsLwLLWNggzCFTCmFgWmrF
285+
VwsswGVBfJfccLBcsJGNdpJHZZqnhtqqnhPHDZHVtPQMZn
286+
LMHnHnPMnFdJFNFJjZvrJF
287+
wlTlslptlwtzcvTqvTsVSWWrbJfmJZNZJjcNWfNJmf
288+
qDlqVthTztSSpSlqtpTTzLvRRnnCvRCPLBQGDBdDGD
289+
HlmlJgRBBpJLpPBHnlLJsrgJDMttvSdddcMSStWjjWtcSzjs
290+
qfTbNPTVGhGFCVGTwZfNZNNVWvjSczcjStMMcdSczzczvbcW
291+
GZVqffQTwNQTmPRlggHLprHQ
292+
BjsWschcTjjWclQTSnZFrjtFtbzZfqntzF
293+
qggNGMHgvHMRZMtznbrftMCn
294+
qvHdqpwgJTsVccwscT
295+
FJwNPHJmPHTJHglTFwgmwqtShBqDmDBzzBzWhCDWqQ
296+
fpsjNsMVLVjDCCSzBtjztt
297+
sLrdfbsMcbMRZZZbbsfrsrNgGNglRwllRnJnwFvnFHnG
298+
lWWVTJlJCTTzDdWzqdtFFt
299+
PvPvrhbjhgSjvJQSnQRbjZDZFFHMtGGqFtRMGZFtGH
300+
rhPrSgfvJPfmwsTpLcsV

_2022/solutions/day03.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
"""Day 3: Rucksack Reorganization
2+
3+
This module provides the solution for Advent of Code 2022 - Day 3.
4+
5+
It handles finding common items in rucksack compartments and calculating
6+
their priority values based on alphabetical position.
7+
8+
The module contains a Solution class that inherits from SolutionBase and implements
9+
methods to identify misplaced items and calculate priority sums.
10+
"""
11+
12+
from aoc.models.base import SolutionBase
13+
14+
15+
class Solution(SolutionBase):
16+
"""Calculate priority sums for misplaced rucksack items.
17+
18+
This solution processes rucksack contents to find common items across
19+
compartments or groups. Part 1 finds items appearing in both compartments
20+
of a single rucksack, while Part 2 finds items common to groups of three
21+
rucksacks (badges).
22+
23+
The solution uses set intersection for efficient item comparison and ASCII
24+
values to calculate item priorities (a-z: 1-26, A-Z: 27-52).
25+
"""
26+
27+
def part1(self, data: list[str]) -> int:
28+
"""Calculate sum of priorities for items in both rucksack compartments.
29+
30+
Each rucksack is split into two equal compartments. This method finds
31+
the item type that appears in both compartments and sums their priorities.
32+
33+
Args:
34+
data: List of strings where each string represents items in a rucksack
35+
36+
Returns
37+
-------
38+
int: Sum of priorities for all items appearing in both compartments
39+
of their respective rucksacks
40+
"""
41+
score = 0
42+
for rucksack in data:
43+
c1, c2 = set(rucksack[: len(rucksack) // 2]), set(rucksack[len(rucksack) // 2 :])
44+
common_item = c1.intersection(c2).pop()
45+
46+
if common_item.islower():
47+
score += ord(common_item) - 96
48+
else:
49+
score += ord(common_item) - 64 + 26
50+
51+
return score
52+
53+
def part2(self, data: list[str]) -> int:
54+
"""Calculate sum of priorities for badge items across elf groups.
55+
56+
Elves are divided into groups of three. This method finds the item type
57+
(badge) that appears in all three rucksacks of each group and sums their
58+
priorities.
59+
60+
Args:
61+
data: List of strings where each string represents items in a rucksack
62+
63+
Returns
64+
-------
65+
int: Sum of priorities for all badge items common to groups of three
66+
consecutive rucksacks
67+
"""
68+
score = 0
69+
for idx in range(0, len(data), 3):
70+
r1, r2, r3 = data[idx], data[idx + 1], data[idx + 2]
71+
common_item = set(r1).intersection(set(r2)).intersection(set(r3)).pop()
72+
73+
if common_item.islower():
74+
score += ord(common_item) - 96
75+
else:
76+
score += ord(common_item) - 64 + 26
77+
78+
return score
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
vJrwpWtwJgWrhcsFMMfFFhFp
2+
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
3+
PmmdzqPrVvPwwTWBwg
4+
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
5+
ttgJtRGJQctTZtZT
6+
CrZsJsPPZsGzwwsLwLmpwMDw
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
vJrwpWtwJgWrhcsFMMfFFhFp
2+
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
3+
PmmdzqPrVvPwwTWBwg
4+
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
5+
ttgJtRGJQctTZtZT
6+
CrZsJsPPZsGzwwsLwLmpwMDw

0 commit comments

Comments
 (0)