Escriba una función o programa que tome como entrada una cadena e imprima un valor verdadero si la cadena es un pangrama (una secuencia de letras que contiene al menos una de cada letra en el alfabeto inglés) y un valor falsey de lo contrario.
El caso de las letras debe ser ignorado; Si la cadena es abcdefghijklmnopqrstuvwXYZ
, entonces la función aún debería devolver un valor verdadero. Tenga en cuenta que la cadena puede contener cualquier otro carácter, por 123abcdefghijklm NOPQRSTUVWXYZ321
lo que devolvería un valor verdadero. Una entrada vacía debería devolver un valor falsey.
Casos de prueba
AbCdEfGhIjKlMnOpQrStUvWxYz
==> True
ACEGIKMOQSUWY
BDFHJLNPRTVXZ
==> True
public static void main(String[] args)
==> False
The quick brown fox jumped over the lazy dogs. BOING BOING BOING
==> True
Este es el código de golf. Aplican reglas estándar. El código más corto en bytes gana.
code-golf
string
decision-problem
Arcturus
fuente
fuente
Respuestas:
Pyth, 7 bytes
Explicación:
Pruebe la versión de línea completa del programa completo aquí .
fuente
L!-Grb0
.!-Grs.z0
También funcionaría pero es más largo.Perl 6 , 20 bytes
uso:
Utilicé la versión "francesa" de 3 bytes (
⊆
) delU+2286 SUBSET OF OR EQUAL TO
operador en lugar de la versión "texas" de 4 bytes ((<=)
), que también habría requerido un espacio adicional delante.fuente
GS2,
119 bytes¡Gracias a @MitchSchwartz por jugar 2 bytes!
El código fuente usa la codificación CP437. Pruébalo en línea!
Cómo funciona
fuente
m2
(\xe9
) ahorra 2 bytes.JavaScript ES6, 51
57Editar 6 bytes guardar thx @ user81655
Fragmento de prueba
fuente
a.replace(/[^A-Z]|[^a-z]/g,'')
oa.replace(/[^A-Z]/gi,'')
trabajaría?A
ya
debe convertirse en el mismo personaje, de lo contrario, el conjunto los mantendrá como distintos y el tamaño será> 26[...a.toUpperCase().replace(/[^A-Z]/g,'')].length>25
?R
50,4639 bytesEditar elimina la necesidad de
tolower
agregarignore.case=TRUE
(T
)fuente
ignore.case=TRUE (T)
debería incluirse también en el recuento?T
el final, gracias a la coincidencia de ubicación de argumentos no hay necesidad de especificar realmente el nombre del argumento (yT
es el alias predeterminado paraTRUE
). El código escrito aquí realiza la acción necesaria tal cual, sin necesidad de agregar nada.O, 11 bytes
Pruébalo en línea.
Lamentablemente, O no tiene una diferencia establecida: /
Explicación
fuente
Julia, 38 bytes
Esto es simple:
lowercase
trata el problema de mayúsculas / minúsculas,'a':'z'
contiene todas las letras minúsculas,∩
es la intersección, elimina cualquier carácter que no sea una letra y, como'a':'z'
viene primero, solo tendrá una de cada letra que aparezcas
.endof
es la forma más corta de obtener la longitud de la matriz resultante, y si es 26, entonces es un pangrama (no puede ser más de 26, y>25
guarda un byte relativo a==26
).fuente
Python 2,
5351 bytesSoluciones alternas:
Gracias a xnor por señalar que los conjuntos tienen un
<=
operador, por un 51 alternativo:fuente
lambda s:set(range(65,91))<=set(map(ord,s.upper()))
, también para 51.p=lambda s:{*range(65,91)}<={*map(ord,s.upper())}
. Por cierto, parece que no puedo encontrar ninguna regla sobre si eslambda
necesario asignar una (como en su primer caso) o no (como en las posteriores). ¿Ayuda?Retina , 22 bytes
Pruébalo en línea.
La primera línea coincide con cualquier letra que no aparece más tarde en la cadena. Eso asegura que no coincidamos con cada letra como máximo una vez, sin importar con qué frecuencia ocurra. El modo de coincidencia reemplazará por defecto la cadena con el número de coincidencias encontradas. Por lo tanto, en la segunda etapa, hacemos coincidir
26
el resultado de la primera entrada, que dará uno0
o más1
, dependiendo de si encontramos el máximo de 26 coincidencias o no.fuente
Minkolang 0.14 , 18 bytes
Pruébalo aquí
Explicación
fuente
Python 3.5, 47 bytes
El mismo principio que la respuesta de Mitch Schwartz , pero usando las mejoras PEP 0448 para
*
desempacar, primero introducido en Python 3.5.Esta versión difiere ligeramente de lo que escribí en mi comentario a la publicación de Mitch, en que convierto los números en letras en lugar de viceversa. Eso es porque así es como escribí mis intentos originales de una solución, antes de descubrir que no podía superar a Mitch sin copiar directamente su enfoque. ¡Así que considera ese ajuste mi único fragmento de originalidad!
fuente
Rubí,
4133Uso
Gracias a Vasu Adari por salvarme 8 bytes.
fuente
R,
5345 bytesVersión anterior a 53 bytes:
Uso:
fuente
MATLAB / Octave ,
3533 bytesPruébalo en línea!
La función anónima devuelve un 1 lógico si la entrada
x
es un pangrama, o un 0 lógico si no lo es.Esencialmente utiliza el mismo enfoque que la solución Pyth de @ ThomasKwa. La diferencia establecida entre todos los caracteres en el rango del alfabeto en mayúsculas (
65:91
) y la cadena de entrada (convertida a mayúsculas). Todos los caracteres que están en el alfabeto pero no en la cadena de entrada son devueltos porsetdiff
. Solo si la matriz devuelta por la diferencia establecida está vacía, la cadena es un pangrama.El uso de mayúsculas en lugar de minúsculas ahorra un par de bytes en comparación con
'a':'z'
porque el valor ASCII se puede utilizar en su lugar para hacer el rango.fuente
Haskell ,
59565351 bytesPruébalo en línea!
Explicación:
Dar una cadena de entrada
s
, para cadaa
en el rango de 65 a 90 (los códigos ASCII paraA
aZ
) se comprueba si cualquier carácter ens
es igual a cualquiera de los dosa
(el carácter caso superior) oa+32
(cuanto menor carácter caso), convertido a un caráctertoEnum
. Esto genera una lista de booleanos.and
comprueba si son todosTrue
.Versión antigua:
Para cada letra del alfabeto en mayúscula, verifique si alguna letra
s
en mayúscula es igual a ella.any(==a)s
es lo mismoelem a s
pero permite modificar los elementos des
antes de la comparación, en este caso, convertirlos a mayúsculas.fuente
Japt , 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
CJam, 11 bytes
Este es un programa completo. Pruébalo en línea .
Explicación:
fuente
Javascript,
110109999593 bytesGuardado 6 bytes gracias a Thomas Kwa, y 10 gracias en parte a ev3.
fuente
for(i=65;i++<91;)b+=!~a.indexOf(String.fromCharCode(i));alert(!b)
?05AB1E , 4 bytes (probablemente no compite)
Pruébalo en línea!
fuente
2sable ,
65 bytesVersión de 6 bytes:
Pruébalo en línea!
Explicación:
Versión de 5 bytes, inspirada en la respuesta 05AB1E de carusocomputing :
Pruébalo en línea!
Explicación:
fuente
Brachylog , 4 bytes
Pruébalo en línea!
fuente
TeaScript , 12 bytes
Primera publicación de TeaScript desde que maté a TeaScript: p
Pruébalo en línea
Sin golf
fuente
JavaScript ES6,
124114113 bytesEstoy seguro de que se puede jugar más al golf.
Genera una función anónima.
fuente
C, 107 bytes
fuente
ES6, 68 bytes
Esa cuerda se ve terriblemente derrochadora, pero no conozco una mejor manera.
fuente
s=>[...Array(x=9,26)].every(z=>RegExp((++x).toString(36),"i").test(s))
Scala,
594846 bytesfuente
Bash,
4542 bytesPrograma de 41 bytes, más 1 porque debe invocarse con
bash -e
:¡Sorprendentemente, logré una respuesta Bash sin comillas! (sí, lo comprobé con entradas que comienzan con
-f
y similares).Esto supone una localización donde las letras en inglés en minúsculas son contiguas de
a
az
. La entrada es a través del primer argumento para el programa.La forma en que esto funciona es, para cada letra alfabética
$i
, probamos si la cadena contiene$i
o su equivalente en mayúsculas${i^}
eliminando todos los demás caracteres. Si esto resulta en una cadena vacía, entonces la entrada no contenía esa letra, y salimos con1
(falso). Si tenemos un resultado no vacío, entonces pasamos la prueba y pasamos a la siguiente letra. Si la cadena de entrada contiene todas las letras en inglés, llegaremos al final del programa, saliendo así con0
(verdadero).fuente
Perl 5, 33 bytes
fuente
-pl61e '$i=$_;map$\*=$i=~/$_/i,a..z}{'
.PlatyPar , 14 bytes
Explicación (¡la función de visualizador de pila estará disponible próximamente!):
Si tuviera una función ridícula de "empujar todas las letras del alfabeto" sería 10 ...
Pruébalo en línea !
fuente
Pyke, 6 bytes
Pruébalo aquí!
fuente