changeset 3:c1b35ab5d10e

Day 03
author Lewin Bormann <lbo@spheniscida.de>
date Sat, 03 Dec 2022 09:43:14 +0100
parents 5bf75b17187c
children 086b318fa4fe
files 03/03.jl 03/input.txt
diffstat 2 files changed, 342 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/03/03.jl	Sat Dec 03 09:43:14 2022 +0100
@@ -0,0 +1,42 @@
+const input = "03/input.txt"
+
+function parse(fh::IO)::Vector{String}
+    readlines(fh)
+end
+
+function run(v::Vector{String})::Int
+    count = 0;
+    for s in v
+        l = length(s);
+        a, b = s[1:div(l, 2)], s[div(l, 2)+1:end];
+        c = intersect(a, b);
+        @assert length(c) == 1;
+        c = c[1];
+        score = islowercase(c) ? 1+c-'a' : 27+c-'A';
+        count += score;
+    end
+    count
+end
+
+function runbadge(v::Vector{String})::Int
+    count = 0;
+    for i in 0:div(length(v), 3)-1
+        group = v[1+3i:1+3i+2];
+        shared = intersect(group...);
+        @assert length(shared) == 1;
+        c = shared[1];
+        score = islowercase(c) ? 1+c-'a' : 27+c-'A';
+        count += score;
+    end
+    count
+end
+
+
+function run_03(f::String)::Tuple{Int,Int}
+    open(f; read=true) do fh
+        p = parse(fh);
+        (run(p), runbadge(p))
+    end
+end
+
+println(run_03(input));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/03/input.txt	Sat Dec 03 09:43:14 2022 +0100
@@ -0,0 +1,300 @@
+WjmsdnddnmQPZPPJPL
+bQllTtpBlgwtrbbCwfZcfSFPSfLCSF
+GgVgQrlpphBGrlVGgTtsRHRWVRMzRdVsqdnDnV
+MMTcbpnfNGQbMjgsRwSzRptRzz
+lPqCCqQdQqQmCPRzRVSwtzgqqwqR
+lrDdllPdBWdDFQFnMbDNDn
+FldWTldlpBSLzvpnpSTpWbDhbHNDPHhJcNHNDwbH
+qVCGQRGrrgMQrJhPNchgvgJhNc
+frjGfMrGQMjsRrRQjvQGmrQQszTTpSLBznlzBlLLSBLLSZTn
+TPZZZMTTbNTZNtTlTbjPVRVGzpGQLLzdGgmslhzSzgLzQh
+wrfwDDvcnFvCfrrSQsmzGGQQdndsGg
+qfHwHCqCqCrFJrcBHCCJRmWTRTmVMttjRjRHZMNV
+vpbqnzbPmWLFjFLBnjZg
+NltQcCClQlcGQGtMTCRdGTGBFZRLZjFFZZhBPLrFHZFjHf
+lMtlGMwMsCCNlTwtsCPzzmPmmVpmpWqVWsWz
+VmWVSchSrScGtwlVtBnwBVFF
+RZZPRNpPCLZvZPZNCLbQPZNBFtttmwBMTMTtttCwtgwBgl
+RNNmPvbQQjPRQQNNHpNbhsfzWJqqSJcsGHhHcfhq
+dtJvcpccWvLDztRCRRCrCC
+qHVslPzPqHqzmPhTzmDFggjrHrSCNFFFSjgR
+qPVPMhszZPVhwBZcdpvZJncbcJ
+HBNLlBDtvLDHhHLvfwlFjqfQTFqqWfST
+ddsGcggJncZVRdGCdZdcWWzSFrjzQFrfTzqfCjFw
+VdgscZmbZNBvbDHTbL
+GtSZQqpHpHfGHzzqHzHfSbPbnJCrRCnJChmjnJnbSh
+DvcTNTDWlNDWdlbnnbjmRhRrCCRd
+cclNlwBRvvTNccRlBNRspVLLZzVzVZQqfqqLpzpw
+dBSfHdZvMQMdNVpWRmWmLCmmtB
+rbTTrrjDcqcrrqrjjJGGclltPCWDmvtpmpPpvRDsCspsLC
+vlhjThlqcjrnTvThndddHZngMnfwNQFNFM
+tHqfszrgLsvgqtHrHtwVCGBRRjGSCwsCsmmV
+MdFMclPmcDQFDlDdlZPmbVpCbFpCbBSCCRGCFpbV
+mcDJdDQMcDTZQhhNNPldhhDtvHLgqtzgLvzTzWHWnWfvvz
+sVdGlTMMVTGCdsTMHHWWnNBzNWpNWCpW
+mPmjFhlwmwmWrpSrSWHB
+jhPhjwgthtFFjRwjZgjGdJcdflfqMsZLLsdZdc
+CBRsTsBBzLCfLqtqBRPNDQglSttlcgDlgGGt
+rJdbrJjrdbVJZdVZCGrNNcgDQlcQrggl
+FpFbbppjFCdwmTvsvfzmTnTBfq
+cqhcWqqCNjGWqcqhGGZzngftmptLZLGZTn
+brJHBbPVHPvSsdHrzQLzZgpfVzpfQtnL
+dHFPBPrBJFRzcWNFhWwN
+QTBTfQTZsjWDJBJd
+FgFWNqWGDPqlPllp
+CCvHzSWFrrtvNvNNHLGQQfbVRRfHZcZcVTTTnZ
+ZCCHHCVRZzBZQThM
+nljDtcqnhcfbwjwltfLQMLLQQppJBMLQJL
+qDsqschsqblDqjcqtRmNVVdNsddNNPmFgV
+QQRnqGBSpQnMmSGmRQQFtdcbbtHHccjpTFcTfF
+wCNPNwNNWNgZHJHJFffqCjbj
+ZNPzNWgNrsmzMVqsqs
+pVWlMBWjlWWqspWDjdjMpMDCPtmmdbhtQtQtbGPCzChchz
+HZNgrHSvHwnFZnvgNvnwLPBGQHmCmtPmtBCGGCmQhG
+FrNfvSNSZLZJrJsVlRWWWqRBVTff
+PQctSHQDPSQcbShpFzbmFddpmdmR
+wqWVwvwNCJRhmdhwJw
+nMnWggVqRVZqHBSBsQsQGDSZ
+qppwrgZSLsVbbfvZ
+hhBHPQQChCDcPcsvvhbGbsllJTfv
+MDWmWFCPFWtgpRWjws
+bmRjdmrJRjhJdJLZBjTFfHGTtQFTSQBS
+wCNVnsspwsnvNDwnsDwSBHtDHHQGTFQFtMrQMS
+nWsNvqVgVcqdJrchrz
+MZlfqlmblmMRWhWNsjSQfh
+CznczgtDFnVtFBNSRNttvhQsNh
+SGDFzVrzVPrGHVnzCPVnlZlPwTbpTqlbqLMpbLlq
+lbbbGDlwLDLjvDvm
+FQfQnLTWVcPChtjmjWSj
+cfgzzgfgfVdzTdfNwBpbLbwdRbpZGrdw
+mwnWtbmdWdccwtgTmwnQfPqsqLQQJQQLsfQQ
+SjrZbhvBZzPHQqfGJfjG
+FlrMBSvMZZFBZhShMMdctWDtmFNDbDTmtmpt
+ndHWprpqFTnnpdNFlhljzlGTwDGzlhGz
+fvZmmVVfJctMZsgMgmcBmsZhwQlGDCzPPZWDGDjCllhC
+WsmvmsmRNnpRHdbS
+LgZSvhvcsWtcWnjrFrWjjjnPWW
+DJDfNlDNRFlpMlFLFP
+TmqTqDHdmfwJRwfdQJLHzzSggHZZcGzhtZvcZhzG
+lbTpqhhgSlgtlTqSDzzLPPPrLGTTGnLm
+VwGfQGBGZWNnmDLPznLB
+vQdfZFWvFMMFwWGGhpGqJbpFtgbS
+hSvCvFRDwmzCCHrszb
+jdMgfTblgjJTLLLzqqGscmPmlqPzHc
+bjQLTTbZMfJffZBBWdjBBQwVDntFpRvvDVvSnhppFv
+FFnFQndPqzmjHscmJFwc
+ZrZrRgDphGGDZgRRBSBNMHHvmwJJSNJHcv
+DGrbbthfWWWDgtfffttfpGPVqnmblqPqCdQTlTPCzTll
+sHTsGrHpsftmddRRZfRv
+MqFcqcMQbMcVPCdFZCzZsRsFzL
+qnVlBbcJJbbMcbgQJMMbQlDWWwHWSWwpTsGHGrpDWG
+qpmvVVcGvVVcVmDsCfqTHLLJzTjfZzLZ
+rSSgwwnSRRBrQrZzZHCQrZ
+BFgFRgdNnSBbbnhSMBSNFdsWVtpWmzsGtvpVPvGWVDDN
+fBBRfJBzzMRGRzCBgWtbCWtbgHHHWdqt
+mvNcDcsDLLnnqfbv
+hpTsTsTrDrfpMSFFZjPFMrSP
+CNQGGDMFWGnWWvvNMQFPvrgzBLVBLszwgggLgw
+mppZVZtZRTbTTpRccVbgrSLzSPSzBrfbPBbSPw
+VtZJhRJcTpJTHlhtHZCFFWFjNjGGnFhCqDqG
+cppcZGcGgGpdTgSSnmpFMFrFzmwqwmrHwz
+RStQJNCNvfBQNjrqmrjFrBMzFB
+LJDNNJCDLcdLnSVd
+gNrBNSrNNtSjBndzmzlVnm
+MbfqfpCLpCsLqsLFSbQLfnMdcdRRcdzldlnljzncnJ
+QPQLqZqhSqhvtvTTWrNg
+DtrrcGvtLnrrvLrfctfHztrfQpbwwphpdSbbPPPwFSFFRPwH
+gggBqTNdTNjqWBlNmCqCmNggQPhpPPPbhhQpSBpJwbSJSQFR
+ZglTmgWNgVZMZdsGMcvDcMdMnz
+bjtTFsPmmtpvVlQHlQJQnJjn
+WzDzwLCSLrrDNLdrSZRCwNzrlQlJMnJQJJVhbcMhgllwnJQh
+fRCZzrWRzzGbGvTmBPTf
+lVlfJVblPQbllflfLdJdvGpjnFRFqJFnDqpJjnpF
+HcwZMgmwWCHHCSwcWCcgSCtCqqpFppGDqvDnRhgnnqFDpjFT
+cwCHtGrCssWHCCWZZMbPPNBVbNfVbPllVszf
+DSpSnRwrZDPWsJdZ
+zjjlQVjlNZmCVCfhCfgFFfFFFqWJbgbFWHJH
+lNQMlGjQBZjCmhNMCChGzlVNrpTnccLLwcRwTSppSpprLRcB
+vLfvcgglbfLfgqdgNpPtzqDmPzmJTTztPCHT
+ZWSQVGwQcWjSshGwVcnSzDJZtPPTzmzzJHCTzDtJ
+SjVSrWVhQVQhwrLMcrFbfplcflvv
+NgtfSRPnnRrSlgsPhnShDWQlMWpVBMMMpCWVBpCQBB
+LLJnvwJvZHZbHTbVCQBppCFJCWWQBz
+wHTGZmZvdvLvjLwZdqngNgsGtrDPSDhtNfDf
+DwrDRlrwmbSbRgwsSbRwGJvQGqjJqGNTJTNGTSGn
+PZdMZzCQFBZWWFQvJZvcNcjqNjjZJG
+WHWCFHBBdzzMWhPFtFdMzlRsVbVmDrRVVrtQplwVwD
+bpWbJMWpJbprfNMrBfJfprWhPnGtnHnLHjPPjLvsWnHGvGvj
+qZdgVVgDQhQZlwcqgDcchldjjmLtntmntPQsmLnLPjssnL
+RVRlgcSSdglZczdqbTCrhBrBpNBSBSbF
+SgbGvfbnGgmnNnnzqMqqHHRzbZBzZR
+TWlssdFwWdtswWPtTtWltwdVHlZZzRHZBZRzrprqHMpqgZrq
+dssdCWTFwSvgmDjDCG
+pqsDnNzzZsdZSnDSpwjBCBWvgjvWjNFWQgWC
+lVGtRtLMGGfbTGTtTbQCQnBQBnBFgFQcgjfc
+GPbTbPtnPttmLTGRRbtmdwSDwpwwhZqmdpzDhDJd
+MdccRQMJvHdgZggvhjjMgHcHlWWqFFWmGqFbJWzzFLWlLmPm
+TDpSsTrtblSzQlGQ
+tfVNrwTwtswTssMRjMMQQddNMRCd
+GqGqGpFqqgDGFRqDwwqqmzpGTLPvVWMPVCPLJLRJJMLTlCWV
+rHrSbrsbQcbtdNHHHfdPlvWBLLWlvMTVlVLCJf
+rccbtthHSHsNHrrcttwqpnDFnMmpnzFnFhnF
+vQQQbRvlLjNNLLBzNllNHNBqGqhMWhGGhTqmPmqhWTFhRm
+tnsZwgSnCDrZSCDsfTMSGpPWmPSWmGmbFq
+CrVnfnCCtrCgfrffcrstDnJNlvJdNvzdBcHdLBJHvbBv
+nmQsMqTnLlmmpQZmTZcdHwCFSpHJSSWHSJVSWSHH
+vRgRRtfPvDjzDgDbsjzRvjfNNWWCSJFwrHCFbrCJWJHCSC
+GhsRBztDBgzRPstgzBLZcqmlcLMMlmdLQBZT
+CWfvvhfWrlllSSRrdQrQDQGQdTRr
+jsNctMZLmMZLMmmmbbNZswZNqBTHPHzBMHHTMGqBRMRPDQqP
+jcwjntLngngplgFhgRvJVp
+vchzqzwlhzRqzVZQwqtVPZLnLLbDnDFnbGLnDbPLDGWD
+pBTHpdpHsrNBBsgdrdCpCpCgRFCMFDLFWWnFWLRRGWbDFGSF
+prsBHfggjpjjcRQlqvtw
+VDwzLQrDDWrrwWbJrVJwVrVQfMfSCNPMfSlMlPcMmThChf
+tsjFdsRsgtRmGZHpHRgBClSlGSClcPhGCfPlllll
+qBBFBZZpmgdFHdstjFJbzVwJVqJWWbrvWJDL
+mgjZmrqmdsmGtDplglJgRVVc
+nPhnLvnHLtLnWzzcNwwcchVJRflhpc
+SnnLntLWZsMqZrSZ
+jcrNfnrNLNNqFgbDfCSgSQbS
+zPPHtMrGGptvTWPVvzvHRgQsbDsSRRCCQbtJsJDS
+wHzrWVzPwThGGwMHzTGGPGwhdlZnBndZLljNjBcLdZdNBN
+qNPhNqddBNhqvPhFvllNgNBHCrrCQnjpCfPVJnnJQJCjJj
+ZZbZTZcmGWWMDWRSDnBVQCjVDffJjnnVCJ
+SGBRTTZGGcLSSWTScsmcMbGlhgwFqslhzqggghwhNvwwvw
+GCCPwpsBqNSsBPpSCrSshzQzLhTvQhqTnhtTVQcT
+JDjFJfMJgWbWWlDJcnvvhvtdLnjnzhjz
+FlDflbZfZgJgMgbmgZJfSpGCvvrGrRCpCBrZRprw
+HwqhgFGSMgPPCGQQQnvvcpjn
+BllbdfRBsBmsmZlBTmQCjTnNWNCmNmvc
+lJDlBflDdbbRlLbfsbZBJtbRqrVFPnwwwhVMHwVrgJwwrSwH
+LTvLtTFLCddFTTthsbVVmHHcqVHmWRcmHL
+lBgwwNggwMwNVbjBCQcCqCRB
+nCMCwZGGNGJnGhtrzsdDDndtsF
+ZlZdJJplLZBDpJjNJlGjQCLmCQmTwVVCbQQbqWCT
+SfgFzftrnRzMnVbPPPQmPq
+FfmrRvgShchvFfghzRvgtvFBpJDpcGNGdBHJlpDDDJlDJZ
+LdNrLzjdWQnrDHsD
+tBZmBZtVZpldVMPRnsRQsnnsHVbRHs
+MlfldwMBBFMZTSFTSqLqcvSJ
+nJqBlvvBjHhBcqqRrGPrTrGpBCGzTG
+MfVCVMLZVZtQCdtLMtQtQSSSTSzFRSRPFpFRGpdTFd
+CCQQtQVgfbbQNggsNfQZZbHbcWmnhlhnvlnlHjJWvnhv
+SGmmGwVwnmhbhnhwhhwbdMgNNgjmvMDrJTCgmBTBBj
+ztFWcWQQfcRzzRFllvjDjggjDDfBgJMBgC
+QtzcJtFtqcFQRRWRRQWFzFGpVnVSGLLGZVGVqddbLqGL
+tBmdmQtjMMqDLqBtttQMjDdwwgwccMMbffllgzncwfFflF
+TPVHTVsRsJVHVrVvHvrRhVJbfCgFbzwbCGgFlwgcCwbn
+hssVWnRrTVZSSZZqjLddWtLBddqtQL
+WhhtGZtZGQZmvCfCwtvhqgbfdDJdfjlSDlSlBBJDSg
+rHnpFHnDrdBggJngnL
+HVcTzFPNzTpPPVrzmtwtvvvmNQwDQvWw
+dStBwStGGBrNnBdrSSMzvjhgFcvvDcnnvPDn
+RLZbCWWJbHRsTHspZWLcDWcPPhzczfjgPjjvjz
+ZmLHJqJsLJJHLRsmmmGSztQdQzmNBrBN
+JrmRVdvcmvvmvvRTdBVVfjFQLwjqLFLWFMqwcFjz
+DDhhttDHHHbHSnsDbHqMqzwQLLFwLsjjLLQf
+bSbPthtgGQPNPHnSDChCRJZZJRCZdCrCBZZZZvJd
+rqvVqNJpVVNwnqqTwthMMq
+jsFRFDQRLQDQmsPRmQsmcQFMzGhwBGBhTzTTzHnRhnhBhRwz
+dCccQcQsFCmCQfbJbvZMNZfJrJll
+TGjrrTRLHvrQrFDCrmzzVm
+NwWqqhndWtzDQhCzVCsh
+CSSwNNwqgBBBBbGGvLTTvb
+fRBRBHCVRRzcCdZHvRvZVCZLNjtwtNwNTtLjNtTpTNttfS
+DZshMssZmTMjwjSLtw
+QPrJDDJsPDFmFrFDscHHRzrcvccCZRVzrR
+zgqzLLvlvdgpgrWpWW
+RnJmNRncnScFmZSScrJQQdbpGdHbWHtPHpBHsdFdsW
+JDfRcrSnmDSJcNfrNZNjvlwjhllhMzlDqMqMvh
+fDLzSMLhhtDWMvtjCRRZjCHHJjChHN
+pmTNpVwPNbPwPBFRqRJqjCnFjZFV
+dTwpddsTbgbQBssprsgtvgcNLzWMctfSgcfWLt
+fbBsBTsNDhGBGZcLLLJJQffQLQ
+MpsCCMHClsHQqZcQWLqR
+FtjdCFzVljFlslVCpFrFjPhggBGDgNSTTgbGNmbGTr
+HqTfmsCFmPlGHddNVGpLhz
+JjjcQQJgjZvZZzzwgpNVGwLGgV
+nQnSbDDRbSQJQQpRZtZcZZsPPrFfWCPFWlrFsFPqmqFt
+TgTDDrCmqJDGLrhqLmLGqDQRFtttjMbQZJjtdtjFdsdF
+WHffcHWnlvvcSSWzPVvHpWWVRbFdQQtQnjwZFMwZtwddsZbd
+cBpPplVVPfvVGBDLGCBqmmLM
+dlMMmnmjvCCjJrrvMdgHcbcFbqFbzQrFbGzb
+tPhRBRZPtZRshTzRsNShRZNGDfGgFFbFQqbGHDHbqfGD
+TSPhBVsTwRBTpVtRZpVhZLJjWzLjJlJlJvmwWWzwWn
+WcvLLgLcczLTDtccbLcgzMMfPsGwRPjwfMwHMfMvMp
+QVmlPQCdJlJJJlFJJJnPQQhlwwMMMnMwNMpwMGwwfswwGMsR
+lrSCZZVFhPSZgzgWttWBcc
+bwbbZLlbwlJhBzFCgtTGRGQldQRmQW
+SSnpHnPHqpmggCWgdT
+PPscHHTfcsPSDVfVssjvwFJLBJFjFJJZFJLNLwrL
+nLgDSHgwRgGnHjjNfTRhjPVpWV
+BstQsvhQZQQbMvCvMPVNWpPcTjfmPmmW
+brtCrtvtzrhdSDJDwh
+dTQTwgmZQbDzzMQCCl
+WLLtntFnfnRHbttnSRRzSMVGDDMGzVlV
+JsPhFtfbLWnsLPLqgdJcjmcwTwjcdw
+wMwMbMRRBBMLPBlhLRQlhPcWzgJNvJtzWNtJptpgjJgpBj
+TnmGGmVnFFNSZsnZqFsWzWjrTJzvzWvWgWtTWz
+qnHGnVSsqZCddnGCGCSNdDbLQPcLLQlDhPRMhb
+NGsBTBlqsvfQBQqsTLTFltRMmRwmmHmFtPSRhM
+gjZWJWCZdDpjggDdgnpWdZZJtFwFRFFRMwbbmRPtShnwRbtt
+zZpSDDgpzcDddjVWggJsQGrfQvrQcTGTGrTrqr
+hpJchhFWMpRDWHWcDGnCGrnGnwPTwpQnCt
+bmgddgmlmjjbfddgmmmNvGQLrtfTwrTtLtGTLQVQQP
+qqbmdZgzZbvgPDccHcZPhWWH
+VVrdQZZrZSZFgQTTTzggrVZVMlfBBfvcMBCBslMhBvsMBSff
+bQwnHwbNpwcsCwjMBw
+pHqqPnJHqpPNJFzqTzQWWDQQZq
+HgwTDfgBwBgcRHqRRjHqHTzQQClSzvlzPVSQLvbbPC
+MnhtNZNnJpWpGhMQbCCPVSPLNmSPQQ
+rrhJMFJJZFJpHcjRLFRfHjgj
+vGvGMBlttBltvjdgbPsrsDWdjPPP
+HnJQHVqNmQHmZsDZPPrDWpgFps
+JSqJQVVDqqVfJNfRffGSGMBwGTCCCTlBMSBl
+PsFZPfGbDNbtQmCCmCBBbmmL
+dcRdhSrCqjThTRcTpLzHQzTmpmlgBz
+hhhcqCvwhhVhfPNvsMstZtsZ
+VvGwBBwvZtGgfZCqShnFFjSstCMC
+NlTRdvpDdTRNzdTHHnMssCnCnCqjSz
+LvWvPcWLpGwBwVVgVc
+bVVmSrLmLSJzTZMSFTBdMj
+QnvqRGGDvWpQWGDpvsRZLBzTRjBTtjRTPtBF
+QWGvDpqcvpGWQpGngqGQGwpLhJVNJcrbfrVbfbhHrmlVJHVV
+NGRGPZWZpblGcJtfssSSsbffCs
+gwRhjvrgjmwgnzvJJJtVCtHJqs
+rrmLrhwFFmmTMgFRjNZWNpZlZLppQNcDWP
+qsHZsHZrTBtZrHBNFCJGWrMcpcddWGJWLG
+mRDDzbPVDVlVDgbgRRvmwCcWdGvJwGddpvLm
+PnfDbPbVzDbVfjnnlbzhVFsspBSfFsssHQNTBpFqNQ
+gCmtbDqPVVVqggCGqTJjHMpMQfgMpMHQQpcM
+zNZnsSLzZzrlRhTTJMHppjfHSpvp
+nhdrBsLlRRrdTlsTVmCmGqDVFdtDPGwV
+FnqNfdGfgzmPLGmj
+blvVvbsRwgnzjCPcbT
+RWWvtvphnZQZwMBNdHfNDBZZdq
+DMRhDhdvnjhnPnvPMfdZSGTccGJFjGFFpFpFTbTpTW
+NVgVmtzVlLBmgztsBNmtgCmqFpJJFGGpGbrcGGsrcpbWPr
+zwBztLBzllQPDZvfQZfRfHSR
+mFCgPzmqgtPPqMmFWzbMttcRGvRclvHhWGGcZvclRfHh
+psSNnhnLGnwZHZGv
+hBpNLTNLBhsPmbCgBtPDbM
+JsbLLWLJRfQFnccmQhtvvPCP
+dwgrVwGpgVhCrrhPDHtC
+gpGSjpVdVpVppjjVZBwdCbFRWLzLMSRMbNzfzbWR
+DmMQMJmnmGwzGwwG
+ZcLcgLgcRsZSctHFWLGfjjBwvbvBsvjpfhGb
+GgFPqFtLRHLFSHLRRFRHHtMnJVNCQCrJCJCnMJDdnqDV
+tqdqFqdsRdVdtHMNdRZHTZLrHJgrlZQPJLgr
+GGwVcpGznmhbWhwcVVgzTrDrDDLZlTLLZQrJ
+nhbnbfjcnfMfFNVtBq
+QHmPNZvfCLsSwJSm
+pDhjpVDFcRBpFFjjMnRcVhpFCzbzsZbSSCtwtLMSLZLLtLbs
+FRjrnRchnfHPrrZlHl
+bjjMbdChgRDZthpQpRQnwRTprRwS
+mGzJsGsHzHGPvvvqvzGzSnglSJrrwQgnlQQSrlQl
+qvzHqHLHmHgPsNBdCdZtVBtVVMBFbh
+CctrCwrdpTwcpVrdpTpcrcnSJQttvQPHJQNQnQNjvvHQ
+zsqRlslRLqfgRmWsRgRzqzQnHjSBSQWJHPhHnSvHnJJJ
+GRgllbgfRgbzfRmwwcGdFMcTVPrFCF