निर्धारित करें कि स्ट्रिंग्स समान हैं


29

आपका कार्य सरल है । निर्धारित करें कि एक स्ट्रिंग अन्य (पता नहीं, मूल्य) समानता ऑपरेटरों के उपयोग के बिना (जैसे के बराबर होती है ==, ===या .equal()) या असमानता ( !=, !==) कुछ भी अन्य भाषाओं के लिए समान। इसका मतलब कहीं भी! आप इन ऑपरेटरों को कोड में कहीं भी उपयोग नहीं कर सकते हैं। हालाँकि, आप टॉगल का उपयोग कर सकते हैं जैसे !expकि आप सीधे तुलना नहीं कर रहे हैं exp != with something else

इसके अलावा, आप किसी भी फ़ंक्शन का उपयोग नहीं कर सकते हैं जैसे कि स्ट्रैम्प , स्ट्रैसेकम्प इत्यादि।

तुलना ऑपरेटरों के लिए के रूप में ( >=, <=, >, <), वे भी कर रहे हैं की अनुमति नहीं दी । मुझे लगता है कि कुछ उत्तरों में यह शामिल है, लेकिन मैं वास्तव में और अधिक जवाब देखना चाहूंगा जो समानता ऑपरेटर की सीमा रेखा नहीं बनाते हैं।


PHP का उपयोग करके एक उदाहरण दिखाया गया है:

<?php

$a = 'string';
$b = 'string';

$tmp = array_unique(array($a, $b));

return -count($tmp) + 2;

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


1
क्या परिणाम को आउटपुट करना आवश्यक है, या बस एक बूल वापस करने के लिए फ़ंक्शन लिखना है? यदि पूरा कार्यक्रम लिखना आवश्यक है, जो जावा (C) और (जैसे जानवर की प्रकृति है) के रूप में कार्यशील निष्पादन योग्य बनाने के लिए (अपेक्षाकृत) महत्वपूर्ण बॉयलरप्लेट के साथ भाषाओं में उत्तर-विराम कर सकता है, लेकिन यह चुनौती बहुत कम है ठोस दिशानिर्देशों की व्याख्या / विकल्प के लिए बहुत कुछ छोड़कर)। और हम तार कैसे ले सकते हैं? हार्डकोडिंग, एसटीडीआईएन से पढ़ना, कमांड-लाइन तर्कों के रूप में पास करना?
टोनी एलिस

क्या यह [कोड-गोल्फ] या [लोकप्रियता-प्रतियोगिता] है? यह दोनों नहीं हो सकता।
गारेथ

क्षमा करें, मैंने दोनों टिप्पणियों को प्रतिबिंबित करने के लिए अपने प्रश्नों को संशोधित किया है।
डेविड चेन

तो असमानता की अनुमति है?
14:80 पर user80551

अगर तार एक से अधिक बार (प्रत्येक) हार्डकोड किए जाने हैं, तो क्या मुझे उनकी लंबाई गिननी होगी?
user80551

जवाबों:


34

पायथन 49 45 18 22 15 14

(+ 3 यदि स्ट्रिंग चर माने जाते हैं)

print{a:0,b:1}[a]

स्ट्रिंग को दो घटनाओं पर aऔर हार्ड bकोट्स से घिरे होने की एक घटना पर कोडित किया जाना चाहिए ।

aऔर bस्ट्रिंग्स के लिए प्रारंभिक-प्रारंभिक होना चाहिए।


अजगर का खोल, ९

(+ 3 यदि स्ट्रिंग चर माने जाते हैं)

{a:0,b:1}[a]

खोल में आउटपुट

>>> a = 'string'
>>> b = 'string'
>>> {a:0,b:1}[a]
1
>>> a = 'string'
>>> b = 'stringgg'
>>> {a:0,b:1}[a]
0
>>> {'string':0,'string':1}['string']
1
>>> {'stringggg':0,'string':1}['stringggg']
0
>>> 

व्याख्या

पहली और दूसरी स्ट्रिंग की कुंजी के साथ एक तानाशाही (हैश टेबल) बनाता है। यदि दूसरा स्ट्रिंग समान है, तो पहले का मान दूसरे के स्थान पर है। अंत में, हम पहली कुंजी का मूल्य प्रिंट करते हैं।

EDIT: OP ने गलत / सत्य के साथ-साथ प्रारंभिक-आरंभिक चर का उपयोग करने के बजाय 0/1 की अनुमति दी।


@manatwork Golfscript और पर्ल का उपयोग नीचे 0/1, क्या मैं उसका उपयोग नहीं कर सकता?
user80551

@manatwork Done
user80551

मैं आपके दूसरे समाधान के लिए 13 के बजाय 16 की गिनती कर रहा हूं।
अभिजीत

@ अभिजीत aऔर bशामिल नहीं हैं, स्ट्रिंग्स को हार्ड-कोड किया जाना चाहिए, यही कारण है कि मैंने + 2 * लेन (str1) + लेन (str2) + 6 (')
जोड़ा

चतुरता के लिए +1 लेकिन यह अब तक सबसे छोटा नहीं है;)
हिमस्खलन

20

पायथन ( 17 11):

b in a in b

(जाँच करता है कि अगर बी में निहित है और ए बी में निहित है, अगर वह कोड से स्पष्ट नहीं था।)

वैकल्पिक अजगर: ( 8 7)

टॉम वेर्लस्ट के समाधान से प्राप्त:

b in[a]

बोनस: यह किसी भी प्रकार के लिए काम करता है।

संपादित करें:

एक सेकंड रुको, बस यह पढ़ें कि आप सीधे स्ट्रिंग्स में भी प्रोग्राम कर सकते हैं, और उद्धरणों को गिनने की ज़रूरत नहीं है ... (या कम से कम, कि गोल्फस्पार्ट क्या करता है)। तो ... गोल्फ के साथ बराबर पर पायथन? अरे बाप रे!

वैकल्पिक वैकल्पिक पायथन ( 5 4):

(साभार क्लाउडी)

"string"in["string"]

मूल:

"string" in["string"]

वैकल्पिक वैकल्पिक वैकल्पिक Bendy-ruly अजगर (2):

"string"is"string"

तुलना कीवर्ड के बारे में कुछ नहीं कहा गया था (यह एक गंभीर सबमिशन नहीं है, बस मुझे कुछ हुआ ...)


2
आप उपयोग कर सकते हैं b in a in b। यह आवश्यक नहीं है ...
जॉर्ज


आप के बीच सफेद स्थान को निकाल द्वारा सात वर्ण के लिए नीचे यह मिल सकता है inऔर [a]। यानी b in[a]काम करना चाहिए।
user3002473

ओह, वह नहीं जानता था। धन्यवाद :)
ıʇǝɥʇuʎs

प्रभावशाली! यह भी नहीं पता था कि
विलेम

14

जावास्क्रिप्ट, ११ १०

स्ट्रिंग्स को ए और बी में संग्रहीत किया जाना है।

!(a>b|a<b)

संपादित करें: इंगित करने के लिए डैनी का धन्यवाद, |इसके बजाय पर्याप्त है||


5
नहीं, मैं ऑपरेटरों से अधिक और कम उपयोग कर रहा हूं। प्रतियोगिता में उन लोगों को मना नहीं किया गया था।
एडम स्जाबो

2
+1। यह कई अन्य भाषाओं में भी समान रूप से काम करने वाला है।

3
मैं गलत हो सकता हूं लेकिन क्या आप एक को नहीं हटा सकते |?
डैनी

3
निश्चित रूप से एक नियम निरीक्षण - तुलना कार्यों पर प्रतिबंध लगा दिया जाता है, क्योंकि समानता और असमानता ऑपरेटर हैं , लेकिन तुलना ऑपरेटरों का उल्लेख नहीं किया गया है।
user2357112

2
@philcolbourn हां, कल नियम बदले गए लेकिन जवाब 2 दिन पुराना है।
बकुरीउ


8

अजगर - 11 (बिना तार के)

>>> a = 'ss'
>>> b = 's'
>>> a in b in a
False

उसी भावना में: a<=b<=aजो केवल 7 वर्ण है। हालांकि मुझे नहीं पता कि तुलना <="असमानता" मानी जाएगी या नहीं । सवाल से यह प्रतीत होता है कि कोई भी तुलना जो समानता की जांच नहीं है, ठीक है, जो अनुमति देगा <=
बकुरीउ

हाँ, एक अच्छा @ @Bakuriu, और मैं सहमत हूँ, यह पूरी तरह से स्पष्ट नहीं है जब नियमों का उल्लंघन किया जाता है या नहीं। 'इन' सब के बाद भी एक समान विवरण कैसे होता है।
विलेम

6

GolfScript (5 वर्ण)

'string1''string1'].&,(

PHP संदर्भ कार्यान्वयन के बहुत सीधे बंदरगाह। 0स्टैक पर पत्तियां (= झूठी) यदि स्ट्रिंग्स समान हैं, या 1(= सच) यदि वे अलग हैं।


मेरे लिए काम नहीं करता है: 1यदि स्ट्रिंग समान हैं, और 2यदि वे अलग हैं। 'string1''string1'].&,1&कार्य
guy777

@ guy777, यह मानता है कि स्टैक शुरू में खाली है। सवाल बल्कि कार्यक्रम के टुकड़े पर अस्पष्ट है। आप शायद इसे पूरे कार्यक्रम के रूप में परख रहे हैं और स्टड से स्टैक पर एक खाली स्ट्रिंग के साथ शुरू कर रहे हैं।
पीटर टेलर

5

जावास्क्रिप्ट (45 बाइट्स):

यहाँ जावास्क्रिप्ट में एक और समाधान है।

var a='string',b='string',c=!a.replace(b,'');

अंतरिक्ष महत्वपूर्ण है।

cहोना चाहिए true


केवल !a.replace(b,'') गिना जाता है। तो चरित्र गणना 16 होनी चाहिए। वास्तव में, कुछ लोग इसे 14 भी गिनते हैं, क्योंकि आप सीधे स्ट्रिंग निर्दिष्ट कर सकते हैं।
n --h'a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

5

सी ++, 63 58 56

const char* a = "string";
const char* b = "string";
int main(){while(*a**b*!(*a^*b))++a,++b;return!(*a^*b);}

2
आप के autoबजाय के साथ दूर हो सकता है const char*?
बादो

मुझे लगता है कि हां, लेकिन जब से नियम कहता है कि स्ट्रिंग चर को उस वर्ण गणना की ओर नहीं गिना जाता है जो मैंने उन्हें परेशान नहीं किया था।
मट्टनवपोर्ट

क्या आप वेतन वृद्धि को परीक्षण के दौरान मोड़ सकते हैं और शरीर को खाली छोड़ सकते हैं? और अगर आप c ++ के बजाय c के लिए जाते हैं, तो शुरुआत में int हटा दें।
ओरियन

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

3

कोरुटिल्स: यूनीक -ड

बस अपने दो तारों को एक पाइप के मानक इनपुट के रूप में दर्ज करें और uniq -d | grep -q .कुछ भी नहीं छापेंगे, लेकिन सफलता या त्रुटि का वापसी मूल्य होगा। यदि आप बूलियन प्रिंट करना चाहते हैं, तो बस के साथ बदलेंuniq -d | grep -c .

कितने वर्ण हैं? मैं तुम्हें गिनता हूं; uniq -d|grep -q .अतिरिक्त स्थानों के साथ इसमें 17 वर्ण नहीं हैं, लेकिन चूंकि पूरी नौकरी uniq द्वारा की जाती है, इसलिए मैं कहूंगा कि यह समाधान एक 0-चरित्र वाला ... uniqअपनी भाषा में है!

वास्तव में, uniq -dएक लाइन प्रिंट करेगा अगर दो तार समान हैं, और कुछ भी नहीं अगर अलग हैं।


3

स्ट्रिंग्स को ए और बी में संग्रहीत किया जाना है। अगर है भी तो काम नहीं करेगा null

सी #, 53

string.IsNullOrEmpty(a.Replace(b,"")+b.Replace(a,""))

सी #, 28

a.Contains(b)&&b.Contains(a)

3

PHP - 49 अक्षर

!(strlen($a)^strlen($b)|strlen(trim($a^$b,"\0")))

इस काम की तरह कुछ नहीं कर सकता है: !strlen(str_replace($a,'',$b));अगर दो तार समान हैं तो इसे 1 वापस करना चाहिए?
दामिर कासिपोविक

@ D.Kasipovic दिलचस्प, लेकिन मुझे लगता है कि यह विफल रहता है $a == 'foo'और $b = 'foofoo':)
जैक

यह सच है कि इसके बारे में कैसे, यह एक की जगह सीमा !strlen(preg_replace("/{$a}/", '', $b, 1));और 45 वर्ण है?
दामिर कासिपोविक

मुझे लगता है कि आप इसके बजाय एंकरों का उपयोग कर सकते हैं, लेकिन इससे भी महत्वपूर्ण बात यह है कि इसके लिए preg_quote () की आवश्यकता होगी :)
जैक

3

एपीएल ( 8 9)

अद्यतन: पुराना एक अलग लंबाई के तारों के लिए काम नहीं करता है।

{∧/∊⌿↑⍺⍵}
  • ↑⍺⍵: रिक्त स्थान के साथ रिक्त स्थान को भरते हुए, पहली पंक्ति पर और दूसरी पंक्ति पर एक मैट्रिक्स बनाएं ।
  • ∊⌿: प्रत्येक कॉलम के लिए, देखें कि ऊपरी पंक्ति में निचली पंक्ति (पुराने संस्करण में) है या नहीं।
  • ∧/: andसभी मूल्यों की तार्किकता लें ।

पुराना वाला:

{∧/⍺∊¨⍵}
  • ⍺∊¨⍵: में तत्वों की प्रत्येक संयोजन के लिए और , यदि से तत्व से तत्व शामिल । चूँकि एक स्ट्रिंग में ये सभी एकल वर्ण होंगे, और एक स्ट्रिंग में ही शामिल है, यह मूल रूप से प्रत्येक जोड़ी के पात्रों की तुलना कर रहा है।
  • ∧/: तार्किक और सभी मूल्यों को लें (यदि सभी वर्ण मेल खाते हैं, तो तार बराबर हैं)

3

अजगर - १२

not({a}-{b})

यह समाधान सेट का उपयोग करता है। समान सेटों को घटाकर एक खाली सेट का परिणाम होगा, जिसमें गलत मूल्य का बूलियन मूल्य है। कि एक और बी बराबर तार होने के लिए एक सही मूल्य में परिणाम होगा नकारात्मक।

>>> a="string1"
>>> b="string2"
>>> not({a}-{b})
False

>>> a="string"
>>> b="string"
>>> not({a}-{b})
True

संपादित करें: अनावश्यक व्हाट्सएप को इंगित करने के लिए पीटर टेलर का धन्यवाद।


यह किस आउटपुट के लिए देता है a="s", b="ss"?
पीटर टेलर

@PeterTaylor: चूंकि "s"!="ss", यह आउटपुट करेगा False। केस संवेदनशीलता भी संरक्षित है। यह काम भी करता है a="", b="s"। कोड सेट करने के लिए स्ट्रिंग्स को कनवर्ट नहीं करता है, लेकिन स्ट्रिंग्स युक्त सेट बनाता है।
वैरिकस

आह, के {}रूप में ही नहीं है set()। व्हॉट्सएप को हटाकर आप 1 char बचा सकते हैं।
पीटर टेलर

@PeterTaylor: अनावश्यक व्हाट्सएप को इंगित करने के लिए धन्यवाद। {a}के बराबर है set([a])
वैरीकस

कैसे के बारे में not {a}-{b}?
विंस्टन इवर्ट

3

सी - 62

e(char*p,char*q){for(;*p&*q&&!(*p^*q);q++,p++);return!(*p^*q);}

का परीक्षण किया। के रूप में बुलाओe(str1, str2)

यह सोचने के लिए आओ, यदि आप गिनती नहीं करते हैं char*p,char*q, जो केवल उचित लगता है, तो यह केवल 49 बाइट्स है :)


साइट पर आपका स्वागत है! कोड-गोल्फ चुनौतियों के लिए, हम आपको अपने कोड से उतने बाइट्स ट्रिम करने के लिए प्रोत्साहित करते हैं, और अपने उत्तर हेडर में बाइट काउंट पोस्ट करते हैं। कुछ अच्छे विचारों के लिए सी धागे में गोल्फ के लिए युक्तियाँ देखें ।
जोनाथन वान मैट्रे

आप वास्तव में जरूरत नहीं है npऔर nq। एक लूप करेगा, क्योंकि यदि आप एक स्ट्रिंग के अंत तक पहुंचते हैं तो दूसरे से पहले उनका एक अलग मूल्य होगा।
पीटर टेलर

धन्यवाद। मुझे लगता है कि। मैं अपने छोटे संस्करण (ऊपर) पर काम कर रहा था। यह देखने के लिए कि क्या मैं इसे और छोटा कर सकता हूं।
एम्मेट

*p&*qलूप को बहुत जल्दी बंद कर सकते हैं (उदाहरण के लिए '0'&'A'==0)
ugoren

@ यूगोरन: यदि *p=='0'और *q=='A', हम चाहते हैं कि लूप जल्दी बंद हो जाए, क्योंकि हम जानते हैं कि तार बराबर नहीं हैं।
एम्मेट

2

हास्केल - 9

elem a[b]

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


2

जावा - 162 147 वर्ण

विचार प्रत्येक बाइट के अंतर की तुलना करने के लिए है, एक ही बाइट में अंतर होगा 0. java.lang.ArrayIndexOutOfBoundsExceptionबाइट्स अलग हैं (नकारात्मक सूचकांक तक पहुंचने की कोशिश) या जब तार अलग-अलग लंबाई के होते हैं, तो कार्यक्रम के लिए फेंक देगा । यह अपवाद को पकड़ लेगा और 0 (स्ट्रिंग्स न के बराबर), या 1 अन्यथा वापस लौटाएगा (स्ट्रिंग्स बराबर)।

दबा हुआ:

String a = "12345";
String b = "12345";
byte[]x=a.getBytes(),y=b.getBytes();int z,i=a.length()-b.length();try{for(byte d:x){z=d-y[i];z=x[-z*z];i++;}}catch(Exception e){return 0;}return 1;

सामान्य:

String a = "12345";
String b = "12345";
byte[] byteArrA = a.getBytes();
byte[] byteArrB = b.getBytes();

int byteDifference = 0;
int i = a.length() - b.length();

try {
    for (byte aByte : byteArrA) {
        byteDifference = aByte - byteArrB[i];
        byteDifference = byteArrA[-byteDifference*byteDifference];
        i++;
    }
} catch (Exception e){
    return 0;
}

return 1;

तुलना संचालक लूप में मौजूद हैं।
ζ--

शुक्रिया @hexafraction, मैंने उन्हें शामिल न करने के लिए अद्यतन जवाब दिया।
हूपर हंटर

2

पीएचपी

    $string = 'string';
    isset( ${'string'} );

इस लिपि की कोई उपयोगिता नहीं हो सकती है, लेकिन कम से कम यह तार की तुलना करने का एक तरीका प्रदान करता है।

पीएचपी

मौसी एक:

    $string = 'something';
    $text   = 'something';
    return count( array( $string => 1 , $text => 1 ) ) % 2;

1
वाह बहुत प्यारा। और इसे इस तरह से करना किसी भी स्ट्रिंग (रिक्त स्थान और यूनिकोड के साथ) का उपयोग करना संभव बना सकता है।
डेविड चेन

2

प्रस्तावना 7

e(A,A).

यह Prolog में 2 तर्कों को एकीकृत करने के लिए Prolog में पैटर्न मिलान सुविधा का उपयोग करता है, जो कि अनबाउंड वैरिएबल नहीं होने पर समान रूप से समानता के लिए परीक्षण करता है

नमूना उपयोग:

?- e("abcd", "Abcd").
false.

?- e("abcd", "abcd").
true.

तकनीकी रूप से, इस समाधान का व्यवहार एकीकरण ऑपरेटर से है =/2, बजाय इसके ==/2, जो शब्द की समतुल्यता की जाँच करता है। अंतर दिखाता है जब अनबाउंड चर शामिल होते हैं। इस समाधान में, जब अनबाउंड वैरिएबल की आपूर्ति की जाती है, trueतो एकीकरण सफल होने पर वापस आ जाएगा । तुलना में, ==/2एकीकरण के बिना शब्द के आदेश की तुलना करेगा।


2

PHP, 21

यह चर चर का उपयोग करके काम कर रहा है।

$$a=$b;!!$$b;

या, अगर आपको इसकी आवश्यकता नहीं है कि यह बूल है

$$a=$b;$$b;

संपादित करें : मैं उस मामले को संभालना भूल गया जहां आप दो खाली तारों की तुलना करने की कोशिश करते हैं, इसलिए अब कोड है

$$a=$b;!($a.$b)||$$b;

जो कि 21 वर्ण है।


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

दो समस्याएं: 1. "0" और "" की तुलना करते समय सही रिटर्न। 2. जब $ b एक मौजूदा वैरिएबल (करंट सिंबल टेबल में) का मान रखता है, जो कि वैल्यू को सही करता है (जैसे "GLOBALS" या "स्कोवर" ग्लोबल स्कोप में, या किसी भी स्कोप में "b"), यहां तक ​​कि जब $ b $ a के बराबर नहीं है।
PleaseStand

2

सीपीथॉन: 6

a is b

>>> a = 'string'
>>> b = 'string'
>>> c = 'STRING'
>>> a is b
True
>>> a is c
False

का उपयोग isस्पष्ट रूप से बहुत संदिग्ध है, लेकिन चूंकि यह कार्य विशेष रूप से कहता है कि हम संदर्भ समानता के बजाय मूल्य समानता का निर्धारण करते हैं, और isकेवल वस्तु पहचान की तुलना करते हैं, मुझे ऐसा लगता है कि यह प्रतिबंधित ऑपरेटरों की सूची में नहीं आ सकता है

बेशक वहाँ भी कुछ सवाल है कि क्या यह भी वैध है; यह मेरे सभी सिस्टमों पर काम करता है, लेकिन यह कार्यान्वयन-विशिष्ट है और संभवत: हमेशा काम नहीं करेगा यदि स्ट्रिंग्स को इंटरएक्टिव इंटरप्रेटर में हाथ से परिभाषित नहीं किया गया है।


2

गणितज्ञ / वुल्फ्राम भाषा, 15 बाइट्स

2 - Length[{a} ∪ {b}]

सुंदर आत्म व्याख्यात्मक, प्रत्येक स्ट्रिंग को एक सेट के रूप में सेट करता है, फिर दो सेटों के मिलन की लंबाई की जांच करता है। यदि स्ट्रिंग्स समान हैं, तो 1 रिटर्न देता है, अन्यथा रिटर्न 0. यदि मुझे "अलग" के लिए '2' और "1" के लिए '1' की अनुमति है, तो दो बाइट घटाएं।


2

C 342 गोल्फ

#include <stdio.h>
#define N 100
#define P(x) printf("%s\n",x)
#define G(x) gets(x)
void e(int x){x?P("y"):P("n");}
int main(){
char s[N],t[N];char *p,*q;int r=0; int n=0,m=0;int i=1;p=s,q=t;
if((p=G(s))&&(q=G(t))){while (*p){n+=i*(int)*p;m+=i*(int)*q;i++;p++;q++;if(!(*q)){break;}}
if(!*p&!*q){if(!(m-n)){r=1;}}e(r);}
return 0;
}

नोट: यदि आप उनके सुरक्षित तरीकों जैसे कि get_s का उपयोग नहीं करते हैं, तो Visual Studio शिकायत करता है। मिंगव के साथ कोडब्लॉक बिना किसी चेतावनी के संकलित करता है।

सी 655 गोल्फ नहीं है

कोड प्रत्येक तार के लिए वर्णों का भारित योग बनाता है। यदि अंतर शून्य है तो वे समान हैं, जिसमें 2 खाली तार शामिल हैं:

    #include <stdio.h>
#define N 100
#define P(x) printf(x)
#define G(x) gets_s(x)

void e(int x){ x ? P("equal\n") : P("not equal\n"); }
int main()
{
    char s[N], t[N];//words
    char *p = 0, *q = 0;
    int r = 0; //result 0=false
    int n=0, m=0; //weighted sums
    int i = 1; //char pos start at 1
    if ((p=gets_s(s)) &&
        (q=gets_s(t)))
    {
        while (*p)
        {
            n += i*(int)*p;
            m += i*(int)*q;
            i++;
            p++;
            q++;
            if (!(*q)){
                break;
            }
        }

        if (!*p && !*q){ //both same length strings
            if (!(m - n)){ r = 1; } //weighted sums are equal           
        }//else r=0, false=>not equal

        e(r);
    }
    else{
        P("error\n");
    }
    getchar();
}

अच्छा काम है, लेकिन आपको शायद इसे गोल्फ करना चाहिए।
होशो

मैं आपकी अधीनता संकलित नहीं कर सकता। मुझे "आर्किटेक्चर के लिए अपरिभाषित प्रतीक x86_64:" _gets_s ", से संदर्भित: _main in golf-310cf2.o ld: symbol (s) आर्किटेक्चर के लिए नहीं मिला x86_64"
स्टीफन मेल्विन

2

अजगर

यह लंबा है और यह सुंदर नहीं है, लेकिन यह मेरी पहली प्रविष्टि है!

def is_equal(a,b):
    i=0
    a,b=list(a),list(b)
    if len(a)>len(b):
        c=a
        lst=b
    else:
        c=b
        lst=a
    try:
        while i<len(c):
            for j in c:
                if j not in lst[i]:
                    return False
                i+=1
    except IndexError:
        return False
    return True

2

PHP, 68 बाइट्स

मुझे लगता है कि आप किसी भी तुलना ऑपरेटर का उपयोग करने के लिए निषिद्ध हैं । इसलिए <या >शामिल हैं।

बिटवाइज XOR का उपयोग करने का विचार है। विभिन्न भाषाओं में इस ऑपरेटर के पास अलग-अलग वाक्यविन्यास हैं - मैं PHP के लिए एक उदाहरण दिखाऊंगा। इसके साथ उपलब्ध है ^। दुर्भाग्य से, स्ट्रिंग के साथ इसका व्यवहार उतना अच्छा नहीं है जितना यह हो सकता है, इसलिए आपको पहले स्ट्रिंग की लंबाई की जांच करने की आवश्यकता होगी। ऐसा इसलिए है क्योंकि PHP में, xor लंबी स्ट्रिंग को छोटी स्ट्रिंग की लंबाई तक नीचे ले जाएगा।

अगली बात यह है कि तारों को ठीक से काम करना है, क्योंकि एक भी xorपरिणाम नहीं देगा, PHP में आगे के संचालन के लिए उपलब्ध है। इसलिए unpack()इस्तेमाल किया गया था। तो, कोड होगा:

return !(strlen($a)^strlen($b)) & !array_filter(unpack('c*', $a^$b))

यह विकल्प से अधिक लंबा है </ >लेकिन यह उनका उपयोग नहीं करेगा। इसके अलावा, महत्वपूर्ण बात यह है कि PHP प्रकार की बाजीगरी के बारे में है (इसलिए खाली सरणी डाली जाएगी false)। या शायद यह जांचने का एक सरल तरीका है कि किसी सरणी में गैर-शून्य सदस्य हैं ( संपादित करें : जब मैं इसे टाइप कर रहा हूं trim(), तो दूसरे उत्तर में अच्छी पकड़ है , इसलिए हम सरणी संचालन से छुटकारा पा सकते हैं)

लेकिन मेरा मानना ​​है कि भाषाएं हैं, जहां हम सिर्फ कर सकते हैं a ^ b- शाब्दिक रूप से, परिणाम प्राप्त करना। यदि यह 0(सभी परिणामी बाइट्स से इलाज किया गया है) - तो हमारे तार बराबर हैं । यह बहुत आसान है और की तुलना में अधिक आसान है <या >सामान।


1

grep 14 वर्ण

बेशक, मैं केवल grep कोड गिनता हूं; दो तार इनपुट में लगातार दो लाइनों (या तो एक पाइप या एक फ़ाइल या यहां तक ​​कि एक इंटरैक्टिव सत्र) पर हैं।

$ echo -e 'string\nstring' | grep -cPzo "(?s)^(\N*).\1$"
1
$ echo -e 'string\nstring1' | grep -cPzo "(?s)^(\N*).\1$"
0
$ echo -e 'string1\nstring' | grep -cPzo "(?s)^(\N*).\1$"
0


1

बहुत पागल तरीका है

बस मज़े के लिए, लेकिन अगर कोई इसके बारे में सोचता है, तो इसे विफल करने के कई तरीके विफल हो जाते हैं। अधिक से अधिक, यह मत भूलो कि तार खोल से बाहर हो जाएंगे।

$ echo -e 'string\nstring1' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true
$ echo -e 'string\nstring' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true
true
$ echo -e 'string1\nstring' | sed -e '1s/^/#define /' | cpp | sh 2>/dev/null && echo true

एक अच्छा काउंटर-उदाहरण "स्ट्रिंग" को पहले स्ट्रिंग और "आरएम -आरएफ /" के रूप में दूसरे स्ट्रिंग के रूप में तुलना कर रहा है; बस रूट के रूप में जांचें और देखें: यह "सच" कहेगा, हालांकि दोनों तार स्पष्ट रूप से समान नहीं हैं।


1

जावास्क्रिप्ट [18 बाइट्स]

(_={})[a]=1,!!_[b]

या

!!((_={})[a]=_)[b]

trueअगर a == bऔर falseअगर यह वापस आ जाएगा a =/= b। पीछे तर्क aएक संपत्ति के रूप में एक मूल्य बना रहा है और लौट रहा है 1या undefinedमामले में अगर bमूल्य की संपत्ति मौजूद है या उस वस्तु में मौजूद नहीं है।


नियम आपको लगता है कि सही या गलत का मूल्यांकन करता है, तो एक वस्तु लौटने की अनुमति कर रहे हैं का कहना है कि !!जरूरी नहीं है
James_pic

@James_pic हाँ, लेकिन अन्यथा यह वापस आ जाएगी 1या undefined(या वस्तु / undefinedदूसरे मामले के लिए)।
विसिओएन

मैंने नियमों की व्याख्या करते हुए कहा कि सत्य और झूठ के स्थान पर सत्य-वाई और झूठ-वाई मान क्या करेंगे, इसलिए मुझे लगता है कि 1 या अपरिभाषित पर्याप्त थे।
जेम्स_पिक

@James_pic मैं सिर्फ सुरक्षित पक्ष पर होना चाहता था :) यदि ऐसा है, तो 18-2 = 16 bytes
विसिओन

1

जावास्क्रिप्ट [15 बाइट्स]

![a].indexOf(b)

trueअगर a == bऔर falseअगर यह वापस आ जाएगा a =/= b। स्क्रिप्ट bउस सरणी के मान की तलाश कर रही है जो मान के एकल तत्व को रखता है a


1

सी - 86 83

main(int i,char**v){return*v[1]&!(*v[1]++^*v[2]++)?main(3,v):!(*--v[1]^*--v[2]);}

Obvioulsy सबसे छोटा नहीं है, लेकिन यह स्ट्रिंग चर के साथ काम नहीं करता है और इसके बजाय कंसोल से इनपुट के रूप में तार लेता है। इसके अलावा, मैं पुनरावर्ती मुख्य को पसंद करता हूं, भले ही यह स्पष्ट रूप से सबसे छोटा संस्करण न हो। लेकिन निश्चित रूप से कम से कम सलाह दी जाती है।


आपको कई ऑपरेटरों के आसपास रिक्त स्थान की आवश्यकता नहीं है। उदाहरण के लिए, के char** vरूप में लिखा जा सकता है char**v। कुछ अपवाद (जैसे 42 / *pointer) हैं, लेकिन ज्यादातर मामलों में विशेष पात्रों के पास रिक्त स्थान को सुरक्षित रूप से हटाया जा सकता है।
कोनराड बोरोस्की

और एक बहुत अधिक। आज शीर्ष पर नहीं है।
एसबीआई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.