Introducción
¿Qué parte del alfabeto inglés usa una cadena dada? La oración anterior usa 77%. Tiene 20 letras únicas (howmucftenglisapbdvr) y 20/26 ≃ 0.77.
Reto
Para una cadena de entrada, devuelva el porcentaje de letras del alfabeto inglés presente en la cadena.
La respuesta puede ser en porcentaje o en forma decimal.
La cadena de entrada puede tener mayúsculas y minúsculas, así como signos de puntuación. Sin embargo, puede suponer que no tienen signos diacríticos o caracteres acentuados.
Casos de prueba
Entrada
"Did you put your name in the Goblet of Fire, Harry?" he asked calmly.
Algunas salidas válidas
77%, 76.9, 0.7692
Entrada:
The quick brown fox jumps over the lazy dog
Todas las salidas válidas:
100%, 100, 1
La salida esperada para "@#$%^&*?!"
y ""
es 0.
"@#$%^&*?!"
,""
77%
y76.9
se acepta, ¿se77
acepta también?Respuestas:
Python 3 , 42 bytes
Pruébalo en línea!
Filtramos todos los caracteres no alfabéticos fuera de la cadena tomando la diferencia (establecida) de las representaciones en mayúsculas y minúsculas. Luego, tomamos la longitud y la dividimos por 26.
Python 3 , 46 bytes
Pruébalo en línea!
Cuente los caracteres alfabéticos únicos (minúsculas) y divídalos entre 26. En Python 2, necesitaría 3 caracteres más; dos para cambiar
{*...}
aset(...)
, y uno para hacer un flotador26.
, para evitar la división del piso.Python 3 , 46 bytes
Pruébalo en línea!
Misma longitud, esencialmente la misma que la anterior, pero sin el método de cadena "incorporado".
fuente
1.0
y no1
? (No quería deshabilitarlo específicamente para que no perjudicara idiomas específicos, pero tengo curiosidad)//
, pero siempre sería una división de enteros, que obviamente no es lo que queremos aquí. Tiene sentido que no hicieran que el tipo de datos de la salida dependiera de los valores específicos de los operandos, lo que significa que siempre flota, incluso si se trata de un número entero.MATL , 8 bytes
Pruébalo en MATL Online
Explicación
fuente
Octava / MATLAB, 33 bytes
Pruébalo en línea!
Explicación
fuente
05AB1E ,
876 bytes-1 byte gracias a @LuisMendo .
Pruébelo en línea o verifique algunos casos de prueba más .
Alternativa de 6 bytes proporcionada por @Grimy :
Pruébelo en línea o verifique algunos casos de prueba más .
Ambos programas salen como decimales.
Explicación:
fuente
láêg₂/
también es un 6-byter.C # (compilador interactivo de Visual C #) ,
5649 bytesPruébalo en línea!
-6 bytes gracias a innat3
fuente
&&
a&
.APL (Dyalog Extended) , SBCS de 10 bytes
Función de prefijo tácito anónimo. Devuelve la fracción decimal.
Pruébalo en línea!
⌈
mayúscula⎕A∩
intersección con el alfabeto mayúscula A≢
longitud de cuenta∘
luego26÷⍨
dividir entre veintiséisfuente
⌹∘≤⍨⎕A∊⌈
Perl 6 ,
2724 bytes-3 bytes gracias a nwellnhof
Pruébalo en línea!
fuente
.lc
funcionaría también), desde un punto de vista de "corrección",.fc
podría ser mejor (particularmente si el desafío tenía letras que no estaban en inglés)Utilidades Bash y Gnu (
8178686042 bytes)-8 bytes gracias a @wastl
-18 bytes gracias a Nahuel usando algunos trucos que no sabía:
sort -f
egrep -i
ignorar casosort -u
es un reemplazo para| uniq
fuente
echo $(tr A-Z a-z|tr -cd a-z|fold -1|sort -u|wc -l)/26|bc -l
K (oK) ,
1915 bytesSolución:
Pruébalo en línea!
Explicación:
Convierta la entrada a minúsculas, módulo 97 ("az" es 97-122 en ASCII, el módulo 97 da 0-25), tome resultados únicos, resuman que sean inferiores a 26 y convierta al porcentaje de 26.
Notas:
1-%[;26]
=>1-1%26%
#(!26)^
=>+/26>?
fuente
97
está haciendo aquí%[;26]
->1%26%
1%26%#?(26>)#97!_
1%26%+/26>?97!_
para el 15PowerShell ,
5552 bytesPruébalo en línea!
Primer intento, aún intentando ideas aleatorias
EDITAR: @Veskah señaló que ToUpper guarda un byte debido al rango de números, también se eliminó
()
un espacio adicionalExpansión:
($args|% ToUpper|% ToCharArray|sort|get-unique|where{$_-in 65..90}).count/26
Cambia la cadena a todas
lasmayúsculas y minúsculas, se expande a una matriz, ordena los elementos y selecciona las letras únicas (gu necesita una entrada ordenada), mantiene solo caracteres de valor ASCII97 a 122 (de la a a la z)65 a 90 (de la A a la Z), cuenta el total y divide entre 26 para la salida decimalfuente
R , 47 bytes
Pruébalo en línea!
Convierte a mayúsculas y luego a puntos de código ASCII, y comprueba los valores 65:90 correspondientes a A: Z.
fuente
scan
para no dividirse entre comillas, como lo hace el valor predeterminado?Retina 0.8.2 , 45 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Letras minúsculas y eliminar puntuación.
Deduplicar
Multiplica por 100.
Añadir 13.
Entero dividir por 26 y convertir a decimal.
fuente
APL (Dyalog Extended) , 8 bytes
Pruébalo en línea!
basado libremente en la respuesta de Adám
⌈
mayúscula⎕A∊
vector booleano (0 o 1) de longitud 26 que indica qué letras del alfabeto inglés A están en la cadena⌹∘≤⍨
media aritmética, es decir, división matricial del argumento y un vector todo-1 de la misma longitudfuente
Carbón , 11 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. La salida es como un decimal (o
1
para pangramas). Explicación:fuente
Lote, 197 bytes
Toma entrada en STDIN y genera un porcentaje redondeado. Explicación:
Ingrese la cadena.
Elimine las citas, porque son un dolor de cabeza para tratar en Batch.
Comience con media letra para redondear.
Eliminar cada letra a su vez de la cadena. Invoque la subrutina para verificar si algo cambió, debido a la forma en que Batch analiza las variables.
Calcule el resultado como un porcentaje.
Inicio de subrutina.
Si eliminar una letra cambió la cadena, incremente el recuento de letras.
fuente
Pepe ,
155138 bytesPruébalo en línea!La salida está en forma decimal.
Explicación:
fuente
K (oK) , 19 bytes
Pruébalo en línea!
J , 30 bytes
Pruébalo en línea!
fuente
32!
es demasiado amplio - que hace que el resto de la golosina expresión algunos caracteres de puntuación como cartas, por ejemplo, trate de añadir:
en la entrada de ejemploRetina ,
574635 bytes-11 bytes inspirados en el truco de @Neil de agregar 13 unarios antes de dividir .
Otros -11 bytes gracias a @Neil directamente.
Redondea (correctamente) a un entero entero.
Pruébalo en línea.
5746Versión de 40 bytes que funciona con salida decimal:Mismos -11 bytes, así como -6 bytes adicionales gracias a @Neil .
15.3
15.4
Pruébalo en línea.
Explicación:
Convierta todas las letras a minúsculas:
Eliminar todas las no letras:
Uniquificar todas las letras:
Reemplace cada letra única con 1000 guiones bajos:
Cuente la cantidad de veces que caben 26 guiones bajos adyacentes:
Inserte un punto en el lugar correcto:
fuente
.*
Podría ser solo.
un ahorro de 1 byte, pero puede guardar otros 10 bytes usandoD
eduplicate en lugar de hacerlo manualmente!D
-builtin, ¡gracias! Y no estoy seguro de por qué lo usé en.*
lugar de.
... ¡Gracias por -11 bytes en ambas versiones! :)-1`\B
coincide directamente con la posición de inserción deseada.Java 8,
6259 bytes-3 bytes gracias a @ OlivierGrégoire .
Pruébalo en línea.
Explicación:
fuente
c&95
en combinación conc%91>64
por alguna razón. Creo que ya me has sugerido ese golf varias veces.s->{int r=0,b=0;for(var c:s)if((c&95)%91>64&&b<(b|=1<<c))r++;return r/26.;}
(75 bytes)Julia 1.0 , 34 bytes
Utiliza el vectorizado versión del operador ∈, verificando la contención en la cadena de todos los caracteres en el rango de a a z Luego suma el BitArray resultante y lo divide por el número total de letras posibles.
Pruébalo en línea!
fuente
C, 96 bytes
Pruébalo en línea!
fuente
Perl 5
-MList::Util=uniq -p
, 24 bytesPruébalo en línea!
fuente
Stax , 9 bytes
Ejecutar y depurarlo
fuente
u
y usarla|b
, pero los ahorros desaparecen con el embalaje. Puede que tenga un 8-byter, pero el intérprete en línea es raro y tiene errores.|b
. Muta incorrectamente su operando en lugar de hacer una copia. He creado un problema de github para el error. github.com/tomtheisen/stax/issues/29 Como solución alternativa,|b
funcionará correctamente la primera vez. Después de eso, es posible que deba volver a cargar la página. Si encuentra un error diferente, si puede proporcionar una reproducción, probablemente pueda solucionarlo.v
al inicio, insertar|b
despuésVa
, ejecutar, quitar el primerov
, quitar|b
, volver a embalar. Sí, ese es el error que encontré.Jalea , 8 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (Node.js) , 45 bytes
Pruébalo en línea!
JavaScript (Node.js) , 47 bytes
Pruébalo en línea!
fuente
Python 3 ,
5149 bytes51 -> 49 bytes, gracias a alexz02
Pruébalo en línea!
fuente
lambda s:len({*filter(str.isalpha,s.lower())})/26
Japt , 9 bytes
Intentalo
fuente
Python 2 , 57 bytes
Pruébalo en línea!
Un poco más largo que la respuesta de Python 3 de ArBo, pero publicado como un enfoque diferente en Python 2 de todos modos.
fuente
rubí
-n
,3834 bytes-4 bytes de @historcrat!
Pruébalo en línea!
fuente
C, 95 bytes
(nota: redondea hacia abajo)
Versión alternativa de retorno decimal (95 bytes):
Esto toma prestado algo de la respuesta de @Steadybox.
fuente