के str_replace
मापदंडों एक के बाद एक विश्लेषण करते हैं।
range('-',T)
range()
समारोह एक सरणी दूसरा पैरामीटर के लिए पहले पैरामीटर से फैले तत्व है कि देता है। वर्ण उनके ASCII मूल्यों से माना जाता है, इसलिए परिणाम
Array
(
[0] => -
[1] => .
[2] =>/
[3] => 0
[4] => 1
[5] => 2
[6] => 3
[7] => 4
[8] => 5
[9] => 6
[10] => 7
[11] => 8
[12] => 9
[13] => :
[14] => ;
[15] => <
[16] => =
[17] => >
[18] => ?
[19] => @
[20] => A
[21] => B
[22] => C
[23] => D
[24] => E
[25] => F
[26] => G
[27] => H
[28] => I
[29] => J
[30] => K
[31] => L
[32] => M
[33] => N
[34] => O
[35] => P
[36] => Q
[37] => R
[38] => S
[39] => T
)
क्यों T
"T"
के बजाय है? PHP में एक गलतफहमी है जो निरंतर नाम के समान सामग्री के साथ तारों के रूप में अपरिभाषित स्थिरांक का मूल्यांकन करती है। स्थिर T
परिभाषित नहीं किया गया है, इसलिए यह "T"
जैसा है जो कोड गोल्फ उद्देश्यों के लिए दो वर्ण सहेजता है। यह बाद में q
के लिए जाता है। अगर सर्वर पर त्रुटि रिपोर्टिंग है, तो यह एक अनिर्धारित स्थिरता के बारे में एक चेतावनी दिखाएगा।
split(q,"I justCannaLE?2Gotta >u=Msta=.q...");
यह q
पात्रों पर एक सरणी में स्ट्रिंग विभाजित होता है। फिर, यह एक सरणी अक्षर का उपयोग करने से छोटे कोड के लिए बनाता है। नतीजा:
Array
(
[0] =>
I justCannaLE?2Gotta >u=Msta=.
[1] =>
Ng1Nlet? downNrun<rH=5desMt?N>cryNsayRoodbyeNtE< lie5hurt?
[2] =>
We'T3n [email protected] s8lSg6r hear9<ch: but6;Lo7hyL7BInsideCe both3Cha9Ro: S
We3KeRa45we;QplB
[3] => 1)O)NgiT, nPgiT
(G
[4] => iT? up
[5] => howFJeel:
[6] => know
[7] => me
[8] => <=
[9] =>
YH
[10] => 8s
[11] => o
[12] => t's been
[13] => ing
[14] => 're
[15] => a
[16] => nd
[17] => make?
[18] => yH
[19] => othM
[20] => A
[21] => ay it
[22] => w
[23] => D
[24] => ell
[25] => I'm
[26] => G
[27] => ou
[28] => I
[29] => f
[30] => Lh
[31] => t
[32] => er
[33] =>
NP
[34] =>
(Ooh
[35] => eTrQ
[36] => RSna
[37] => g
[38] => on
[39] => ve
)
अंतिम पैरामीटर लक्ष्य स्ट्रिंग है।
"We; n7trangMsL8loT63Ke rules5s8d8I
AJull commit4nt'sChatFKink: of6CHldn'tRetKisJrom<[email protected]/A= if?<sk 42DS'tLE 4?;Lo8bli=L7ee..
O,R1)O,R001)/-.."
आप str_replace()
सुई और भूसे के ढेर के रूप में सरणियों पार कर लेते हैं, प्रतिस्थापन एक समय में एक से किया जाता है। सादगी के लिए, चलिए टैगेट स्ट्रिंग के रूप में केवल "We; n7trangMs"
लें और ;
से बदलना शुरू करें।"8s"
साथ "7"
बदलने के बाद पहला कदम (दूसरी सरणी में इसी प्रतिस्थापन):
"We; n8strangMs"
फिर "er"
साथ "'re"
"We're no strangMs"
"M"
साथ "o "
"We; no strangMs"
";"
साथ "8"
की जगह
"We're no strangers"
संक्षेप में, यह एक बुनियादी संपीड़न एल्गोरिथ्म जहां चरित्र दृश्यों कि मूल पाठ के अंदर दोहराने और उन्हें एक ही चरित्र के साथ की जगह खोजने के लिए है। जब उस चरित्र को डिकंप्रेस करना मूल अनुक्रम के साथ बदल दिया जाता है। प्रगति को क्रमशः चलकर आप एक बार संकुचित पाठ को फिर से संपीड़ित कर सकते हैं ("o s"
=>"8s"
=>"7"
)।
इस बहुत अच्छे जवाब के लिए धन्यवाद। मैं यहां क्या खो रहा था यह है कि आप कई बार बदलते हैं। पाठ को संपीड़ित करने का सबसे आसान तरीका क्या होगा? (लेखक को संपीड़ित स्ट्रिंग कैसे मिली?) – Imateapot
लेखक शायद कुछ संपीड़न एल्गोरिदम का उपयोग किया। इसे मैन्युअल रूप से करना बहुत काम होगा। – JJJ
क्या मुझे असंपीड़न कोड 'इनवर्टिंग' द्वारा संपीड़न कोड मिल सकता है? – Imateapot