Há um pequeno jogo de aquecimento improvisado em que você se organiza em círculo e envia zips, zaps e zops por aí, apontando para uma pessoa e dizendo a próxima palavra na sequência; eles fazem o mesmo até que todos estejam aquecidos ou tanto faz.
Sua tarefa é criar um programa que dê a próxima palavra em sequência, dada uma palavra de entrada. (Zip -> Zap -> Zop -> Zip) Como existem várias maneiras diferentes de dizer essas três palavras e emoções que podem ser adicionadas a elas, seu programa deve imitar a duplicação de maiúsculas e minúsculas e carregar sufixos.
Para elaborar, sua entrada será um ou mais Z
s, depois um ou mais I
s, A
s ou O
s (a mesma letra) e, em seguida, um ou mais P
s (todas as letras até este ponto podem estar em maiúsculas e minúsculas) seguidas por algum sufixo arbitrário (que pode estar vazio). Você deve deixar as execuções de Z
s e P
s, bem como o sufixo exatamente como recebido, mas depois alterar I
s para A
s, A
s para O
s ou O
s para I
s, preservando o caso a cada etapa.
Casos de teste de exemplo
zip ==> zap
zAp ==> zOp
ZOP ==> ZIP
ZiiP ==> ZaaP
ZZaapp ==> ZZoopp
zzzzOoOPppP ==> zzzzIiIPppP
Zipperoni ==> Zapperoni
ZAPsky ==> ZOPsky
ZoPtOn ==> ZiPtOn
zipzip ==> zapzip
zapzopzip ==> zopzopzip
zoopzaap ==> ziipzaap
Regras e Notas
- Você pode usar qualquer codificação de caracteres conveniente para entrada e saída, desde que ela suporte todas as letras ASCII e tenha sido criada antes deste desafio.
- Você pode assumir que a palavra de entrada é alguma variante de Zip, Zap ou Zop. Todas as outras entradas resultam em comportamento indefinido.
- Entradas válidas corresponderão totalmente à regex
Z+(I+|A+|O+)P+.*
(em caso misto)
- Entradas válidas corresponderão totalmente à regex
Golfe feliz!
z
e as primeirasp
. O sufixo pode conter qualquer coisa.Respostas:
JavaScript (Node.js) ,
69 63 5754 bytesExperimente online!
Quão?
Nós processamos a cadeia de entradas caractere por caractere.
Reutilizamoss como um sinalizador: assim que um valor numérico é armazenado nele, sabemos que não devemos atualizar mais nada.
Para identificar4 e os códigos ASCII das outras letras no início da cadeia (
"p"
(112) e"P"
(80), usamos o fato de que seus códigos ASCII são múltiplos de"z"
,"Z"
e vogais) não são.Para transformar uma vogal com o código ASCIIc em sua contraparte n mantendo
z
-aZ
inalterada, usamos a seguinte função:Comentado
fonte
C (gcc) ,
81 ... 61 4846 bytesGuardado 2 bytes graças a @Grimy
Porta da minha resposta JS . Saídas modificando a sequência de entrada.
Experimente online!
Comentado
fonte
*++s%4
em algum momento, mas esqueci a otimização resultante ...)Stax , 19 bytes
Execute e depure
fonte
Retina 0.8.2 , 21 bytes
Experimente online! Translitera letras até e inclusive a primeira
p
, embora a seçãoz
ep
não esteja na seção de transliteração não seja afetada. O primeiroO
é citado porque normalmente se expande13567
e o segundoo
é citado porque também é mágico; na primeira parte da transliteração, ela se expande para a outra string. A transliteração resultante é, portanto, deIAOIiaoi
para, emAOIiaoi
seguida, a remoção das letras de origem duplicadas resulta emIAOiao
paraAOIaoi
.fonte
C, 43 bytes
Experimente online!
Baseado na resposta de Arnauld . Fiz uma pesquisa de força bruta para encontrar a fórmula mais curta que gera a => o, o => i, i => a, z => z.
fonte
Japonês ,
2220 bytes-2 bytes graças a Oliver
Experimente online!
fonte
R ,
110bytes 76-36 bytes graças ao Krill
Esta função recebe uma entrada de uma sequência.
Experimente online!
fonte
s
que traduziremos e substituindo-a por uma cópia traduzida: 76 bytesPerl 6 ,
4133 bytesExperimente online!
Substituição simples que não diferencia maiúsculas de minúsculas para mudar a seção da vogal.
fonte
Python 3.8 (pré-lançamento) ,
8178 bytesExperimente online!
Python 2 , 98 bytes
Experimente online!
fonte
Java (JDK) , 52 bytes
Experimente online!
fonte
s->{for(int i=0;s[++i]%4>0;)s[i]^=s[i]%16*36%98%22;}
52 bytes .Perl 5, 31 bytes
TIO
fonte
SNOBOL4 (CSNOBOL4) , 183 bytes
Experimente online!
fonte
Python 2 , 84 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 60 bytes
Baseado na resposta C de Grimy.
Experimente online!
fonte
aoi
vogais, em vez de apenas as anteriores à primeirap
/P
. Uma coisa no golfe, no entanto:("iao".IndexOf((char)(c|32))+1)%4
pode ser-~"iao".IndexOf((char)(c|32))%4
C / C ++ (compilador VC ++) 192 bytes
esta é uma tentativa bastante ingênua, mas de qualquer maneira
alguma versão um pouco mais legível é essa
fonte
Ruby , 40 bytes
Experimente online!
fonte
05AB1E (herdado) , 22 bytes
Experimente online ou verifique todos os casos de teste .
Definitivamente pode ser jogado um pouco mais ..
Usa a versão herdada de 05AB1E em vez da reescrita do Elixir, porque
+
mescla campos em listas do mesmo comprimento, enquanto a nova versão precisaria de uma junção zip com par‚øJ
.Explicação:
fonte
PHP, 30 bytes
muito simples para um TiO:
Corra como cano com
-nF
. Para o PHP 7.2, coloque a string literal entre aspas.fonte
oia
vogais em vez de somente as anteriores à primeirap
/P
não é?