जेली , 14 12 बाइट्स
J’ƲœṗZ⁻¦µU⁼
इसे ऑनलाइन आज़माएं!
पृष्ठभूमि
हम इनपुट स्ट्रिंग के 0-आधारित सूचकांकों को देखकर शुरू करते हैं।
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
त्रिकोण की पंक्तियों को प्राप्त करने के लिए, हम 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 , और 1 + 3 + 5 + 7 = 16 सूचकांकों से पहले स्ट्रिंग को विभाजित कर सकते हैं । चूंकि (n + 1) ² = n² + (2n + 1) , ये रकम इंडेक्स सूची में सकारात्मक, पूर्ण वर्ग हैं। यदि हम 0 से पहले स्ट्रिंग को विभाजित करते हैं , तो यह सभी 0-आधारित सूचकांकों से पहले विभाजन के रूप में सरल है जो एकदम सही वर्ग हैं।
विभाजन के बाद, हमें निम्नलिखित तार मिलते हैं।
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
अगला, हम पहले कॉलम के सभी पात्रों के साथ शुरुआत में खाली स्ट्रिंग को बदलते हैं।
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
कार्य अब यह जांचने के लिए कम हो गया है कि क्या सभी तारों को उलटने से एक ही स्ट्रिंग सरणी प्राप्त होती है।
यह काम किस प्रकार करता है
पहले J
इनपुट स्ट्रिंग के सभी 1-आधारित सूचकांकों को उत्पन्न करता है J
, फिर ’
सभी 0-आधारित सूचकांकों को प्राप्त करने के लिए उन्हें घटाता है । Ʋ
स्क्वरनेस के लिए सभी 0-आधारित सूचकांकों का परीक्षण करता है। ऊपर से हमारे उदाहरण के लिए, यह निम्नलिखित बूलियन सरणी देता है।
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
अगला, हम œṗ
इनपुट स्ट्रिंग को विभाजित करने के लिए कॉल करते हैं, उदाहरण के लिए,
H H e H H e l e H H e l l l e H H e l l o l l e H
सभी 1 के पहले (वास्तव में, सभी सत्य तत्व)। हमारे उदाहरण के लिए, यह निम्नलिखित स्ट्रिंग सरणी देता है।
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
यकीनन इस जवाब का सबसे दिलचस्प हिस्सा है। आइए Z1¦
पहले अधिक सरल का विश्लेषण करें ।
¦
है विरल त्वरित। यह स्टैक से दो लिंक खा जाता है, विशेष रूप से 1
और Z
इस मामले में। पहले Z
इसके तर्क पर लागू किया जाता है: स्ट्रिंग सरणी पहले से। Z
है जिप परमाणु और स्तंभों द्वारा स्ट्रिंग सरणी / 2 डी चरित्र सरणी पढ़ता है, उपज
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
क्या इनपुट स्ट्रिंग के बाईं ओर हुआ करता था और स्ट्रिंग सरणी का पहला कॉलम अब पहला स्ट्रिंग बन जाता है ।
अब ¦
पेशाब करता है 1
और एक ही इंडेक्स पाता है: १ । इस प्रकार मूल स्ट्रिंग सरणी में पहला स्ट्रिंग बदले के पहले मान के साथ बदल जाता है Z
; अन्य सूचकांकों पर तार अप्रभावित रहते हैं।
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
चलो इस सरणी को A कहते हैं ।
हमने Z⁻¦
इसके बजाय उपयोग किया Z1¦
, लेकिन इससे कोई फर्क नहीं पड़ता: ⁻
असमानता के लिए इनपुट स्ट्रिंग के साथ स्ट्रिंग सरणी की तुलना करें, 1 के बाद से बराबर नहीं हैं। दोनों के बीच अंतर यह है कि Z⁻¦
डाइएडिक ⁻
है, क्योंकि हमें œṗZ⁻¦
इसके बजाय लिखने की अनुमति है œṗ¹Z1¦
। इसका कारण यह है कि एक सनक ( œṗ
) के बाद एक भिक्षु ( œṗ¹Z1¦
) एक कांटा होता है (भिक्षु को श्रृंखला के तर्क / इनपुट स्ट्रिंग पर लागू किया जाता है, और लौटाया गया मान सही तर्क के रूप में पारित किया जाता है œṗ
), जबकि एक रंगा दूसरे रंग का होता है (या श्रृंखला के अंत में) एक है हुक , यानी, अपने अधिकार तर्क श्रृंखला के तर्क है।
यह सब करने के लिए छोड़ दिया है palindromicness के लिए जाँच करें। µ
एक नई (विवादास्पद) श्रृंखला शुरू करता है, जिसका तर्क A है । समाप्त कर देना परमाणु U
में सभी स्ट्रिंग्स पराजयों एक (लेकिन एक ही), तो ⁼
परिणाम के साथ तुलना एक समानता के लिए। लौटाया गया बूलियन 1 पूरी तरह से पैलिंड्रोमिक त्रिकोण को इंगित करता है; अन्य तार 0 पर वापस आ जाएंगे ।