मैं एक पलिंद हूं। क्या आप?


103

इस प्रश्न को पूछने के लिए पिछले कुछ प्रयास हुए हैं, लेकिन न तो इस साइट पर आधुनिक मानकों के अनुरूप हैं। मेटा पर चर्चा के अनुसार , मैं इसे अपने आधुनिक नियमों के तहत उचित प्रतिस्पर्धा के लिए अनुमति देता हूं।

पृष्ठभूमि

एक एक स्ट्रिंग है जो "आगे और पीछे एक ही पढ़ता है", अर्थात स्ट्रिंग का उलटा स्ट्रिंग के समान ही होता है। हम यहां "सुविधाजनक पैलिंड्रोम्स" के बारे में बात नहीं कर रहे हैं, लेकिन एक सख्त चरित्र-दर-चरित्र उलट; उदाहरण के लिए, ()()एक पैलेंड्रोम नहीं है, लेकिन ())(है।

काम

एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में एक स्ट्रिंग एस (या आपकी भाषा में उपयुक्त समतुल्य) लेता है , और इसमें एक आउटपुट क्यू (आपकी पसंद का एक प्रकार) है। आप इनपुट लेने और आउटपुट प्रदान करने के लिए किसी भी उचित साधन का उपयोग कर सकते हैं ।

  • जब इनपुट S एक पैलिंड्रोम होता है, तो आउटपुट Q का मान A होना चाहिए (जो कि किसी भी palindromic S के लिए समान है )।
  • जब इनपुट S एक palindrome नहीं होता है, तो आउटपुट Q का मान B होना चाहिए (जो कि किसी भी गैर-palindromic S के लिए समान हो )।
  • A और B एक दूसरे से अलग होना चाहिए।

या दूसरे शब्दों में: सभी palindromes को एक मान में, और सभी गैर-palindromes को दूसरे में मैप करें।

इसके अतिरिक्त, आप जो प्रोग्राम या फ़ंक्शन लिखते हैं, वह स्वयं एक palindrome होना चाहिए (अर्थात इसका स्रोत कोड palindromic होना चाहिए), जो इसे चुनौती बनाता है ।

स्पष्टीकरण

  • हालांकि trueऔर falseके लिए स्पष्ट विकल्प हैं एक और बी , आप के लिए अपने "विलोमपद" किसी भी दो अलग-अलग मान का उपयोग कर सकते और आउटपुट है, जो जरूरत बूलियन्स नहीं हो "विलोमपद नहीं है।"
  • हम यहां चरित्र स्तर पर स्ट्रिंग रिवर्सल को परिभाषित कर रहे हैं; ééइस कार्यक्रम की यूटीएफ -8 या लैटिन -1 में एन्कोड किए जाने के बावजूद यह यूटीएफ -8 एन्कोडिंग के बाद ओक्टेट्स का एक पैलिंड्रोमिक अनुक्रम नहीं है या नहीं, इसकी परवाह किए बिना।
  • हालांकि, भले ही आपके प्रोग्राम में गैर-एएससीआईआई अक्षर हों, लेकिन इसके लिए केवल एएससीआईआई इनपुट के लिए काम करना होगा। विशेष रूप से, इनपुट S में केवल मुद्रण योग्य ASCII वर्ण (अंतरिक्ष सहित, लेकिन न्यूलाइन शामिल नहीं होंगे)। अन्य बातों के अलावा, इसका मतलब है कि यदि आप वर्णों के अनुक्रम के बजाय इनपुट को बाइट्स के अनुक्रम के रूप में मानते हैं, तो आपका कार्यक्रम अभी भी विनिर्देशन का अनुपालन करेगा (जब तक कि आपकी भाषा का आई / ओ एन्कोडिंग बहुत अजीब नहीं है)। जैसे, पिछली बुलेट में एक पैलिंड्रोम की परिभाषा वास्तव में मायने रखती है जब जाँच की जाती है कि कार्यक्रम का सही रूप है।
  • एक टिप्पणी या स्ट्रिंग शाब्दिक में आधा कार्यक्रम छिपाना, जबकि गैर-जिम्मेदार होना, कानूनी है; आपको लंबाई पर बनाया जा रहा है, रचनात्मकता नहीं, इसलिए अपने कार्यक्रम को सुनिश्चित करने के लिए "उबाऊ" तरीकों का उपयोग करने के लिए स्वतंत्र महसूस करें। बेशक, क्योंकि आपको लंबाई पर स्कोर किया जा रहा है, आपके कार्यक्रम के कुछ हिस्सों में जो कुछ भी नहीं करते हैं वे आपके स्कोर को खराब करने वाले हैं, इसलिए आपके कार्यक्रम के दोनों हिस्सों का उपयोग करने में सक्षम होने की संभावना है यदि आप इसे प्रबंधित कर सकते हैं। ।
  • क्योंकि जीत मानदंड बाइट्स में मापा जाता है, आपको एन्कोडिंग निर्दिष्ट करना होगा जिसमें आपका प्रोग्राम इसे स्कोर करने में सक्षम होने के लिए लिखा गया है (हालांकि कई मामलों में यह स्पष्ट होगा कि आप किस एन्कोडिंग का उपयोग कर रहे हैं)।

विजय की कसौटी

भले ही कार्यक्रम को चरित्र स्तर पर एक तालमेल बनाने की आवश्यकता है, हम यह देखने के लिए बाइट्स का उपयोग कर रहे हैं कि कौन जीतता है। विशेष रूप से, आपका कार्यक्रम जितना छोटा होगा, बाइट्स में मापा जाएगा, उतना ही बेहतर होगा; यह एक चुनौती है। सबमिशन (विशेष रूप से एक ही भाषा में सबमिशन) की तुलना करने की अनुमति देने के लिए, अपने प्रोग्राम के लिए अपने सबमिशन के हेडर में एक बाइट काउंट रखें (प्लस कैरेक्टर काउंट, अगर यह बाइट्स की संख्या से अलग है)।


12
क्या कोई समझाएगा कि क्यों () () पैलेंड्रोम नहीं होगा ??
एमिलियो एम बुमाचार

58
@EmilioMBumachar के (साथ aऔर )साथ की कोशिश करो b। है ababविलोमपद? नहीं, यह होना ही होगा abba। तब ()()या तो कोई तालमेल नहीं है; यह होना ही होगा ())(
DLosc

7
उन समाधानों को पूरी तरह से टिप्पणी का उपयोग करते हुए कार्यक्रम को
स्पष्ट

15
@kennytm उन्हें अस्वीकार करना बदतर होगा, क्योंकि भाषा-अज्ञेय तरीके से उस उद्देश्य को करने का कोई संतोषजनक तरीका नहीं है। (क्या एक टिप्पणी है? एक स्ट्रिंग शाब्दिक में अप्रयुक्त आधा डालने के बारे में क्या है जो खारिज कर दिया गया है? 2 डी भाषाओं के बारे में क्या है जहां आप पूरी तरह से निष्पादन योग्य कोड हो सकते हैं जो कभी नहीं पहुंचते हैं?)
मार्टिन एंडर

जवाबों:


137

Brachylog (2), Brachylog के कोडपेज में 3 बाइट्स

I↔I

इसे ऑनलाइन आज़माएं!

यह एक पूर्ण कार्यक्रम है जो मानक इनपुट के माध्यम से इनपुट लेता है (स्थिरांक के लिए Brachylog के सिंटैक्स का उपयोग करके, अर्थात स्ट्रिंग्स दोहरे उद्धरणों में संलग्न हैं), और मानक आउटपुट के माध्यम से आउटपुट। आउटपुट true.एक palindromic इनपुट के लिए हैं, और false.एक गैर-palindromic इनपुट के लिए।

न केवल यह कार्यक्रम पैलिंड्रोमिक है, यह बाएं / दाएं (और शायद कुछ फोंट अप / डाउन में) दर्पण समरूपता भी है।

व्याख्या

ब्रैचीलॉग में, राजधानी पत्र उस कार्यक्रम को चिह्नित करते हैं जिसमें समान मूल्य होते हैं; कार्यक्रम के एक भाग से दूसरे भाग तक जानकारी ले जाने के लिए इसका उपयोग लगभग विद्युत परिपथ की तरह किया जाता है। इसका एक परिणाम यह है कि यदि आप समान अक्षरों के कैपिटल अक्षरों के बीच एक कमांड को जोड़ते हैं, तो आप प्रभावी रूप से यह बता रहे हैं कि कमांड का इनपुट और आउटपुट समान हैं। ब्रैकीग्लॉग का अर्थ है कि इनपुट होता है, इसलिए इस मामले में हम यह भी दावा कर रहे हैं कि कमांड का इनपुट प्रोग्राम के इनपुट के समान है। इस कार्यक्रम में, हम कमांड का उपयोग कर रहे हैं , जो चीजों को उलट देता है (इस मामले में, तार); इसलिए कार्यक्रम प्रभावी रूप से दावा करता है कि इनपुट आगे और पीछे एक ही है।

ब्रैकीलॉग में एक पूर्ण कार्यक्रम (एक फ़ंक्शन के विपरीत) एक बूलियन देता है, false.अगर कार्यक्रम में सभी अभिक्रियाओं को एक ही बार में सही करने का कोई तरीका नहीं है, या true.यदि प्रोग्राम में सभी एक दूसरे के साथ संगत हैं। हमारे यहां केवल एक जोर है - कि इनपुट को उलटने से इसमें बदलाव नहीं होता है - इसलिए यह प्रोग्राम एक पैलिंड्रोम चेकर के रूप में कार्य करता है।


49
और 180 डिग्री घूर्णी समरूपता, यह सुंदर है।
ATaco

7
... और ऊर्ध्वाधर और क्षैतिज कुल्हाड़ियों के साथ समरूपता :-)
लुइस मेंडो

13
@SteakOverflow Brachylog एक का उपयोग करता है कस्टम कोड-पेज , इसलिए उन अक्षरों में UTF-8 एन्कोडेड नहीं कर रहे हैं
DJMcMayhem

4
इस कार्यक्रम को वोट देने के लिए मैं इस समुदाय में शामिल हुआ। वाह।
बिल माइकेल

4
@ATaco बाएँ / दाएँ और ऊपर / नीचे समरूपता का संयोजन 180 डिग्री घूर्णी समरूपता का अर्थ है। ;)
एरिक डुमिनील

55

अजगर , 3 बाइट्स

_I_

सही या गलत लौटाता है ।

इसे ऑनलाइन आज़माएं!

यह काम किस प्रकार करता है

  _  Reverse the input.
_I   Invariant-reverse; test if the reversed input is equal to its reverse.

1
आपको फाइनल की आवश्यकता क्यों है _?
बुसुकुआन

34
@busukxuan इस सवाल से, "इसके अतिरिक्त, आपके द्वारा लिखा जाने वाला कार्यक्रम या कार्य एक
पैलिंड्रोम

1
इतने उथल-पुथल क्यों ... यह जवाब नहीं लगता है कि साथ आना मुश्किल है ...?
घोस्ट_इन_थे_कोड

1
मुझे ऐसा लगता हैं। फिर भी यह अनुचित लगता है। कुछ सवालों पर, किसी को जवाब देने के लिए बहुत मेहनत करनी चाहिए, और अन्य बहुत आसान हैं। फिर भी भुगतान समान है। Btw मैंने भी
अपटेड किया है

4
@ghosts_in_the_code 100+ के साथ मेरे केवल एक उत्तर को वास्तव में लिखना चुनौतीपूर्ण था, फिर भी ऐसे उत्तर हैं जिन पर मैंने दिन बिताए हैं और केवल एक मुट्ठी भर ही मिला है। अंत में, यह सब स्पष्ट हो गया ...
डेनिस


33

जेली , 5 बाइट्स

ḂŒ
ŒḂ

1 या 0 लौटाता है । पहली पंक्ति एक अनएक्सपेक्टेड हेल्पर लिंक है, दूसरी लाइन पैलिंड्रोम टेस्ट कहती है।

इसे ऑनलाइन आज़माएं!


वाह, हाल ही में इसके अलावा।
जोनाथन एलन

6
हाँ, केवल 18 घंटे पुराना है।
डेनिस

आपने एन्कोडिंग निर्दिष्ट नहीं किया। मैं UTF-8 का अनुमान लगा रहा हूँ?
ब्रायन मिंटन

1
@BrianMinton नहीं, यह UTF-8 में 11 बाइट्स होंगे। जेली इस कोड पेज का उपयोग करती है ।
डेनिस

@ डेनिस, जानकारी के लिए धन्यवाद।
ब्रायन मिंटन


23

गणितज्ञ, २३ बाइट्स

QemordnilaP;PalindromeQ

बहुत दिलचस्प नहीं है, लेकिन पूर्णता के लिए ...

ऊपर एक CompoundExpressionमूल्यांकन किया गया है PalindromeQ, जो एक अंतर्निहित चुनौती को हल करता है। QemordnilaPबस एक अपरिभाषित पहचानकर्ता है, जिसकी वजह से अनदेखी की जाती है ;


21

हास्केल, 87 85 44 34 बाइट्स

p=(==)<*>reverse--esrever>*<)==(=p

व्याख्या: लागू ((->) a)(उदाहरण @faubiguy) का एक उदाहरण है, <*>जिसे परिभाषित किया गया है

(<*>) f g x = f x (g x)

इसलिए तर्कों में प्रतिस्थापित करके कोई यह देख सकता है कि यह क्यों काम करता है।


1
क्या आप कोड समझा सकते हैं?
bli

1
@ सब कुछ --एक टिप्पणी के बाद है।
theonlygusti

3
@Theonlygusti हास्केल पर्याप्त रूप से विदेशी है जो केवल आधा मदद करता है।
याकूब

@Yakk यह के संयोजन के कुछ प्रकार है (==), reverseऔर idकार्य ( idपहचान समारोह है)।
tbodt

आप <*>इसके बजाय का उपयोग करके 10 बाइट्स बचा सकते हैं<$><*>id
faubi

20

05AB1E , 3 बाइट्स

कोड:

ÂQÂ

स्पष्टीकरण:

     # Bifurcate (duplicate and reverse the duplicate) implicit input
 Q    # Check if equal
  Â   # Bifurcate the result

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


सिर्फ क्यों नहींÂQ
नील ए।

1
@NeilA। कोड को स्वयं एक पैलिंड्रोम होना चाहिए।
अदनान


16

MATL , 7 बाइट्स

tPX=XPt

इसे ऑनलाइन आज़माएं!

वापसी [1; 1] पैलिंड्रोमिक इनपुट के लिए और [0; ०] अन्यथा।

t       % duplicate the input
P       % reverse the second string
X=      % check the two strings are exactly equal (returns 0 or 1)
XP      % flip array (does nothing)
t       % duplicate the answer, giving either [1;1] or [0;0]
        % (implicit) convert to string and display

15

पिप , 12 11 बाइट्स

अब टिप्पणी मुक्त!

x:RVaQaVR:x

कमांड-लाइन तर्क के रूप में इनपुट लेता है; पैलिंड्रोम के 1लिए आउटपुट , 0नॉन-पैलिंड्रोम के लिए। इसे ऑनलाइन आज़माएं!

हम क्या करना चाहते हैं क्या की मूल है RVaQa: reverse(a) string-equals a। कोड x:RVaQaइस परिणाम की गणना करता है और इसे असाइन करता है x। फिर चर VR:xका मान निर्दिष्ट करता है । चूँकि यह असाइनमेंट प्रोग्राम का आखिरी स्टेटमेंट है, इसलिए इसकी वैल्यू भी ऑटोप्रिंट की जाती है। देखा!xVR

कुछ अपरिभाषित व्यवहार का उपयोग करके पिछले दिलचस्प संस्करण के लिए, संशोधन इतिहास देखें।



9

आर, 111 103 बाइट्स

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))#))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

सबसे मूल उत्तर नहीं। आर# में टिप्पणी चरित्र है

Ungolfed:

all((s<-el(strsplit(scan(,"",,,"\n"),"")))==rev(s))
#
))s(ver==)))"",)"n\",,,"",(nacs(tilpsrts(le-<s((lla

फ़ंक्शन से वर्ण स्ट्रिंग scanको कच्चे बाइट्स में परिवर्तित किया जाता है charToRaw। इन कच्चे बाइट्स की तुलना rev()फंक्शन से उनके समकक्षों से एक-एक करके की जाती है, जो इसके तर्क के क्रम को उलट देता है। इस भाग का आउटपुट वेक्टर TRUEऔर / या का है FALSE। समारोह तो आउटपुट अगर उन सभी तत्वों रहे हैं
allTRUETRUE

इधर, "\n"में scanसमारोह एक से अधिक शब्द के साथ इनपुट के लिए आवश्यक है।

पिछला उत्तर (बाइट-वार), 81 बाइट्स

function(s)all((s=charToRaw(s))==rev(s))#))s(ver==))s(waRoTr‌​ahc=s((lla)s(noitcnu‌​f

साथ - 24 बाइट्स @rturnbull को धन्यवाद ।


आप charToRawअसाइनमेंट करने से पहले रूपांतरण करके s, और sepतर्क को सेट करने के तरीके को बदलकर आप कुछ अच्छे बाइट्स बचा सकते हैं scan:all((s<-charToRaw(scan(,"",,,"\n")))==rev(s))#))s(ver==)))"n\",,,"",(nacs(waRoTrahc-<s((lla
rturnbull

(इसके अलावा, यह दृष्टिकोण उदाहरण के लिए ééUTF-8 एन्कोडिंग के तहत इनपुट के लिए काम नहीं करता है , लेकिन मुझे नहीं लगता कि यह चुनौती के नियमों को तोड़ता है।)
rturnbull

@ आर्टर्नबुल: इनपुट्स के लिए धन्यवाद! मैं वास्तव ééमें एक latin1कूटबन्धन के साथ परीक्षण किया ।
Frédéric

चूंकि परीक्षण चरित्र-वार किया जाना चाहिए, मुझे लगता है कि वर्तमान प्रोग्राम नियम को तोड़ता है।
Frédéric

मुझे यकीन नहीं है कि पिछला संस्करण नियमों को तोड़ता है। ओपी कहता है: "अन्य बातों के अलावा, इसका मतलब है कि यदि आप वर्णों के अनुक्रम के बजाय बाइट्स के अनुक्रम के रूप में इनपुट का इलाज करते हैं, तो आपका कार्यक्रम अभी भी विनिर्देशन का अनुपालन करेगा (जब तक कि आपकी भाषा का I / O एन्कोडिंग बहुत अजीब है)। "
2139 बजे rturnbull

8

RProgN , 11 बाइट्स

~]S.E E.S]~

इसका पहला भाग सभी भारी उठाने का काम करता है, और RProgN की सुविधा से, दूसरा छमाही एक नो-ऑप है।

~]S.E E.S]~
~           # Treat the word as a Zero Space Segment
 ]          # Duplicate the top of the stack
  S.        # Reverse the top of the stack
    E       # Compare if these values are equal
      E.S]~ # A no-op, because the ~ is at the end of the word, not the start.

इसे ऑनलाइन आज़माएं!


8

रेटिना , 53 बाइट्स

बाइट गिनती आईएसओ 8859-1 एन्कोडिंग मानती है।

$
¶$`
O$^`\G.
»
D`
M$`^.+$
$+.^`$M
`D
»
.G\`^$O
`$¶
$

इसे ऑनलाइन आज़माएं!

मुझे पूरा यकीन है कि यह अभी तक इष्टतम नहीं है ( »लाइन विशेष रूप से बेकार लगती है, और मेरे पास एक 45-बाइट समाधान है जो एक चरित्र को छोड़कर पलिंडोमिक है), लेकिन मुझे लगता है कि यह एक शुरुआत है।


8

GNU सेड , 64 59 + 1 (आर झंडा) = 60 बाइट्स UTF-8

मुझे एक सीड उत्तर के साथ आने में थोड़ा समय लगा जो कोड को पैलिंड्रोम बनाने के लिए एक टिप्पणी अनुभाग का उपयोग नहीं कर रहा है। इसके बजाय, मैं उस cकमांड का उपयोग करता हूं जो रिवर्स ऑर्डर में कोड के पहले भाग को प्रिंट करेगा, केवल मैं यह सुनिश्चित करूंगा कि यह निर्देश नहीं पहुंचा है।

:;s:^(.)(.*)\1$:\2:;t;/../c1
d
1c/../;t;:2\:$1\)*.().(^:s;:

1यदि स्क्रिप्ट स्ट्रिंग इनपुट नहीं है, तो स्क्रिप्ट प्रिंट करती है (इसे त्रुटि मानें)। यदि स्ट्रिंग एक पैलिंड्रोम है, तो कोई आउटपुट नहीं दिया जाता है (इसे सफलतापूर्वक बाहर निकलने के बारे में सोचें)।

उदाहरण चलाएँ: या इसे ऑनलाइन आज़माएँ!

me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "level"
me@LCARS:/PPCG$ sed -rf palindrome_source.sed <<< "game"
1

स्पष्टीकरण:

:                              # start loop
s:^(.)(.*)\1$:\2:              # delete first and last char, if they are the same
t                              # repeat if 's' was successful
/../c1                         # if at least 2 chars are left, print 1. 'c' reads
                               #till EOL, so next command must be on a new line.
d                              # delete pattern space. This line must be a
                               #palindrome itself, and must end the script.
1c/../;t;:2\:$1\)*.().(^:s;:   # (skipped) print first half of code in reverse
                               #order. Everything after 'c' is treated as string.

1
TIO के पास अब sed के लिए समर्थन है। -rकाम नहीं करता है, लेकिन आप बस पूरी चीज को BASH में लपेट सकते हैं। इसे ऑनलाइन आज़माएं!
रिले

@ रिले और पाद लेख का अच्छा उपयोग TIO पर, धन्यवाद। पिछले समाधान को -e के साथ तर्क सूची में कोड को स्थानांतरित करना था, लेकिन आपका तरीका बहुत अच्छा है। मैं तय होने की प्रतीक्षा कर रहा था, लेकिन इस तरह मुझे जरूरत नहीं है।
शीशमारा

7

एलिस , 19 बाइट्स

/@.nzRoi\
\ioRzn.@/

इसे ऑनलाइन आज़माएं!

Palindromes के Jabberwockyलिए प्रिंट और गैर-palindromes के लिए कुछ भी नहीं। मनमाने ढंग से UTF-8 इनपुट के लिए काम करता है।

व्याख्या

चूंकि यह एक स्ट्रिंग प्रसंस्करण कार्य है, इसे हल करने के लिए ऐलिस को साधारण मोड में काम करना होगा। बदले में इसका मतलब है कि अनुदेश सूचक को तिरछे स्थानांतरित करना है, और इसलिए हमें कम से कम दो पंक्तियों की आवश्यकता है ताकि आईपी ऊपर और नीचे उछल सके। इस तरह के कार्यक्रम में लाइनफीड पालिंद्रा के मध्य चरित्र को रखने के लिए एक अच्छी स्थिति बनाता है। इसका मतलब है कि दूसरी पंक्ति को पहले के विपरीत होना चाहिए। लेकिन जब से हम केवल प्रत्येक पंक्ति पर प्रत्येक दूसरे वर्ण को निष्पादित कर रहे हैं, अगर हम यह सुनिश्चित करते हैं कि रेखा-लंबाई विषम है, तो कोड का उलटा बड़े करीने से अपने अंतराल में फिट होगा। एकमात्र पात्र जिसका उपयोग बिल्कुल नहीं किया गया है, वह है बैकस्लैश, लेकिन चूंकि यह मनमाना था इसलिए मैंने इसे कार्यक्रम को अच्छा और सममित बनाने के लिए चुना।

तो वैसे भी, वास्तविक प्रासंगिक कोड यह है:

/ . z o
 i R n @

जिसे बाएं से दाएं एक ज़िगज़ैग में निष्पादित किया जाता है।

/   Reflect the IP southeast, enter Ordinal mode.
i   Read all input as a single string.
.   Duplicate the input.
R   Reverse the copy.
z   Pop the reverse Y and the original X. If X contains Y, drop everything
    up to its first occurrence. Since we know that X and Y are the same length,
    Y can only be contained in X if X=Y, which means that X is a palindrome.
    So this will result in an empty string for palindromes and in the non-empty
    input for non-palindromes.
n   Logical NOT. Replaces non-empty strings with "", and empty strings with
    "Jabberwocky", the "default" truthy string.
o   Output the result.
@   Terminate the program.

6

हास्केल , 34 बाइट्स

f=(==)=<<reverse--esrever<<=)==(=f

इसे ऑनलाइन आज़माएं! के साथ कॉल f "some string", रिटर्न Trueया False

=<<कार्यों पर ऑपरेटर की तरह काम करता f=<<g = \s -> f (g s) sहै, तो कोड के बराबर है f s=s==reverse s, जो, के रूप में मैं सिर्फ देखा, एक ही बाइट गिनती में परिणाम होगा।


टिप्पणी के बिना संस्करण: (49 बाइट्स)

e x y=x/=y
p=e=<<reverse
esrever<<=e=p
y=/x=y x e

इसे ऑनलाइन आज़माएं!

के साथ बुलाओ p "some string"। यह आउटपुट Falseयदि दिए गए स्ट्रिंग है विलोमपद, और Trueयह है कि अगर नहीं विलोमपद।

स्पष्टीकरण:

मुझे कमेंट वर्जन के साथ शुरुआत करने और कमेंट को एक नई लाइन के साथ बदलने के द्वारा यह टिप्पणी मुफ्त मिली।

p=(==)=<<reverse
esrever<<=)==(=p

दूसरी पंक्ति विफल हो जाती है क्योंकि कोष्ठक मेल नहीं खाता है, इसलिए हमें उनसे छुटकारा पाने की आवश्यकता है। यदि हमारे पास एक फ़ंक्शन था eजो समानता के लिए जांच करता है, तो

p=e=<<reverse
esrever<<=e=p

दोनों दूसरी लाइन के साथ एक इन्फिक्स-ऑपरेटर को परिभाषित करेंगे <<=जो दो तर्क लेता है esreverऔर eफ़ंक्शन को वापस करता है p

eसमानता समारोह के रूप में परिभाषित करने के लिए एक सामान्य रूप से लिखना होगा e=(==), लेकिन )==(=eफिर से संकलन नहीं होगा। इसके बजाय हम स्पष्ट रूप से दो तर्क लेते हैं और उन्हें करने के लिए दे सकते हैं ==: e x y=x==y। अब उलटा कोड y==x=y x eसंकलित करता है लेकिन ==ऑपरेटर को फिर से परिभाषित करता है, जिससे परिभाषा e x y=x==yविफल हो जाती है। हालांकि अगर हम असमानता ऑपरेटर पर स्विच करते हैं /=, तो उलट परिभाषा बन जाती है y=/x=y x eऔर एक =/ऑपरेटर को परिभाषित करता है जो मूल /=ऑपरेटर के साथ हस्तक्षेप नहीं करता है ।


5

OIL , 178 बाइट्स

एक इनपुट पढ़ता है, इसे विस्फोट करता है, धीरे-धीरे स्ट्रिंग के बाद पते पर पता करने के लिए पता करने के लिए पते पर अपनी लंबाई (वेतन वृद्धि और गिरावट के माध्यम से) जोड़ता है, कोड के एक अलग हिस्से (बीच में) पर कूदता है, बैंड की दिशा को उलट देता है, स्ट्रिंग को फंसाता है फिर से, और जांचता है कि क्या यह मूल स्ट्रिंग के समान है। TL; DR: यह एक दर्द है, हमेशा की तरह।

40यदि स्ट्रिंग पैलिंड्रोम नहीं है, 0तो यह आउटपुट करता है।

5
0
12
0
40
1
40
2
1
40
34
10
2
3
22
16
9
2
8
35
6
11
6
37

3
4
4
27
26
0
1
10
1

40
13
2
31
04

1
01
1
0
62
72
4
4
3

73
6
11
6
53
8
2
9
61
22
3
2
01
43
04
1
2
04
1
04
0
21
0
5

2
नीट भाषा! :)
डीएलओस

5

जावास्क्रिप्ट, 64 बाइट्स

f=s=>s==[...s].reverse().join``//``nioj.)(esrever.]s...[==s>=s=f

fस्ट्रिंग के साथ कॉल फ़ंक्शन

f("abba") // returns true
f("abab") // returns false

आपका स्रोत कोड एक palindrome नहीं है!
शीशमारा

@seshoumara कोड को अपडेट करें
प्रशांत केंद्र

अब ठीक है। हो सकता है कि रिटर्न वैल्यू का उल्लेख करें यदि स्ट्रिंग पैलिंड्रोम नहीं है, तो बस पूरा होने के लिए।
शीशमारा

@apsillers धन्यवाद, मैंने जवाब संपादित किया।
प्रशांत बिंद

कोई फंक्शन नहीं है f, आपका कोड आपके एरो फंक्शन को वैरिएबल पर असाइन नहीं करता है, इसलिए इसे कॉल नहीं किया जा सकता है
spex

5

जाप , 7 2 बाइट्स

êê

चलाओ

पुराना हल:

U¥UwU¥U

इसे ऑनलाइन आज़माएं!

व्याख्या

U¥UwU¥U
U¥        U is the input, ¥ is a shortcut for == 
  Uw      w is a reverse function.
    U¥U   This calculates U == U (always true), but the result is ignored
          because w does not look at its arguments.

जब तक एक समापन कोष्ठक (या स्थान) तक नहीं पहुँच जाता तब तक जाप फ़ंक्शंस से नहीं बचता।

इसे फिर से लिखा जा सकता है: U¥Uw(U¥U)U¥UwU==Uw। जाप में, एक कार्य के अंत और अंत में छोड़ दिया गया कोष्ठक ऑटो-डाला जाता है।


यह सब समझ में आता है, सिवाय इसके कि यदि wकोई ऐसा कार्य है जो कोई तर्क नहीं लेता है, तो यह कैसे लागू होता है U? क्या यह कुछ ऐसा है U.reverse()?
DLosc

@ डलास सही। यह Uउसी तरह उलट जाता है जैसे U.reverse()
ओलिवर

4

बैश + यूनिक्स उपयोगिताओं, 49 बाइट्स

[ "$1" = "`rev<<<$1`" ] # ] "`1$<<<ver`" = "1$" [

इनपुट को एक तर्क के रूप में पारित किया जाता है।

आउटपुट कोड में लौटाया जाता है - 0 एक पैलिंड्रोम के लिए, 1 एक नॉन-पैलिंड्रोम के लिए।

हो सकता है कि कोई व्यक्ति बेहतर कर सकता है और न केवल कोड को स्वयं को स्पष्ट बनाने के लिए एक टिप्पणी पर भरोसा कर सकता है।

इसे ऑनलाइन आज़माएं!


[[ $1 = `rev<<<$1` ]]छोटा है। (बैश [[सिंटैक्स, कोई उद्धरण की आवश्यकता नहीं)
आर्थर

2
@ Arthur2e5 मैंने आपके सुझाव की कोशिश की, लेकिन मुझे लगता rev<<<$1है कि [[...]]समाधान में भी आसपास के उद्धरणों की आवश्यकता है । इसे इनपुट स्ट्रिंग '[$]]$['(जो एक पैलिंड्रोम है) के साथ टेस्ट करें । उन उद्धरणों के साथ इसे काम करने के लिए जोड़ा गया, आपका समाधान मेरे समाधान के समान लंबाई है।
मिशेल स्पेक्टर

शानदार कैच! मैं भूल गया कि RHS की व्याख्या एक समान पैटर्न के रूप ==में की [[जाएगी case
आर्थर

@ Arthur2e5 मुझे अभी भी लगता है कि इसे कम करने के लिए शायद कुछ चतुर तरीका है।
मिशेल स्पेक्टर

क्या यह तब भी काम करेगा, जब इनपुट में कोई नया अंक हो? मुझे लगता है कि आपको रेव की जरूरत है। टैक सिर्फ बदले रेव की।
b_jonas 20

4

> <>, 11 बाइट्स

{=?!;
;!?={

यहाँ यह कोशिश करो!

एक वैध palindrome पर "\ nsomething की महक आती है ...", कोई अमान्य palindrome पर कोई आउटपुट नहीं देता है। स्टैक पर पालिंद्रा रखें।


स्टैक पर पहले से ही इनपुट की आवश्यकता होती है जो इसे एक स्निपेट बनाता है। इस चुनौती के लिए कार्यक्रमों या कार्यों की आवश्यकता होती है, न कि स्निपेट्स की।
पिपरी

4

जावा - 171 169 160 बाइट्स

int q(String s){return s.equals(new StringBuffer(s).reverse().toString())?1:2;}//};2:1?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

अंत में टिप्पणी यह ​​एक तालमेल बनाने के लिए है। रिटर्न P(alindrome)जब इनपुट विलोमपद और है N(ot)जब नहीं।

Ungolfed संस्करण:

int q(String s) {
    return s.equals(new StringBuffer(s).reverse().toString()) ? 'P' : 'N';
}//};'N':'P'?))(gnirtSot.)(esrever.)s(reffuBgnirtS wen(slauqe.s nruter{)s gnirtS(q tni

2 बाइट्स @DLosc की बदौलत बच गए

बाइट्स की गलत राशि को इंगित करने के लिए @ ऑलिवर ग्रेजायर को धन्यवाद! अब तय हो गया


मेरा मानना ​​है कि आप कुछ बाइट्स को intएस के बजाय एस वापस करके बचा सकते हैं char
3

मुझे नहीं पता कि आप अपनी बाइट की गिनती की जाँच कैसे करते हैं, लेकिन आपके पास 160 बाइट्स हैं, 161 नहीं।
ओलिवियर ग्राएगोइयर

आप 80 'P'और 78 के लिए वापसी करके 2 बाइट्स बचा सकते हैं 'N'या अधिक बाइट्स को बचाने के लिए विभिन्न वर्णों का उपयोग कर सकते हैं।
सेलिम

1
आप new StringBuffer(s).reverse()+""इसके बजाय और भी बाइट्स बचा सकते हैंnew StringBuffer(s).reverse().toString()
सेलीम

1
किसी भी कारण के intबजाय आप लौट रहे हैं bool?
18

4

जावा 8, 92 90 बाइट्स

यह एक टिप्पणी संस्करण है। यदि किसी स्ट्रिंग में इसके विपरीत होता है, तो यह एक पैलिंड्रोम ( true) है अन्यथा यह ( false) नहीं है ।

s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-s

इसे ऑनलाइन आज़माएं!

अपडेट करें

  • -2 [18-04-05] में शामिल है। @Kevin क्रूज़सेन को धन्यवाद !
  • -2 [17-02-20] निकाल दिया ;है
  • -16 [17-02-22] ऑटो कन्वर्ट

यह कोड एक लैम्ब्डा अभिव्यक्ति नहीं है।
जकॉब

@ जाकोब मुझे लगा कि यह है। यदि आप लैम्ब्डा का उपयोग करने के लिए थे, तो आप शायद एक अग्रणी और अनुगामी न्यूलाइन चाहते हैं। (मैंने एक tio लिंक जोड़ा)
NonlinearFruit

हाँ, मेरी शिकायत यह थी कि लाइन कमेंट सबमिशन को केवल एक लैम्ब्डा एक्सप्रेशन से अधिक बनाता है, और इस तरह से लैम्बडा समाधान के रूप में मान्य नहीं है। अब इसके बारे में चिंता मत करो; मैं शायद अंत में आम सहमति बनाने के लिए एक मेटा पोस्ट बनाऊंगा।
जैकब

@ जाकोब लाम्बा सॉल्यूशंस में कभी-कभी बाहरी कोड हो सकते हैं , यही वजह है कि मुझे लगता है कि यह वैध है। लेकिन अगर आपको बेचा नहीं जाता है, तो एक मेटा पोस्ट को नुकसान नहीं होगा।
नॉनलाइनयरफ्रूट

1
मुझे पता है कि यह एक समय हो गया है, लेकिन आप इसे बदलकर 2 बाइट्स गोल्फ कर सकते हैं s->s.contains(new StringBuffer(s).reverse())//))(esrever.)s(reffuBgnirtS wen(sniatnoc.s>-sइसे ऑनलाइन 90 बाइट्स आज़माएं ।
केविन क्रूज़सेन

3

दरअसल , 5 बाइट्स

;R=R;

इसे ऑनलाइन आज़माएं!

[1]\n[1]सत्य आउटपुट है , और फाल्सी आउटपुट है []\n[](दोनों आउटपुट में, \nएक शाब्दिक न्यूलाइन का प्रतिनिधित्व करता है)।

स्पष्टीकरण:

;R=R;
;R=    duplicate input, reverse one copy, test equality (the main palindrome-testing part)
   R   range(1, x+1) - if palindrome, this pushes [1], else it pushes []
    ;  duplicate

आप क्यों नहीं बस ऐसा नहीं करते हैं यह ?
लीक नन

1
@ लीक यह एक
पैलिंड्रोम

3

सी ++, 154 बाइट्स

int m(){std::string g,p="";g=p;std::reverse(p.begin(),p.end());return g==p;}//};p==g nruter;))(dne.p,)(nigeb.p(esrever::dts;p=g;""=p,g gnirts::dts{)(m tni

मुझे कहना है, रिवर्स स्टेटमेंट महंगा था, लेकिन मैं बहुत सोच भी नहीं सकता कि मैं इसे बदल सकता हूं। एसटीडी को काटने में सक्षम होने के कारण :: प्रतीक मुझे लगभग 10 वर्णों को बचाएंगे, लेकिन "नेमस्पेस स्टड का उपयोग करते हुए;" कुछ और है।

मुझे लगता है कि C ++ वास्तव में संक्षिप्तता के लिए नहीं था।


3

प्रोलॉग, 44 बाइट्स

p-->[]|[_]|[E],p,[E].%.]E[,p,]E[|]_[|][>--p

यह निश्चित खंड व्याकरण का उपयोग करता है। यह वास्तव में एक पूर्ण संदर्भ मुक्त व्याकरण है:

p -->
      []            % the empty string
   |                % or
      [_]           % a one character string
   |                % or
      [E],          % one character, followed by
      p,            % a palindrome, followed by
      [E].          % that same character

उपयोग:

?- phrase(p,"reliefpfeiler").
true 

?- phrase(p,"re").
false.

2

सीजेएम, 13 बाइट्स

l_W%=e#e=%W_l

स्पष्टीकरण:

l_W%=e#e=%W_l
l_            e#Read input twice
  W%          e#Reverse one input
    =         e#Test for equality
     e#e=%W_l e#Comment to be a palindrome

उदाहरण:

> l_W%=e#e=%W_l
l_W%=e#e=%W_l
1

> l_W%=e#e=%W_l
Hi
0

> l_W%=e#e=%W_l
hh
1

: इस प्रयास करेंl_W%#e#%W_l
aditsu

2

जे, 15 बाइट्स, 15 अक्षर

-:|.NB. .BN.|:-

1 यदि पैलिंड्रोम, 0 नहीं तो लौटाता है।

आउटपुट:

   f '())('
1
   f 'nope'
0

स्पष्टीकरण:

-:    NB. "Match" verb, checks for equality
|.    NB. Reverses the string
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.