Skip to content

Commit a0ff2bd

Browse files
feat(day3): solve day 3
1 parent 646874c commit a0ff2bd

File tree

4 files changed

+358
-7
lines changed

4 files changed

+358
-7
lines changed

.inputs/3.txt

+300
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
dtddvvhwttHJhwdhJPddhwJGppmGjgpQgTjQplQpTljwpg
2+
BfzSzRSVVMVNRMDDNBSNSnfBmbrglGQbmNpQggFjpgpbQlQb
3+
ZSBffLnVZdCCPJjhhL
4+
RGCZpWWWFlHQQbgvFssg
5+
jLnMzjnrnjjNjhrjdwbHscsVVgDVQPvPwh
6+
nfJnLMLzjJMtnjNnnBbZtBWBqqbTTTBRpT
7+
nddlhBtqTBqTVSlBtmCmVcRVmZggfWbcZc
8+
jDjvPrPSNPwrDNRWbbgWCjRRCcWm
9+
DzDwSpFrvrvFPQLzQnsqztBthTJnGJqlsJ
10+
gssGmzwgRgsNmTsqgDnDJnbDHHhhzFdDDh
11+
WQVFjMWrVQrVvVVjVctSSLSMZhnJZPBnbdnhbnHZZBDJBh
12+
VCtcccVQLrfvrSlGmfTfNgfmlFgm
13+
DsmfsBbNNZhDWsbmWmNbbPDHLFjcctjjGcnZGzncnctcGH
14+
SwVQJrjVwpgSVRpjpVRrlTMCFFCLCFFcHzzGMcHrtHHH
15+
ppVwTwSwpwvSlSlJTjVVbPhsvvBssWsNfsqWPvWs
16+
BJwqwJtqqDDDrGDnPFzPFfpphD
17+
TgZscCHQLSHgZcfMzpjFFjzsshfj
18+
LcNlTVQCCVLLZTLNvpRtpvBBvRJmNB
19+
bDBGQBBCTTNPGPPwPzcHfVHrDtLWLVrWVjjHWr
20+
gpssqqsqlMFfLZQWftjVpr
21+
lvqqFMRlFcQvbzCNCG
22+
fhhMDdPhWMJMWvhhSfwRSGlzFbSFNlzw
23+
LcqTCqcgZqjTggVjcwbFRwbDBTzbRGRwTS
24+
cHLpZgnCHpQsDdsmQp
25+
jwStJjJhtgJStpgwJMggQWqQTNTfNTWfbNNMCCNG
26+
zRZnFPRZPVncPGVFRlRmGHCTqfCCPCHHfLfbTQCbTq
27+
lnVmFZRZDnRVBFZcrZlhjpggvppthGhphpwprS
28+
lcttSptHHllQbMcsrltSQGpvNBzpgWBBBDDGWzvgLz
29+
PdjPVRFhFqFjRRCjzvRWnWLBLgbBBLzg
30+
hhCCFbPTmjPdhZjhPhZCmTjjMsrJSfHrcmHJrHHmlcJSsmft
31+
WhWnLZSSnSzQQhfLLNSfmDHrCFDDHtpjGGtTGQCG
32+
gJbJBcMVwJlRRdbwvwJBVtjdtHHTmptpHTCtTFrFCp
33+
JwwgvRMJlvJwgqgvqRMcnWWhLPzzsqfnZWnfWWnj
34+
zdwTSvzHMvVSzDCtZhtGmbTGhm
35+
lcBHfFjjgtsmDCgshD
36+
cJPBnqNFnLfHJFPqljclqJzQvSSVWvSnMwvSzSWWdMWM
37+
pNJMcZrsZDLDcbcccMpQffHqvgdwdFFmdmqwvqmgmzsw
38+
hhnWjTTStRCGSMgvvgvdqvdFjvVz
39+
hCTSWhPGttTCGBWMRlTCMSnPBDJpbDfDpNpbbNJfJDJbpJpN
40+
lbcQcSNFchhQNqHLLqhLqrMpqM
41+
WfsnsszPWfBBVpHdprrpdnGL
42+
WTzWfwjtTBzwwBDzmfSSQmmbFZcpQNcbZZbv
43+
PwSJSlmtPPgwgmHhPPvRvGHLRLQRBQGCQVGb
44+
rnsFDnnfGGRWQRnW
45+
dfTTfTFdfrfFFFzQFPJPSSlhqtllNPzgwS
46+
MMbTFZrcrGZMDqNStWScDtzS
47+
dvWmhQggQvCnfnqPqDnDjnfP
48+
lgvdvLClWCQlgdhlrMBBHpGlwbHHGH
49+
CQHgQpPdCQpsCpzRwSVRSzRZwZ
50+
JbNBbcbrJvbJnqVznwwTzrzz
51+
wNbfLvvfDNNBHPFLhddFsQss
52+
VVzqvwzpqvzqNVVHGNqjHpNfSQDWdWwJdPWrWccdQrWrrDdd
53+
nLcbtBRtBhcnWSJQlJSgll
54+
tFbLLLRRhMtsBMtRCRsLCMBVjjvHTNjHHjzcvFFppGHzTT
55+
QCPrPWNPlWjGGZqGmvdPGd
56+
JgpHpSfphhfpVmBSgnTvdtddGvZVdvddDv
57+
LhphBfHpSwSwfHcMgfpmBWWWbsNCjFWsljNbbjlLjb
58+
QJmQbRmdfmdSQRQZSJltTltNvTrtDtrlftDD
59+
wpZcHVwwMgBpWMVgWpHLphztDvvGvDPlnGvDLlNrDPnNPl
60+
McgWFWHHHzVpMgZQFqbjsdjqqRCq
61+
JPhLFfMJDLQnjNCvWWpdjjdM
62+
crSwnwVnwSRBcNBNjjWCdC
63+
GlbTGbsSzrtbmbfhnJQP
64+
fDLSWVDRHHfVWHgPcZlDlZbbQhBcZQbb
65+
jrmFmprTpFztmddjdjrpvBQlQZGhQbTsQbGcQbcbQs
66+
nvqdpmjFnwpLSWlfnVNnWl
67+
nZBRbBJzznNNCnJZwnBSCJMcpcTpcwhcqhmsmWMwFWLL
68+
jQfvjgtfvPlHHqWpvWThpWqWch
69+
VljjjgjQjrTDlDgrHtVCbnJZzNzNbnRNNJZrJR
70+
MQtJnttlMLlJQsNhQrVVrFVWRRbbVFdJDD
71+
vGjvzmjzgHqSjjSzmSGHTWbfDFWrbFzFfdDVrfRWDb
72+
qPRqvTSPggqGgHCmllnCNLtnhcnnsnnw
73+
zrlZsQMFrsgQFMMjMCbjVDCTCW
74+
NqHNRdBppcJJcTpdmRfHThpdDWDtvbWVtbLjWbttWqqCCbLt
75+
mhJpJHTJmBhcJhwhgwzsQwSSlzQQzGlZ
76+
TvsszlvnzRRVTqzVrqrjjZGPfQPFqPqG
77+
mcNhDNchppWmWSNhdSmSCQNjPFjrfGjrgPFCrgFPgPgrLf
78+
SDddWpdMWSwNDmMNwlJRQwJlsVRRvzlsHt
79+
DTtggjsFFFTlPJhvctBqBqSRmSMBSRnmnRcm
80+
fGfwZdrbHVLdbGdHHwwQGVwBBCMMfvCNRNSMMMSRBmmRCN
81+
dGZzGHGVVbvHvHwbzpGbHLrwFDDFTtsglhFspgJshslTDJjT
82+
CbzspssWwCPcvvplrfqfDCJrDqdllB
83+
LjttnjNTNGgQQJdBrffTwB
84+
nVtLSgggjFwtMczhvzpZbSZW
85+
HCzCHHvWthWFHhssWCVmnqZrnqVrmrmgnbrqmN
86+
wPPGBjQQGwGbSlSLwgnpnrBZnBBmnMNnMN
87+
jTTbJlJjPPLPGHHTthhhHcFWTT
88+
qRdvvPDrCpzPHzcdrrcRqtbJJgjhgtWjJgbWJtgCFb
89+
GTwGwNscLllGTZmGSTZGlSBMnhggjbgtgbtbsgWFFMhbMF
90+
ZSQBSmlmzcrdQRqz
91+
cSpTRphwwghRfgSScqPpnDqDCjDjJJJJDvDLCvvn
92+
BVmmQFQBQVNBVmsWlbQFGBBlCHTJznzHLHvvCnjjNLHJDLHD
93+
MFsZZMbBGblbQTmQsFsQMMfPcPcwSpwtStgPphZtctPc
94+
QZbbZBdjPBjbQQbZnSSltlfwWvlvwNtNjwFMMN
95+
DLVqTJqpSVtfsptwfWpv
96+
rcRRVVTSbPQBPrBZ
97+
tjSgSjLFSnVjDWRsQj
98+
lcdqhfFpqZGpZqznrVRWPrnWRVBsVG
99+
FHddNNNHwTHMHvvS
100+
qCSDSQlwBHNbgJrHnLJH
101+
GRpRpRfnmRWWVWgVrF
102+
jhdZjpnvGfTZZQPlCtqQQSsS
103+
FMZSGWWBrZjMBZMrBWMGjjZDnCRqpgPnbRwPbFnvvqFnDR
104+
QHcpfVVslfdVlQclcctqRgqgbsCwbCwPCCCPwD
105+
NLHfLhclmmhdfNNpfQMBmZWBrJMmZWBzMrjj
106+
pBMpRgBMQwzRthmzLC
107+
HPcJvrvDbjvrFDcvWrHfHfWHmdddtdTLztmtdtfllmNdNhNz
108+
DvPFDvnPJLngQsggMGGQ
109+
BbcFHvbhhDbbTSvZmwwgJPPlDlZldd
110+
prCrNLMNgWWJBdrJ
111+
fQMLCfLLtpqsNNMnnfBhcBSVGbhhhcqVbcjc
112+
ZchcZZjmmNpgmJtgmM
113+
RLrHllWrQZQGlBpbGFGFFM
114+
RQnLHrqPLnZHzqjfVPcvVTfCvPTC
115+
fMtwjfMwrbjfGrtrpPGrwpNNVNVqcbdVqHZTFNbcHSNL
116+
mgzvDnJmnJhFJHSTNqZLHncHLS
117+
vRzhzslJFhRffPPQMjGtGl
118+
VMMNjWppQVwzNWrZdrrtMCMZCtMT
119+
ngDScLcvPPgDPDGhGDPGSHVbHTHmZtTSrBHZbZBmBb
120+
LhlglLghnVlplswJjs
121+
bGJQZZTQQLJJbQZlTZLjCGQTsDhWFhmshhvjWVFVVrgtDsst
122+
NScqwHcwwnnzBwqPqqsmVNhgsDDVtsghrFFg
123+
pcrcwnpcffrcBzfbCRLpRLMMRlRLQl
124+
hzCzCzpRgCzzzCctNsNWNqsZqZhPqNPb
125+
TdBwmdrrrDmvwTvqNsSRssPlsWsq
126+
FDBRRHDMTmBfmrmngnpjGgVptMgLCp
127+
ZPLLnSPMFGvFZMSvHhDhqHfqvfqbDW
128+
GgcppCgBcrQBBgplrVddhDqqqfdHgWdfqb
129+
CcCjQszmGBQjrcCwCmCccPwPTPnMPTnMJSMMRZSPJL
130+
LcVVcqqSHRLzRnCfNnGzNW
131+
LZPPdljlCggMjgNM
132+
PTvwlPtwtlJvZTQvbcHppFLHVVTcFssF
133+
fpWzvzNgWJBVfBJzWzBVJNzWbZcbHhlbthjlrrPrjZZPHZhJ
134+
hRDmGCFDwQnStncrjnccHcMP
135+
GmmsGRmFTsFwSCsRQDsCSqqpfvfgzddWggvqdpfBWzVh
136+
wjRBFljJGDFwwlGGpBSjGDtwTVtTgHHHsHHsVTVzsHqq
137+
CPLNPdbWvbMWbcmvPNdLVqtsHqgCqHChZhhsVsHt
138+
PWcPfPvmvNQbbWdWpJjJBDptGnDFjftn
139+
mFFmJpDMmmnJFjWDVclsSpcflSsQwSsc
140+
HrjNNjHNfVwLNSSl
141+
tdZbhjHZHPbdCTvbbhhrGbbHMFmRMvnRRFmmvJMDmgJDJMnq
142+
szJZhshbsfZJjbttchPctdTnWnRWVWMMnBdLRpMnBz
143+
SrNwvDSwrCmnVRvjpWLBBn
144+
ggGmgNFrgSDwmNgrCmtPsZPsjQGsqPcsqqJP
145+
gjSWSjJSWrWzppzW
146+
MCMzHNGNqHfscsFtrtwscVcr
147+
qGHNGNHLCnLmTCHfMMmNTzzldzgJlJZZgJljgTdD
148+
QGTQtQzTmdTsGTLcdFTGzdtBBjtwvBBJDvDMHJgjJvww
149+
lPlqsZWnDJjZvZgV
150+
ShCfCRnWGFsRRRrF
151+
lwGtndCrrmGCwdmhzQrBzrHvLVggPgHv
152+
fjMjDZJqSDJfJqDNDjJffjZLHPHHFvVFzHBLgLFpFpBSgL
153+
MsTZWRNZfJZZqMGVGhhlhhccRnhC
154+
MMvncqvcHcSnsdzzgvdfQjpljpQVTdDQDRTRlVpQ
155+
wLCrNtBFFHHThRlH
156+
bPJtHmCWssqgGPvq
157+
LvTLsmDWvTWqTsmqjRTmjwgdwgnMHMMFgdtHmBmFVn
158+
rlSCJzCSfpGGlhznQdnwFhtHgBFwtV
159+
SGZJJSSrVfCbGJLjPsWbvjRsPTqR
160+
pNqVVDCMVMBpqJVdMNHrccGHrtNtTFFFrQ
161+
hwmllWbvvbnPvbSvtrFhhJzzHztcTztT
162+
WSnbnPbbbvlWlRvnsqqMgLRMjLgVLCJdRV
163+
GphVTGVMtQwtJmtCJP
164+
FRRsBBsFqRNZNNrgqBdRfCZvbmPgmQzJQPnmJbJmQPJPPmwj
165+
RNqsFrRfZZsZWvNqWRFvrBZvWhhCGVplhlWTlTpSCLpMhWMD
166+
RZRjgbZHjjhsSnRsZstDRStsTVpFhBqFphMqPPpTFQVMPFTM
167+
zrcGJwNNdwJrfNdJWvGdJzdTlTFlqTVPFTVFPPBpqNTbBP
168+
WwLdLGfrRLStCZbD
169+
mrmTqJWTvDDppTDb
170+
DGzBfCzNDzdMwnLlbn
171+
FVZPFZFFZPgjmWZsDtsq
172+
TpnFTnFRCgRgldMRnDnRcrcdbdPBHbtPqbVcccrH
173+
WNWLfQQmfhhSNwmrcbSVqPtbZDZcPb
174+
LQhwLQvQvNfJhJRDMGFRlCMDMD
175+
vLFTDmjVvLgnNHPphN
176+
lMClGCmsRdCnPzCccngCpz
177+
dlGZwRsRrRwswGsdSbbZSbVDrVBmDWWWFJrTrFvFTmqV
178+
SGsZRqGLWLLtZRHRRcLHGTlJjzgJpjzTpNTNJNWpTm
179+
MPMPvFFvFBrPPDPMQMPChjgpNpSNTmmmpNlTDljlTz
180+
vnhrvMvnhSRqqLqnfn
181+
mGFrlBmFQNQFljhqqqqbmHMsTPRbWWCsLMWRsb
182+
wnwtvpwVzDVpvzzwZppnctMLtMPWWCstTsWTsTLffRRW
183+
vwDJgZnvZJFqgLBFGqgl
184+
QdGltnWNWqTdqQWvWsMJcrTcFcrgshJRMs
185+
BzPLCDPzzzzCCLLfCBzfSDmLMrDJMglrcRbbhRsFhMrRJcsM
186+
fjSzwwHfSzPzfCVBHlpdjGnZqnZptqQWjGvG
187+
VbJZbgVzvzmhQpQWpQzhDp
188+
tHPPcGcFBlCctCGtGcBBNlDLMGfMLwWfwwqMLLJwQWwp
189+
dCHTPTPJdTBFPdrZjgsjrjnmdgms
190+
JJpBvJQBZVvcFqqnsWdWvjsn
191+
DCfbDbTtbgfCSHqqNdFMPhPDFnPPDWsPjM
192+
bTmzTNCTNmfqTgJQcpLrpZLzVlVL
193+
dtTLntTjzTftnmwnqGGQHNmm
194+
SWbShCPMBgBRRFSFtRZZmm
195+
DlJPCJCgPWhttzpvdjcpVl
196+
WdzsNvWMzNsMHWddWCVffqmSmScLPvLPgLgLPplrrPmL
197+
BtnzbnBhbwttwtZlmmlgcwSrLgmmpm
198+
bFhQtbGBTnjBBbjTtFBbVDzddDDfjdDDqNWVjWHj
199+
ppmtpgLLZLCbMQvQQThdtrvPhV
200+
BBlHBwHRjHqBzzbHHqjjQdDQTDhPQDvnQlrQDQvr
201+
HGjFzwHNczbzRFcGzHGFSJSpspsmpssMLLSZCppmfs
202+
MpGrMMMcTsHMVHcvbwwmmcRSmDmDmv
203+
zCNptqCBQQLCNLCzbfvSvbSzSDRDSmSv
204+
CNNqNgNQJNgQtCqLlllZdZhTrThsnHpVVssPTsGP
205+
jhSGcShDrLcLLFcw
206+
MVzQvQNZVLHvHPdhLW
207+
qzhhQlVbgqjmSjJDsgmR
208+
CFzSPCgcsVVzFgzSCsBJwjdwJtNllnwglJlp
209+
QrvbqWvvLbmvDMMmbdwFWpNNwwwwptjJWn
210+
RZRZZqvvvDbDHCRTGchHFSGG
211+
SszgPSPPVltDlqtz
212+
WfTdTBdQdFnWBBBhBhNjVJtpNsVlDDDHHJWp
213+
hQhrLFsBwdQPggbRgPwRMg
214+
frRppMMDMpDnJfprnZhrrhpzWgvvGCvvFzWFvzvVVWFGJB
215+
TcmLwTsccqwqbPwsdwqdTPSvBvzzztvggVvQCGWQCLBvCv
216+
sswNjscwmqjwSssjdZNMfHHlHhfrnrgnfR
217+
JpBJBdmdzZzzpngmbCnlqnNbNM
218+
MMTHGccLTLvwRMlRnnQnbblnRnSs
219+
vVGtvMcjLVGHfHDrPPWZppBpJpfZZZ
220+
FGJtlttPdPtGFldlPRGpJTVzSBSSggHgJjVmBMHjJm
221+
rhbvqrQLrWqrWLLfqbjjgNmVNSgzTmNgNS
222+
hsffZQqnqCfZzlPPGlRlcwDs
223+
HDDdZpcFwHFRFcZqDctpRDHpwTCVwjrBTQTBLBLBJJBjjQTJ
224+
ldlMzhlPshPbLrrVrQQCMQjB
225+
glzNfWlvbHqSdNNNcF
226+
jZCMtnZZHCZwBWMwCwtMmfPFfvHDvzHFLPmFDfvh
227+
RcrQdRRdGTzGvDGmfgjh
228+
TsQscdQsQNTNqQQpRrRVCCBMMJJWMMVNVjnNJM
229+
zVPWhVzLzWBWHZnlqBllqlpRbGNdffscGNdbDRnNSfcG
230+
MtvSFQQwMcpsGRNGFR
231+
vvTwJJSgmCSMmjVPPJWWhzllWLVV
232+
RjdfnJfmbVvVJVFQcs
233+
rZDZGBBZVvLZLHFW
234+
qPzTDPlVrjNgfCdmPd
235+
bcjmQPrnbmVmsLVrLrjmcHGRWlZHHRwHpZRHWWwH
236+
nFhqzFqJzDJfvfSFqFfGHWZZHGRJRWHZWdpWwZ
237+
hBCtDSSFCTqCCFzSnzMrLNmrMNPTNMQPMmNL
238+
qvNBSJVDJGGVSJbVDDVhDbbqPjpWpWzWrnpWvvWPMjnWnpWz
239+
mlTltwcwMWTPfNTN
240+
CtCwFmCgmcmlRFmFCtRCHgmDJsbBhVqsbBHVDbNHDHJqqb
241+
csBFBsLrBGBWcgLcBvRgpRhbwRwlbQwbwQgD
242+
DCqmDmtTRtRlhdlh
243+
qnCmTNPmmCnSSzmzNzGLzLccGDBzGrBLvvcW
244+
FjfBjHnHzPFwhvFFqh
245+
bjRpGsNsPqQvPclb
246+
NWGGWGrrZVZjsCLmDMMgzgrSnzSm
247+
MDgmmsNCmZMWmHCZLrvnLBBjPLVlPVbW
248+
zcJGQwJdFRnrBVzqzvPr
249+
hTQwhJwcfTFddFdGSfcRQQGFsggsgsHHnSmgsgsmgCnHNZpC
250+
BPfwzfsgsvfszvBRbQpttRVpJbJpVg
251+
LhTmHLbmbcFTFrWCbFqhFHLHVRpVtQpZVVDVprnDMJtJQnVZ
252+
TGWWbTFFGTqlHhqhSdNdNfNSldjjBfjv
253+
zCzpWTccHlWcPzMljMttbJfjmlfm
254+
DqqQVZZqVsqJnbbnmjbJJQ
255+
ZRmDZsSgVmGLsVqsLDFvrcccHrcTWCgWHBCHcCWp
256+
cvGlQMtQlPtQWWMlcGsrFwFdbgdbdGGDCDCwdd
257+
VChVZNBVjTTfhNTFgzrzrJgSdzgzwf
258+
THThZTqZRHZRqNVZNTVLjRCMmQsntQctMnsPmMmMcWtLMQ
259+
pNRHrbNlNnRLNpMMMTrcGcGTcccz
260+
ZttBmsJmZdjsvTTvvdBMjDhfMGWGDfDfcScjfD
261+
CmtTtwvtCsgllNHPPFbLpC
262+
NpQcvwwRHvdfRvQsNfBQNvfRhVmVMqsZMmMshjMMtWZtMmrm
263+
CGHbSSzFLSSHzTnbLnCWMrtWMtjnZMhZrqZtqW
264+
FzCPPzLbPgFJbHSPldNRpgNfvvccgvwf
265+
nSjpnnhNchMQZMSScnshshncJCGwHGClwmHPZlJPTVZCwHJf
266+
LvtzBTgLWgLPlPwHPLPJ
267+
dTBDqRqFzzhQFhshhNhM
268+
HjjdPsjnllHsbnnDnbTBzLBFBZLLpRFRcCHRFz
269+
wqqWwQhQQMCQffqqhtwMGhpZFRRZvzWzFvBvpvmcRvZm
270+
fGfghtNhthqJrQqMqMMSgDdbPjbssDbdSnjCdd
271+
cqPwJJnnffBFqSfJFnDDPVplLdglGgLVjzGLdVSzVt
272+
WHRTWNHsQTNbzsbCbTsvWrWtjlgVdLgLdvdgvmLjpGlgtm
273+
ZMQrTbNHZNsHHrQCZrNDFzhwnMJcfnDhJPPPFh
274+
LRCFbjNjbCZDmtmqmRRmLtFJBgWBBpvJMwBJvGjBBvMBgw
275+
TTrlfHzccVllZhdQgdGMJWvgWgBndwpG
276+
fVSshSVlsfslhsSHHSZtZZNmNFmtmbFCDF
277+
SPGCBPDMtbcbCtchSMccDTTrrrTFTrsrMTWHTHFVWF
278+
JmnzqVmmwwfpJpmdHRTRsdsTrFdrQp
279+
LqwLgzJgnjqLwgGcVbtjDGjcVbhv
280+
PQcMvrvMsvmdSPPVccmSJcSpGBWWWbBHfWWnfttJWnWJpJ
281+
wDzqhjzmqRzDRwqDzNDbWtjWBBBtGbtHpHnnBf
282+
zglRhDqqDZgRNmZQVCdcCPQvvdZv
283+
RpVjRgvFjGBNWtBWFDtt
284+
dcqQwlqMMsCLLfbgQmtD
285+
snlgzsggTzSTSJTr
286+
dLHhDdtlMngFcFsFLFzzsj
287+
vWRGGRVrrWvvGQQJBRsmQzmsqnffqcNfNcfz
288+
vSRVJBVBwTvWTnHphTgDgtMpDl
289+
bvvGnnJbfPmfdgJJSVtwwCpTScVfNpSC
290+
sjsZWDqBqqMRZsDjbWMVwtwNNcNtScRHpRRttp
291+
hzhDqqWDzZzDZzZLQPJPdPnPvlrbGdlnFQ
292+
PwWHTwzFvNHsNzmmMwzNWGQrCqCFjpZbpnGqrqnpbr
293+
gRVRgJRJlDLSJddDccQVrtZnCqjndnrZdnqnqpdq
294+
chhgSSJfQhRRcSSSSBLVfzmzHTNzMNsTNWHMMvMP
295+
lftqSpBSvhlDBDlhBSczQGmcFMcMVVFMmGFWsm
296+
rHLHTNdggsLLnwLHbTTgdrTMPPmMGWZGQQMzQVQFZQGM
297+
gbJnrHHjnbrgLrRrHpBJvSBDDsfJsDtstq
298+
dBTtFLTtVmpdLhMprSRSWMRSMR
299+
QvJvQbjbCgCQRBhzzRsNWNBC
300+
bjgGqQGbQnjGQgnQgbGgjJnDLHLdfPVtdDmLZdBFVVZttdTf

data/examples/3/part1.txt

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
- Example 1
2+
vJrwpWtwJgWrhcsFMMfFFhFp
3+
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
4+
PmmdzqPrVvPwwTWBwg
5+
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
6+
ttgJtRGJQctTZtZT
7+
CrZsJsPPZsGzwwsLwLmpwMDw
8+
==
9+
157

data/examples/3/part2.txt

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
- Example 1
2+
vJrwpWtwJgWrhcsFMMfFFhFp
3+
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
4+
PmmdzqPrVvPwwTWBwg
5+
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
6+
ttgJtRGJQctTZtZT
7+
CrZsJsPPZsGzwwsLwLmpwMDw
8+
==
9+
70

solutions/Days/Day03.hs

+40-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,49 @@
11
module Days.Day03 (day03) where
22

33
import AOC (Solution (..))
4-
import qualified Data.Text as T
4+
import Control.Monad (join)
5+
import Data.Bifunctor (bimap)
6+
import Data.Char (isAsciiUpper, isAsciiLower)
7+
import Data.IntMap.Strict qualified as M
8+
import Data.Text qualified as T
9+
10+
type Counter = M.IntMap Int
511

612
day03 :: Solution
713
day03 = Solution parseInput part1 part2
814

9-
parseInput :: T.Text -> a
10-
parseInput = error "parseInput not defined for day 03"
15+
parseInput :: T.Text -> [T.Text]
16+
parseInput = T.lines
17+
18+
part1 :: [T.Text] -> Int
19+
part1 = sum
20+
. fmap (fst
21+
. head
22+
. M.toList
23+
. uncurry M.intersection
24+
. join bimap mkCounter
25+
. (T.splitAt =<< ((`div` 2) . T.length)))
26+
27+
part2 :: [T.Text] -> Int
28+
part2 = sum
29+
. fmap (fst . head . M.toList . foldr1 M.intersection)
30+
. chunksOf 3
31+
. fmap mkCounter
32+
33+
priority :: Char -> Int
34+
priority ch
35+
| isAsciiLower ch = fromEnum ch - 96
36+
| isAsciiUpper ch = fromEnum ch - 38
37+
| otherwise = error $ show ch
1138

12-
part1 :: a -> Int
13-
part1 = error "part1 not defined for day 03"
39+
chunksOf :: Int -> [a] -> [[a]]
40+
chunksOf = go []
41+
where
42+
go a _ [] = a
43+
go a n xs
44+
| length xs >= n = go (take n xs : a) n (drop n xs)
45+
| otherwise = reverse $ xs : a
1446

15-
part2 :: a -> Int
16-
part2 = error "part2 not defined for day 03"
47+
mkCounter :: T.Text -> Counter
48+
mkCounter =
49+
M.fromListWith (+) . flip zip [1,1..] . fmap priority . T.unpack

0 commit comments

Comments
 (0)