Tengo un problema en el trabajo Necesito comparar dos números que vienen como cadenas de dos bases de datos diferentes. Los números pueden venir con ceros iniciales y / o espacios iniciales / finales. Entonces puedo tener "0001 "
de una base de datos y " 1 "
de la otra.
Resolví el problema en C # con el siguiente código:
Func<string, string, bool> f = (a,b) => int.Parse(a.Trim()) == int.Parse(b.Trim())
El reto
Este es un desafío realmente simple, adecuado para principiantes y cualquier tipo de lenguaje esotérico. Dados dos números como cadenas que pueden venir con ceros iniciales y / o espacios iniciales / finales, escriba el código más corto que verifique si las dos cadenas representan el mismo número.
- Las entradas deben ser dos cadenas o el equivalente en su idioma (una matriz de caracteres está bien), y siempre representarán valores enteros mayores que cero.
- La salida debe ser dos valores consistentes que representen un valor verdadero y un valor falso.
Ejemplos
A B Result
----------------------------
"0001" "1 " true
"1450" "1450 " true
"0010001 " " 10001 " true
"0010000" " 10 " false
"101023" "101024" false
Este es el código de golf , ¡así que puede ganar el código más corto para cada idioma!
Respuestas:
Javascript , 11 bytes
Abusar un poco de las reglas de conversión de Javascript;
+a
coaccionaa
en un tipo numérico.-6 bytes gracias a Shaggy y Martin Ender ♦
También una versión genial de LiefdeWen :
fuente
c=
, y el curry también está bien para que puedas usarlas ena=>b=>...
lugar de(a,b)=>
. Finalmente, mi JavaScript está un poco oxidado, pero creo que algo así!(a-b)
también funcionaría.a
a un tipo numérico con unario+
.05AB1E , 1 byte
Pruébalo en línea!
Explicación
La comparación por igualdad
Q
intentará evaluar automáticamente las cadenas como ints antes de comparar.fuente
|0+Q
era lo suficientemente corto ...Lenguaje de script Operation Flashpoint , 33 bytes
Llamar con:
Salida:
Versión alternativa (41 bytes):
Todavía 5 bytes más cortos que los más directos
f={t=_this;call(t select 0)==call(t select 1)}
39 bytes:
count
(que devuelve el tamaño de una matriz) funciona en lugar de hacerloforEach
, porque puede darle una "lambda" que se usa como condición para contar solo los elementos de la matriz que cumplen esa condición. La "condición" utilizada en este caso no es una condición válida, pero no importa aquí porque no causa un error y el valor de retorno de lacount
no es necesario.fuente
Taxi , 488 bytes.
Pruébalo en línea!
Sin golf:
El taxi es (relativamente) adecuado para este desafío porque las cadenas son el único tipo de entrada o salida permitido.
The Babelfishery
es lo que convierte las cadenas en números (y viceversa) y maneja la eliminación de todos los espacios y ceros a la izquierda. También manejará números negativos si-
está inmediatamente antes del primer dígito. Después de eso,Equal's Corner
comprueba los dos valores entre sí yWriter's Depot
proporciona la salida en formato de cadena. La salida es1
para la verdad y0
para falsey.fuente
error: The boss couldn't find your taxi in the garage. You're fired!
?Go to Taxi Garage:n 1 r 1 l 1 r.
C (gcc) , 27 bytes
Con
-O0
(que es la configuración predeterminada).Pruébalo en línea!
C, 32 bytes
Pruébalo en línea!
fuente
char
, y cuando pasas una matriz a una función, en realidad solo pasas el puntero al primer elemento de la matriz. Aquí, los punteros a laschar
matrices se convierten implícitamente en enteros cuando se pasan a la función, y los enteros se vuelven a convertir en punteros al llamaratoi
.s=foo;
lugar dereturn foo;
tener que etiquetar esto como "x86 gcc con optimización deshabilitada", no solo "C", porque este código no devuelve un valor, excepto como un artefacto de implementación.s=retval;
lugar dereturn retval;
romperse. Parece que la lógica interna del gcc (con-O0
solamente) trata en realidad la última expresión como valor de retorno, tal vez de la misma manera que una declaración de GNU C-expresión obras. (Pero sí requieres=
). ¡En ARM32, calcula el==
resultador3
y luego usa un extramov r0, r3
para hacer que sea el valor de retorno! Por lo tanto, no es un hack específico para x86, es ungcc -O0
hack que parece que gcc se esfuerza por soportar.J , 4 bytes
Compare
=
después de&
evaluardo
. También se puede=&".
probar en línea!fuente
-10
) y negativos como J los entiende (por ejemplo_10
) debido a la forma en que-
funciona la monádica .Retina , 11 bytes
Pruébalo en línea!
La entrada está separada por salto de línea, pero el conjunto de pruebas utiliza la separación por coma para mayor comodidad. Impresiones
1
para la igualdad y0
desigualdad.Explicación
Convierta cada línea a unario. Esto ignora los ceros y espacios iniciales.
Deduplicar: borra la segunda línea si ambos son iguales.
Compruebe que la cadena ahora termina en un salto de línea.
fuente
Python 3 , 25 bytes
Pruébalo en línea!
fuente
Brain-Flak , 22 bytes
Pruébalo en línea!
Guardado 4 bytes gracias a Jo King .
fuente
Triangularidad , 17 bytes.
Pruébalo en línea!
¡La triangularidad es, por una vez, competitiva!
Cómo funciona
La triangularidad requiere que el código tenga una distribución triangular de los puntos. Es decir, la longitud de cada fila debe ser igual al número de filas multiplicado por 2 y decrementado, y cada fila debe tener (en cada lado) un número de puntos igual a su posición en el programa (la fila inferior es la fila 0, el de arriba es la fila 1 y así sucesivamente). Teniendo esto en cuenta, analicemos cómo funciona el código:
fuente
Alice , 7 bytes
Pruébalo en línea!
Cualquier separador sin dígitos funciona. Impresiones
1
para la igualdad y lo0
contrario.Explicación
fuente
Japt , 3 bytes
Intentalo
Convierte la segunda entrada en un número entero y compara la igualdad con la primera.
fuente
APL (Dyalog) , 4 bytes
3 bytes guardados gracias a @ Adám
Pruébalo en línea!
fuente
=/⍎¨
jq, 24 caracteres
Las 2 cadenas se pasan como elementos de una matriz.
Ejecución de muestra:
Pruébalo en línea! ( Todos los casos de prueba )
fuente
Casco , 3 bytes
Pruébalo en línea!
Explicación
fuente
Ër
también funciona.PowerShell , 20 bytes
Similar a la respuesta de JavaScript, solo más tiempo porque PowerShell no tiene curry. Utiliza
+
para convertir la primera cadena a entero, y luego los-eq
uals automáticamente convierten la segunda cadena a entero. La salida es verdadera / falsa.Pruébalo en línea!
fuente
PowerShell , 19 bytes
Pruébalo en línea!
-join
la matriz de argumentos ($args
) con la representación de cadena del operador de comparación (-eq
) luego evalúa la expresión conInvoke-Expression
(iex
).fuente
+
ya que está haciendo una comprobación de igualdad de cadena.00009
y077
luego el código resultante es00009 -eq077
, una pieza de código perfectamente válida. Está tratando directamente con la cadena en tiempo de ejecución, por lo que debe convertirla primero para que la operación se realice de forma numérica.Q (Kdb +), 13 bytes
Explicación
(x; y): una lista de las dos entradas.
"J" $: convertir cada entrada a un tipo largo (7j) desde la cadena (10c), que puede interpretar correctamente
los espacios en blanco y los ceros a la izquierda.
= /: verifica la igualdad sobre los elementos en una lista (cada par posterior).
Como solo hay un par, devuelve un solo booliano 0b / 1b.
fuente
{=/["J"$(x;y)]}
para 15 bytes ... Aunque para 8 bytes podría tener esto:(~/)"J"$
si solo está usando REPL y pasa las entradas como una lista de cadenas ... o{(~/)"J"$x}
para 11 como una función.T-SQL, 35 bytes
Según nuestros estándares , los datos se ingresan a través de una tabla preexistente
t
convarchar
camposa
yb
.Devuelve
1
si coinciden,0
si no.Algunas de las funciones matemáticas de SQL (que incluyen
ABS
,FLOOR
yCEILING
) harán una conversión implícita a numéricos si se les dan parámetros de cadena, esto es más corto que un explícitoCAST(a AS INT)
oCONVERT(INT,b)
, y funciona en este caso ya que sabemos que los valores de entrada son siempre positivos.IIF
es específico de MS SQL 2012 y superior, por lo que no hay garantía sobre otras implementaciones.fuente
Excel VBA,
2716 bytes-9 Gracias a @Nayrb y @TaylorScott
Donde ingresas los valores en las Celdas con
'string
.Dondex
yy
son las cadenas de entrada yz
es una salida booleana.Si CInt (x) = CInt (y) Entonces z = 1
Utilizando CIntfuente
?[Int(A1)=Int(B1)]
que toma la entrada de las gamasA1
yB1
y salidas a la ventana inmediata VBER ,
2827 bytesLee los números como cadenas, los convierte en dobles y comprueba si su diferencia no es cero.
Pruébalo en línea!
-1 byte gracias a Giuseppe
fuente
""
es suficienteLua , 20 bytes
Pruébalo en línea!
fuente
Haskell , 20 bytes
-11 bytes gracias a Laikoni. -2 bytes gracias a Zgarb.
Pruébalo en línea!
fuente
read
:a#b=0+read a==read b
Gema , 21 personajes
No booleano en Gema. Como las funciones
@get-switch{}
/@set-switch{}
usan 0 y 1 para representar estados de cambio, también se usan 0 y 1.Las 2 cadenas se pasan en líneas de entrada separadas.
Ejecución de muestra:
fuente
Perl 5, 9 + 1 (
-p
) = 10 bytespruébalo en línea
fuente
Apilado , 8 bytes
Pruébalo en línea!
Explicación
fuente
Adjunto , 11 bytes
Pruébalo en línea!
Esto toma una serie de cadenas, como
V["0001", "1 "]
. En pocas palabras,Map&:N
es una función que se asignaN
sobre su argumento ySame
comprueba que la matriz contiene solo miembros iguales. (Dato curioso: esta función funciona para más de 2 argumentos de cadena).fuente
SNOBOL4 (CSNOBOL4) , 42 bytes
Pruébalo en línea!
Salidas 1 para la verdad, nada para falsey. Dado que
(espacio) es el operador de concatenación en SNOBOL, al
EVAL
ingresar un número con espacios iniciales / finales se obtiene el número en sí mismo, y también se ocupa perfectamente de los ceros iniciales.EQ
prueba la igualdad numérica, condicionalmenteOUTPUT
a 1 enSuccess
.fuente
Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 29 bytes BASIC tokenizados
Nueva solución gracias a Neil (gracias por el consejo).
Esta solución requiere la entrada del usuario, por lo tanto, ingrese dos cadenas con espacios en blanco y / o ceros a la izquierda, o ingrese dos cadenas de valor numérico no igual;
0
es falso y1
es verdadero una vez que la línea tres ha comparado el valor de cada cadena ingresada.Solución anterior: Sinclair ZX81 / Timex TS1000 / 1500 BASIC, ~ 46 bytes BASIC tokenizados
La verificación real se realiza en la línea tres, que es solo ~ 16 bytes BASIC tokenizados; así que ingresar cada par de casos de prueba usando el modo directo ahorrará ~ 30 bytes de la lista. Tenga en cuenta que este recuento de bytes no incluye el
var stack
.fuente
INPUT A$
yINPUT B$
? Además, no creo que necesites el()
s.APL (NARS2000) , 7 bytes
Bueno, sí, sé que NARS2000 no puede competir con Dyalog aquí ya que usa Unicode, pero pensé que preferiría presumir
⍥
(llamado Composición en NARS2000, aunque en realidad no está relacionado con la composición de funciones), algo que Dyalog no tengo como incorporado y nunca he visto usado aquí. En Dyalog, debe implementarse como{(⍵⍵⍺)⍺⍺⍵⍵ ⍵}
. Lo que hace es llamar a la función monádica del operando derecho en el argumento izquierdo y derecho, y luego llamar a la función diádica del operando izquierdo en los resultados.Aquí, el operando correcto es
⍎
( Ejecutar , es decir, eval) y el operando izquierdo es=
( Igual a , es decir, verificar si sus argumentos son iguales).fuente