Determinar si las cadenas son iguales

29

Tu tarea es simple . Determinar si una cadena es igual a la otra (no la dirección, el valor) sin el uso de operadores de igualdad (como por ejemplo ==, ===o .equal()) o desigualdad ( !=, !==) algo similar para otros idiomas. Esto significa en cualquier lugar! No puede usar estos operadores en ninguna parte del código. Sin embargo, puede utilizar conmutadores, como !expno comparar directamente el exp != with something else.

Además, no puede usar ninguna función como strcmp , strcasecmp , etc.

En cuanto a los operadores de comparación ( >=, <=, >, <), también se desecharon . Me doy cuenta de que algunas respuestas incluyen esto, pero realmente me gustaría ver más respuestas que no limitan con el operador de igualdad.


Se muestra un ejemplo usando PHP:

<?php

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

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

return -count($tmp) + 2;

Simplemente devuelva verdadero o falso (o algo que se evalúe en el lenguaje como verdadero o falso como 0 o 1) para indicar si las cadenas coinciden. Las cadenas deben estar codificadas como se ve en el ejemplo anterior. Las cadenas no deben contarse en el golf, por lo que si declara la variable de antemano, no cuente la declaración.

David Chen
fuente
1
¿Es necesario generar el resultado, o simplemente escribir una función para devolver un bool? Si se requiere escribir un programa completo, eso podría hacer o deshacer respuestas en lenguajes con (relativamente) repetitivo para crear un ejecutable funcional como Java y C # (tal es la naturaleza de la bestia, pero este desafío tiene poco en el camino de pautas concretas, dejando mucho a la interpretación / elección). ¿Y cómo vamos a tomar los hilos? ¿Codificación, lectura de STDIN, pasar como argumentos de línea de comandos?
Tony Ellis
¿Es esto [code-golf] o un [concurso de popularidad]? No pueden ser los dos.
Gareth
Lo sentimos, he modificado mis preguntas para reflejar ambos comentarios.
David Chen
Entonces, ¿se permite la desigualdad?
user80551
Si las cadenas deben codificarse más de una vez (cada una), ¿tengo que contar su longitud?
user80551

Respuestas:

34

Pitón 49 45 18 22 15 14

(+ 3 si se consideran variables de cadena)

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

La cadena debe estar codificada en las dos apariciones ay una de blas comillas.

ay bdebe preinicializarse a las cadenas.


Python shell, 9

(+ 3 si se consideran variables de cadena)

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

Salida en shell

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

Explicación

Crea un dict (tabla hash) con la clave de la primera y segunda cadena. Si la segunda cadena es la misma, el valor de la primera se reemplaza por el de la segunda. Finalmente, imprimimos el valor de la primera clave.

EDITAR: OP permitió 0/1 en lugar de Falso / Verdadero, además de usar variables preinicializadas.

usuario80551
fuente
@manatwork Golfscript y Perl a continuación usan 0/1, ¿no puedo usar eso?
user80551
@manatwork Hecho
usuario80551
Estoy contando 16 en lugar de 13, para su segunda solución.
Abhijit
@Abhijit the ay bno se deben incluir, las cadenas deben estar codificadas allí, por eso agregué + 2 * len (str1) + len (str2) + 6 (')
user80551
+1 para clevernesse pero esto ya no es el más corto;)
avalancha
20

Python ( 17 11):

b in a in b

(Comprueba si b está contenido en a y a está contenido en b, si eso no estaba claro en el código).

Pitón alternativa: ( 8 7)

derivado de la solución Go de Tom Verelst:

b in[a]

Bonificación: esto funciona para cualquier tipo.

EDITAR:

Espere un segundo, solo lea que también puede programar directamente en las cadenas, y no tiene que contar citas ... (o al menos, eso es lo que hace golfscript). Entonces ... ¿Python a la par con golfscript? ¡Oh mi!

Alternativa alternativa a Python ( 5 4):

(gracias Claudiu)

"string"in["string"]

original:

"string" in["string"]

Alternativa Alternativa Alternativa Bendy-ruly Python (2):

"string"is"string"

No se dijo nada sobre las palabras clave de comparación (esto no es una presentación seria, solo algo que se me ocurrió ...)

ɐɔıʇǝɥʇuʎs
fuente
2
Podrías usar b in a in b. El y a no es necesario ...
George
2
Ahora es un duplicado de la respuesta de willem .
manatwork
Puede reducirlo a siete caracteres eliminando el espacio en blanco entre iny [a]. es decir, b in[a]debería funcionar.
user3002473
Oh, no lo sabia. Gracias :)
Marıʇǝɥʇuʎs
¡Impresionante! Tampoco sabía eso
Willem
14

JavaScript, 11 10

Las cadenas deben almacenarse en ay b.

!(a>b|a<b)

Editar: gracias Danny por señalar, |es suficiente en lugar de||

Adam Szabo
fuente
55
No, estoy usando operadores mayores y menores que. Esos no estaban prohibidos en el concurso.
Adam Szabo
2
+1. Esto también funcionará de manera idéntica en muchos otros idiomas.
El arquetípico Paul
3
Puedo estar equivocado, pero ¿no puedes eliminar uno |?
Danny
3
Definitivamente una supervisión de reglas: las funciones de comparación están prohibidas, al igual que los operadores de igualdad y desigualdad , pero no se mencionan los operadores de comparación .
user2357112 es compatible con Monica
2
@philcolbourn Sí, las reglas cambiaron ayer pero la respuesta tiene 2 días.
Bakuriu
8

Ruby, 11

s = 'string'
t = 'string'
!!s[t]&t[s]

Comprueba si cada cadena está contenida dentro de la otra.

histocrat
fuente
1
!(a<b||b<a)sería lo mismo ...
David Herrmann
excepto que no puedes usar <>
philcolbourn
8

Python - 11 (sin las cuerdas)

>>> a = 'ss'
>>> b = 's'
>>> a in b in a
False
Willem
fuente
En el mismo espíritu: a<=b<=aque tiene solo 7 caracteres. Aunque no sé si la comparación <=se consideraría una "desigualdad". De la pregunta parece que cualquier comparación que no sea un control de igualdad está bien, lo que permitiría <=.
Bakuriu
Sí, esa es una buena @Bakuriu, y estoy de acuerdo, no está del todo claro cuándo se violan o no las reglas. 'in' después de todo también cómo contiene una declaración igual.
Willem
6

GolfScript (5 caracteres)

'string1''string1'].&,(

Puerto bastante sencillo de la implementación de referencia PHP. Deja 0(= falso) en la pila si las cadenas son las mismas, o 1(= verdadero) si son diferentes.

Peter Taylor
fuente
no funciona para mí: 1si la cadena es la misma y 2si son diferentes. 'string1''string1'].&,1&funciona
guy777
@ guy777, esto supone que la pila está vacía al principio. La pregunta es bastante vaga sobre fragmentos de programas. Probablemente lo esté probando como un programa completo y comience con una cadena vacía en la pila desde stdin.
Peter Taylor
5

Javascript (45 bytes):

Aquí hay otra solución en Javascript.

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

El espacio es importante.

cdebería ser true.

Ismael Miguel
fuente
Solo !a.replace(b,'') se cuenta. Por lo tanto, el recuento de caracteres debe ser 16. En realidad, algunas personas incluso lo cuentan como 14, ya que puede especificar la cadena directamente.
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);}
Mattnewport
fuente
2
¿Podrías salirte con la tuya en autolugar de const char*?
aldo
Creo que sí, pero como las reglas dicen que las variables de cadena no se cuentan para el recuento de caracteres, no me molesté en jugarlas.
mattnewport
¿Podría doblar incrementos en la prueba while y dejar el cuerpo vacío? Y si elige c en lugar de c ++, elimine int al principio.
orion
No veo ninguna forma de reducir el recuento de caracteres al plegar los incrementos en la prueba while sin tocar el mismo error de acceder a una cadena más allá del final que señalé en la respuesta C de Abhijit. Solo desea incrementar ayb si ambas pruebas pasan (ni a ni b apuntan al terminador nulo y a es igual a b). Probablemente haya una forma de mejorar esto, ¡pero no he podido encontrarlo!
mattnewport
3

coreutils: uniq -d

Simplemente ingrese sus dos cadenas como la entrada estándar de una tubería y uniq -d | grep -q .no imprimirá nada, pero tendrá un valor de retorno de éxito o error. Si desea imprimir el booleano, simplemente reemplace conuniq -d | grep -c .

Cuantos personajes Te dejo contar; uniq -d|grep -q .sin espacios adicionales tiene 17 caracteres, pero dado que todo el trabajo lo realiza uniq, diría que esta solución es de 0 caracteres en ... ¡ uniqpropio idioma!

En realidad, uniq -dimprimirá una línea si las dos cadenas son idénticas y nada si son diferentes.

Thomas Baruchel
fuente
3

Las cadenas deben almacenarse en ay b. No funcionará si cualquiera lo es null.

C #, 53

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

C #, 28

a.Contains(b)&&b.Contains(a)
Adam Szabo
fuente
3

PHP - 49 caracteres

!(strlen($a)^strlen($b)|strlen(trim($a^$b,"\0")))
Jack
fuente
¿No podría funcionar algo como esto: !strlen(str_replace($a,'',$b));debería devolver 1 si dos cadenas son iguales?
Damir Kasipovic
@ D. Kasipovic Interesante, pero creo que falla $a == 'foo'y $b = 'foofoo':)
Jack
Es cierto, ¿qué tal esto entonces, limita el reemplazo a uno !strlen(preg_replace("/{$a}/", '', $b, 1));y tiene 45 caracteres?
Damir Kasipovic
Supongo que podría usar anclas en su lugar, pero lo más importante es que también requeriría preg_quote () :)
Jack
3

APL ( 8 9)

Actualización: la anterior no funciona para cadenas de diferentes longitudes.

{∧/∊⌿↑⍺⍵}
  • ↑⍺⍵: haga una matriz con en la primera línea y en la segunda línea, llenando espacios en blanco con espacios.
  • ∊⌿: Para cada columna, vea si la fila superior contiene la fila inferior (como en la versión anterior).
  • ∧/: Tome la lógica andde todos los valores.

El viejo:

{∧/⍺∊¨⍵}
  • ⍺∊¨⍵: para cada combinación de elementos en y , vea si el elemento from contiene el elemento from . Dado que en una cadena todos estos serán caracteres individuales, y una cadena se contiene a sí misma, básicamente se trata de comparar cada par de caracteres.
  • ∧/: toma el valor lógico y de todos los valores (si todos los caracteres coinciden, las cadenas son iguales)
marinus
fuente
3

Python - 12

not({a}-{b})

Esta solución usa conjuntos. Restar conjuntos iguales dará como resultado un conjunto vacío, que tiene un valor booleano de Falso. Negar eso dará como resultado un valor Verdadero para a y b siendo cadenas iguales.

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

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

Editar: Gracias a Peter Taylor por señalar el espacio en blanco innecesario.

Varico
fuente
¿Qué salida da esto a="s", b="ss"?
Peter Taylor
@PeterTaylor: Desde entonces "s"!="ss", saldrá False. La sensibilidad a mayúsculas y minúsculas también se conserva. Incluso funciona para a="", b="s". El código no convierte cadenas en conjuntos, sino que crea conjuntos que contienen las cadenas.
Varicus
Ah, {}no es lo mismo que set(). Puede guardar 1 carácter eliminando el espacio en blanco.
Peter Taylor
@PeterTaylor: Gracias por señalar el espacio en blanco innecesario. {a}es equivalente a set([a]).
Varicus
¿Qué tal not {a}-{b}?
Winston Ewert
3

C - 62

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

Probado Llamar comoe(str1, str2)

Ahora que lo pienso, si no cuenta char*p,char*q, lo que parece justo, solo tiene 49 bytes :)

Hormiga
fuente
Bienvenido al sitio! Para los desafíos de código de golf, lo alentamos a recortar tantos bytes de su código como sea posible, y publicar el recuento de bytes en su encabezado de respuesta. Echa un vistazo a los consejos para jugar al golf en hilo C para algunas buenas ideas.
Jonathan Van Matre
Realmente no necesitas npy nq. Un bucle servirá, porque si llega al final de una cadena antes de la otra, tendrán un valor diferente.
Peter Taylor
Gracias. Me di cuenta que. Estaba trabajando en mi versión abreviada (arriba). Volviendo a ver si puedo acortarlo más.
Emmet
*p&*qpuede detener el ciclo demasiado temprano (p '0'&'A'==0. ej. )
ugoren
@ugoren: Si *p=='0'& *q=='A', queremos que el ciclo se detenga temprano, ya que sabemos que las cadenas no son iguales.
Emmet
2

Haskell - 9

elem a[b]

Tenga en cuenta que esto, al igual que muchas entradas aquí, es solo una expresión. Este no es un programa de Haskell.

Rimoide
fuente
2

Java - 162147 caracteres

La idea es comparar la diferencia de cada byte, los mismos bytes tendrán la diferencia 0. El programa arrojará java.lang.ArrayIndexOutOfBoundsExceptioncuando los bytes sean diferentes (intente acceder a un índice negativo) o cuando las cadenas sean de diferente longitud. Capturará la excepción y devolverá 0 (cadenas no iguales), o devolverá 1 de lo contrario (cadenas iguales).

Comprimido:

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;
Hopper Hunter
fuente
Los operadores de comparación existen en el bucle.
ζ--
Gracias @hexafraction, actualicé la respuesta para no incluirlos.
Hopper Hunter
2

PHP

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

Es posible que este script no tenga ninguna utilidad, pero al menos esto proporciona una forma de comparar cadenas.

PHP

Otro:

    $string = 'something';
    $text   = 'something';
    return count( array( $string => 1 , $text => 1 ) ) % 2;
Hamid Sarfraz
fuente
1
Wow muy encantador Y hacerlo así puede hacer posible usar cualquier cadena (con espacios y unicode).
David Chen
2

Prólogo 7

e(A,A).

Esto hace uso de la función de coincidencia de patrones en Prolog para unificar los 2 argumentos del predicado, que prueba efectivamente la equivalencia igual cuando no hay una variable no vinculada .

Uso de la muestra:

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

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

Técnicamente hablando, el comportamiento de esta solución es el del operador de unificación =/2, en lugar del de ==/2, que verifica la equivalencia de términos. La diferencia se muestra cuando están involucradas variables no vinculadas. En esta solución, cuando se suministra la variable no vinculada, el predicado regresará truecuando la unificación sea exitosa. En comparación, ==/2comparará el orden de los términos sin unificación.

n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
fuente
2

PHP, 21

Este está haciendo el trabajo usando indirección variable.

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

O, si no necesitas que sea bool

$$a=$b;$$b;

EDITAR : Olvidé manejar el caso en el que intentas comparar dos cadenas vacías, por lo que el código ahora es

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

que son 21 caracteres

Flonk
fuente
Esperaba que esto produjera errores cuando se le dan cadenas que no son identificadores válidos, pero para mi sorpresa, no lo hace.
Peter Taylor
Dos problemas: 1. Devuelve verdadero al comparar "0" y "". 2. Devuelve verdadero cuando $ b es el nombre de una variable existente (en la tabla de símbolos actual) que tiene un valor que se convierte en verdadero (por ejemplo, "GLOBALS" o "_SERVER" en el alcance global, o "b" en cualquier alcance), incluso cuando $ b no es igual a $ a.
favor
2

CPython: 6

a is b

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

El uso de ises obviamente bastante sospechoso, pero dado que la tarea especifica específicamente que debemos determinar la igualdad de valores en lugar de la igualdad de referencia, y issolo compara la identidad del objeto, creo que puede no estar en la lista de operadores prohibidos.

Por supuesto, también hay dudas sobre si esto es válido; funciona en todos mis sistemas, pero es específico de la implementación y probablemente no siempre funcionará si las cadenas no se definen a mano en el intérprete interactivo.

Henry Keiter
fuente
2

Lenguaje Mathematica / Wolfram, 15 bytes

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

Bastante autoexplicativo, establece cada cadena como un conjunto, luego verifica la longitud de la unión de los dos conjuntos. Si las cadenas son iguales, devuelve 1, de lo contrario devuelve 0. Si se me permite devolver '2' para "diferente" y "1" para "igual", reste dos bytes.

Michael Stern
fuente
2

C 342 golfizado

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

Nota: Visual Studio se queja si no utiliza sus métodos seguros, por ejemplo gets_s. CodeBlocks con compilaciones mingw sin advertencias.

C 655 no golfizado

El código crea una suma ponderada de caracteres para cada cadena. Si la diferencia es cero, entonces son iguales, incluidas 2 cadenas vacías:

    #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();
}
bacchusbeale
fuente
Buen trabajo, pero probablemente deberías jugarlo.
Hosch250
No puedo compilar su presentación. Obtengo "Símbolos indefinidos para arquitectura x86_64:" _gets_s ", referenciado desde: _main en golf-310cf2.o ld: símbolo (s) no encontrado (s) para arquitectura x86_64"
Stephen Melvin
2

Pitón

Es largo y no es hermoso, ¡pero esta es mi primera entrada!

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
yung galbanum
fuente
2

PHP, 68 bytes

Supongo que está prohibido usar cualquier operador de comparación. Así <o >están incluidos.

La idea es usar XOR bit a bit. En diferentes idiomas, este operador tiene una sintaxis diferente. Mostraré un ejemplo para PHP. Ahí está disponible con ^. Desafortunadamente, su comportamiento con las cadenas no es tan bueno como podría ser, por lo que deberá verificar la longitud de la cadena antes. Esto se debe a que en PHP, xor eliminará la cadena más larga hasta la longitud de la cadena más corta.

Lo siguiente es trabajar correctamente con las cadenas, ya que una sola xorno producirá un resultado, disponible para futuras operaciones en PHP. Por eso unpack()fue usado. Entonces, el código sería:

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

Es más largo que la opción con </ >pero no los usará. Además, lo importante es el malabarismo de tipo PHP (por lo que se convertirá una matriz vacía false). O tal vez hay una manera más simple de verificar si una matriz contiene miembros que no son cero ( Editar : mientras he estado escribiendo esto, hay una buena trim()respuesta en otra respuesta, para que podamos deshacernos de las operaciones de la matriz)

Pero creo que hay idiomas en los que podemos hacer a ^ b, literalmente, obtener el resultado. Si es 0(tratado desde todos los bytes resultantes), entonces nuestras cadenas son iguales . Es muy fácil e incluso más simple que <o >cosas.

Alma Do
fuente
1

grep 14 caracteres

Por supuesto, solo cuento el código grep; las dos cadenas están en dos líneas consecutivas en la entrada (ya sea una tubería o un archivo o incluso una sesión interactiva).

$ 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
Thomas Baruchel
fuente
1

Matlab: 12 caracteres (después de que las cadenas están en variables)

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

El código que incluye las asignaciones sería:

x='string1'
y='string2'
~(x*x'-y*y')
Dennis Jaheruddin
fuente
1

La manera muy loca

Solo por diversión, pero hay muchas maneras de hacerlo fallar si uno lo piensa. Además, no olvide que las cadenas serán EJECUTADAS por el shell.

$ 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

Un buen contraejemplo es comparar "cadena" como primera cadena y "rm -Rf /" como segunda cadena; simplemente marque como root y vea: dirá "verdadero" aunque ambas cadenas obviamente no son lo mismo.

Thomas Baruchel
fuente
1

JavaScript [18 bytes]

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

O

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

Esto devolverá truesi a == by falsesi a =/= b. La lógica detrás es crear un objeto con un valor de acomo propiedad y devolver 1o undefineden caso de bque exista o no una propiedad de valor en ese objeto.

Visión
fuente
Las reglas dicen que se le permite devolver un objeto que se evalúa como verdadero o falso, por lo !!que no es necesario
James_pic
@James_pic Sí, pero de lo contrario volverá 1o undefined(u objeto / undefinedpara el segundo caso).
VisioN
Interpreté las reglas como diciendo que los valores de verdad y y falso funcionarían en lugar de verdadero y falso, por lo que pensaría que 1 o indefinido son lo suficientemente buenos.
James_pic
@James_pic Solo quería estar seguro :) Si es así, entonces 18-2 = 16 bytes.
VisioN
1

JavaScript [15 bytes]

![a].indexOf(b)

Esto devolverá truesi a == by falsesi a =/= b. El script busca el valor de ben la matriz que contiene un único elemento de valor de a.

Visión
fuente
1

C - 86 83

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

Obviamente no es el más corto, pero esto no funciona con variables de cadena y en su lugar toma las cadenas como entrada de la consola. Además, me gusta el recursivo principal, incluso si obviamente no es la versión más corta. Pero sin duda lo menos recomendable.

OSE
fuente
No necesita espacios alrededor de muchos operadores. Por ejemplo, char** vse puede escribir como char**v. Hay algunas excepciones (como 42 / *pointer), pero en la mayoría de los casos los espacios se pueden eliminar de forma segura cerca de caracteres especiales.
Konrad Borowski el
Y un apersand demasiado. No en la cima hoy.
SBI