यह निर्धारित करने के लिए सबसे छोटा कोड है कि क्या स्ट्रिंग एक पैलिंड्रोम है


42

एक पैलिंड्रोम कुछ स्ट्रिंग है जो पीछे और आगे दोनों तरफ समान तरीके से लिखे जाते हैं। उदाहरण के लिए, 'ईवा, क्या मैं एक गुफा में चमगादड़ को मार सकता हूं?' पलिंड्रोम है (EVACANISTAB | BATSINACAVE)

इस कोड गोल्फ के लिए, अपनी पसंद की भाषा का उपयोग करके, यह निर्धारित करें कि क्या दी गई स्ट्रिंग एक पैलिंड्रोम है या नहीं।

बढ़त मामले:

  • विराम चिह्नों को पैलिन्ड्रोमनेस की ओर नहीं गिना जाता है।
  • नियंत्रण वर्णों की गिनती पैलिन्ड्रोमनेस की ओर नहीं की जाती है।
  • व्हॉट्सएप की गिनती तालमेल की ओर नहीं की जाती है।
  • संख्या को पैलिंड्रोमनेस की ओर गिना जाता है।
  • इस चुनौती में मामले को पैलंड्रोमनेस की ओर नहीं गिना जाता है।
  • अपनी पसंद की भाषा द्वारा जो कुछ लगाया गया है, उसे छोड़कर, मूल्यांकन करने के लिए तार की लंबाई की कोई सीमा नहीं है।
  • इस चुनौती के लिए, अपने आप को ASCII वर्ण सेट तक सीमित रखें।

तकनीकी आवश्यकताएँ:

  • केवल विधि निकायों की आवश्यकता है; अतिरिक्त चीजें जैसे विधि हस्ताक्षर, डेटा संरचना घोषणाएं, आदि जीत की आवश्यकता की ओर ध्यान नहीं देते हैं।
  • कोड को संकलन-समय की त्रुटियों या अपवादों के बिना संकलित या व्याख्या करना चाहिए।
  • कोड को बिना किसी अपवाद या क्रैश को नहीं फेंकना चाहिए। (कहने की जरूरत नहीं है। लगभग।)
  • कोड को कुछ मूल्य लौटना चाहिए जो कि palindrominess को दर्शाता है। डेटा प्रकार आपके द्वारा उपयोग की जाने वाली भाषा पर निर्भर करता है (उदाहरण के लिए एक C # उपयोगकर्ता का उपयोग कर सकता है bool, जबकि एक जावास्क्रिप्ट उपयोगकर्ता एक का उपयोग कर सकता है var)
  • आप अपने स्वयं के दुभाषिया को नहीं लिख सकते हैं जो इस कार्य को 'मूल' क्षमता के रूप में करता है ताकि आप एक विजेता स्कोर को 'गोल्फ' कर सकें। (उम्मीद से कहना बेकार है।)

विजय की स्थिति:

  • पात्रों में सबसे छोटा कोड जीतता है।

वर्तमान नेता: tmartin (के, 25 अक्षर)

... आपके जवाब से मैजिक ग्रीन चेक मार्क चाहिए ? इस लड़के का जवाब मारो!


1
क्या I / O चुनौती का हिस्सा है, या एक कार्य निकाय करेगा?
जॉन ड्वोरक

1
संशोधन कार्य के माध्यम से सभी उत्तरों में साइट-वाइड उपलब्ध कैसे हैं, यह दिखाने के लिए "ब्रेडक्रंब" उपलब्ध हैं। उत्तर के वर्तमान संस्करण में पूर्ण इतिहास दिखाई देने की आवश्यकता नहीं है।
पीटर टेलर

1
@WernerCD मुझे यकीन है कि ओपी बदल जाएगा, जो नई प्रतिक्रियाओं पर जाँच करने के लिए वापस आने पर ग्रीन टिक हो जाता है।
गारेथ

2
एक भाषा को निर्दिष्ट नहीं करना वास्तव में मेरे लिए इस चुनौती को तुच्छ बनाता है। जैसा कि नीचे देखा गया है, उच्च क्रम के पाठ हेरफेर कार्यों पर ध्यान देने के साथ व्याख्या की गई भाषाएं हमेशा सबसे कम परिणाम प्राप्त करती हैं। क्या एक समारोह, आईपी () के साथ मुझे अपने दुभाषिया को एक साथ फेंकने से रोकने के लिए है। मेरा प्रतिस्पर्धा एल्गोरिथ्म अब 'आईपी: आई' है। 4 अक्षर। किया हुआ।
गुस्सोर

3
@Gusdor देखें J और GolfScript कोड गोल्फ और लैंग्वेज हैंडीकैप के बाहर के सभी आनंद और इस साइट के मेटा से संबंधित प्रश्नों को चूसते हैं
आकाशवाणी

जवाबों:


29

के, २५

{x~|x:_x@&x in,/.Q`a`A`n}

k){x~|x:_x@&x in,/.Q`a`A`n}"Eva, can I stab bats in a cave?"
1b

Q और k के मिश्रण की तरह दिखता है: P
skeevey

ठीक है, मैं बिल्कुल क्यूक्यू आदि को कॉल नहीं करूंगा। वे सिर्फ स्ट्रिंग रैपर हैं, उनके नीचे कोई वास्तविक k कोड नहीं है। अब, अगर मैंने कहा .q.inter मैं मुसीबत में हूँ।
tmartin

मुझे लगता है कि यह शब्दार्थों पर
काबू पाने का

बस 31 के लिए क्यू कह सकते हैं:{x~(|)x:(_)x inter(,/).Q`a`A`n}
tmartin

मुझे पता है यह बहुत पुरानी है लेकिन ... आप 1 बाइट बचा सकता है के साथ {#|:\_x@&x in,/.Q`a`A`n}है, जहां 1 से सच है और 2 गलत है
घसीट

24

पर्ल, 26 चार

s/_|\W//g;uc eq reverse uc

जब $_यह नहीं होता है, तो एक पलिंद्रोम, ""(पर्ल के झूठे मूल्यों में से एक) 1 का मूल्यांकन करता है।

नमूना उपयोग:

sub palin {
    s/_|\W//g;uc eq reverse uc
}
while (<DATA>) {
    chomp;
    print "$_ => ",palin()?"yes":"no","\n";
}
__DATA__
Eva, can I stab bats in a cave?
A man, a plan, a canal. Panama!
Madam, I'm Adam Corolla.
757
Boeing 757
A man, a plan, a big shovel, a canal. Panama!
A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal >> __Panama__

उत्पादन:

Eva, can I stab bats in a cave? => yes
A man, a plan, a canal. Panama! => yes
Madam, I'm Adam Corolla. => no
757 => yes
Boeing 757 => no
A man, a plan, a big shovel, a canal. Panama! => no
A man, a plan, a canoe, pasta, heros, rajahs, a coloratura, maps, snipe, percale, macaroni, a gag, a banana bag, a tan, a tag, a banana bag again (or a camel), a crepe, pins, Spam, a rut, a Rolo, cash, a jar, sore hats, a peon, a canal >> __Panama__ => yes

लानत है, तुमने इसके लिए मुझे हराया। हालांकि यह ठीक से काम नहीं करेगा अगर वहाँ एक _स्ट्रिंग में यह होगा? और यह कोई इनपुट नहीं लेता है तो क्या आपको -pविकल्प का उपयोग करने की आवश्यकता नहीं होगी ?
गारेथ

\Wregexes में अंडरस्कोर शामिल नहीं है। मुझे डर है कि आपको [^a-z\d]अपने रेगेक्स की आवश्यकता होगी । मुझे डर है कि मैं किसी भी तरह से पीट रहा हूं।
जॉन ड्वोरक

3
के _|\Wबजाय के साथ एक बचाओ [_\W]
हावर्ड

1
आप छोटा कर सकते हैं _|\Wकरने के लिए \Pl: ideone.com/0ufdaQ । बस यूनिकोड अक्षर होना चाहिए।
कोबी

वास्तव में, फिर से सोचना - \Plअंकों से मेल नहीं खाएगा, इसलिए मुझे लगता _|\Wहै कि सबसे अच्छा आप कर सकते हैं।
कोबी

18

C # 82 केवल :)

var x=s.ToLower().Where(char.IsLetterOrDigit);return x.SequenceEqual(x.Reverse());

मेरी पसंदीदा भाषा में बॉयलरप्लेट-फ्री प्रोग्राम लिखने के प्रलोभन का विरोध नहीं कर सका।

एक परीक्षण यहाँ उपलब्ध है: http://ideone.com/8bwz7z


सरल ... लेकिन सुरुचिपूर्ण!
एंड्रयू ग्रे

@AndrewGray टिप्पणी के लिए और अनुमेय तकनीकी आवश्यकताओं के लिए धन्यवाद। सी # बॉयलरप्लेट गंभीरता से चार गिनती में जोड़ता है, जिससे यह गोल्फ के लिए अव्यवहारिक हो जाता है।
क्रिस्टियान लुपस्कु

2
कोई परेशानी नहीं। मैं एक साथी सी # देव हूं, और मुझे संक्षिप्त, कुशल कोड लिखना पसंद है। यह शर्म की बात है कि भाषा में बहुत अधिक बॉयलरप्लेट है ...
एंड्रयू ग्रे

13

GolfScript, ३६ ३४ ३१ 30 अक्षर

{0"0:A[a{"@{>^}+/},{32|}%.-1%=

मेरे पिछले (जावास्क्रिप्ट) समाधान के समान एल्गोरिथ्म ।

0"0:A[a{"@{>^}+/- पीटर टेलर और हॉवर्ड द्वारा अनुकूलित। मेरे संस्करण था "/9@Z"{1$<},,2%\;। हॉवर्ड ने फंक्शन कॉन्टेक्टेशन और पीटर टेलर ने मॉडुलो -2 के लिए XOR दान किया। यह मूल रूप से तुलना करने का एक सामान्य तरीका है यदि मूल्य श्रेणियों के अनुक्रम में है।

{.96>32*-}%(11 वर्ण) वास्तव में जावास्क्रिप्ट .toUpperCase()(14 वर्ण) पर सुधार नहीं है , खासकर क्योंकि यह zASCII तालिका में कुछ अजीब विराम चिह्नों का अनुसरण करता है (जो यहां कोई फर्क नहीं पड़ता)।

जैसा कि पीटर टेलर ने सुझाव दिया था, हालांकि, यदि हम पहले अल्फ़ान्यूमेरिक्स को फ़िल्टर करते हैं, तो हम प्रत्येक वर्ण में एक बिट सेट करके केवल लोअरकेस और अंकों में परिवर्तित कर सकते हैं: {32|}

.-1%=सभी पलिंडोमिक भारी उठाने करता है। एक हिस्सा जो मैं वास्तव में पसंद नहीं कर रहा हूं वह यह है कि एक सरणी को उलटने के लिए मुझे यह पता लगाने में कितना समय लगा। मुझे डॉक्स पढ़ना चाहिए था। अन्य दो चरित्र ढेर प्रबंधन और तुलना करते हैं।

टेस्ट: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgpp/jA6QVtheyJcez59KywsMiV9LssMnx9x4S4S


इसके अलावा, अगर मैं यह मान सकता हूं कि निम्नलिखित नियंत्रण वर्णों में से कोई भी मौजूद नहीं है: (डेटा लिंक से बचना, डिवाइस नियंत्रण 1-4, नकारात्मक स्वीकार, तुल्यकालिक निष्क्रिय, ट्रांसमिशन ब्लॉक का अंत, रद्द करना, माध्यम का अंत) (हम सभी इन से सहमत हैं सभी सुंदर अस्पष्ट) या अगर मैं उन्हें अंकों के अपरकेस संस्करणों के रूप में मान सकता हूं 0-9, हम एक और दो अक्षर बचा सकते हैं:

GolfScript, 28 अक्षर

{32|}%{0"0:a{"@{>^}+/},.-1%=

टेस्ट: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgppMMJJ8fSV7MCIwOmF7FkB7Pl59Ky994UUU


2
आप सफाई से छुटकारा पा सकते हैं और दो चार्ट बचा सकते हैं:{"0:A["\{>}+,,2%},
हावर्ड

@ हावर्ड धन्यवाद। मुझे लगता है कि मैंने +ब्लॉकों पर गलत समझा । वह मस्त चाल है।
जॉन ड्वोरक

1
आप फ़िल्टर और केस मानकीकरण को उलट कर तीन वर्णों को बचा सकते हैं। आपको a{निम्न-केस अक्षरों को शामिल करने के लिए वर्णों की सूची में जोड़ना होगा, लेकिन आप केवल ऊपरी-मामले को ही शामिल कर सकते हैं {32|}%। अंतिम परिणाम है{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
पीटर टेलर

फिल्टर पर एक और बचत भी की जानी है। मोडुलो 2 की गिनती एक्सओआर है, इसलिए 0"0:A[a{"@{>^}+/यह काम करता है।
पीटर टेलर

@PeterTaylor अगर मैं जल्द ही एक और अनुकूलन के साथ नहीं आता हूं, तो मुझे शायद सामुदायिक विकि में परिवर्तित होना चाहिए। धन्यवाद फिर से :-)
जॉन ड्वोरक

8

जावास्क्रिप्ट, 53 वर्ण:

(x=x.toLowerCase().match(/[a-z\d]/g))+""==x.reverse()

एक जावास्क्रिप्ट अभिव्यक्ति है जो सच का मूल्यांकन करती है यदि xयह एक पैलिंड्रोम है, तो गलत है यदि यह नहीं है। यह मानता है xकि एक स्ट्रिंग है। यदि इसकी गारंटी नहीं है, तो प्रीपेन्ड करेंx+="",

यहाँ एक ब्रेडक्रम्ब है: कैसे reverse()काम करता है,

(x=x.toLowerCase().match(/[a-z\d]/g))==""+x.reverse()

विफल रहता है। हालाँकि,

""+(x=x.toLowerCase().match(/[a-z\d]/g))==x.reverse()

पूरी तरह से ठीक है।


एक अशक्त स्ट्रिंग समवर्ती पर अच्छा tidbit! अच्छी जानकारी के लिए अंक!
एंड्रयू ग्रे

3
संकेत: +""एक स्ट्रिंग के लिए जाती है, +एक नंबर पर जाती है, |0और ~~एक पूर्णांक तक डाली जाती है, !!एक बूलियन को जाती है।
जॉन ड्वोरक

Regex/[^\W_]/g
SuperPrograman

7

आर: 66

w=grep("[a-z0-9]",strsplit(tolower(s),"")[[1]],v=T);all(w==rev(w))

उपयोग:

f=function(s){w=grep("[a-z0-9]",strsplit(tolower(s),"")[[1]],v=T);all(w==rev(w))}

f("Eva, can I stab bats in a cave?")
[1] TRUE

7

बैश: 52 48 46 अक्षर

s=${1,,};s=${s//[^a-z0-9]};[ $s = `rev<<<$s` ]

यह स्टिंग को पहले पैरामीटर के रूप में जांचने के लिए लेता है और पैलिंड्रोम के लिए 0 और एग्जिट कोड को 0 पर सेट करता है।

नमूना रन:

bash-4.2$ p() { s=${1,,};s=${s//[^a-z0-9]};[ $s = `rev<<<$s` ]; }

bash-4.2$ p 'Eva, can I stab bats in a cave?'; echo $?
0

bash-4.2$ p 'A man, a plan, a canal. Panama!'; echo $?
0

bash-4.2$ p "Madam, I'm Adam Corolla."; echo $?
1

bash-4.2$ p '757'; echo $?
0

bash-4.2$ p 'Boeing 757'; echo $?
1

bash-4.2$ p 'A man, a plan, a shovel, a canal. Panama!'; echo $?
1

bash-4.2$ p 'A_man,_a_plan, a_caremer, a canal:_Panama!'; echo $?
0

7

पायथन 2: 49 (विधि हस्ताक्षर की गिनती के बिना)

def f(s):
 s=filter(str.isalnum,s.upper())
 return s==s[::-1]

एक पूरा कार्यक्रम, इनपुट और आउटपुट के साथ 74 अक्षरों में लिखा जा सकता है ।

import sys
s=filter(str.isalnum,sys.stdin.read().upper())
print s==s[::-1]

उदाहरण का उपयोग:

$echo 'Eva,can I stab bats in a cave?' | python palindrome.py
True 
$ cat huge_palindrome.txt | python palindrome.py
True
$echo 'Able was I ere i SaW elBa' | python palindrome.py                                                                   
True                                         

( huge_palindrome.txtशामिल इस 17,826 शब्द विलोमपद)

इस समाधान को कुछ पात्रों को जोड़कर अजगर 3 के लिए अनुकूलित किया जा सकता है:

पायथन 3: 55

def f(s):
 s=list(filter(str.isalnum,s.upper()))
 return s==s[::-1]

sys.stdin.readमूलतः के रूप में ही हैraw_input
कैलक्यूलेटर

पायथन 3.8 में आप इसे 58 बाइट्स तक
सीमित

इसके अलावा, आपका पायथन 2 और 3 समाधान क्रमशः 61 बाइट्स और 67 बाइट्स है।
मिल्कीवेय 90

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

@ बकुरी आह, मैं देख रहा हूं। मैं केवल यहाँ कुछ महीने रहा हूँ, इसलिए मैं 2013 से सीमा शुल्क नहीं जानता
मिल्कीवेय 90

7

JAVA (या अब तक की सबसे मौखिक भाषा), 102 96 95 चार

s=s.replaceAll("\\W|_","");return s.equalsIgnoreCase(new StringBuffer(s).reverse().toString());

उपयोग (ungolfed कोड के साथ):

static boolean q(String s) {
    s=s.replaceAll("\\W|_","");
    return s.equalsIgnoreCase(new StringBuffer(s).reverse().toString());
}

public static void main(String[] args) {
    System.out.println(q("'A man, a plan, a canal - Panama!'"));
}

नीचे टिप्पणीकार की सहायता से संक्षिप्त किया गया


1
जबकि मुझे नहीं पता कि जावा (मैं एक सी # लड़का हूं, मजाकिया तौर पर), अगर आप घुंघराले ब्रेस को बाहर निकालकर 1 चरित्र नहीं बचा सकते हैं? ईजी if(s==null) return 1==0;:? या जावा ifकथनों पर अंकुश लगाता है ?
एंड्रयू ग्रे

3
आप बिलकुल सही कह रहे हैं, मैंने आपको धन्यवाद दिया है! ... मैंने देखा कि वे वहां नहीं थे, मुझे लगता है कि मैं एक जावा डेवलपर हूं जो C # नहीं करता है?
जेदानो

4
1) यह जाँचना कि क्या पैरामीटर nullएक अच्छी आदत है, लेकिन कोडगॉल्फ में अभ्यास नहीं किया जाता है। जैसा कि मैं बता सकता हूं, किसी और ने इस सवाल में नहीं किया। इसे छोड़। 2) तर्कों के बीच का स्थान पठनीयता में मदद करता है, लेकिन गोल्फ नहीं। इसे हटा दो; 3) इसके बजाय स्पष्ट रूप toLowerCase()से स्ट्रिंग उपयोग के equalsIgnoreCase()बजाय बाद में equals()। इस तरह आपको नियमित अभिव्यक्ति को समायोजित करना होगा, लेकिन फिर भी 1 वर्ण छोटा होगा। pastebin.com/s7H84faj
मैनटवर्क

1
replaceAll("[^A-Za-z0-9]","")=>replaceAll("\\W","")
assylias

वास्तव में: बहुत replaceAll("\\W|_","");दूर _=> 95 अक्षर
assylias

7

गणितज्ञ ५४ ५३

CatsAreFluffy के लिए एक बाइट ने धन्यवाद बचाया:

PalindromeQ@StringCases[ToUpperCase@#,WordCharacter]&

संस्करण 10.2 या उससे पहले वाले लोगों के लिए:

#==Reverse@#&@StringCases[ToUpperCase@#,WordCharacter]&

उदाहरण

PalindromeQ@StringCases[ToUpperCase@#, WordCharacter]&["Eva,can I stab bats in a cave?"]

सच


PalindromeQ1 बाइट से भी छोटा है#==Reverse@#&
कैलक्यूलेटरफिलीन

मैंने सोचा कि मैंने इसे कभी क्यों नहीं देखा। संस्करण 10.3!
डेविड।


हां, मैंने इसे आज़माने के लिए v। 10.4 डाउनलोड किया है।
डेविड मार्क

वह बाहर है? ओएचएनओ
कैल्क्युलेटरलाइन

6

जे, 30 अक्षर

*/(=|.)tolower(#~'[^_\W]'rxE])

उपयोग:

   */(=|.)tolower(#~'[^_\W]'rxE])'A man, a plan, a canal - Panama!'
1
   */(=|.)tolower(#~'[^_\W]'rxE])'Doc, note: I dissent. A fast never prevents a fatness. I diet on cod'
1

6

k ( ५० ४ 50 ४५) 38 वर्ण)

सभी त्रुटियों को दबाता है, 0b(झूठा) का डिफ़ॉल्ट लौटाता है ।

{X~|X@:&(X:_:x)in 10h$(48+!10),97+!26}

उदाहरण:

k){X~|X@:&(X:_:x)in 10h$(48+!10),97+!26} "Eva, can I stab bats in a cave?"
1b

संपादित करें: मध्यवर्ती चर से बचने के द्वारा तीन और चरित्र मुंडा। एच / टी, सीएस। -7: त्रुटियों को दबाने की आवश्यकता नहीं है।


1
दिलचस्प है कि सिर्फ 3 वर्णों पर, मेरा कोड अधिक पठनीय है :-)
जॉन ड्वोरक

एक अतिरिक्त चार में फिसल गया, मैंने इसे हटा दिया है।
स्काईवे

5

रूबी: 43 38 अक्षर

s=s.upcase.tr'^A-Z0-9','';s==s.reverse

नमूना रन:

irb(main):001:0> p=->s{s=s.upcase.tr'^A-Z0-9','';s==s.reverse}
=> #<Proc:0x854592c@(irb):1 (lambda)>

irb(main):002:0> p['Eva, can I stab bats in a cave?']
=> true

irb(main):003:0> p['A man, a plan, a canal. Panama!']
=> true

irb(main):004:0> p["Madam, I'm Adam Corolla."]
=> false

irb(main):005:0> p['757']
=> true

irb(main):006:0> p['Boeing 757']
=> false

irb(main):007:0> p['A man, a plan, a shovel, a canal. Panama!']
=> false

irb(main):009:0> p['A_man,_a_plan, a_caremer, a canal:_Panama!']
=> true

1
आप यहां तक ​​लिख सकते हैंs.tr!('^A-Za-z0-9','').upcase!.reverse==s
हावर्ड

यार, मैं कब तक !तरीकों के उपयोग के आसपास संयुक्त रहा ! आप अपने करतबों से मुझको अद्भुत बनाये रखें।
मैनटवर्क

छोटी समस्या हालांकि, @ हावर्ड। trऔर tr!ऐसा लगता है कि अलग व्यवहार करने पर उनके पास कुछ भी नहीं होता है: pastebin.com/4YThW2qN जो p['757']"NoMethodError: अपरिभाषित विधि 'के साथ क्रैश करने के लिए परीक्षण करता है !' शून्य के लिए: NilClass "त्रुटि।
9:13 बजे मैनटवर्क

अरे! माफ़ करना। उस मामले के बारे में नहीं सोचा था।
हावर्ड

1
आगे छोटा किया जा सकता है:s=s.upcase.tr('^A-Z0-9','');s==s.reverse
क्रिस्टियन लुपस्कु

5

सी ++, 107 (Miscounted), 100 (उपद्रवित), 81

string s;for(int c:t)if(isalnum(c))s+=c|32;return s==string(s.rbegin(),s.rend());
  • ASCII बिट पैटर्न का शोषण करता है।
  • एक बुराई पर भरोसा करता है using namespace std;
  • तार्किक ऑपरेटरों के बजाय बिटवाइंड और या का उपयोग करता है।
  • का उपयोग करता है intक्योंकि यह charया से छोटा है auto

    #include <string>
    using namespace std;
    
    bool IsPalindrome(const string & t) {
    string s;for(int c:t)if(isalnum(c))s+=c|32;return s==string(s.rbegin(),s.rend());
    }
    
    #include <cassert>
    
    int main() {
        assert(!IsPalindrome("gorilla"));  // simple failure
        assert( IsPalindrome("racecar"));  // simple success
        assert( IsPalindrome("Hannah"));   // case blind
        assert(!IsPalindrome("1999"));     // digit failure
        assert( IsPalindrome("2002"));     // digit success
        // Ignore spacing, punctuation, and case:
        assert( IsPalindrome(" \t09AZ/:@[`{za90"));  // boundaries
        assert( IsPalindrome("A man, a plan, a canal: Panama."));
        assert( IsPalindrome("Eva, can I stab bats in a cave?"));
        assert( IsPalindrome(""));  // empty string
        return 0;
    }
    

4

लुआ, ५६

a=io.read"*l":lower():gsub("%W","")print(a:reverse()==a)

यदि regex में %Wकुछ \Wभी है, तो यह अंडरस्कोर जैसे वर्णों को भी शामिल नहीं करता है। यह अवांछित है।
जॉन ड्वोरक

मैं जाँच की है, %wशामिल नहीं है _( %Wजाहिर है यह, फिर भी शामिल है)
mniip

1
केवल फ़ंक्शन बॉडी की आवश्यकता है। s=s:lower():gsub('%W','')return s:reverse()==s 46 वर्ण
ईगोर स्क्रीप्टनॉफ़

लेकिन क्या बारे मेंfunction(s)
mniip


4

हास्केल, ४३

मानक पुस्तकालयों का उपयोग करना Control.Monad, Control.Monad.Instancesऔर Data.Char:

ap(==)reverse.map toLower.filter isAlphaNum

मैं इसे ghci में काम करने के लिए नहीं बना सकता। import Data.Char import Control.Monad ap(==)reverse.map toLower.filter isAlphaNumन तो यह रिक्त स्थान या इस तरह के साथ जोड़ रहा है, माफ करना मैं हास्केल के साथ बहुत उत्सुक नहीं हूं :)
स्लिमजिम

1
@ स्लीमजिम: उफ़, आपको भी चाहिए Control.Monad.Instances। (मैं रीडर मॉनड इंस्टेंस का उपयोग कर रहा हूं ap, लेकिन यह उदाहरण द्वारा निर्यात नहीं किया गया है Control.Monad।)
जॉन पूर्डी

4

PHP 60 अक्षर।

पहले कोडगोल्फ पर प्रयास करें।

//thank you manatwork
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x); 

उदाहरण:

$c='Eva, can I stab bats in a cave?';
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
//prints 1

टर्नरी ऑपरेटर के पहले ऑपरेंड के आसपास कोष्ठक की जरूरत नहीं है। वास्तव में न तो टर्नरी ऑपरेटर की जरूरत होती है - बस आपकी भाषा के प्रतिनिधित्व में सही या गलत आउटपुट। और $ x 1 के लिए असाइनमेंट के लिए अलग स्टेटमेंट से बचकर और अधिक कैरेक्टर को छोटा किया जा सकता है echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);:।
मैनटवर्क

3

अजगर 2 64 चौराहे:

i =''.join(re.findall('[a-z0-9]+',i.lower()))
return i==i[::-1]

@manatwork यदि आप सभी पहचानकर्ताओं को एक चरित्र पहचानकर्ता से बदलते हैं, तो आप एक 77वर्ण संस्करण प्राप्त करते हैं । पता नहीं क्यों अभिराम ने हालांकि असंगठित संस्करण पोस्ट किया।
बाकुरिउ

@ बकुरी, कोई बात नहीं, मैंने सवाल में एक बयान याद किया: "केवल विधि निकायों की आवश्यकता है"। हालांकि लाइनें 2 और 3 मुझे केवल 73 अक्षर देती हैं। आगे की लंबाई में कमी के संबंध में, कच्चे तार और कैप्चर समूह की आवश्यकता नहीं है, जिससे re.findall('[a-z0-9]+',input.lower())भाग 3 वर्ण कम हो जाते हैं।
मैनटवर्क

@manatwork, मैंने पोस्ट को संपादित किया और चर को थोड़ा बदल दिया। इसने इसे 66 पर ला दिया। हाँ, कच्ची स्ट्रिंग विशेषता का यहाँ कोई फायदा नहीं है।
अभिराम

ठीक है, लेकिन आप नियमित अभिव्यक्ति में कैप्चरिंग समूह पर जोर क्यों देते हैं? बिना सही तरीके से काम करता है: pastebin.com/JzpNRRZU
manatwork

मुझे लगता है कि यह मेरी हाल ही में अजगर परियोजना के बाद मेरे साथ पकड़ा गया है :) इसे इंगित करने के लिए धन्यवाद।
अभिराम

3

हास्केल ४ell

(\x->x==reverse x).map toLower.filter isAlphaNum

इस तरह इस्तेमाल किया:

(\x->x==reverse x).map toLower.filter isAlphaNum$"Eva, can I stab bats in a cave?"

3

छोटी बातटैब के साथ पारंपरिक प्रारूपण का उपयोग करते हुए , स्क्वीक / फेरो स्वाद
116 चार्ट

आप स्ट्रिंग में दो विधियाँ जोड़ते हैं:

selffles
    ^self = self reverse
isPalindrome
    ^(self asUppercase asDecomposedUnicode select: #isAlphaNumeric) selffles

हम निश्चित रूप से कुछ रिक्त स्थान को समाप्त कर सकते हैं, या छोटे विधि नामों का उपयोग कर सकते हैं, लेकिन चलो स्मॉलटॉक की भावना को धोखा नहीं देते हैं।

अधिक से अधिक, इस फ्रेंच खोल देना, में की तरह संभाल लेंगे http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais में इस पृष्ठ कर सकते हैं, कई नहीं जवाब।

['Léon a trop par rapport à Noël' isPalindrome] assert.

चतुर और उपयोगी उत्तर!
एंड्रयू ग्रे

3

पायथन 3 (51 चार)

और अजगर 2 हो सकता है

अभिराम समाधान पर आधारित (अधिक आक्रामक गोल्फ के साथ)

from re import findall

def palindrome(i):
 i=findall('[a-z\d]',i.lower())
 return i==i[::-1]

print(palindrome(input('Phrase: ')))

RE '\ w' का उपयोग करते हुए, 46 वर्णों को छोटा किया जा सकता है

और बहुत छोटा फ़ंक्शन बॉडी के साथ संस्करण (27 वर्ण)

import re
l=str.lower
f=re.compile('[a-z\d]').findall

def palindrome(i):i=f(l(i));return i==i[::-1]

print(palindrome(input('Phrase: ')))

2

विंडोज पॉवरशेल, 56 47 45 चार्ट

अद्यतन (टिप्पणियाँ देखें), और regex के आसपास कोष्ठक हटा सकते हैं:

($s=$s-replace'\W')-eq(-join$s[$s.length..0])

मूल (56)

$s=$s-replace'[^\w]','';$s-eq($s[-1..-$s.length]-join'')

मूल अन-गोल्फ:

$s = "Eva, can I stab bats in a cave?"
$s = $s -replace '[^\w]', ''
$rev = $s[-1..-$s.length] -join ''
$s -eq $rev

आप इसे इस तरह 47 चार्ट तक नीचे कर सकते हैं:($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
वर्तनी

@SpellingD: अच्छा! मैं कोड गोल्फिंग में नया हूं, सुधार के लिए धन्यवाद
गोरिक

आप सही कोष्ठक को भी हटा सकते हैं ($s=$s-replace'\W')-eq-join$s[$s.length..0]:।
माज़ी

2

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

यह कोड वास्तव में सुरुचिपूर्ण है, और समझने में आसान है (जब सही ढंग से स्वरूपित किया गया हो)। मुझे विश्वास नहीं है कि C ++ में किसी भी छोटे को प्राप्त करना संभव है, और यह किसी भी मानक पुस्तकालय कार्यों का उपयोग नहीं करता है।

p(auto c){auto e=c;while(*e)++e;--e;while(*e==*c&e>c)--e,++c;return e<=c;}

उदाहरण का उपयोग:

p("Hello"); //Outputs 0
p(""); //Outputs 1
p("a"); //Outputs 1
p("HellolleH"); //Outputs 1

अच्छी तरह से स्वरूपित संस्करण:

p(auto c)
{
    auto e=c;
    while(*e) ++e;
    --e;
    while(*e==*c & e>c)--e,++c;
    return e<=c;
}

1
error: ISO C++ forbids declaration of ‘p’ with no typeआपके फ़ंक्शन का रिटर्न प्रकार होना चाहिए।
कार्ल नेप ने

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

आप while(*++e);इसके बजाय एक चरित्र को बचा सकते हैं while(*e)++e;। लेकिन जैसा कि टाइटस ने उल्लेख किया है कि यह उत्तर अमान्य है।
निक मैट्टो

2

PHP, 26 84 80 78 62 63 बाइट्स

<?=strrev($s=strtolower(preg_replace("#\W#","",$argv[1])))==$s;

पहली कमांड लाइन तर्क से इनपुट लेता है; 1सच्चाई के लिए प्रिंट , झूठा के लिए खाली स्ट्रिंग।


I18n एक लिटली विस्तारक है, क्योंकि strrev(110 बाइट्स; रन विद -r) के लिए कोई मल्टीबाइट विकल्प नहीं है :

preg_match_all("#.#us",$s=strtolower(preg_replace("#\W#u","",$argv[1])),$m);echo$s==join(array_reverse($m[0]);

utf8_strrev blatantly PHP मैनुअल से चुराया गया । आप भी इस ब्लॉग पोस्ट पर एक नज़र रखना चाह सकते हैं ।


टाइटस पर आओ ... यह युक्ति विफल है।
क्रिस्टोफ़

1
@Christoph हाँ, मुझे कभी-कभी पूरी तरह से पढ़ना चाहिए। फिक्स्ड।
टाइटस

Hm -Rस्ट्रिंग में लाइन ब्रेक के साथ समस्याओं का कारण होगा यह परीक्षण नहीं करेगा? कल्पना से "-R <कोड> हर इनपुट लाइन के लिए PHP <कोड> चलाएं"। इसके अलावा <?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;कम होगा।
क्रिस्टोफ़

1
@Christoph अच्छा विचार है, लेकिन इसके $argnबिना नहीं है -R
टाइटस

$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
टाइटस

1

रूबी, ४,

p((g=gets.upcase.gsub /[^A-Z\d]/,'')==g.reverse)

बहुत आसान है, और जल्दबाजी में इतना नहीं बनाया है बहुत ज्यादा। मैं इसे और बाद में गोल्फ करूंगा।


1

पाइलॉन्गॉल्फ 2 , 24 बाइट्स

c╨2"[^a-zA-Z]"-_╨1=~

c╨2निम्न मामले में बदलने के लिए इनपुट लेता है ।
मैं तब स्टैक पर एक रेगेक्स को धक्का देता हूं और -इनपुट में सभी गैर-वर्णमाला वर्णों को हटाने के लिए उपयोग करता हूं ।
_इनपुट डुप्लिकेट करता है।
╨1इसे उलट देता है और =फिर उनकी तुलना करता है।
~स्टैक को अंत में प्रिंट करता है जो trueया तो प्रिंट करता है या false


क्या यह विराम चिह्न, व्हाट्सएप और नियंत्रण पात्रों की उपेक्षा करता है?
मिकी टी

मेरा बुरा, यह संस्करण नहीं है। मैं इसे ठीक कर दूंगा।

समस्या का समाधान किया।

1

पॉवरशेल, 194 190 बाइट्स

एक पुनरावर्ती कार्यान्वयन यह दिखाने के लिए कि कैसे एक अनाम पॉवरशेल स्क्रिप्टब्लॉक स्वयं कॉल कर सकता है।

$P={param([string]$s)$s=($s-replace'[^a-z]').tolower();if(!$s){return $true};if($s.length-lt4){return $s[0]-eq$s[-1]};$s[0]-eq$s[-1]-and(&$MyInvocation.MyCommand.ScriptBlock $s.trim($s[0]))}

ungolfed:

$P={
param([string]$s)
$s=($s-replace'[^a-z]').tolower();
if(!$s){return $true};
if($s.length-lt4){return $s[0]-eq$s[-1]};
$s[0]-eq$s[-1]-and(&$MyInvocation.MyCommand.ScriptBlock $s.trim($s[0]))
}

परीक्षण:

&$P "Eva, can I stab bats in a cave?"
&$P "Eva, can I stab cats in a cave?"
&$P "A man, a plan, a canal. Panama!"
&$P "A man, a plan, a big shovel, a canal. Panama!"
&$P "Madam, I'm Adam."
&$P "Madam, I'm Adam Corolla."
&$P "757"
&$P "Boeing 757"

कि नहीं होना चाहिए [^a-z0-9]?
टाइटस

1

05AB1E , 4 बाइट्स (गैर-प्रतिस्पर्धात्मक)

गैर-प्रतिस्पर्धात्मक , चूंकि भाषा चुनौती का सामना करती है। कोड:

álÂQ

स्पष्टीकरण:

á     # Only keep the alphabetic characters.
 l    # Lowercase the characters.
  Â   # Bifurcate, which duplicates the letters and reverses the duplicate.
   Q  # Check if they are equal.

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


अपने लिंक के माध्यम से इसे चलाने की कोशिश की। कार्यक्रम का आउटपुट "1" है
क्रिस्टोफर पेरी

1

जेली, 10 वर्ण (गैर-प्रतिस्पर्धात्मक)

fØBŒl
UÇ⁼Ç

1 लौटाता है अगर सच, 0 अगर झूठ

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


क्या यह मामले, व्हाट्सएप और पात्रों को नियंत्रित करने की उपेक्षा करता है? एक ब्रेकडाउन अच्छा होगा।
तीतुस

जेली की वर्तमान स्थिति के 7 बाइट में इस को हल करने के लिए अनुमति देता है: fØBŒlŒḂ: fरखने के लिए फिल्टर ØBसेट [एक-zA-Z0-9] और Œlछोटे अक्षरों पर परिवर्तित, तो ŒḂअगर विलोमपद परीक्षण।
स्टाइनबर्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.