From 66b1e7128b29f2c3d1ae78536630040021d960fe Mon Sep 17 00:00:00 2001 From: Gattix Date: Sat, 3 Dec 2022 16:51:46 +0100 Subject: [PATCH] day3 --- 2022/day03/day03.hs | 17 +++ 2022/day03/input | 300 +++++++++++++++++++++++++++++++++++++++++++ 2022/day03/testinput | 6 + 3 files changed, 323 insertions(+) create mode 100644 2022/day03/day03.hs create mode 100644 2022/day03/input create mode 100644 2022/day03/testinput diff --git a/2022/day03/day03.hs b/2022/day03/day03.hs new file mode 100644 index 0000000..ba56320 --- /dev/null +++ b/2022/day03/day03.hs @@ -0,0 +1,17 @@ +import Data.List +import Data.List.Split +import Control.Arrow + +main :: IO () +main = do + input <- lines <$> readFile "input" + print $ (day3a &&& day3b >>> sum *** sum) input + +day3a :: [String] -> [Int] +day3a = map $ convert . uncurry intersect . (nub *** nub) . (flip splitAt <*> flip div 2 . length) + +day3b :: [String] -> [Int] +day3b = map (convert . foldl1 intersect) . chunksOf 3 + +convert :: String -> Int +convert = (\x->if x>90 then x - 96 else x - 38) . fromEnum . head diff --git a/2022/day03/input b/2022/day03/input new file mode 100644 index 0000000..9b16a3c --- /dev/null +++ b/2022/day03/input @@ -0,0 +1,300 @@ +WVHGHwddqSsNjsjwqVvdwZRCbcJcZTCcsZbLcJJsCZ +hngprFFhFDFhrDpzzQDhtnBJJRJZbZvTcvbfRCJfBRcBJl +DmptngtFwvvMmwmm +HFddrJnLdqtHBMQBmmVm +gbvNsbhsvQtmZTbQPT +vDshDlczcDhcssscwzQwslLJrSJLpqrrzpnCrSfLSnqq +pDGQDSpFDGzFDQSJqzDhjhQMTjTrwTstbTBTjTtLtbTMBT +zgzVNHHgMwMLbLNB +WRWPgdHCZccggJmJGzJmzGhGCD +sVJNlhldShpdpnnwVnwCwtwggt +WLFFcHWQLPPZQCgtnCgmbtbHwt +MPLWzRMMcGgRrWNDpSSSfDflMlTd +BBMZJcgBRjCZZzBpSvHQvbLvvHCQLQ +VlVTFwDTVGnfWSQPtsDPbvrpDS +wWdqhWlwGVfGwlfTVqFWfWWjzZZBJmMZMNdzZJMpjzNjgJ +FBWFphQBmDmpmMSpDWVcVcvsPcRbrjPMcMsr +HHtdnHnwNCHCTJRTPTzrbvVbcVRr +lHqHwlnlqnGCNGGmWDvvZfpZvG +mfVtmPtsccMmHcHCFfmhVmnpgZLbWPZqWnpqZbZWpgPW +zzvwBrzdQDvpZJfQJZJpLf +BrTBwRdNcfNmfStc +sTlhFLfZTTLcfsLlLDZflvQvRNqRJFNvRMRNvQQRBQ +CWcgwStWwCWWwvgNQvJBvQMQRB +wptGzbzGWVGSCVVlVlLDcVVsfhLTlf +HVnMVGwLLbsGnVsLnwLSBggMhjmgmgmhtmqhtgMhMj +zrZzJRZfzZfrPCrFcWccPdTdHHlvdmlgTghCtmtTgq +NFfcZWWzZrrHLBpBBGVGNG +HqFhhCBCBLmwwCqJCHFvvFdcprrrSSrjRFRjpgrggb +VGzWtQzGGQPVtlVNslVWsPdRpmcRrjpSzcrcbdSmSnSg +WPPGllQMPGmTLvLJBCwM +PvDWRSmTVvSvRhbZRpRpbjjjzM +GBFGHLglHrrrLgGrttbMjpbcpcZJBsBp +lrHgrrndgdNnlHGFQPMMmWPTvvWSCDQn +mmhQShhmhQfzNfTTlShbHJrRtltltJJtHlRLLZ +WscggNqwPWjcGcWWcpNcRJHHprZvZHrvtttZJpJr +jGjgcMGCwPNsGDCcszBfhhQQQDnFnTVVBV +mcGjrwzQcrZtQzZQDZcPssvPVVCPCVLwswwPBC +NJbqHddNSgdPWvvsVHVLPs +NqglNSlJFNSbSNdldNlNdNbTRFDrvRmQrQGtmDrvttQmmtDj +zzcBPnHBjgHjWJvbJQTvScbwcQ +qdspVCFqVqfFqLFCqtpTwtpTbSTbJpwBST +FRLFRCNNqMfdWNmZPBPZrHmm +VmtRRJmtrDrwhRcvPspltvgqtqsd +WGQBZzMMBGBGbZTTWWCMNSgggqnPlsfbqndndccglffg +CWQQZMFWdzMQdJJwJVFrwmmmRw +rZsFfGfNhznzsjhzZfVjGVvVdvSTSJHSDDtcmmmttC +wWpRBWlbWMWlQDvCcRSvJRSStm +LPlwWqbgwqjjcFshNf +lsppsGphmPrRQnvHdRpd +qBgjLqMjgjTLPnzHPrPRLnzv +gSMfNjNtttVbqBbtTSStjTqlhmlZDsDsbWZWFFFsGhlWPm +sPDPDzrGzBsGRsbwrjtSVvthVfQtQw +ClpgFZgNqMWCgqCpMNZqNWmNdtSwtljtVHQhtwfvdHtSdhSj +FpNCJpNcpfCpgNWPGBLcbTGTzTzPnG +mssNLCZqSqmNCHmrqHChJTjTjnRRnnqVnTTGngGTRn +dbwptFwQbvdtcvpZDcDddgzGPjTGgpPTRpzzzgRzTn +BwZdtZldDbrSsNrsrSHl +MLnFWMRWpnpnLnLCmPGTqQsFzBttTQ +SwNlDHNcddglSDBjrqmqGQqqmGtGGwszPP +vdSlNcrvvvnBMbBR +psZPRmTpRpgrlrDRBFgV +jvCqNhwnjhGNqCMqVgFHWtgHBrtwHFrJ +cGvbNcjvvhhjcvbQGcZdZSQpzdpmpPVpdZpd +drTHDdlHzllZDTzTQRQLsPPSsBbSjQdL +MfVVWmNvMnqNmVVpMMgfgMmvBFFfRRLQPPsPfsFLFCFRSFjR +whMnNVnqWmlllHswJTZT +ZSQTTLLlTsbmmDZlmNQSNFfPwHwqCjCCfjwFPwfwLr +MctMJMBVttnhJcBBVctwRHjHRJwJwjFfqPfRwj +vzqgqhBVzzTlZmmTlN +WgvlHJFvljvdBmzcvcwpmchc +TQqZsTZttLZbRZsLLMzzppBmNShCmBNTcNCN +LPMZsMZLMQVgglFPhFHlFl +qsBCPVPqVbwfnMQNmZJnqJgR +hHdrvvLWtvtjWQnZJTMrmpTZgN +DShSShLZdFGPGDPGsPsG +qRBddRzFFqFqHnNnPSnnmmSpgpJm +ssZDQMvvMwppNJWRDRpW +MMvwlsRMcQBjcLqLBBqc +ZGHpwFGvwpHrvfFTMtDfccMjntMntc +RgSCLRLJRSRSQQqJmTDMPMTtsJjnclBjtj +LVmmSSddLCwVHDbzDzZr +psgWdsBjnnJjbZWQDDLNrDcrLVQjLM +zPSCCHqCfqfmWNMcrVSLRM +TPHzWPFTGztqTGgdJdsssvZgwb +gcFgBChcClJjNCPb +sWZdZdrSmWmSZRwSmsvPlsTtTtNMnnlvnJJv +GSWrHZdGQpRrrSGmpWQmQfLfpVzDfghppzBVLBlBqg +BFNqFzBNhqVwmTtsqVst +dMwMwMfCMWbDtDvDssCC +ldMwMSHHMMWJpRpPLLpBzPZjgnZPhN +WczRJhcWggVBdzPPLnCjdvjm +lSpSTpTSsCCmmntNdp +wSFDCTwsGDqQqQVWWcJw +RqPqhDGBhRDrrhBFmPmbgssZbwbgCbwsmZsQ +nCtjMppjfTpjJJfVZwtzZtllLZwLss +MHfpMWdHpSCSfnSTJWhDDFDFBGqDGvvDBDFd +MCCGMCSHVGNTspVWQznddndg +rttLtvRbrhLZrbcQdJnnQdfddsrggf +BbRqltRtHsNNllNC +ncFpcsLLdFmWlRmnllTR +bMMVzVqMzjNVDblmRTPGlSmmPlqG +gNDDJMVZNCbNJNDNQCbZCbscvBsdBvrRHfcpdQpfFFff +VnWFbZvFbHWhFjZWVJZJLZFWTttpMCspQTTzQCHpgQMgztzT +dGcfdNdGrlRlBDGNSllfBMspgzmTgtQQgztMtzpmcT +lBNdqRsBRdfPNrLPFVVPVJPZZvhj +TLWgggJzwjgWgjgGnnmQnzQfNNNQsm +SpPbBlPBMlvFZpbbBmQGsmCJmCstsdNGBQ +MhSHhZPrPbvSFrJPpPMSbMcLjjqTLHDRTDDTTLDLTqgH +fprRRbbznFbcQVPDdQPdFV +LTvmsLmcsHmvDvSZDZVVSS +jWtmLccssJTLjHmLWWJwnwlBfwnBbllpCBnffbBr +plPBWzbnFLPPtGqMMwlMGwmS +ZQjDHjrQjdjVFwdMvCSfmwMqdt +DDhhrRDjQghHJjhWBbgbTccbsTzpWF +vgCbbwsTbWWWgwBWDGGDqtPGtMgGlFMH +znrznJNhLSLphRRRDlFPMmpFPjjHtMFF +llNcSQVSNcRbvCwwWcTdwZ +qpnJbnRRnJhRFhFHRgQSzHlSRHCCCg +fMBttBvsBjffvsQTtfGTWlCWsSgSmHCzZmLlHgzZ +ffMdjrfdwjfwwnhJPFchhqwQ +NCVSTCVCQCCRVDQSJsqFPsPNspFhhsgjPh +btvtWtcWnpgmFhjmmt +cfnffBfcWcrMdbvMQJDDrDTDVCpCDrGD +fZNhBWFSlFQFjWQTTldHgCwvTvqqdr +zznVzCznmHvnwgdH +PMMbCGPMDPcLbJhFhWhBhRScQZBQ +WQMrDWGHbSWHMNrTQRhghmgPZccmqDLwPqPg +svCzfpdzzdsnslCsnPZcHZPlJcqZgmqPPc +nntVpdpVsfjCHzvnsCzRTBrtWGbNNQSMbTNSRr +SnpDQdBqGpDSBMfQGcMQBDJPNstvJcWNsPJCtJtNRWPC +VrVHrhTHlPHTvvNtbhNRNswC +TzlFHHmrVlgTlTGSzGqpdMGBPQBS +zrCDnrDVCnCgnrHgGDnVVCZsNttQZmjtsmbMqGqsjbqj +TlRRWPSwwFwbSwTTTpNQQqNjqZZlmMMQQt +wvbwbRTLWdFFwvRBTbvTTRzrnznnJrDDCzBczBfHCJnz +SvTdmLNNNdvTBmvmLvSvDpgczzjfgjggpcjcNPzD +VJHQsJVlHpjjpzsjzP +VRlJbJQrVbVHJJPMhBdnBRCSLZZZnvnLvv +tMGcpGtMtLtsCGspLzNCBBmwCzQRzBBRWQ +hdlHFllDdZgDbDDlDHTWWTnzBBBvzmNHzwRz +FSddDlFRqDFqFSdPVqdhcfGMsVtVfLjrfGfjtMcs +RGMWnBMWfCCMBHTDptJJgZStRPmSRD +bqzFqjqcFLNLZZSmpSBgZZ +rFrQNbNBlNcbrQlNQvvclMswTCTCnwrwHrWGsGCswn +WLhJQddCQwRNCQNHczHNzMvZcZvcNc +SlSpSlrpDqnbqDjlGjGGljTjMZZPPMMfVPgfHMMVgVvqfgcw +SbGsDspbbnjTjBldCFmLwFCJLBmtJB +TMDjMvMqMvDTzcmFCgrJCr +ZZZJSZWVBHZWSSZQJhVhWnHJwczGGwGcCCFzwgmzcwFgwVzc +pLHNQSnNJsMLRJds +TsLZGwdsDFWHBZJFfZ +mqhRvqrzJRbmzJBFfgHHgWgHrrlH +JvvNhJmvtDdsNTwdLV +wwnSVSmwtbstznwgbzzVMTNpTNWdlCSlSWTffWNCSN +cFvccLGFGvvGHZflnNTpnZpZcB +GPqGDhGGqrDhVRgbnbttPmgs +rzSZJScLrcBLvjvsqMPZvjQl +nnpDqgDqFTgwqHHvMHvvvTvPMM +GnqCGpDqqVhccLmrmSmCRL +tJSTmdfddDTDJCPmbQvQLHvqqqbrbvlP +zWGsjcwwGGcVVjcGWcNjvNjQqrQtNFFQHHrF +RZnRVsswRsGWcwVBZVtBRdDJgCffTgmgfnnCpfTfTM +FnCrzhTrNPrMcnhMTnZZZNPwDPdbDmdDtwjdtjbmQwDt +sBvWrpppvLBsLRVBfHSfbbQmbwSjStDSwSwS +LVRRRJqqlHNlNTChrhMG +WNsfsstMvtMvNNGPZwmZmqZPLWZcww +rDCdDRCDFQjSVLcmZcDq +bBBHqTgBbQlQRCQFbgqdhvshGvTJMnfTtnnThnsN +VwWBTNQcVzDtrgfrtzzt +LLbpShLGvlbCmLjpGSCSCpvFdrgdddcHtrtGgfqHcDHqrd +pmvLmlpmjbLbpljJPBBcTBBQRZBBVJRZ +cVTcVTNvvghNhvggPPgtCVSpSQmzCqZDRCmDZDZS +dGJMWFsFMFWsnlzRlQzlzqpzlZzD +HdLFssFMsJbnbFjqbhPgjNggcrhg +LLVhQCTvRvmWlCppQfQQjPrwszNsfzNz +BZSgncHgnJStJHJgntMWzGsrPqGwsfPfGPwwwZ +bdBdJMBcShWCLbhWVC +vjdpGNGwSNCTwwRbfnWgQMLjQWMnLQ +DcmFPFtHmlcgpqWDnMbDLf +FZJPtcprHtPPHplZHPZclwwGBSZSvSwCwvZzNdwvvw +CdJLJCJPWPWcbtzJtqJzFrQvBhfjBBvjjvdjpFjr +sBRgsZGDNSBBRGDwphrrrThpHpgHvhpQ +DwDsGBDNwGmMNlMlMDSPmztJVCbVCCWqPqJLmW +LSTMgDSRSMHbMDWLHSvDScwtCGqGrjGrcLftqVGtVC +hzJPmlphCGrCwVrJ +zhPNdNnQZBZBhZnNZSgMWMDbMHwWSDWNDH +rcdvvcwvrHrMZBjHSZ +sDtWblgnltsDFlgFqltCCVQTMTgSHVTfSQfSHj +tDtRWFpFbWWWWNNDWsNqWvmzvhzhzGmzjjGvLwJmpc +nFSSnnbhSfgLSSnVjdjfHMgfMzGzmqlNGGmTPlqqTzTNNzlT +pBZsJJvccbBmlWGlNb +cvsssvZwsDwrDdfFgnbDfVbgng +mWRNWNCTdwdCwhCddbWWmhsZVgJQJBVBfsBsJQLQBLJb +qFFlGzFtjjcqzHtFtlRfVfsZfQHVfBHQRHgf +jqGjtcDnGnPzFRlzrnMdWrrCMMddNNWT +MHWCjjGMcHhbhPDLphHQ +nRVJrtgssdLgCppvLQbg +RlVVZNVRJlsstldsBCNlczfjjSZmWTcmGmTSfmSm +RTHqgTgMwgnGTRzqTHCGfdFdfhmBrJrdvbFJMhPB +lNZNNNLttLWJBPBdZBFmdZ +SppscpLVStclNPWtCczqnQQwHTTgCGwq +hSHRCbZRSZhbRZBctnMVjwwtWtwh +GrdFzQrDdJstjcWttwsF +drPJLDPGPvDvzrJPQLdDHpZlwLgRmwCHLpwgSbff +zMSSnCtCdSdCtdfMdHMdtVBDjhWDHBqbTVVBqhbDjr +cPNhFFNRlNDlTBqjlTBG +RvmvRpPNRgwgPvFwhmdCssmCzdMshMmL +tttjgrpTwmCgCwgwrrlrHzbzqqFNzdJqqZnddJwNbh +cQjMjPMBfcLBSjGQBndFnzNdNnhzzNGFbF +sSQPLMfVPBVSfBMvVLSPfHCttDjCDRRtrVVglgpttD +vdTvdpBvcTPdSSvCLrCCDLDCQGDl +sRfnFgmFRMVsnqgRmqzmrrDBDwtHlLHtrLCDGL +qRMVjJgRFnJfMssMsgZScPJpZbPbPPWhBZSp +ZJgNJhGZglMZZFDTPSNqFSqTSb +mwdvwpsjrcjBvpwFrvbHcDqbWHRWDSPWDHSR +CsvpsLLjFzhlLGFZ +sDNQrMrNfrlQjJRgGjbTllHG +ZRhSnWFVSwBtFRBVvVgHgbzjgGTJnngmGmHC +vWZLShhvZLVtSFSLqwVrQdqpcqMDddRNQMdsNP +hQhSQbbwtHzShwhSQPbJRsLwRCjJmDCcvmqCcs +FNdBTBTNMsRqqCjTjL +GNdrdMBVFShhSLSGGL +cZzcCmjjcvdzdWqgWTZgPZgZhh +wSwVGSJFTffgJTNh +FSVpVlBMShzbjzcpvp +qqlblClRbnTvqTmRqlmnTwrdfdwFFNrngfddDBrNtr +PcLcQLMVLGMzHLMchhLcjLFrrNrBfrfFNJtNgJDDBNzt +sSjjGcGQscSVSMjHVMSVPSQsWmCmppZCmtCWbbWTlZTqTl +qWlVJmDJHWJHVJlsdVTdhbFNNgFhwhhhFhwwZg +npjnvQpStCQLvBpPnvtBtBpGSGbzbGDggGNbgwghzZNGGN +jBvLtvjnrtMDmmDRTTrsWc +pmwdwzJtFmmlpFsWwtstJPGgvNgCCLWCvPgNNPQCQv +RfbfTRBnRGQvPNnncc +ZTbPZSDSBfSBVSbbBRbbbtrFdtlFmVsswtFwzdpszw +hVphQcmdcWWprWWhChFQBsfHjDTTBCHlSsTSBgSH +vqBRqqzbqMZPMwSTDjJjlHDllgHZ +PMnMLqtMnntQhWBccthB +vqqvCSvHSSwqvqCddnvQFmNbVjbJVVmGNNVHNNlH +pggrhzWgptWhZsmVlFmgNNVNbj +RzpMLLhhphtzrRrSSbQTBQwSTDBwQM +DSFQDlDFRddDHQHQtFlDVsVMTzrMCLSWZLZffSzLWrfCJz +jjBBvpgmbppBPbMwBBBNbbZWZzzCCTzzZgzWcJccLzWz +bvPwNwmpnBNhPmqpPvnwwNmtRQGQMdQDQlsGVVGhRlGFsl +SfJJwDJgpGdSGJNSTwTVJDRbWWfLtCWCLtRLHWrtbWBf +cQQPnFhjjQlczhqllhszhqsQRWnrbrHdHtbWrBWBbtvvHBrW +qMqqqqzFFmPjmmsFjmzsmhjcDGSZTJgTdpZwZgwSZVpMTNVG +czrcHMcMJtCCPnpFmH +DwGGlvLljGmDRdwLdLjfhtFsssnFVpfttpptsnFPnp +TlRTghTjwTDRTDlZZQgWMMrMJMSZmM +BzdNzNdgNNPfgdNsdQdNvVMLLVQVMcCRCMRmvCGc +zHpplwwZrZlqlWWrpZwqlHhLvqMCRDCGVmLcqGMVvCMmMD +rWrjwWwHplZbwpZtHtJJbgfFTfsNnBbsfbSdTzgB +jPRRppDLDGDTLLggMMjpLTGcrJWHsttJfwnWrMvrJnvnrNfJ +blqbzBdzmhhbQWnsNHtJvfssfd +lhFhzSzzSZVNSlVPgDPCPCGTRcGR +cqWcNWffPftvsvfpqPtZsBzrbmbFddBmbcLbdDHbHz +TJgljTnGgnLBTZbHdBFz +JgSnJwSlgGJRwMtfPtvfwsZQZZtv +hHhPbQPTwsdwdHqtgttjpNfjDt +FFlCmSzRCCmlzzRGCFNvRpvjvtZNZqsRfNRg +mVmsFMGFzJFBwQTMnMQndd +QQVpQGcVdGmspHHLtbqfqfbt +JvZTFDFzJzhFCWCZZDzWPBCJfLbnnwLqttnsHHNPwtbHLwjn +DssTMWvvvGMcQGQGld +sshRHZSZRbSZHhBFBMpMWpFgbbtb +JfjTjmwwTPvfTNPTQlmFFFqqmFMBBqFgFt +vDTvJffQTJjJvPvTNSHRzhCsShRRRDtZHz +NFLsRDNNDNBDlgPPgBglQlzj +HJhdZpfJzlWQjjHw +ffJTppZZqTNlGnNsMG +ZMrWcWwqqvPZMndGdqlnnDLnVT +HpCsshCfpFfHHJDDSlSVQQGGflDQ +zssNzRJFhjNHNNHpJRwbwMMzWWtZPcbBbwbG +HlNHHLHsBDRpHLlsHRlJnMhfWZMRnvCCCnWhZj +wtqSmQqttzSSQdPmmwZhChJjWJjPggCZCfZJ +SSwtTbTQmbtdqmGTTcfqzDLHFsBLDGLNGrsBHFGrLB +FFDvWznMWWMrPnPnWPgsmgQbhJRslHbwHwVVsVHjBsHb +ZtSffffpdLqpSCLfCNqfLqLCjHjHbwhpBwJllHlRVQllphjj +ZcNCtcGSctZScqfNGScLNcczPJFmzmDzGzWnrWFPFWDvrM +DnTPspmTPsTCDQWRZzZzZRCRfCfHfh +BNcqTBcFgbVchVJhVR +dTwdrBrwTSPPWnnmSmsn +pfbbDbHpNBFmQbpNNBSlLtlDStSdSPJLtLJR +ZcszvwgVCZswFzVTRTlTlRLgRJSWJR +jzZvVwFjcjjnwvzwZcjMpqMpbGQbQmhhHhmfHQmh +hTbddhQCtdNmdtwtdhTBbCddRSWscczwcRSWLJzcFJzDsFsR +NflgfPZPcgSLJcWD +lPVNZMMMpZlZZvfrMvpbQHQhtbtqdTQHthrqhd +JlWSStwhWJSRJpJvJBjTwTqcwTsDjsCTCB +dqFzgFZGGQNVmTcCrjrzsBrB +fdgLFQLnPdnqShRMPhlJMpWW +TMPcsPDjdDhsDcDcTTTDvdvghBNFGGtmNrSrgSSBGNtNFg +CVCbJqlRVVWWpRqRQZRWVWJZBtmSFGNmggGmtmmBFbrGMGMt +JRqHVJVCRLZWTjMnfLTPcfLd +TRTZFTTrghrZVhVWdWZpMmbzbdzBmtDpDDzmzB +wcsSSsjfPfGPqQwqsQcfJJCtJGpppCBJzCbzJzCb +sPjflcwljfjfvqNcTZTRhtVWrNrVLnrR +rVLLsmwmCWTmsCTdwQrdTmqWDjDHjNGNPbjDBPNDNsZRDBjH +cFcSvgJvfhfLnShtMJtPHRRvRbBBGBPNBHPbND +hgLcgcLpJSMwzmrmzqQrmp diff --git a/2022/day03/testinput b/2022/day03/testinput new file mode 100644 index 0000000..f17e726 --- /dev/null +++ b/2022/day03/testinput @@ -0,0 +1,6 @@ +vJrwpWtwJgWrhcsFMMfFFhFp +jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL +PmmdzqPrVvPwwTWBwg +wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn +ttgJtRGJQctTZtZT +CrZsJsPPZsGzwwsLwLmpwMDw