Este es un desafío bastante fácil.
Desafío
La entrada contendrá una cadena (no null
vacía) de una longitud máxima de 100. Emite el número de vocales en cada palabra de la cadena, separadas por espacios.
Reglas
- La cadena no tendrá más de 100 caracteres de longitud.
- La cadena sólo contendrá alfabetos
A-Z
,a-z
y también puede contener espacios. - La entrada se debe consumir desde los
stdin
argumentos de la línea de comando o. - La salida debe salir en el
stdout
. - Puede escribir un programa completo, o una función que tome la entrada del
stdin
y salga el resultado. - Las vocales que su programa / función necesita contar son
aeiou
yAEIOU
.
Casos de prueba
This is the first test case --> 1 1 1 1 1 2
one plus two equals three --> 2 1 1 3 2
aeiou AEIOU --> 5 5
psst --> 0
the quick brown fox jumped over the lazy dog --> 1 2 1 1 2 2 1 1 1
Puntuación
Este es el código de golf , por lo que gana el envío más corto (en bytes).
stdin
constdout
. No me gusta "obtener información" a través de los argumentos de la función. los argumentos de la línea de comandos parecen estar bien Lo he añadido a la publicación.The name "vowel" is often used for the symbols that represent vowel sounds in a language's writing system, particularly if the language uses an alphabet. In writing systems based on the Latin alphabet, the letters A, E, I, O, U, and sometimes Y are all used to represent vowels. However, not all of these letters represent vowels in all languages.
¿Qué quieres decir con vocales?Respuestas:
Pyth, 17 bytes
Solución directa. Pruébelo en línea: demostración o prueba de arnés
Explicación:
fuente
C,
11310810396 bytesGracias @ andrea-biondo por un ahorro particularmente agradable de 5 bytes.
Esto todavía se siente un poco hinchado, así que espero poder descifrar algunos bytes más tarde esta noche.
La parte interesante es quizás que
será
1
sic
es una vocal ASCII (mayúscula o minúscula) y0
para otros caracteresa-zA-Z
. La subexpresiónc-65&31
mapas'a'
y'A'
a0
,'b'
y'B'
a2
, etc. Cuando añadimos33
las vocales corresponden a los números33, 37, 41, 47, 53
, respectivamente, todos los cuales son (convenientemente) prime. En nuestro rango solo esos números se dividirán124701951 = 33*37*41*47*53
, es decir, solo para vocales, el resto124701951%(...)
será cero.EDITAR: De esta manera, uno puede considerar la expresión
!(n%((c-65&31)+s))
donde(n,s) = (124701951, 33)
determina si el personajec
es una vocal. En los comentarios, @andrea-biondo señaló que la pareja(n,s) = (2016,28)
también se puede usar en esta expresión para determinar la vocalidad. Dejaré la explicación actual en términos de números primos anteriores, pero la razón por la que funciona este emparejamiento más corto es porque en el rango 28-53 los únicos números con factores primos enteramente en el conjunto de factores primos de 2016 son 28, 32, 36, 42, 48, que corresponden precisamente a las vocales.EDIT2: otros 5 bytes guardados ya que
(c-65&31)+28
se pueden acortar ac%32+27
.EDITAR3: convertido a un bucle do-while para finalmente llegar a menos de 100 bytes.
Casos de prueba:
fuente
a;
afueramain
. De esta forma, reducir algunos bytes, ya que no es necesario declarara
enmain(...)
y también, no es necesario inicializara
desde el bucle.a
se reinicia en cada ciclo, por lo que no puede inicializarlo una vez a cero al declarar global. Escribí un pequeño bruteforcer para encontrar el(n, s)
par más pequeño tal quen%((c-65&31)+s)
sea cero para las vocales y no cero para las consonantes (az, AZ). Encontré(2016, 28)
y parece funcionar bien:!(2016%((c-65&31)+28))
es 5 caracteres más corto. De todos modos, muy buena solución :)CJam,
2119 bytesCómo funciona :
Pruébalo en línea aquí
fuente
R,
4443 bytesUngolfed + explicación:
fuente
Perl,
35343130
personajes+1
para-n
.Al igual que muchos códigos Perl, esto funciona de derecha a izquierda.
split
dividirá la línea ingresada en el espacio en blanco.map
ejecutará el código entre{}
cada palabra que se dividió.lc
hace que la palabra sea minúscula.=~y/aeiou//
nos dará el recuento de vocales..$"
agregará un espacio a la palabra.say
luego imprime todas las palabras!Corre con:
fuente
Python 3, 65 bytes
Muy sencillo, bastante legible.
w
significa palabra,c
significa carácter.fuente
Perl: 30 caracteres
(Tipo de fuerza las reglas: los números en la salida se separan con tantos espacios como las palabras de entrada).
Ejecución de muestra:
Perl: 27 caracteres
(Solo para mostrar lo corto que sería si no me olvidara del
y///
valor de retorno. Nuevamente. Ahora ve y vota la respuesta de chilemagic que me recordó ely///
valor de retorno. Otra vez).fuente
s!\w+!lc($&)=~y/aeiou//!ge
lo reduce a27
bytes (26 caracteres +1 para-p
.y///
. :(Rubí, 38 bytes.
Uso:
fuente
JavaScript ( ES6 ), 68
E / S a través de una ventana emergente. Ejecute el fragmento en Firefox para probar.
fuente
Rebol - 70
fuente
PowerShell, 35 bytes
¿Un poco aburrido, pero en realidad compitiendo por una vez? (PowerShell no distingue entre mayúsculas y minúsculas por defecto, woo)
fuente
echo <word> | code
, donde <word> es su palabra o fraseGolpe - 85
Explicación
read l
leer una línea de entradafor w in l
divide la línea en palabras usando un separador de espacios en blancox=${w//[^aouieAOUIE]/}
borra todo excepto las vocales de la palabra${#x}
es la longitud de la cadena resultante === número de vocalesfuente
while
..do
..done
sería más corto. Tampoco se necesita el último/
en la sustitución del patrón. Y un espacio literal único se escapa más corto de lo citado.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Julia,
76726965 bytesUngolfed + explicación:
Esto incluirá un único espacio final, que me dicen es legítimo.
fuente
Mathematica, 95 bytes
No voy a ganar ningún concurso, pero ...
fuente
InputString
embargo, no estoy seguro de que exista en la interfaz web, es un diálogo en Mathematica.)InputString
toma la siguiente línea de entrada.golflua, 55 bytes
Coincidencia de patrones básicos de vocales después de minúsculas forzadas. Un equivalente de Lua (sin golf) sería
fuente
gsub('[aeiouAEIOU]','')
y omitirlower()
.R , 139 bytes
Leer / escribir stdout () es terrible
fuente
cat()
lugar dewrite(..., stdout())
.Python 3, 72 bytes
Inspirado por la respuesta de @randomra . Es
la misma longitud unpoco más larga, pero usa expresiones regulares en lugar de comprensión de listas. También es menos legible.fuente
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Use nueva línea en lugar de;
si lo desea.)2
es el distintivo de mayúsculas y minúsculas) y dividido por" "
lo que puede haber 0 cosas de longitudPHP - 94
Versión sin golf
fuente
Objetivo-C, 223 bytes
No es el lenguaje más compacto, pero funciona.
Versión sin comprimir:
fuente
Matlab, 73 bytes
Su desafío no está muy claro (pero es interesante). Estoy asumiendo
a
,e
,i
,o
,u
.Código:
fuente
rs , 50 bytes
Esto no cuenta del todo; rs fue cargado alrededor de 2 semanas después de que esto fue publicado. Sin embargo, evidentemente esto no ganaría nada de todos modos, por lo que sigue siendo genial.
Demo en vivo.
La implementación es bastante sencilla:
fuente
Perl,
6045Gracias a kirbyfan64sos por salvarme 15 bytes, ¡eso realmente ayudó!
Tenga en cuenta que hay un espacio adicional al final de la salida.
fuente
split
mediante la configuración de agregar$/=" ";
, y puede acortar el prefijo de bucle awhile(<>)
. ¡Con esos dos cambios, el código se convierte en un$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
ahorro de 14 bytes!Haskell,
7668 bytesImplementación directa, no estoy seguro si hay algo para jugar golf aquí.
fuente
KDB (Q), 30 bytes
Explicación
Prueba
fuente
Smalltalk - 66
72Esto está en Smalltalk / X; Los nombres de stdin y stdout pueden ser diferentes en squeak / pharo.
En Smalltalk / X (y muchos otros dialectos), los símbolos entienden #value :, por lo que pueden abreviarse a 66 caracteres:
Si se codifica como una función que obtiene la cadena como argumento "s":
Por supuesto, en código real, uno usaría una función de utilidad "f", que devuelve un vector de los recuentos, e imprime eso. Sin embargo, el formato de salida no es exactamente lo que pidió el desafío:
fuente
Python 2, 76 bytes
Hice esto antes de ver cualquier otra solución, luego verifiqué para encontrar dos soluciones P3 que son más cortas :( Limitaciones de P2.
fuente
PowerShell, 65 bytes
prueba usando el siguiente patrón después de guardar como
vowels.ps1
De esta manera, es un script real y no solo un fragmento de código, lo que satisface la restricción:
"La entrada debe consumirse a partir de los argumentos de línea de comando o stdin".
fuente
Jalea , 7 bytes
Pruébalo en línea!
Encontrado con ayuda del Sr. Xcoder en el chat
Explicación
Si la salida debe estar separada por espacios, agregue
K
a al finalfuente
SAS, 72
El formato de E / S restrictivo para este realmente perjudica a este, ya que es responsable de 25 de los bytes aquí.
fuente
C # 186
fuente
AEIOU
.