Entrada
Uma sequência de caracteres ASCII imprimíveis, por exemplo:
This is an example string.
Saída
Para cada consoante ( BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz
) que não é seguida por uma vogal ( AEIOUaeiou
), adicione a última vogal antes dela, em minúsculas.
As consoantes antes da primeira vogal são deixadas como estão :
Thisi isi ana examapale seterinigi.
Casos de teste
AN EXAMPLE WITH A LOT UPPERCASE (plus some lowercase)
=> ANa EXAMaPaLE WITiHi A LOTo UPuPEReCASE (pelusu some lowerecase)
And here comes a **TEST** case with 10% symbols/numbers(#)!
=> Anada here comese a **TESeTe** case witihi 10% siyimiboloso/numuberese(#)!
This is an example string.
=> Thisi isi ana examapale seterinigi.
abcdefghijklmnopqrstuvwxyz
=> abacadefegehijikiliminopoqorosotuvuwuxuyuzu
A pnm bnn
=> A panama banana
Tell me if you need more test cases!
=> Telele me ifi you neede more tesete casese!
Pontuação
Como se trata de código-golfe , a resposta com a menor contagem de bytes em cada idioma vence (nenhuma resposta será aceita).
A pnm bnn
!Respostas:
Retina , 48 bytes
Experimente online! Explicação: O lookahead procura um ponto não seguido por uma vogal, enquanto o lookbehind procura uma consoante imediatamente anterior e uma vogal anterior, que é inserida em letras minúsculas.
fonte
JavaScript (ES6),
108105 bytes(Economizou 3 bytes graças a @Shaggy.)
Pesquisa vogais ou consoantes sem a seguinte vogal:
(Não precisamos procurar consoantes explicitamente, porque as vogais são excluídas com base no
/[aeiou]|...
.)As vogais são armazenadas
v
e as consoantes sem a seguinte vogal foramv
inseridas:(Se
r[1]
existir, combinamos uma consoante mais uma vogal.)Se nada foi alterado, retornamos a entrada. Caso contrário, recuaremos na string substituída.
Mostrar snippet de código
fonte
s=>s.replace(/[aeiou][^a-z]*([a-z](?![aeiou]))+/gi,s=>s.replace(/(?!^)./g,a=>a+s[0].toLowerCase()))
Eu não posso parece ter problemas com sequências de não-cartas embora(s+=' ')
deve salvar alguns bytes.Python 2 ,
134119 bytesExperimente online!
EDIT: 15 bytes thx para Lynn
fonte
<vowels>.count
.ML padrão ,
225223 bytesExperimente online!
Menos golfe:
Experimente online!
fonte
it
e o uso do$
nome da variável.it
também, mas ainda não consegui fazer isso.sed 4.2.2 , 64 bytes
Experimente online!
fonte
Perl 5,
686759 bytesAqui está um ótimo exemplo da utilidade de
\K
, e eu não posso acreditar que não sabia sobre esse recurso antes de Dom Hastings apontá-lo.Eu não consegui obter o comportamento certo apenas usando
s///g
, então um loop real parece necessário. (É possível que o uso correto de uma declaração de look-behind possa funcionar sem uma explicação explícitawhile
- mas eu não a encontrei.)fonte
[aeiou])
a variável: Experimente on-line!JavaScript ES6, 115 bytes
Economiza 8 bytes graças a @ETHProductions
Consegui inflar isso mais no processo de jogar O_o, mas também corrige um bug
fonte
JavaScript,
8882 bytesFeito com uma única expressão regular:
Versão original (88 bytes):
Versão atualizada (82 bytes) após examinar a expressão regular de Neil :
fonte
Japonês
-P
, 28 bytesExperimente online!
Descompactado e como funciona
A
ó
função vence qualquer tipo de expressão regular.fonte
JavaScript (Node.js) ,
146143132127125 bytesExperimente online!
fonte
Perl 6 ,
75 73 7169 bytesTente
Tente
Tente
Tente
Expandido:
fonte
Python 3 , 125 bytes
Experimente online!
O Python 3.6 nos permite (ab) usar as strings f para reutilizar nosso conjunto de vogais (e por mais quatro caracteres salvos, o início de uma classe de caracteres regex invertida) mais barato (um
f
prefixo para cada string e, em seguida,{v}
conforme necessário, em vez do'+v+'
você precisaria com concatenação ou o[^aeiouAEIOU
inseriria literalmente.A regex que não corresponde a caracteres, apenas uma posição, evita problemas com as correspondências sem sobreposição exigidas pelas regexs normais e elimina a necessidade de referenciar novamente qualquer parte da correspondência; tudo o que usamos no objeto de correspondência é obter o índice de fatia que usamos para encontrar a vogal anterior.
Parcialmente de-golfe, seria algo como:
fonte
TSQL, 500 bytes
A tabela
i
é usada para entradafonte
SWI-Prolog, 593 bytes
Utilizado apenas predicados internos (sem regex ou biblioteca de manipulação de listas).
Uso:
fonte
Haskell ,
142130 bytesExperimente online!
A inicial
""&
é uma aplicação parcial da(&)
função definida posteriormente, e é colocada de maneira estranha para fazer o TIO contar os bytes em""&
, mas não os bytes que, em um programa completo, seriam necessários para atribuir isso a qualquer valor nomeado.Menos golfe:
Realmente deveria haver uma maneira de fazer isso de forma mais concisa com uma dobra em vez de recursão, mas não consegui descobrir.
fonte
f
não apareça no corpo: Experimente online!v = (
e você pode definirg
como um operador de infixo .g _""=""
na última posição economiza um byte:g _ x=x
(dois bytes se você alternar para o infixo, como sugere Laikoni).""&
para torná-lo uma função.05AB1E , 34 bytes
Experimente online!
Retiro que só consigo raspar 3 bytes dessa monstruosidade ... acho que poderia raspar o booleano, mas DEVE haver 3 casos. 1 para vogais. 1 para consoantes. 1 para o caso de existir um dígito / símbolo.
fonte
Powershell, 104 bytes
com base na expressão regular de Neil .
salve-o como
get-rememebere.ps1
. Script para teste:fonte
$t
. Relevante pós meta: codegolf.meta.stackexchange.com/a/8731/78123Vermelho , 276 bytes
Experimente online!
Legível:
fonte
Yabasic , 180 bytes
Um programa completo que recebe entrada de STDIN e envia para STDOUT
Experimente online!
fonte