Desafío :
Dada una palabra, verifique si es o no un isograma.
Qué :
Un isograma es una palabra que consta solo de letras sin duplicados (sin distinción entre mayúsculas y minúsculas). La cadena vacía es un isograma.
Ejemplos:
"Dermatoglyphics" ---> true
"ab" ---> true
"aba" ---> false
"moOse" ---> false
"abc1" ---> false
"" ---> true
Entrada:
Puede aceptar entradas en cualquier formato razonable
La entrada solo contendrá letras y / o números, sin espacios ( [a-zA-Z0-9]
)
Salida:
true
o cualquier valor verdadero si la entrada es un isogramafalse
o cualquier valor falso de lo contrario
Este es el código de golf, por lo que gana el código más corto en bytes en cada idioma.
code-golf
string
decision-problem
Muhammad Salman
fuente
fuente
sad2
sad2das
fallaría incluso sin el,2
por lo que no muestra nada).Respuestas:
Python
2/3,365248 bytesPruébalo en línea!
Aprovecho el hecho de que
set
contiene solo elementos únicos. Al invocar el__len__
método de cada uno, puedo determinar sis
también contiene elementos únicos (ignorando mayúsculas y minúsculas).EDITAR: actualizado para satisfacer el requisito anteriormente ignorado de devolver False para entradas numéricas. El conjunto de todos los dígitos se codifica como
set(str(56**7))
.EDITAR 2: Siguiendo esta sugerencia del usuario , ahora aprovecho para desempaquetar los argumentos para establecer la comprensión. Esto rompe formalmente la compatibilidad con Python 2.
fuente
false
cuandos
contiene un carácter de dígito.`56**7`
(como en la otra respuesta de Python) en lugar destr()
más corto? No estoy familiarizado con Python, pero esa parece ser la principal diferencia entre sus dos respuestas.``
, una versión solo para python2 ahorraría 4 bytes (3 en este + 1 en la división es igual)56**7
se inspiró en su propia codificación de los dígitos 0-9 a continuación, pero ahorra en la suya por 1 byte.lambda s:len(s)==len(set(s.lower())-{`56**7`})
05AB1E , 5 bytes
Pruébalo en línea!
Explicación
fuente
R , 41 bytes
Pruébalo en línea!
Enfoque de expresiones regulares.
!grepl(regex,scan(,""),F)
no funcionó, así que supongo que la captura no coincide con mayúsculas y minúsculas en R? Sin embargo, soy malo en expresiones regulares en general, así que no me sorprenderé si lo estoy haciendo mal ...R , 58 bytes
Pruébalo en línea!
Agrega los dígitos
0:9
a la lista (minúscula) de caracteres y prueba si hay duplicados.fuente
Ruby ,
25 2321 bytes-2 bytes en ambos gracias a Giuseppe
Pruébalo en línea!
-2 bytes gracias a Kirill L.
Ruby
-n
,21 19 1816 bytesPruébalo en línea!
fuente
$_
: simplemente arrojar una expresión regular sin nada más coincide implícitamente con$_
: 16 bytes!/.../
antes, ni siquiera puedo encontrarlo en ruby-doc.orgBrachylog , 4 bytes
Pruébalo en línea!
El predicado tendrá éxito si la entrada es un isograma y fallará si no lo es, generando el alfabeto latino en minúsculas si tiene éxito. Dado que el
⊆
predicado incorporado de Brachylog no coincide exactamente con la relación ordinaria entre un subconjunto y un superconjunto, tuve que gastar un byte en ordenar la entrada en minúsculas, pero guardé un byte al no tener que buscar explícitamente duplicados en él. (Si no necesita fallar con los números, podríamos usarloḷ≠
).fuente
Casco , 6 bytes
Pruébalo en línea!
Explicación
fuente
Japt , 12 bytes
Explicación:
Pruébalo aquí.
fuente
MATL , 9 bytes
Pruébalo en línea!
fuente
Python 3 , 46 bytes
Pruébalo en línea!
fuente
Japt 2.0,
1211 bytes-1 byte gracias a Nit
¡Pruébalo en línea!
fuente
e
JavaScript (Node.js) ,
2925 bytesPruébalo en línea!
Gracias por la actualización sobre la respuesta a @BMO , @ l4m2 , @KevinCruijssen
-4 bytes gracias a @KevinCruijssen
fuente
s=>!/(.).*\1|[^a-z]/i.test(s)
?[^a-z]
puede ser reemplazado por\d
Retina , 16 bytes
Devuelve
1
como0
valores de Verdad y Falsey.Gracias @Neil por descubrir y corregir un error en mi código inicial.
Pruébalo en línea.
Explicación:
fuente
PowerShell , 91 bytes
Pruébalo en línea!
Solución ingenua, pero no puedo encontrar un algoritmo mejor. Toma datos
$b
, los convierte enToUpper
mayúsculas y minúsculas, lo convierte en unachar
matriz. Tuberías en esa matriz en laGroup-Object
que se construye un objeto que tiene pares de nombre / recuento para cada letra de entrada. Luego, basamossort
eso en lac
búsqueda y tomamos la0
tercera. Verificamos que.Count
sea-eq
ual al.Count
del último[-1]
par. Si es así, los recuentos son todos iguales, de lo contrario, tenemos una cantidad diferente de letras.Luego,
-and
comprobamos si la entrada-notmatch
está en contra\d
para descartar cualquier dígito en la entrada. Ese resultado booleano se deja en la tubería y la salida es implícita.fuente
Jalea , 8 bytes
Pruébalo en línea!
fuente
Python 2 ,
5756 bytesPruébalo en línea!
Primero convierte la entrada en un conjunto, elimina los duplicados, luego elimina los dígitos (codificados
`763**4`
), luego verifica si la longitud es la misma que la entrada originalfuente
Java 8,
6139 bytesExplicación:
Pruébalo en línea.
Explicación de expresiones regulares:
String#matches
agrega implícitamente^...$
.fuente
APL (Dyalog Unicode) , 12 bytes
Función tácita anónima.
Pruébalo en línea!
819⌶
minúsculas(
...)
aplique la siguiente función tácita sobre eso:~∘⎕D
eliminar D igits del argumento∪≡
¿Son los elementos únicos del argumento idénticos a eso?fuente
Perl 6 , 22 bytes
Pruébalo en línea!
No hay coincidencias para algún personaje, luego el mismo personaje. Función implícita como un bloque de código, coincide implícitamente en $ _, invierte el libro con
!
. Agregado|\d
(ta Adam) pero también necesario.uc~~
, que necesitaba paréntesis ...Alternativa con bolsas, 23 bytes
Pruébalo en línea!
Este caso normaliza entonces hace una bolsa (con recuentos de incidencia). Subconjunto o igual solo es cierto si todos los miembros son miembros de la Bolsa de comparación, y todos los recuentos de incidencia son menores o iguales a los de la Bolsa de comparación. Entonces, cualquier repetición o dígito haría que la comparación sea falsa.
fuente
abc1
.|\d
?Rápido , 81 bytes
Pruébalo en línea!
fuente
Visual Basic para aplicaciones (32 bits), 102 bytes
Usó el hecho de que en VBA
0^x
produce 1 si x es cero y 0 en caso contrario. Ejecutar en la ventana inmediata (depuración).Editar: como señaló Taylor en los comentarios, esto solo funciona en instalaciones de 32 bits de MS Office.
fuente
s=LCase([A1]):j=1:For i=1To Len(s):k=Mid(s,i,1):j=j*0^InStr(i+1,s,k)*(k Like"[a-z]"):Next:?j<>0
por 95 bytes tomando la entrada de[A1]
. Además, vale la pena señalar que, debido a que Exponentiation en VBA es extraño, esta solución está restringida a instalaciones de oficina de 32 bits.<!-- language-all: lang-vb -->
indicador a su respuesta para agregar resaltado de sintaxis05AB1E , 4 bytes
Pruébalo en línea!
Explicación
fuente
The input will only contain letters and/or numbers, no spaces ([a-zA-Z0-9])
C (gcc) ,
878583 bytesdosde cuatro bytes gracias a ceilingcat .Pruébalo en línea!
fuente
K (ngn / k) , 18 bytes
Pruébalo en línea!
fuente
CJam , 11 bytes
Pruébalo en línea!
Explicación
La idea básica es agregar cada dígito y luego verificar si hay duplicados. Dado que el anexo asegura que cada dígito ya esté presente una vez, cualquier presencia adicional de dígitos será un duplicado, lo que hará que devuelva falso.
fuente
Rojo , 76 bytes
Pruébalo en línea!
fuente
Smalltalk, 57 bytes
Método a definir en la clase Cadena:
Esto es muy probable que se explique por sí mismo.
fuente
Pyth , 17 bytes
Banco de pruebas
Explicación: Traducción de Python 3:fuente
C #, 82 bytes
editar: prueba agregada para char
editar: usar GroupBy para acortarlo en 5 bytes
fuente
APL (Dyalog Unicode) ,
252022 bytesPruébalo en línea!
Devuelve 1 para verdadero, de lo contrario 0.
Guardado 5 bytes gracias a @ H.PWiz
Se corrigió y guardó otro byte gracias a @ Adám
¿Cómo?
fuente
abc1
.\w
→.
válida?(.).*\1
, no. También falla paraabc1
: /abc1
, cuando debería devolver 0.Tcl , 114 bytes
Pruébalo en línea!
Tcl , 121 bytes
Pruébalo en línea!
Todavía es demasiado largo para mi gusto!
fuente