Não gosto de cordas com mais de três vogais seguidas. Você pode escrever um programa que remove todas as vogais que eu não quero das palavras?
Você pode escrever um programa ou função, recebendo entrada via STDIN (ou alternativa mais próxima), argumento da linha de comando ou argumento da função e emitindo o resultado via STDOUT (ou alternativa mais próxima), valor de retorno da função ou parâmetro da função (saída).
Entrada é uma sequência que contém apenas caracteres ASCII imprimíveis (0x20 a 0x7E, inclusive).
Saída é uma string que contém apenas execuções de no máximo 3 vogais consecutivas. Se houver uma execução de mais de 3 vogais consecutivas na cadeia de entrada, seu programa deverá produzir uma cadeia de saída incluindo as três primeiras vogais encontradas nessa execução, descartando outras vogais consecutivas.
Y não é uma vogal para os propósitos deste desafio.
Este é o código golf, portanto o código mais curto (em bytes) vence.
Casos de teste
"Aeiou" => "Aei"
"screeeen" => "screeen"
"We're queueing up for the Hawaiian movie." => "We're queung up for the Hawaiin movie."
"Spaces break runs: aei iou." => "Spaces break runs: aei iou."
aaYYAAaaaAERGH
.Respostas:
Pitão, 21 bytes
Experimente on-line: Demonstration or Test Suite
Explicação:
Eu percorro todos os caracteres e acompanho quantas vogais eu passei usando um contador. Toda vez que passo um caractere, que não é uma vogal, redefino o contador para 0. Recolojo os caracteres sempre que o contador for> 4.
fonte
Ilegível , 1647 bytes
Explicação
Este programa é equivalente ao pseudocódigo assim:
com as seguintes atribuições de variáveis:
Como você pode ver, evitei o slot variável 0 porque
0
é uma constante tão longa para escrever.Então, lemos cada caractere e armazenamos o valor em ambos
cp
ech
. Nós modificaremos,cp
mas manteremos porch
aí para que possamos imprimi-lo, se necessário. Subtraímos sucessivamente os números 65, 4, 4, 6 etc. decp
para verificar se é um dos 10 caracteres possíveis de vogal em ASCII (observe que o último não precisa ser uma tarefa).vs
sempre contém 3 menos que o número de vogais que ainda podem ser impressas. Começa às0
, para que 3 vogais possam ser impressas. Quando chega-3
, paramos de imprimir vogais.Se encontrarmos uma não vogal (incluindo o espaço), executamos
print(ch)
seguidos porvs = 0
. Como você provavelmente adivinhou, isso redefine o contador de vogais.Se encontrarmos uma vogal , executamos
((--vs)+4) ? print(ch) : (++vs)
. Vamos dividir isso:vs
;-4
, temos ido longe demais, por isso não imprimir nada, mas de incrementovs
de volta para-3
isso vamos continuar a recusar-se a imprimir vogais;fonte
Retina , 25 bytes
Experimente online.
Substituição de expressões regulares bastante simples. Isso também funciona para a mesma contagem de bytes:
fonte
JavaScript (ES6), 42
Como uma função anônima
fonte
Perl, 27 caracteres
(Código de 26 caracteres + opção de linha de comando de 1 caractere)
Não é grande coisa, apenas uma ocasião rara que me lembro de
\K
existir.Exemplo de execução:
fonte
\K
". :)s/([aeiou]{1,3})(?1)+/$1/gi
.Sério, 34 bytes
Hex Dump:
Experimente online
Ele usa o mesmo algoritmo da resposta Pyth, mapeando a sequência e mantendo o controle do comprimento da execução atual das vogais em um registro, incrementando-o sempre que o caractere atual for uma vogal e verificando se excedeu o comprimento permitido, retornando 0, se sim, e filtrando a sequência original com este filtro gerado. Será muito mais curto quando pudermos usar a subtração de conjunto em strings. (O
Ok
pode ser excluído e oOkd
pode ser substituído por apenas@
). Ouvi dizer que esse recurso está chegando na próxima atualização ....fonte
C, 166 bytes
não é a resposta mais curta, de longe, mas bem jogado, acho ..
caso de teste:
fonte
Mathematica, 68 bytes
A resposta do regex teria o mesmo tamanho, mas quem usa o regex?
fonte
Java, 115 bytes
Espera entrada como parâmetro do programa.
Saída do teste de unidade:
fonte
String[]
ea
.String[]a
print
vez deprintln
. Não acredito que a especificação exija uma nova linha à direita.APL, 40 caracteres
Em inglês:
'aeiouAEIOU'∊⍨' ',⍵
: encontre as vogais (e coloque um espaço para quebrar na rotação);(1-⍳4)⌽¨⊂
: gire 0, 1, 2, 3 vezes (com contorno) empurrando para a direita o vetor booleano;⊃+/ sum
: as rotações e unbox1↓4≠
: encontre o diferente de 4 e remova o primeiro (para reunir o espaço que acrescentamos)⍵/⍨
: no argumento, mantenha apenas o elemento em que a soma foi diferente de 4.fonte
Perl 6 ,
3635 bytesuso:
fonte
C (205 bytes)
(Uma quebra de linha adicionada para maior clareza)
fonte
Scala, 107 bytes
fonte
Javascript ES6, 43 caracteres
Teste:
fonte
x. arquivo .COM do MS-DOS ,
44 bytes36 bytesOs arquivos .COM são amplamente suportados pelo MS-DOS 1 até o presente --- Estou executando no dosemu, usando apenas os comandos 8086.
Reduzido de 44 para 36 bytes usando o REPNE SCASB para testar vogais em vez de usar um comando separado para testar cada vogal.
fonte
Matlab / Octave, 54 bytes
Exemplo:
Experimente em ideone .
fonte
V , 21 bytes (não competitivo)
Experimente online!
Explicação:
Isso é apenas um pouco mais curto que a solução mais direta:
(22 bytes)
fonte
Ruby, 44 bytes
Exemplo:
fonte
$<.read
para manipular a entrada de várias linhas (contendo, portanto, caracteres fora do intervalo 0x0a) em vez degets
?