Dada uma sequência como entrada, imprima uma ou mais variantes da sequência, de modo que:
- Nenhum personagem está em sua posição original
- Nenhum personagem é adjacente a um personagem ao qual ele era originalmente adjacente
Você pode supor que isso sempre seja possível para a sequência especificada e conterá apenas caracteres alfabéticos em maiúsculas e minúsculas ( [a-z]
ou [A-Z]
se você preferir)
Observe que duplicatas do mesmo caractere não são consideradas únicas.
Por exemplo, dada a entrada programming
, a saída não pode conter um m
no 7º ou 8º caractere e não pode conter um g
no 4º ou 11º caractere (1 indexado)
Exemplo:
Pegue a corda abcdef
O seguinte seria uma saída válida: daecfb
No entanto, o seguinte seria inválido: fdbcae
como neste exemplo c
e b
ainda é adjacente.
Adjacência também envolve, o que significa que você não pode fazer fdbeca
como f
e a
ainda é adjacente.
Casos de teste:
Observe que essas não são as únicas saídas válidas para as entradas fornecidas
Escrito como input -> output
:
helowi -> ioewhl
mayube -> euabmy
stephens -> nhseespt
aabcdeffghij -> dbfhjfigaeca
Pontuação:
Isso é código-golfe, e o menor número de bytes em cada idioma vence!
fonte
No character is adjacent to a character that it was originally adjacent to
. A ordem não importa para adjacência? Portanto, a entrada "abcd" não pode ter "ab" em lugar nenhum e também não pode ter "ba" em lugar algum?Respostas:
Geléia ,
2423 bytesExperimente online!
Extremamente longo em virtude de eu ser péssimo em Jelly, mas finalmente funciona, pelo menos ... ainda no processo de jogar golfe.
fonte
Python 2 , 185 bytes
Experimente online!
Imprime todas as strings válidas
fonte
mayube
,stephens
ehelowi
, parece trabalho para todos necessidade 3. I para fazer um validador de saída para fazer alguns testes mais intensivo emboraaabcdeffghij
, mas isso não significa que ele não funciona, só que demora mais de um minuto para que a entradaprint next(l for l in permutations(x) if not((g(l)|g(l[::-1]))&(g(x)|g(x[::-1]))or any(a==b for a,b in zip(x,l))))
`l`[2::5]
= /PHP> = 7.1, 147 bytes
Sandbox do PHP Online
PHP> = 7.1, 184 bytes
Use a distância levenshtein em vez de uma maneira Regex
Sandbox do PHP Online
PHP , 217 bytes
Versão sob 7.1
Experimente online!
fonte
helowi
, saídasioewlh
,i
eh
são adjacentesBraquilog , 21 bytes
Experimente online!
Explicação
Eu realmente gostaria
p.;?z≠ᵐ&j¬{s₂p~s~j}
de trabalhar por 2 bytes a menos, mas parece que~j
não é inteligente o suficiente ...fonte
PHP 7.1,
136131 bytesinspirado na solução da Jörg :
Execute como tubo
-r
ou teste-o online . (Verifique se a versão 7.1 ou superior do PHP está selecionada)Requer PHP 7.1; adicione 14 bytes para o PHP mais antigo: Substitua
$k-1
por($k?:strlen($a))-1
;(mais dois bytes para PHP <5.3:
$k?$k-1:strlen($a)-1
)demolir
fonte
$c=$a[$k=0], $d=$a[$k-1]
) via$s.$s
.PHP 7.1,
1871851721717380bytesExecute como tubo
-r
ou teste-o online . (Verifique se a versão 7.1.0 ou superior do PHP está selecionada!)demolir
fonte
mayube
, saídasyeuamb
,m
ea
são adjacentesRuby,
11097102 bytesExperimente online!
fonte
3594817062
como saída no seu link TIO.JavaScript 6, 116 bytes
fonte
Stax ,
2321 bytesExecute e depure online!
Obrigado por @recursive por salvar 2 bytes.
Leva muito tempo para ser executado. Uma versão mais razoável / viável é (apenas 2 bytes a mais)
Execute e depure online!
Explicação
Usa a versão descompactada para explicar.
fonte
G
. Você está executando{...}X!...x!
para executar o mesmo bloco duas vezes. Em geral, você pode reescrever isso comoG...G
com}...
no final do programa, como este .G
em outra postagem para salvar um byte, substituindo{...}*
porD...
. Eu acho que estou apenas ainda não completamente acostumado com isso ...