Este é um desafio bastante fácil.
Desafio
A entrada conterá uma sequência (não null
vazia ou) de comprimento máximo 100. Emita o número de vogais em cada palavra da sequência, separadas por espaços.
Regras
- A cadeia não terá mais de 100 caracteres.
- A string conterá somente alfabetos
A-Z
,a-z
e também pode conter espaços. - A entrada deve ser consumida a partir dos
stdin
argumentos da linha de comandos. - A saída deve ser emitida no
stdout
. - Você pode escrever um programa completo ou uma função que recebe entrada do
stdin
e gera o resultado. - As vogais que seu programa / função precisa contar são
aeiou
eAEIOU
.
Casos de teste
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
Pontuação
Isso é código-golfe , então o envio mais curto (em bytes) vence.
stdin
comstdout
. Eu não gosto de "obter entrada" através dos argumentos da função. argumentos de linha de comando parece ok. Eu adicionei no post.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.
O que você quer dizer com vogais?Respostas:
Pitão, 17 bytes
Solução simples. Experimente on-line: demonstração ou equipamento de teste
Explicação:
fonte
C,
113 108 10396 bytesObrigado @ andrea-biondo por uma economia particularmente agradável de 5 bytes.
Isso ainda parece meio inchado, então espero que eu consiga baixar alguns bytes mais tarde esta noite.
A parte interessante é talvez que
será
1
ifc
é uma vogal ASCII (maiúscula ou minúscula) e0
para outros caracteresa-zA-Z
. A subexpressãoc-65&31
mapeia'a'
e'A'
para0
,'b'
e'B'
para2
etc. Quando adicionamos33
as vogais correspondem aos números33, 37, 41, 47, 53
respectivamente, todos (convenientemente) primos. No nosso intervalo, apenas esses números serão divididos124701951 = 33*37*41*47*53
, ou seja, apenas para as vogais o restante124701951%(...)
será zero.EDIT: Desta forma, pode-se considerar a expressão
!(n%((c-65&31)+s))
onde(n,s) = (124701951, 33)
determina se o personagemc
é uma vogal. Nos comentários, @ andrea-biondo apontou que o par(n,s) = (2016,28)
também pode ser usado nesta expressão para determinar o vowelhood. Deixarei a explicação atual em termos de números primos acima, mas a razão pela qual esse emparelhamento mais curto funciona é novamente porque no intervalo de 28 a 53 os únicos números com fatores primos inteiramente no conjunto de fatores primos de 2016 são 28, 32, 36, 42, 48, que correspondem precisamente às vogais.EDIT2: Outros 5 bytes salvos desde que
(c-65&31)+28
podem ser reduzidos parac%32+27
.EDIT3: convertido em um loop do-while para finalmente obtê-lo abaixo de 100 bytes.
Casos de teste:
fonte
a;
foramain
. Dessa forma, você reduzir alguns bytes que você não precisa declarara
emmain(...)
e também, não precisam para inicializara
a partir do loop.a
é reinicializado a cada loop, então você não pode inicializá-lo uma vez para zero declarando global. Eu escrevi um pequeno bruteforcer para encontrar o menor(n, s)
par tal quen%((c-65&31)+s)
é zero para vogais e diferente de zero para consoantes (az, AZ). Descobri(2016, 28)
e parece funcionar bem:!(2016%((c-65&31)+28))
são 5 caracteres mais curtos. Enfim, solução muito legal :) #CJam,
2119 bytesComo funciona :
Experimente online aqui
fonte
R,
4443 bytesUngolfed + explicação:
fonte
Perl,
35343130
caracteres+1
para-n
.Como muitos códigos Perl, isso funciona da direita para a esquerda.
split
dividirá a linha inserida no espaço em branco.map
executará o código entre{}
cada palavra que foi dividida.lc
torna a palavra minúscula.=~y/aeiou//
nos dará a contagem de vogais..$"
acrescentará um espaço à palavra.say
depois imprime todas as palavras!Correr com:
fonte
Python 3, 65 bytes
Muito simples, bastante legível.
w
significa palavra,c
significa caráter.fonte
Perl: 30 caracteres
(Tipo de força as regras: os números na saída são separados com tantos espaços quanto as palavras de entrada).
Exemplo de execução:
Perl: 27 caracteres
(Apenas para mostrar quão curto seria se eu não esquecesse
y///
o valor de retorno de. Mais uma vez. Agora vá e vote novamente na resposta da chilemagic , que me lembrouy///
o valor de retorno de.fonte
s!\w+!lc($&)=~y/aeiou//!ge
reduz para27
bytes (26 caracteres +1 para o-p
.y///
. :(Ruby, 38 bytes
Uso:
fonte
JavaScript ( ES6 ), 68
E / S via pop-up. Execute o trecho no Firefox para testar.
fonte
Rebol - 70
fonte
PowerShell, 35 bytes
Meio chato, mas realmente competindo pela primeira vez? (Por padrão, o PowerShell não diferencia maiúsculas de minúsculas)
fonte
echo <word> | code
, onde <word> é a sua palavra ou fraseBash - 85
Explicação
read l
leia uma linha da entradafor w in l
divide a linha em palavras usando o separador de espaço em brancox=${w//[^aouieAOUIE]/}
exclui todas as vogais, exceto as da palavra${#x}
é o comprimento da sequência resultante === número de vogaisfonte
while
..do
..done
seria mais curto. Também não é necessário o último/
na substituição de padrão. E um único espaço literal é mais curto que o citado.read l;for w in $l;do x=${w//[^aouieAOUIE]};echo -n ${#x}\ ;done;echo
Julia,
76726965 bytesUngolfed + explicação:
Isso incluirá um único espaço à direita, que me disseram ser legítimo.
fonte
Mathematica, 95 bytes
Não vai ganhar nenhum concurso, mas ...
fonte
InputString
existe certeza na interface da Web, é uma caixa de diálogo no Mathematica.) #InputString
assume a próxima linha de entrada.golflua, 55 bytes
Correspondência básica de vogais após minúsculas forçadas. Um equivalente Lua (não destruído) seria
fonte
gsub('[aeiouAEIOU]','')
e pularlower()
.R , 139 bytes
Ler / escrever stdout () é terrível
fonte
cat()
vez dewrite(..., stdout())
.Python 3, 72 bytes
Inspirado por @randomra 's resposta . Tem
o mesmo comprimentoum pouco mais, mas usando regex em vez de compreensão de lista. Também é menos legível.fonte
import re;print(*map(len,re.sub("[^aeiou ]","",input()).split()))
. (Uso de nova linha, em vez de;
se você quiser.)2
é o caso da bandeira insensitive) e dividir por" "
assim lá pode ser 0 comprimento coisasPHP - 94
Versão ungolfed
fonte
Objective-C, 223 bytes
Não é a linguagem mais compacta, mas funciona.
Versão não compactada:
fonte
Matlab, 73 bytes
Seu desafio não é muito claro (mas é interessante). Estou assumindo
a
,e
,i
,o
,u
.Código:
fonte
rs , 50 bytes
Isso não conta muito; O rs foi enviado cerca de 2 semanas após o lançamento. No entanto, evidentemente, isso não ganharia nada, então ainda é legal.
Demonstração ao vivo.
A implementação é bastante direta:
fonte
Perl,
6045Obrigado a kirbyfan64sos por me salvar 15 bytes - isso realmente ajudou!
Observe que há um espaço extra no final da saída.
fonte
split
configurando a adição$/=" ";
e pode colocar o prefixo do loop em curtowhile(<>)
. Com essas duas alterações, o código se torna$/=" ";while(<>){$n=()=/[aeiou]/gi;print"$n "}
, economizando 14 bytes!Haskell,
7668 bytesImplementação direta, não tenho certeza se há algo para jogar aqui.
fonte
KDB (Q), 30 bytes
Explicação
Teste
fonte
Smalltalk - 66
72Isso está no Smalltalk / X; os nomes para stdin e stdout podem ser diferentes em squeak / pharo.
No Smalltalk / X (e em muitos outros dialetos), os símbolos entendem #value :, portanto, pode ser abreviado para 66 caracteres:
Se codificado como uma função que obtém a string como argumento "s":
Obviamente, no código real, alguém usaria a função utilitário "f", que retorna um vetor das contagens e imprime isso. No entanto, o formato de saída não é exatamente o que o desafio solicitou:
fonte
Python 2, 76 bytes
Eu fiz isso antes de encontrar qualquer outra solução, depois verifiquei para encontrar duas soluções P3 mais curtas :( Limitações P2 malditas.
fonte
PowerShell, 65 bytes
teste usando o padrão abaixo após salvar como
vowels.ps1
Dessa forma, é um script real e não apenas um trecho de código, satisfazendo a restrição:
"A entrada deve ser consumida a partir dos argumentos stdin ou da linha de comando."
fonte
Geléia , 7 bytes
Experimente online!
Encontrado com a ajuda do Sr. Xcoder em chat
Explicação
Se a saída precisar ser separada por espaço, anexe
K
a no finalfonte
SAS, 72
O formato restritivo de E / S para este realmente prejudica este, pois é responsável por 25 dos bytes aqui.
fonte
C # 186
fonte
AEIOU
.