Dizelerin eşit olup olmadığını belirleme


29

Göreviniz basit . Bir dize eşitlik operatörleri kullanılmadan diğer (değil adres, değer) (örneğin eşit olmadığını belirleyin ==, ===veya .equal()) ya da eşitsizlik ( !=, !==diğer diller için benzer) bir şey. Bu her yerde demek oluyor! Bu operatörleri kodun hiçbir yerinde kullanamazsınız. Bununla birlikte, !expdoğrudan karşılaştırmayı yapmadığınız gibi geçişleri kullanabilirsiniz exp != with something else.

Ayrıca, strcmp , strcasecmp , vb. Gibi fonksiyonlar kullanamazsınız .

Karşılaştırma operatörleri gelince ( >=, <=, >, <), onlar da vardır izin . Bazı cevapların bunu içerdiğinin farkındayım, ancak eşitlik operatörünü sınırlamayan daha fazla cevap görmek istiyorum.


PHP kullanan bir örnek gösterilmektedir:

<?php

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

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

return -count($tmp) + 2;

Dizelerin eşleşip eşleşmediğini belirtmek için basitçe doğru veya yanlış (veya dilde değerlendiren bir şeyi doğru veya yanlış gibi) döndürmeniz yeterlidir. İpler, yukarıdaki örnekte görüldüğü gibi kodlanmış olmalıdır. Teller golfde sayılmamalıdır, bu nedenle değişkeni elden önce bildirirseniz, bildirimi saymazsınız.


1
Sonuç çıktısı almak ya da sadece bir bool döndürmek için bir işlev yazmak gerekli midir? Eğer tam bir program yazmak gerekirse, Java ve C # gibi işleyen bir çalıştırılabilir dosya oluşturmak için (nispeten) önemli bir kazan plakası olan dillerde cevap verebilecek ya da ara verebilecek (bu, canlının doğasıdır, ancak bu zorluğun çok az yolu vardır) somut kurallar, yorum / seçim çok bırakarak). Ve ipleri nasıl alacağız? Sabit kodlama, STDIN'den okuma, komut satırı argümanları olarak mı iletilir?
Tony Ellis

Bu [kod-golf] veya [popülerlik yarışması] mı? İkisi de olamaz.
Gareth

Üzgünüm, her iki yorumu de yansıtmak için sorularımı değiştirdim.
David Chen

Yani eşitsizlik var mı?
user80551

Her biri birden fazla defa kodlanmış olacaksa, uzunluklarını saymalı mıyım?
user80551

Yanıtlar:


34

Python 49 45 18 22 15 14

(String değişkenleri dikkate alınırsa + 3)

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

Dize, iki vizite ave betrafına birer tırnak işareti geldiğinde kodlanmış olmalıdır .

ave bdizgelere önceden başlatılmalıdır.


Python kabuğu, 9

(String değişkenleri dikkate alınırsa + 3)

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

Kabuğa çıktı

>>> 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
>>> 

açıklama

Birinci ve ikinci dizenin anahtarı ile bir dikt (karma tablosu) oluşturur. İkinci dize aynıysa, ilk değer ikinci değerle değiştirilir. Son olarak, ilk anahtarın değerini yazdırıyoruz.

EDIT: OP, False / True yerine 0/1 olduğu ve önceden başlatılmış değişkenlerin kullanılmasına izin verdi.


@ manatwork Golfscript ve perl 0/1 kullanıyor, bunu kullanamıyorum?
user80551

@manatwork Tamamlandı
user80551

İkinci çözümünüz için 13 yerine 16 sayıyorum.
Abhijit

@Abhijit ave eklenmemesi bgereken, dizelerin orada kodlanmış olması gerekir, bu yüzden + 2 * len (str1) + len (str2) + 6 (')
user80551 12.03

Akıllılık için +1, ancak bu artık en kısa sürmüyor;)
avalancha

20

Piton ( 17 11):

b in a in b

(Kodda açık değilse, b'nin a ve a'nın b'de olup olmadığını kontrol eder.)

Alternatif piton: ( 8 7)

Tom Verelst'in Go çözümünden elde edildi:

b in[a]

Bonus: Bu herhangi bir tür için çalışır.

DÜZENLE:

Bir saniye bekleyin, sadece doğrudan dizelerde programlayabildiğinizi ve alıntıları saymak zorunda kalmayacağınızı okuyun ... (ya da en azından golfcript'in yaptığı şeyi). Yani ... Python golfscript ile eşit mi? Aman!

Alternatif alternatif Python ( 5 4):

(teşekkürler Claudiu)

"string"in["string"]

orijinal:

"string" in["string"]

Alternatif Alternatif Alternatif Bendy-ruly Python (2):

"string"is"string"

Karşılaştırma anahtar kelimeleri hakkında hiçbir şey söylenmedi (Bu ciddi bir sunum değil, sadece başıma gelen bir şey ...)


2
Kullanabilirsiniz b in a in b. Ve a gerekli değildir ...
George


inVe arasındaki boşlukları kaldırarak onu yedi karaktere çıkarabilirsiniz [a]. yani b in[a]çalışmalı.
user3002473, 13.03.2014

Oh, bunu bilmiyordum. Thanks :)
13ıʇǝɥʇuʎs

Etkileyici! Ayrıca bilmiyordum
Willem

14

JavaScript, 11 10

Dizelerin a ve b 'de saklanması gerekir.

!(a>b|a<b)

Düzenleme: işaret için teşekkürler Danny, |yerine yeterli||


5
Hayır, operatörlerden daha büyük ve daha az kullanıyorum. Bu yarışmada yasaklanmadı.
Adam Szabo

2
+1. Bu da diğer birçok dilde aynı şekilde çalışacak.
Arketipal Paul

3
Yanılıyor olabilirim ama birini çıkaramaz mısın |?
Danny

3
Kesinlikle bir kural gözetimi - karşılaştırma işlevleri , eşitlik ve eşitsizlik operatörleri gibi yasaklanmıştır , ancak karşılaştırma operatörleri belirtilmemiştir.
user2357112

2
@philcolbourn Evet, dün kurallar değişti ama cevap 2 gün eski.
Bakuriu


8

Python - 11 (dizeler olmadan)

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

Aynı ruhta: a<=b<=asadece 7 karakter. Yine de karşılaştırmanın <="eşitsizlik" olarak kabul edilip edilmeyeceğini bilmiyorum . Soruya bakıldığında, eşitlik kontrolü olmayan herhangi bir karşılaştırmanın tamam olduğu kabul edilir <=.
Bakuriu

evet, bu güzel bir tane @Bakuriu, ve katılıyorum, kurallar ihlal edildiğinde veya edilmediğinde tamamen net değil. Her şeyden önce 'in' nasıl eşit bir ifade içerdiği.
Willem

6

GolfScript (5 karakter)

'string1''string1'].&,(

PHP referans uygulamasının oldukça basit portu. 0Dizeler aynıysa yığın üzerinde (= false), farklı ise (= true) bırakır 1.


benim için işe yaramıyor: 1dize aynı ise ve 2farklıysa.'string1''string1'].&,1&çalışır
guy777

@ guy777, bu başlangıçta yığının boş olduğunu varsayar. Soru, program parçaları üzerinde belirsizdir. Muhtemelen bütün bir program olarak test ediyor ve stdin'den yığında boş bir dize ile başlıyorsunuz.
Peter Taylor,

5

Javascript (45 bayt):

İşte Javascript'te başka bir çözüm.

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

Alan önemlidir.

colmalı true.


Sadece !a.replace(b,'') sayılır. Böylece karakter sayısı 16 olmalıdır. Aslında, bazı insanlar doğrudan dize belirtebildiğiniz için 14 bile sayılır.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

5

C ++, 63 58 56

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

2
autoBunun yerine kaçabilir misin const char*?
aldo

Sanırım evet, ama kurallar dize değişkenlerinin karakter sayısına göre sayılmadığını söylediğinden beri, onları golf oynamak için uğraşmadım.
mattnewport

Artırma süresini teste katlayıp gövdeyi boş bırakabilir misiniz? Ve c ++ yerine c için giderseniz, int başından kaldırın.
orion

Abhijit'in C cevabında belirttiğim sondan sonra bir dizgeye ulaşma aynı hatayı çarpmadan artımları arada teste katlayarak karakter sayısını azaltmanın bir yolunu görmüyorum. Sadece her iki test de başarılı olursa a ve b değerini artırmak istersiniz (ne a ne b b boş sonlandırıcıyı göstermiyor ve a b'ye eşittir). Muhtemelen bunu geliştirmenin bir yolu var ama bulamadım!
mattnewport 13:14

3

coreutils: uniq -d

İki ipinizi bir borunun standart girişi olarak girin ve uniq -d | grep -q . hiçbir şey yazdırmaz, ancak başarı veya hata değeri döndürür. Boole yazdırmak istiyorsanız, sadeceuniq -d | grep -c .

Kaç karakter Saymana izin verdim; uniq -d|grep -q .fazladan boşluk bırakılmamış, içinde 17 karakter var, ancak tüm iş uniq tarafından gerçekleştirildiğinden, bu çözümün uniqkendi dilinde bir 0 karakterli olduğunu söyleyebilirim !

Aslında, uniq -diki satır aynıysa bir satır, farklı ise hiçbir şey yazmaz.


3

Dizelerin a ve b 'de saklanması gerekir. Öyle ya da olmaz null.

C #, 53

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

C #, 28

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

3

PHP - 49 karakter

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

Bunun gibi bir şey olamaz mıydı: !strlen(str_replace($a,'',$b));İki karakter eşitse, 1 döndürülmeli mi?
Damir Kasipovic

@ D.Kasipovic İlginç, ama bence başarısız $a == 'foo've $b = 'foofoo':)
Jack

Doğru, peki ya bu durumda, birebirini değiştirir !strlen(preg_replace("/{$a}/", '', $b, 1));ve 45 karakterdir?
Damir Kasipovic

Sanırım bunun yerine çapa kullanabiliyordunuz, ama daha önemlisi preg_quote () 'in de olmasını gerektiriyor :)
Jack

3

APL ( 8 9)

Güncelleme: eskisi farklı uzunluktaki dizeler için çalışmaz.

{∧/∊⌿↑⍺⍵}
  • ↑⍺⍵: boşlukları boşluklarla doldurmak için ilk satırda ve ikinci satırda bir matris yapın .
  • ∊⌿: Her sütun için, üst satırın alt satır içerip içermediğine bakın (eski sürümde olduğu gibi).
  • ∧/: andTüm değerlerin mantığını alın .

Eski olan:

{∧/⍺∊¨⍵}
  • ⍺∊¨⍵: Elemanların her kombinasyonu için ve gelen eleman olmadığını görmek gelen eleman içerir . Bir dizgede bunların tümü tek karakter olacağından ve bir dizgenin kendisini içerdiğinden, bu temelde her karakter çiftini karşılaştırmaktadır.
  • ∧/: mantıksal değeri ve tüm değerleri al (eğer tüm karakterler eşleşirse, dizeler eşittir)

3

Python - 12

not({a}-{b})

Bu çözüm kümeleri kullanır. Eşit kümelerin çıkarılması, Boole değeri False olan boş bir kümeye neden olur. Bunu reddetmek, a ve b için True değerinin eşit dizeler olmasına yol açacaktır.

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

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

Düzenleme: Gereksiz boşlukları gösterdiği için Peter Taylor'a teşekkürler.


Bu ne tür bir çıktı veriyor a="s", b="ss"?
Peter Taylor,

@PeterTaylor: O "s"!="ss"zaman, çıktı olacak False. Büyük / küçük harf duyarlılığı da korunur. Hatta için çalışıyor a="", b="s". Kod dizeleri kümelere dönüştürmez, dizeleri içeren kümeler oluşturur.
Varicus

Ah, {}aynı değil set(). Boşluğu kaldırarak 1 karakter kaydedebilirsiniz.
Peter Taylor,

@PeterTaylor: Gereksiz boşlukları gösterdiğiniz için teşekkür ederiz. {a}eşittir set([a]).
Varicus

Ne dersiniz not {a}-{b}?
Winston Ewert

3

C - 62

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

Test edilmiştir. Arae(str1, str2)

Bir düşünmeyin, eğer sayılmazsanız char*p,char*q , bu sadece adil görünüyor, sadece 49 bayt :)


Siteye Hoşgeldiniz! Code-golf zorlukları için, kodunuzdan olabildiğince çok bayt kırpmanızı ve bayt sayısını cevap başlığınıza eklemenizi öneririz. İyi fikirler için C'deki Golf İpuçlarına göz atın .
Jonathan Van Matre

Gerçekten ihtiyacın yok npve nq. Bir döngü yapacak, çünkü bir dizginin sonuna diğerinden önce ulaşırsanız farklı bir değeri olacaktır.
Peter Taylor

Teşekkürler. Bunu anlıyorum. Kısaltılmış versiyonum üzerinde çalışıyordum (yukarıda). Daha da kısaltabileceğimi görmek için geri dönüyorum.
Emmet

*p&*qdöngüyü çok erken durdurabilir (örn. '0'&'A'==0)
ugoren

@ugoren: Eğer *p=='0'& *q=='A', dizgelerin eşit olmadığını bildiğimiz için, döngünün erken durmasını istiyoruz .
Emmet

2

Haskell - 9

elem a[b]

Bunun, buradaki çoğu giriş gibi, yalnızca bir ifade olduğunu unutmayın. Bu bir Haskell programı değil.


2

Java - 162 147 karakter

Fikir, her bir baytın farkını karşılaştırmaktır, aynı baytlar 0 farkına sahip olacaktır java.lang.ArrayIndexOutOfBoundsException. İstisnayı yakalar ve 0 döndürür (dizeler eşit değil) veya aksi takdirde 1 döndürür (diziler eşit).

Sıkıştırılmış:

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;

Normal:

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;

Karşılaştırma operatörleri döngüde var.
ζ--

Teşekkür ederim @hexafraction, ben onları dahil etmeyecek şekilde cevap güncellendi.
Hopper Hunter

2

PHP

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

Bu betiğin herhangi bir faydası olmayabilir, ancak en azından bu dizeleri karşılaştırmanın bir yolunu sunar.

PHP

Bir tane daha:

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

1
Vay be çok güzel. Ve bu şekilde yapmak, herhangi bir string (boşluk ve unicode ile) kullanmayı mümkün kılabilir.
David Chen,

2

Prolog 7

e(A,A).

Bu, Prolog'daki kalıp eşleştirme özelliğini kullanarak 2 argümanı yordama eşleştirir, eşdeğer denkliği etkin biçimde sınar. sınırsız bir değişken olmadığında .

Örnek kullanım:

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

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

Teknik olarak konuşursak, bu çözümün davranışı, denklik terimini kontrol eden =/2değil , birleştirme operatörünün davranışıdır ==/2. Fark, sınırsız değişkenlerin ne zaman dahil olduğunu gösterir. Bu çözümde, sınırsız değişken tedarik trueedildiğinde, birleştirme başarılı olduğunda yüklem geri dönecektir . Karşılaştırma yaparken, ==/2birleşme olmadan vade sırasını karşılaştırır.


2

PHP, 21

Bu, değişken dolaylı kullanarak iş yapıyor.

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

Veya, bool olması gerekmiyorsa

$$a=$b;$$b;

EDIT : İki boş dizgiyi karşılaştırmaya çalıştığınız durumu ele almayı unuttum.

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

ki 21 karakter.


Bunun geçerli tanımlayıcı olmayan karakter dizileri verildiğinde hata vermesini beklerdim, ama benim için sürpriz değil.
Peter Taylor,

İki problem: 1. "0" ve "" karşılaştırılırken true değerini döndürür. 2. $ b, global kapsamda true değerine (örneğin "GLOBALS" veya "_SERVER" veya herhangi bir kapsamda "b") sahip olan (mevcut sembol tablosunda) mevcut bir değişkenin adıysa, true değerini döndürür, $ b $ a'ya eşit olmadığı zaman bile.
Lütfen

2

CPython: 6

a is b

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

Kullanımı isAçıkçası oldukça şüphelidir ama görev özellikle biz değer eşitliğini ziyade referans eşitlik belirlemek için olduğunuzu sesleniyor, ve o zamandan beri issadece nesne kimliğini karşılaştırır o gibi hissediyorum olabilir yasaklı operatörlerin listesi altına düşmemesi gerekmektedir.

Elbette bunun geçerli olup olmadığı konusunda da bazı sorular var; tüm sistemlerim üzerinde çalışır, ancak uygulamaya özeldir ve dizeler etkileşimli yorumlayıcıda el ile tanımlanmadıysa, muhtemelen her zaman çalışmaz.


2

Mathematica / Wolfram Dili, 15 bayt

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

Oldukça açıklayıcı, her dizeyi bir küme olarak ayarlar, sonra iki kümenin birleşiminin uzunluğunu kontrol eder. Dizeler aynıysa, 1, aksi takdirde 0 döndürür. "Farklı" için "2" ve "aynı" için "1" döndürürsem, iki bayt çıkarın.


2

C 342 golf oynadı

#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;
}

Not: Güvenli yöntemlerini kullanmazsanız Visual Studio şikayet eder, örneğin gets_s. MINGW ile CodeBlocks uyarıları olmadan derler.

C 655 golf oynamıyor

Kod, her bir dize için ağırlıklı toplam sayısı oluşturur. Fark sıfırsa, 2 boş dize dahil olmak üzere eşittir:

    #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();
}

Güzel iş, ama muhtemelen golf oynamalısın.
Hosch250

Gönderinizi derleyemiyorum. "X86_64 mimarisinin tanımsız sembolleri:" _gets_s "ifadesini alıyorum: şunlardan başvurulan: _main golf-310cf2.o içinde ld: x86_64 mimarisi için simge (ler) bulunamadı
Stephen Melvin

2

piton

Uzun ve güzel değil, ama bu benim ilk girişim!

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 Bayt

Ben kullanmak yasak varsayıyorum herhangi karşılaştırma operatörleri. Öyle <ya >da dahil edilir.

Fikir, bit yönünde XOR kullanmaktır. Farklı dillerde bu operatör farklı bir sözdizimine sahiptir - PHP için bir örnek göstereceğim. Orada mevcut ^. Ne yazık ki, dizelerle olan davranışı olabileceği kadar iyi değildir, bu nedenle daha önce dize uzunluğunu kontrol etmeniz gerekir. Bunun sebebi PHP'de xor'un daha uzun olan dizgiyi daha kısa olan dizgenin uzunluğuna kadar soyacağıdır.

Bir sonraki şey dizgilerle düzgün çalışmaktır, çünkü tek xorbir sonuç PHP'de daha fazla işlem yapmak için bir sonuç vermeyecektir. Bu yüzden unpack()kullanıldı. Yani, kod şöyle olurdu:

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

Seçenekten daha uzun </ >ancak onları kullanmaz. Ayrıca, önemli olan PHP tipi hokkabazlık ile ilgilidir (bu yüzden boş diziye yönlendirileceksiniz false). Veya bir dizinin sıfır olmayan üye içerip içermediğini kontrol etmenin daha basit bir yolu vardır ( Düzenleme : Bunu yazarken, trim()başka bir cevapta iyi bir yakalama var , böylece dizi işlemlerinden kurtulabiliriz)

Ancak a ^ btam anlamıyla yapabileceğimiz diller olduğuna inanıyorum . Eğer 0(sonuçtaki tüm baytlardan işlem görmüşse) - o zaman dizgilerimiz eşittir . Bu çok kolay ve çok daha fazla basit <veya >şeyler.


1

grep 14 karakter

Tabii ki, sadece grep kodunu sayıyorum; iki dize girişteki iki ardışık çizgidedir (bir boru veya bir dosya veya etkileşimli bir oturum bile).

$ 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

Matlab: 12 karakter (dizeler değişken olduktan sonra)

~(x*x'-y*y')

Atamaları içeren kod şöyle olacaktır:

x='string1'
y='string2'
~(x*x'-y*y')

1

Çok çılgın yol

Sadece eğlence için, ama eğer biri düşünürse, başarısız olmanın birçok yolu. Dahası, iplerin kabuktan YÜRÜlacağını unutmayın.

$ 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

A good counter-example is comparing "string" as first string and "rm -Rf /" as a second string; just check as root and see: it will say "true" though both strings obviously aren't the same.


1

JavaScript [18 bytes]

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

OR

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

This will return true if a == b and false if a =/= b. The logic behind is creating an object with a value of a as a property and returning 1 or undefined in case if a property of b value exists or doesn't exist in that object.


The rules say you're allowed to return an object that evaluates to true or false, so the !! is not necessary
James_pic

@James_pic Yeah, but otherwise it will return 1 or undefined (or object/undefined for the second case).
VisioN

I interpreted the rules as saying that truth-y and false-y values would do in place of true and false, so I'd think that 1 or undefined were good enough.
James_pic

@James_pic I just wanted to be on the safe side :) If so, then 18-2 = 16 bytes.
VisioN

1

JavaScript [15 bytes]

![a].indexOf(b)

This will return true if a == b and false if a =/= b. The script is looking for the value of b in the array that holds a single element of value of a.


1

C - 86 83

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

Obvioulsy not the shortest, but this doesn't work with string variables and instead takes the strings as input from the console. Also, I sort of like the recursive main, even if it's obviously not the shortest version. But certainly the least advisable.


You don't need spaces around many operators. For example, char** v can be written as char**v. There are some exceptions (like 42 / *pointer), but in most cases spaces can be safely removed near special characters.
Konrad Borowski

And an apersand too much. Not on top today.
SBI
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.