A Língua: Oppificação
Um idioma engraçado para falar é criado aplicando o seguinte processo a cada palavra:
- Coloque
op
após cada consoante. AssimCode
se tornaCopodope
.
Sim é isso. Para o propósito deste desafio, y
é sempre uma consoante.
O desafio: desoplificação
Dada uma palavra oprificada, retorne a palavra original. A entrada conterá apenas letras. A primeira letra pode ser maiúscula. A palavra original nunca estará vazia e sempre conterá uma vogal.
Casos de teste:
Oppified -> Original
a a
I I
itop it
opop op
Opop Op
popopop pop
Copopop Cop
opopopop opop
Kopicopkop Kick
Asopia Asia
soptopopop stop
hopoopopsop hoops
hopoopopedop hooped
ooooohop oooooh
aaaopopaaa aaaopaaa
Popopopsopicoplope Popsicle
gopaloplopopopinopgop galloping
aopopbopopopcopopop aopbopcop
code-golf
string
natural-language
mbomb007
fonte
fonte
op
, portanto, uma resposta semelhantereplace(/(.)op/, '\1')
não falhará em nenhum deles. Sugiro que você adicione uma palavra comohoop
oulooped
nos casos de teste.Respostas:
V ,
12, 5 bytesExperimente online!
Salvamos 7 bytes graças à percepção do @ Xnor de que, como a entrada sempre deve ser ativada, não precisamos verificar vogais.
fonte
...op
Está me fazendo rir maneira mais difícil do que deveriaRetina , 9 bytes
Experimente online!
Em vez de verificar se o caractere anterior é uma consoante, apenas garantimos que a corrente
op
não seja adjacente ao início da string ou à correspondência anterior. O único caso em que poderíamos corresponder a um incorretoop
é se a string original contiver umop
(resultando emopop
). Mas nesse caso, apenas removeremos o primeiro emop
vez do segundo e o resultado será o mesmo.fonte
loop
?loop
não é uma entrada válida porque você não pode obtê-la ao oprimir outra palavra.lopoop
(a versão opcificada deloop
) é válida e não é desopiladaloop
.loop
élopoopop
.Python , 42 bytes
Experimente online!
Se não me engano, você pode simplesmente substituir todos
?op
com?
sem se preocupar com vogais. Se a string original contiverop
, ela será ativadaopop
e a substituição a retornaráop
e não mais. Isso ocorre porque o padrão corresponde a?op
não pode se sobrepor, portanto, apenas umop
é removido.Uma solução não regex tem 5 bytes a mais.
Python , 47 bytes
Experimente online
fonte
re
depois de referenciá-lo‽Perl 5 , 10 + 1 = 11 bytes
Experimente online!
Corra com
-p
(penalidade de 1 byte); idiomas de golfe podem executar E / S implícita automaticamente, mas o Perl precisa de uma opção para isso.Quando vi a resposta do @ xnor , percebi que ela poderia ser melhorada usando um recurso regex específico do Perl;
s/a\Kb/c/g
é equivalente as/ab/ac/g
(em outras palavras, os///
único substitui as coisas após o primeiro\K
). Então, veja como fica no Perl.fonte
Retina ,
158 bytesExperimente online!
-7 bytes graças a Kevin Cruijssen
fonte
[^aeiou]
por.
. Veja a explicação de @xnor em sua resposta em Python .Go ,
10392 bytesDeve ... compilar ... As funções internas do Go têm nomes estranhos. : P
Experimente online!
fonte
Haskell (
936261 bytes)graças às sugestões @nimi nos comentários!
fonte
v
eo
apenas uma vez, é possível incorporá-lo.notElem
é mais curto quenot(...elem...)
. Você pode substituir o&&
em uma proteção por a,
. O último caso paraa
pode ser escrito comoa x=x
. Não há necessidade de()
nosx:(a r)
.=="op"
pode ser substituído por uma correspondência literal de padrão:a(x:'o':'p':r)|notElem x"aeiouAEIOU"=x:a r
x
e"
.PHP , 36 bytes
Experimente online!
fonte
preg_replace
para consertar.$argn
é uma variável reservada que é availbale quando o PHP é executado com a-R
opção da linha de comandoJaponês , 9 bytes
Experimente online
fonte
JavaScript (ES6), 35 bytes
Adicione
f=
no início e chame likef(arg)
.Estou surpreso que ninguém postou uma solução JavaScript ainda ...
Snippet de teste
fonte
C (gcc) , 83 bytes
Experimente online!
fonte
/// , 18 bytes
Experimente online!
Observe que esse snippet deseja substituir
op
por a.
, mas mais tarde há uma substituição definida ondeop
está sendo colocada de volta na string. Essa segunda instruçãoop
substitui a por a.
(e, portanto, insere a.
no resultado final), então usei a\
entre theo
ep
para quebrar o padrão.fonte
APL (Dyalog) , 13 bytes
Experimente online!
Simplesmente PCRE R moran Jr. qualquer caractere seguido por "op" com o próprio caráter.
fonte
Cristal, 39 bytes
Como funciona
Ele simplesmente procura cada consoante, seguido pela sequência
op
. Se assim for, substituir essa seqüência somente com a consoante encontrado antes:([^aeiou])
.Experimente online
fonte
Java 8,
3626 bytes-10 bytes substituindo
[^aeiou]
por.
, graças à explicação de @xnor em sua resposta em Python .Experimente aqui.
fonte
Ruby ,
342722 + 1 = 23 bytes-4 bytes graças ao RJHunter.
+1 byte para o
-p
sinalizador.Experimente online!
fonte
-p
opção Ruby custará um byte, mas permitirá que seu script inicie diretamentegsub
.sed, 22 bytes
Lê de STDIN até EOF e gera string desaprovada
Utiliza a mesma técnica de redução de comprimento da resposta Python do @ xnor
fonte
R , 29 bytes
Experimente online!
Muito parecido com a maioria das outras soluções aqui, captura o caractere seguido por op e o substitui pelo próprio caractere.
fonte