This commit is contained in:
Quinten Kock 2022-12-03 06:17:12 +01:00
parent 61926f74a3
commit aa92e0c644
5 changed files with 2895 additions and 13 deletions

View File

@ -2,24 +2,14 @@ import Data.List.Split (splitOn)
import Data.List (sort)
part1 :: [Integer] -> IO ()
part1 = \x -> putStr "part 1: " >> print (maximum x)
part1 = (>>) (putStr "part 1: ") . print . maximum
part2 :: [Integer] -> IO ()
part2 = \x -> putStr "part 2: " >> (print $ sum $ take 3 $ reverse $ sort x)
part2 = (>>) (putStr "part 2: ") . print . sum . take 3 . reverse . sort
rmap :: [a -> b] -> a -> [b]
rmap xs a = map (\f -> f a) xs
main :: IO ()
main = do
getContents >>= \x ->
let b = (map (sum . map read) . splitOn [""] $ lines x) in
sequence_ $ rmap [part1, part2] b
-- -- part 1
-- putStr "part 1: "
-- print $ maximum f
-- -- part 2
-- putStr "part 2: "
-- print $ sum $ take 3 $ reverse $ sort f
getContents >>= (sequence_ . rmap [part1, part2]) . map (sum . map read) . splitOn [""] . lines

60
2022/day02.hs Normal file
View File

@ -0,0 +1,60 @@
data Item = Rock | Paper | Scissors deriving (Eq, Show)
readItem :: String -> Item
readItem "A" = Rock
readItem "B" = Paper
readItem "C" = Scissors
readItem "X" = Rock
readItem "Y" = Paper
readItem "Z" = Scissors
wins :: Item -> Item -> Bool
wins Rock Scissors = True
wins Scissors Paper = True
wins Paper Rock = True
wins _ _ = False
scoreItem :: Item -> Int
scoreItem Rock = 1
scoreItem Paper = 2
scoreItem Scissors = 3
scoreWin :: Item -> Item -> Int
scoreWin me you
| me `wins` you = 6
| me == you = 3
| otherwise = 0
score :: Item -> Item -> Int
score me you = scoreWin me you + scoreItem me
scoreLine1 :: String -> Int
scoreLine1 s = score me you where
[you, me] = map readItem (words s)
whatToPlay :: Item -> Int -> Item
whatToPlay you score = head $ filter f all where
all = [Rock, Paper, Scissors]
f me = scoreWin me you == score
neededScore "X" = 0
neededScore "Y" = 3
neededScore "Z" = 6
scoreLine2 :: String -> Int
scoreLine2 s = score me you where
[you', goal'] = words s
(you, goal) = (readItem you', neededScore goal')
me = whatToPlay you goal
main :: IO ()
main = do
input <- lines <$> getContents
putStr "part 1: "
print $ sum $ map scoreLine1 input
putStr "part 2: "
print $ sum $ map scoreLine2 input

32
2022/day03.hs Normal file
View File

@ -0,0 +1,32 @@
import Data.Char (ord, isLower, isUpper)
import Data.List (intersect)
import Data.List.Split (chunksOf)
priority :: Char -> Int
priority c
| isLower c = ord c - ord 'a' + 1
| isUpper c = ord c - ord 'A' + 27
splitHalf :: [a] -> ([a],[a])
splitHalf xs = splitAt (length xs `div` 2) xs
findDup :: String -> Char
findDup s = head $ intersect l r where
(l, r) = splitHalf s
groupDup :: [String] -> Char
groupDup = head . foldr1 intersect
main :: IO ()
main = do
x <- lines <$> getContents
let dups = map findDup x
-- part 1
putStr "part 1: "
print $ sum (map priority dups)
-- part 2
let groups = chunksOf 3 x
putStr "part 2: "
print $ sum (map (priority . groupDup) groups)

2500
2022/inputs/day02 Normal file

File diff suppressed because it is too large Load Diff

300
2022/inputs/day03 Normal file
View File

@ -0,0 +1,300 @@
MVWpzTTrTFNNLtssjV
hRJncnJCnhPCnBSbCQRhhQRPFHmsbHLzbLNHsjNNFmGGGsGF
lSBQJBBBBcnccnQvBnPQznfrgwlrTZfDwTfWqrrpgMpw
sRPgrzSgrSbfTrgspBPsDWWTmdnvdZWZwTmwvdmd
tVGpCGqCGjlHcNGVNHZDmnZMWdWMWCdZDvnZ
HqpQptLlclLGtlpcjHNhQqfRhrSBrrbfbrSRrsPfBSgg
JpjLbQbFPBjDBBJLWltglfBfhhlcctht
vNFmsdFsnmzGtWvgzhzc
rqwRCCqmCTqHCnqRNTNFsJVMQSjLRbbVVbjQVLbLSV
mLNNCNDwBwDnmCwnJwLRvdlqZclRccsgvcZndc
QWMtVWbpVlgHHcgMHs
VsTVWhThsVQWzjtQPpVWjWbpwJNCJDCzSNNCCCSfmfBCSGLL
NbSfHnwDvwwfHwwQsHbWPgrsZsZjRPLRgLWhWP
lmMlTGFzVmzqjGLLZWWGhrCh
qFclMprqmrvbcnwDQtNQ
tWQZFvvtWQWbqQQggZZLvpLrpzDrmGDmmDHPzPzHrfnHTG
NMlhlTMccTCVBlRNHzJnzDDmnJmnGGBf
NMMSSSSSlNVMdjdNSNNhFwTbvbLqjbtLwWQwZqgg
jPwcJwRmmhJpbhNJVgDbrHzzzQzzBQHg
tdZqlCnnnlvZCqlnlCSqZdFCHGDBgzsDzssBtHGLQtrHsssL
TZZFSdrdlZMFZRMwMPmNcwNmwm
nsdhzmDBGQWQPvJPjbbW
gCgBqCNpMHTwgwqMPRJJTtWjbFRJFJvP
ZlCwBrwgmzhGzDrd
sTBHfcnBTnqHRvqPgFFbLtrQTPLjjm
GWzpwSJSpbwbNNGJPQrrtrrrrgzLtjzm
NNSlCCdplWwplCwSndnssdZfqVbHvfqc
rrfHgqnlllRrDgrCbQfszMPtmzPQzFsFMQ
JJLGVGjcwVcPQNNNtRPmLM
WThVJJWJBdGwBpBTqDrSRCCggShqbSCb
TbCqzqzmbCffzDbHRddLbdRFRS
ZmvZJPjPwwWNZJGtWSDRRDFWSLhhhMVVWL
ZwplGwmptNjZnjvnGGPjJlZppTrTsCczfggBgfgfggCsBrqr
gMBBbfBbBMfnMsvRvWJhDsQW
ZZqHLzczjjsLzlpjqTprNJvhQpRvtRJJQrtQtJ
llZlzZZzPZZqsTZscHczfnSwSPSwwgSBwwSnPwnf
chMtcPPgQtthqgvczhMTcCSBLBlGpsFnBnnsGvLplSFG
bhRmJWDRmHSmFGBnGBps
jdDZWbrDdDbbdbDrRRWwRjZRVqztCzqtcThcTQtgqVMMVzjq
flNmNHgcZwTzRLzMLRPlzz
nntqBJtFbbCbBVCnBtFjJjhVhLzLvRLvgRRvPvpMpvpp
CgJWjJQDjgBtnGNGfcssNfcwNW
MrMpMrGBznjPMGCmCrrjdwndfJLQNfdLQNdNggdL
sJVcZqvhZtVqhDFFsDJslcdwgwvwQwwQNbbTbwfLLTgL
RDDRcsSsstJstVDDqctszzmRmGjpjBRHPmmGHGrj
tdplZtlrBGwTlLQQ
sfsPPvNhWLQBhGQG
zPVfzVbbMcscvVfzzNgcJHnJZgtrrndJqjJqndrL
nglLjRCCHLLCnNCLHQnFNQmmVMbVmwMwlMwMMMWwBTsT
cqtfcqZpzhSvvBfWwbvrbT
PPqpDSqcSJPdPhtPtqZcpPtGjFRFFFNLJFGRgjFbGRNbHn
gjtRSLMqLdSgLMCltTSDQcQQqhDcfcfrWDhWrr
GwFZCwNzFJsPmFFmZmPPNhvDDfDWWmpvQWWfVDQppW
swNGZbPBGwnCgBBlBljl
BsrDsnQGwFFQQtfNTBNSffBgBt
VJlhWVLlRppLQZTCbtZTttgJ
ppLqqRhQdRPhqPVhdPjhljqHFnGnzFrjFFDznHFHrmwwnH
CJMmmJLmlshCCdmzjHjPWztgdnjttt
GwZvGwrgTcFpzHWjnT
GbqrvrRwbrbGbwwZBbgfhmJMmsDJhNRfLChhCh
CfgfjCLCgfgFgBhBsccswQwtsQHvBBtc
SbSMGbnmDMGJWmRmDmvzwtcscWtQzsrPsvHc
DbJdNpJSnMSJmpSSNVqgqgTTFVQTFqdZLq
MBMCmlllPSSlmmPPjCMpPgggJcnZgntJsDvHsDZt
hrNzhrRNbrhbGRbfpVLRGNqqngvnttngJctgDZJGcZvHvZnc
LTTzVqppSmwdTmQW
mmlBQmLbsbmRnFnwlqqprF
dZScZSZSdHcNMDcJwLqRfppzpzfTpHfF
JLWJLJJJdMmGtgCWjQjt
PPMzpVDblwGVMMzDLLjrcrjdzjdTzLjd
RRcCJRcNQRBqtCFBRJJsZWBWrjLWLHZZWndBLWjh
qQQtttNqsqqtJRgqQfcpcgDcbggplGbfMp
QmmSTQPmLSmjpczMJtwPzg
BHHHdwdvDpllvctjZv
HdrDHNfrrBDGGBhBNfHNsLFqmbRQSwqmGTLnTbSF
gcMmgRQPqqPPsgjFSvctCHvHllSSHcvd
JTWfZwhTwzbWwTFTrZnTrDDlDSVtVHLVShtvSHvlHL
bWbWBfzTfwrWJNbTrnzfTwJFpmMQgqsFRsQGqRMggPmPBG
GqCWpGGLpmpWjbSDGjGGmwCzZlvMBTrCvsrlwwswCl
FPFHFVdJgQHJZnslrgvsTrwMlNgw
hQVchcdcZZpZqcDG
JbBRgBsRffgPPFQttQvQQMvG
dmNZgmZVtGTNtNGC
ZqqndLZnccqRbsrgpggsBc
DDvMVmTjwFWPBBTzBF
cqnggcbNNCqbQQqbZbpfQpqgRWlFhLRBhRzRPLFJhlJBfPLh
dpscpcncbbqcpMVSvSrPDMsrjr
hGCGZmVRRcMVsGMtmZWssmFLzbFblnnzfmqbfnzNNb
wjrSPBJdSjjDrggpSJpdrSnlFNlzLTnqNLqqpbqqfMln
dMwPBHPPJHDdvrBBhshWCGcsQRcHRZGV
vdHwhqdtLdVnHBZbFBFzbBPS
TmNCLNDpWfCNmpCgTWNTDMMZlzSggBMzlZlMBlBbZZ
NQfWcscDNQrhqvGLrdhVjh
lZLqzzqvgrCRcQcCLD
HSVVwNTJzwVNTDQrRrrdrBwdhd
TpNTzsfSTVsSpHVppzFpgvvlqZWZPMvMjPPGGsgP
BCMLshLdLDDCgwFRwHHqqRqRWd
QnSqQlGSfpQzTQJNTPNwNPFRFcccHc
mfJJmztnQpGpvnSzGrsqgrhrBBhqjBrthL
BSlmzmlvdNnlQlQQJnJHRVFVFVVqMtqRMfSfCw
WBPsDPBBjfssFHMRRq
DLWpGhbPjbhZrhZDnBQgdNZmQNgmvdzg
WWvgBFgHWChBzgBFbjbtPtnPrsHlsRMrwRrMRR
SGfNpfdGfVpVSGGppSDdwRwclMlfPMwccsntPqPw
TVdpQDSpQZJpVpDQQFBbthvmWzmgvhbjzJ
VVCCbzqdbzhFHvbdhZFPmhCPSNRNGSrPJfTNRSGJfGwPST
LngtBnlcnDvLcTTRfTTwRtGNTG
DpnBjMpLlLDQWDgvpLvbqzmbjzVjVHqbFFqbFq
SbzMbNQQSDdmvqqzdSlWFpwZnvpFWWllpFww
CjLPTPjjLCPtBCLJjBLPLBTFsFFgfwwpZgplpgFnWWRl
nPncrBHGnmrbdmdmNN
FnlblGlTTbNVLVtRvQQvgqRQBCvgNr
DPMDMpMHmnzjPqDhQWvvQvhghq
zMMcddznsjFTldVGlFGT
cLSNGLhmRRVmlVCq
HvzbQBzBMQMpQDpCSlSVZRSCqV
QwWznWnTbQSMMJQHnvwbWjrhNhLFgsGNNrFLNnFNhd
dBrWNQWWcTNqqnNN
bPlmgRgRghlCVlbhwZccCZjZqvmqvmTTvGqmJTvqnGTGvLLJ
DCDZhjllcpDMrSQS
ddtNNTFTwRzGRGCwqnBMjlqMHMfqnB
hDpPsQLLSprhnHVhqhVfHM
QWLWDQZpgpWbQgfspGGRdcGcCcCcztTGZC
GGHFdGwFlswcFtnvTfjMjBFfNBjNBZ
JWmSJLPSRprWWPWVMMVQpZfBvvfQtj
RzPSPDbDDhbhPDLRhCgGHHccsqGCqqtHzG
dbSdptWddDMNtdFvttFclqMTZJlJTlMZqJTJTqjC
BzfwRzrwPzfzLNGmZZCZBTGBqqlH
hVNVQPNQQQVLPwhRrQwgWWvFdDsFWSbdWgdFSFDb
hhSnmhtZSFSqZBJSSqqmJJRHPPLgHtPcGGGcWGtvvHwgvG
fCMpfTQjTrzrzCQMsQdHGHvPGPwLppPRvWPLLc
MdTzCsCMzNzDCTjlmNhRmRnZBllRVh
RrFglccgBVVvFNvCvWlgmDbbDfQDtCdjjDbDwmZD
STnMqSLHJhHHnqLqtnBndbBdfQQZDtZD
GHJPTBsTSsMMSpSBHJFNlWzcvFlzsVzvzgsv
lplNdrVrVrWMMVcJfcDDzbqCCpDL
SSSgvBRSjggPgzvTTRHTvFnfJLbcLsCDLnCLDCcJBsJq
GmHjjRwvHSjHTRjrlZrNMzVMhVrmVW
gdtFtgStSbHCbHMPZrFLPLrVlrVZrP
hQnjMGfDqTvzvpBjVVjPRLRRjJ
QmsQmhvvMtssHtWw
RNjTGSCLJCGdRqMRFvMrfzMvzz
ZpcWcVDpWBmWQMZZpZDpwBcznrshtntvfvhfFtzmvnzvhf
WHHHcVWgQVCbCllbgMLN
ZjjdJHSdSzvcZFMhhhDqDHtthw
rNTlNqVWTmRPlshsDPDlph
WbTNGNmQBRQbRNQgNGmCLdvvjzcCSBqLcLnScL
bZwpSpBvSHCBqNzpdFffqQft
nWRnGRnVnljmlDnzdPfQfdcQPWWfNq
dmRDGMMlDmnVjgMlhBSwCbCgwHbBHhvv
NwqLgLBLgnwNNBGpgsQsddhhpQQg
JcztcZnzVtZvnVcJMTvTJtWtppsQHGdQhhHHQsPhWdPS
fJTJnMmvZvMvRDqFblNBNNjlBf
drZVzZzzNWWzwwTWTZrjWcLCqnRqNnLNLqCqnsPPRL
JhlBgvHBBLnwMBqDwC
GmGFSHmhJSGJwgFJmwJhJhgQVWVdbSWZQzZTrWtZzjzjTz
wPGRPpnzgwwGgLddFBFrnrnJdc
jCsVclQWmCTrJJddrdFs
lWjlCqfmlWccpGPPSgcf
hCThCzTdPcPhzqTzMfVfHrhMMmhVHgVM
lJSJNqwJsZBSsSBFsMprDmFmFDfDDHgHDf
JNGQsSSNGsbZZZSBwZLPtdLjttnqPCbtPbjC
vnlWNpbrNrpShhQDLRLB
MzCjPgffVTVgCJSRQhBdRdJS
VPHcfcBfTzVMTttMzMfgzMfHvrllWvlnvNvlmGwWNwwNmw
BwwsqPJqwBssLlFqLRCDzWwzDGRGGWfSRG
vTtmmthvpphpnNgNvvpvRrDCddDQrCQCzCDrCfnf
pppccNpTVVlqssHHVzBH
HWHphZWVWvMZNvpMtfJZgssffsjJgBlslJ
RLmrFFnGFrFFrrFCRwCrLNPwqfjSJjqJSJBbsqjbbsblfq
LnFLPPGLrGNRQPmndLzPmPmpcDcMHhcMhVHvczcpHHchcV
zwqqvNDVggwqVfNQRlszFBsCCJFtFlFPsz
MSrrGTZPGSSMSjPbTmtlHBBFrFHFsHlsJsct
MnmMPMSZZGSZWmSjnWgfqdgVQDvnqvRDggDV
SQCSBShsQnSsSJswsNpVppPPMVpGpnDVgg
WWjHvmtWZrwvtzzjTTRPrRRrMVNVVGgVGpGR
lTvWjWLfWwbJCQqBSlbB
cjPChhswrNVtMZJjVM
pfvTFvTzLBFndGTlJmVJZmNlCMGtCJ
nfvFTfpbBFdSFpTLswsWDbchwHCWHrbw
lNdNPLJJLHHHlpPJcvtVcsBBrrBvBqrVrC
wDTbwTQRZTMWsVWtmWhhTr
nzRMbSZtMQDnpzzJHLHNflHP
HrwwmwcRbmwcbrrTbwwcrTJWLlPshllhLccqLhnnlljhZhjZ
GMFMSNSpCBSFSdGpNFpBznLlzzhzshlGhhqPhGGL
nFFSCCSSfttBdddDQNDBQpSSrbrmWJwrHfJHWJrbVwWHrgVr
SdddNNCmpNNDhMswhsmbhvHM
frtzqqqFjgrWfgfqtthsnvRHZRRvFlhnvRZb
rtrgqzzrbWtqLGLLtBWzfGcTNCCVGpSNDppTJJVddNpPSG
WWJvJvBgpHSHScQRQSVQLzqL
ddZTlZGZVfQhZRLLMqsR
rPfwrGGrFjjNTGNCCVBggDJHmNDvbmmpmNJJ
bbGrJPRVPtfsVfFlMjBV
WQzhQQQNZQCWNnQDhzWdNjFZggmlHjjmMmMFjFHpMs
CzQCSWDTWhNhzWhTGJwtRRqTblwcclvP
HLDvZgZldDTnLLsswMpVLn
FNVQzQSPznCMmpBwCF
SqfJPfttqffjJPVlhvhZZtvdVDRZ
jVsLvHvvdrSjpJFsGzmnmltnml
nTNTRCTBTmmmFPMJ
CQnCggWQDgBrrSqHjDDfSS
ZpNlrZNcmctZbcZlmcmZhhpPvPHvwBMHJPMTMHBTFJvJ
zmdCnGzGRnLDjQnzPvMFVHMVMLTVwMJv
GGjqssqgzCnCzQsshcffmrbNrrNZtW
DNpTwhpLlWMDWNMhbJjGttJFHgDcjtjG
wqQrdCdqbFtCtJtJ
vffdrwfPrsmqVBBWRVlRRlTSTWSTlR
ZqTCTQQTFvsDSsBDvWBd
hfBLzRLtHHLDDWRRWWDNbd
pHhhnPzLfJcJhzHLzZjcmwCTqTQgwBqqwg
WJHgqgFqrVrqgqCHwsJHHVFZzppZFGGfTtpcfbdpzzpd
RvNMQlMBhwMdMfcpbM
LLRQNBDSSNSwmDDBQRBRBCHsgrgHLVnJVqLsJsnCPJ
BFhGsDsDsBtsPGtQDrrMdbdrffrffbJbRt
cVVqScVSWWvVWgVZjnrHJgLfdrLrnrLLLQ
WmvqNZzzzZSvVzqvcccSzSmqFGCDTGBPQGDhwCDhNDCwPBQp
RqTlHHTTrQqHlTqsrVDqHbrZFZwhpBhphZBFhZpDpLLLfB
nSzGCGdvzdGNPBQQBfhLZfFwFN
WPPPCJMtJSQMJQCCWMJslRrrRgrMRbRqVqqTRR
BMtfLsLZfTPmCtGWZrZqJNJqvpZdWr
bRwgHhhRhbbSRbjSglcgwHHJWPcJdPrnNWrnqnWVVqpdnq
bgjlSgDljHhjgwMPCLPFDMFPGGBC
zJWjczcWjSWghZgzgSSSZflTqwlfqTTbnQwhdTnMdl
NrGVCmNpHFPsrJFbFQMJbJdQTn
JvrtpHHmrCGJCJmNvNpVCsHVgzWgWDDcjjgjDRStWWDLSgzz
HzdFsBBVsfnTfsPmPtDcZqtMhDDz
wrjjRQLlwwwrJQLQbCrbwlJDSlcSDtPZmPSDclWDtcDqWh
RwgprLbNLrLbCCpRCrJLRLFfsGTNNZHBZnnBvvfffnvd
MlqqlWZclnPtZtDSSvwQQjgQpNQSRM
rLJTsBrsJBhshTNNwSQBWNvNgNSg
JbbbChCHsJzHzbWdGHThlFnnPqlPlGPPGncPtFlD
WcMVvwNNvjRcwTQwVcpNRcspPCFtbPztbCTFmtPtCJtbCzmz
grrgDhrnDLnLrdfdLZlLZhmCqzlCbtJlSSStFmttqsJJ
GHHDdgnLDDhrrrgZrZgLNVVVVcRNvcwjWvpWGcRs
qhGhPSJtGhGtJtvNjnJjnvmNQQmj
sRBFlbZsrdBRRGbVGBDwDMDQwQwMNDjjjVNV
CzCflffbBszdBCbdbrtLcfhhgHLGgPccLSPh
zShhHFzgJWFVFFHFHhRPNjwqPLPtLbtrbwVjjr
ssnvTmvCDfpCZTnsfCqwNLNPwbJqNJPwrjZw
vDvpmcnmnBDnsnJTJmQWMHMWzScFggRFRFSW
nnVHHPLrnpssLnrpLRnHtHrjJcCdzCjcDzMzdqwRdjdDcJ
WWTGQQzSGWlTmBbDJJjwMJjcvvlDjw
TGTWBTWmTbgzghZhgzBgpVNrZPPfntfNrVLNNnZP
TqhQnqqLnnqddttNqQWdtqQmppSSFFClRmzmFZFLSmSlFF
BcHjGclVPPBrVrcjrGGDrMgcmmRJbRCFzpZmSDRpRZJJmRzz
ccGjMgvPvsHMgvBHWlhQdqwtllwNdThs
WjddwRGgHRRdMbrwHRwWjHDtDZplslnJnZrsDvCprJPJ
QSLLFqQBffCFststlFnn
CSSmSqzmVVjWMdMjVWgT
lTfQRhVpRzjThpRQTTTlvHrvBvHnPMHgHqHJvn
cGDctCwCdDCGSFcJsFJsFBvgnMBrHvvrqngHgmgssg
SCbSDSFScNpfbRVVJf
RrwmdwMVjMjMTghDWNTJDpWfWG
SbPvNbvbSsPbSvZsPJtJWhHpGGGgJWgJ
lSFvsLNcqzqLrwnFQMnVdmnn
FgCJFTWntWTFtPLmJmmQJmCMMpljWZBwlGMljjjlwvwBvZ
SDSbVbdScSDzbLZMBrjlZpVrZp
ccsSDhSDffzbLNscfcfDcgqhPgTntqmnQmCgtgQCTJ
VnCnrHnPPrCwHmVWtqfMQQqzCqffCZ
DDbDcJJJbpJDGppFpqGZRWfGfddzMWtfWM
tTTglDcgFjwNPHPPwHlH
bMGbqqgPqqVVMGnbVqSMmRfPcJmCTPDDLJDTCmDm
FFjjZvFRsFCctmtvtJWD
wwFhHjQjwQhZrFjQbngglGbRMnSzgbRH
GPTTJSgTPrPPmcTPpdJsGGGjqbRvqlztqlRqMzGjRv
LwnfWLNwwHHQwHnjbbMMjWttqtMmMj
mhwfBDhnQTpJBcBJps
HQQHwMfwlltzMlVljQhVjjHPPPFGPFcCGprPTPPfDrDcGf
pRLdvRvJgqLRBSJCcvFnCDTPTcTGnT
LBLSJbRSLSqbSdBdgJRRqRbwjHHblQttlwtwhzpjMlwhpw
NWLNSNSDtgSgghgdcwccmwGntwclnT
FRCQzJRsvfVVjvzFJfQnffwCcmdwmHmmHmTwmCmdGBcq
sjfJvjfzPRPzvPPVFMssvSLhSSWrMZnSDNrDDhSLZZ
FvLpSLtCfPCWhRSZZMZJSW
jbbjwbHjQmHjHsQrQFMnwTnJznwRzhJRnNTM
gVrjqGqjgrgsFGLDtDBLLfLB
cgTvRWWLVScRWflNJJDfVJmVlG
nPPnnmqjmZHCHBHFdfwNsDhzzfJznhsfhw
bddmQqQjpdFCQWtLQMMSvMMQRS
wjnmPwCgjPnRlwnmvmvvPnTwbSSLLvsLDWdbbWzvsLzWbzbz
NqrGqFHqJlfhhJGbszdWQzzLNtQDzz
FfHFpphrJqJrpGBffcTnBjCnVTMjMRCnVljT
SrfSJGJpSgMprMHdhBGhsdsshdGsmm
nRTRPvQllQlblwvCjTwLTnvBqdhmHDPVsmDmdqshDVhNsP
lbRFHvRwlnlLbnbjLbLjLCzggSpWfMFzSZpzZFJJWpJr
vNLlFldlvPtHFPHQRt
jcpRsScDgshzjqzfVStntBTPMTnmWttntMpp
fSssgVjDsbqSVbCJClLRJLCZRZZb
wnHmCJccDDcrNnrNMRDtTzpTlMpTzpBp
PjSPPGjWjLzTjjMtzzMj
hWvLLFWvHvczVcVn
jgtngnnhMthcnLjMgCZvChDsmdNCvNNZDN
bWqFPbFbLzRFfZBNDNNPZsNd
RbJzGpzVLLLWHHQgTMwcTptQ
sJBhsMWQnhhrFBsFhlQQMfrDCDpLlVCddjTdDDpqDLTLdj
tZHHSRmNHcgmNzpDPJtttqjLqdpL
HbNbZmcHQJbsFWvs
VgPNWGbgSjGjfhRRFfzThtmtzF
qLCQJBqqcPPmLHhHFz
CcJvplQswNgZlNPSbS