En el lenguaje Nim , las reglas para diferenciar los identificadores son un poco más relajadas que la mayoría de los otros idiomas. Dos identificadores son equivalentes o abordan la misma variable si siguen estas reglas :
- el primer caracter de ambos es el mismo (mayúsculas y minúsculas)
- ambas cadenas son iguales (mayúsculas y minúsculas) después de eliminar todas las instancias de los caracteres
-
y_
Desafío
Escriba un programa / función que tome dos cadenas que representen identificadores Nim y genere un valor verdadero o falso en función de si son equivalentes o no según las reglas anteriores.
Especificaciones
- Normas estándar de E / S se aplican .
- Las lagunas estándar están prohibidas .
- Las cadenas solo contendrán imprimibles ASCII . Usted no necesita comprobar si es un identificador válido.
- Las cadenas se pueden tomar como dos entradas separadas, una lista de cadenas, etc. (conoce el ejercicio)
- Las cadenas vacías no necesitan ser manejadas.
- El resultado debe ser coherente tanto para los valores de verdad como para los de falsey.
- Este desafío no se trata de encontrar el enfoque más corto en todos los idiomas, sino de encontrar el enfoque más corto en cada idioma .
- Su código se puntuará en bytes , generalmente en la codificación UTF-8, a menos que se especifique lo contrario.
- Se permiten las funciones integradas que realizan esta tarea, pero se recomienda incluir una solución que no se base en una función integrada.
- Se alientan las explicaciones, incluso para los idiomas "prácticos" .
Casos de prueba
Input Output
count, Count falsey
lookMaNoSeparator, answer falsey
_test, test falsey
test, tset falsey
aVariableName, a_variable_name truthy
numbers_are_cool123, numbersAreCool123 truthy
symbolsAre_too>_>, symbols_areTOO>> truthy
Implementación de referencia sin golf
Esto está escrito en Nim, en sí mismo.
import strutils, re
proc sameIdentifier(a, b: string): bool =
a[0] == b[0] and
a.replace(re"_|–", "").toLower == b.replace(re"_|–", "").toLower
code-golf
string
decision-problem
totalmente humano
fuente
fuente
f("_test", "test")
.f("test", "tset")
, ya que creo que una respuesta da un resultado inesperado.>
?Respuestas:
JavaScript (ES6),
6261 bytesGuardado 1 byte gracias a @JohanKarlsson
Toma entrada en la sintaxis de curry
(a)(b)
. Devuelve un booleano.Casos de prueba
Mostrar fragmento de código
fuente
/-|_/g
guarda un bytePython 3 , 76 bytes
Pruébalo en línea!
-1 byte gracias a notjagan
-3 bytes gracias a Wheat Wizard
fuente
En realidad , 15 bytes
Pruébalo en línea!
Dato curioso: esto funciona con cualquier cantidad de entradas (siempre devuelve verdad por menos de 2 entradas).
Explicación:
fuente
Pyth , 13 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E , 12 bytes
Pruébalo en línea!
-1 gracias a Adnan .
Teóricamente,
εćs„-_-«}Ë
debería haber funcionado durante 10 bytes, pero desafortunadamente este comportamiento está en desuso por ahora.fuente
„-_SK
lugar de'-K'_K
.SK
aм
.м
existiera en ese entonces. : PJalea , 11 bytes
Pruébalo en línea!
-2 bytes gracias a Erik the Outgolfer
-1 byte gracias a Jonathan Allan
fuente
["symbolsAre_too>_>", "symbols_areTOO>>"]
y useḢ;ḟ⁾-_Œl$µ€E
en su lugar para -2. Batir ese Pyth!ḟ⁾-_Œl,Ḣµ€E
por 11 bytes.Ruby ,
8664636151 bytesPruébalo en línea!
Esto se
siente realmente largo,todavía se siente un poco largo. Agradecería la ayuda de cualquier gurú de Ruby para hacer esto al menos un poco más corto.fuente
.delete("_-")
Es más corto.f[x]
siempre es una sustitución válida paraf.call(x)
cuando están involucradas lambdas stabby.C ++,
288248 bytes-5 bytes gracias a Zacharý
Gracias, preprocesador. Además, este código aprovecha el hecho de que en C ++ la regla para convertir int en bool es
int_var!=0
fuente
;
después de la definición deF
. Luego, cambie la primerareturn
declaración areturn 0;E(a,45)E(b,45)E(a,95)E(b,95)F(a)F(b)
.CJam, 20 bytes
Toma entrada en forma de ["cadena1", "cadena2"].
Pruébelo en línea (versión de prueba)
fuente
Haskell ,
8578767168 bytes2 bytes guardados gracias a Ørjan Johansen
Pruébalo en línea!
Errores en la cadena vacía.
fuente
all(/=a)"-_"
. Además, después de su última edición,f
debe convertirse en un operador.notElem
pero no podía recordarlo por mi vida.Python 2 , 72 bytes
Pruébalo en línea!
No funcionará con Python 3 debido a la nueva
translate
sintaxis.fuente
Excel, 105 bytes
CODE () devuelve el código numérico del primer carácter.
La comparación de cadenas en Excel no distingue entre mayúsculas y minúsculas.
fuente
Casco , 13 bytes
Pruébalo en línea!
Construye para cada cadena un par que consiste en el primer carácter de la cadena y toda la cadena en minúsculas y con todas las apariciones de - / _ eliminadas. Luego verifica si los dos pares son iguales.
Una particularidad es que
-
en cáscara es diferencia de conjuntos (es decir, que elimina sólo la primera aparición encontrado): a fin de eliminar todas las apariciones, el punto de fija-"-_
se encuentra conω-"-_
.fuente
Japt ,
1425 bytesComprueba la igualdad de cadenas entre mayúsculas y minúsculas eliminando todos los caracteres de la palabra 2 de la palabra 1 y eliminando-_
caracteres; eso da como resultado una cadena vacía (""
) si las palabras son iguales.Gracias Ørjan Johansen por señalar el problema con esto.
Comprueba la igualdad del primer carácter y si las entradas en mayúsculas son iguales después de eliminarlas
_-
.Pruébalo en línea!
Explicación
Entrada implícita:
U
yV
son cadenas de entradaCompruebe si la primera letra de
U
(implícito) es igual a (¥
) el primer carácter deV
.Y (
©
) verifica siU
, en mayúsculas (u
) y con_-
eliminado (k
), es igual a (¥
) lo mismo paraV
. Devuelve implícitamente el resultado booleano.fuente
test
frentetset
?Pitón 2 ,
7973 bytes-6 bytes gracias a @notjagan: compruebe que la longitud del conjunto de todos los nombres reducidos es 1 o no.
Pruébalo en línea!
fuente
Perl 5 , 67 bytes
Pruébalo en línea!
Toma los identificadores como entrada en líneas separadas.
Explicación:
fuente
Retina , 28 bytes
Pruébalo en línea!
fuente
Carbón , 29 bytes
Pruébalo en línea!
Esto imprime un
-
verdad y nada para Falsey.Enlace a la versión detallada . Primero compara el primer carácter de ambas cadenas de entrada (
⁼§θ⁰§η⁰
) y luego compara el resto de ambas cadenas después de eliminar los guiones bajos y los guiones (⪫⪪⪫⪪θ_ω-ω
) y convertirlos a minúsculas (↧
).fuente
C #,
10189 bytesGuardado 12 bytes gracias a @ kusi581.
fuente
string.Concat(...)
, puede guardar 2 bytes;)Java (OpenJDK 8) , 95 bytes
Pruébalo en línea! Muy claro.
fuente
Pyke , 13 bytes
Pruébalo en línea!
fuente
C (gcc) ,
126114bytesPruébalo en línea!
Con espacios en blanco y comentarios:
fuente
while
prueba se puede acortar*s%50==45
. (2) Sin embargo, el mal en minúscula es, por ejemplo, se produce un error en lat~
frentet^
.>
se agregó ese ejemplo con , hmm.-
no está permitido, pero el algoritmo todavía lo incluye ...-
que no está en la descripción gramatical del identificador, pero luego otras partes de ese documento implican que está permitido.Dyalog APL,
473228272622 bytes-4 bytes gracias a Kritixi Lithos
Toma la entrada como una lista de las cadenas.
Pruébalo en línea!
¿Cómo?
fuente
⊃⍺=⍵
en lugar de⍺[1]=⍵[1]
⊃⍵
lugar de⍵[1]
debería funcionar⊃⍺=⊃⍵
lugar de⍺[1]=⍵[1]
Lisp común, 98 bytes
Pruébalo en línea!
Versión sin golf (¡súper directa!):
fuente
R , 76 bytes
Función anónima que toma la entrada como una lista de dos cadenas. Aprovecha el hecho de que las operaciones de cadena de R, aunque bastante largas en # de caracteres, están vectorizadas. Además, envolver una asignación entre paréntesis vinculará la variable, por lo que
(g=substr(l,1,1))
conserva una variable para ser reutilizada más adelante en la línea y de manera similarh
.R devuelve la última expresión evaluada como salida de función.
Sin golf:
Pruébalo en línea! (todos los casos de prueba)
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Salidas a través del predicado éxito / fracaso
fuente
Erlang 113 bytes
Un par de funciones anónimas que comparan las dos listas. destinado a ser pegado en el caparazón de erlang.
más legible:
fuente
Clip , 25 bytes
Explicacion :
x
,y
yz
puede ser referenciado en un programa Clip para tomar implícitamente hasta tres entradas. Como este programa solo hace referencia ax
yy
, toma dos entradas que están asignadas ax
yy
.Toma dos cadenas de entrada estándar, salidas
1
y0
para verdadero y falso respectivamente.fuente