Introdução
Para quem não sabe, um palíndromo é quando uma string é igual à string de trás para a frente (com exceção de interpunções, espaços etc.). Um exemplo de um palíndromo é:
abcdcba
Se você reverter isso, você terminará com:
abcdcba
Qual é o mesmo. Portanto, chamamos isso de palíndromo. Para palindromizar as coisas, vamos dar uma olhada no exemplo de uma string:
adbcb
Este não é um palíndromo. Para palindromizar isso, precisamos mesclar a sequência invertida na sequência inicial à direita da sequência inicial , deixando ambas as versões intactas. Quanto menor, melhor.
A primeira coisa que podemos tentar é o seguinte:
adbcb
bcbda
^^ ^^
Nem todos os caracteres correspondem, portanto, essa não é a posição correta para a sequência invertida. Demos um passo à direita:
adbcb
bcbda
^^^^
Isso também não corresponde a todos os caracteres. Vamos mais um passo à direita:
adbcb
bcbda
Desta vez, todos os caracteres correspondem . Podemos mesclar as duas strings deixando a intacta . O resultado final é:
adbcbda
Esta é a sequência palindromizada .
A tarefa
Dada uma sequência (com pelo menos um caractere) contendo apenas letras minúsculas (ou maiúsculas, se for melhor), produza a sequência palindromizada .
Casos de teste
Input Output
abcb abcba
hello hellolleh
bonobo bonobonob
radar radar
hex hexeh
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
fonte
obonobo
seria uma solução melhor para o caso de teste.bono b o nob
é uma frase inteira. Qual é a diferença entre Deus e Bono? Deus não vaguear Dublin fingindo ser Bono ;-)Respostas:
Geléia,
1110 bytesExperimente online!
Como funciona
fonte
Pyth (confirmação b93a874), 11 bytes
Suíte de teste
Este código explora um bug na versão atual do Pyth, confirme b93a874 . O erro é que
_IJ+zb
é analisado como se fosseq_J+zbJ+zb
, o que equivale a_I+zb+zb
, quando deveria (pela intenção de design do Pyth) ser analisado comoq_J+zbJ
, o que equivale a_I+zb
. Isso me permite salvar um byte - depois que o bug for corrigido, o código correto será.VkI_IJ+zbJB
. Vou explicar esse código.Basicamente, o código bruto força sobre todas as sequências possíveis até encontrar a sequência mais curta que pode ser anexada à entrada para formar um palíndromo e gerar a sequência combinada.
fonte
Python, 46 bytes
Se a sequência for um palíndromo, retorne-a. Caso contrário, coloque a primeira letra em torno do resultado recursivo do restante da sequência.
Exemplo de detalhamento:
fonte
s!=s[::-1]
)Haskell, 36 bytes
Mais facilmente:
Se a sequência for um palíndromo, retorne-a. Caso contrário, coloque a primeira letra em torno do resultado recursivo da cauda da corda.
A corda
s
é divididah:t
na segunda guarda, evitando um preenchedor1>0
para este caso. Isso é mais curto do ques@(h:t)
para a entrada.fonte
Pitão -
1612 bytes4 bytes salvos graças a @FryAmTheEggman.
FGITW, muito golfe possível.
Conjunto de Teste .
fonte
Brachylog ,
1665 bytes (Não concorrente)Experimente online!
Quando publiquei minha resposta inicial, ela ainda estava na antiga implementação em Java. Desde que reprogramei tudo no Prolog, ele agora funciona como deveria.
Explicação
A retropropagação faz com que o primeiro valor válido
A
encontrado seja o mais curto que você pode concatenar com a Entrada para torná-la um palíndromo.Solução alternativa, 5 bytes
É aproximadamente o mesmo que a resposta acima, exceto que, em vez de declarar "Saída é a concatenação da Entrada com uma sequência
A
", declaramos que "Saída é uma sequência para a qual a Entrada é um prefixo da Saída".fonte
JavaScript (ES6), 92 bytes
Calcula e corta a sobreposição entre a cadeia original e sua reversão.
fonte
Retina,
2925Experimente online!
Muito obrigado a Martin por 11 bytes salvos!
Isso apenas cria uma cópia invertida da string e junta-as. A única parte realmente chique disso é o método de reversão:,
O^#r`.\G
que é feito usando o modo de classificação. Classificamos as letras da segunda sequência (as que não são novas linhas e são consecutivas a partir do final da sequência, graças ao\G
) pelo seu valor numérico, que, como não há números, é 0. Então, invertemos ordem dos resultados dessa classificação estável com a^
opção Todo o crédito pelo uso sofisticado de\G
pertence a Martin :)fonte
CJam, 18
Experimente online
Explicação:
fonte
Lua,
8988 bytesEu venci o Javascript! \ o / Salvo 1 byte graças a @LeakyNun ^^
É um programa completo, recebe sua entrada como argumento da linha de comando.
destroçado
fonte
while
podem ser removidos?i=i+1end
?1end
como um número hexadecimal. Geralmente, você não pode usar[abcdef]
diretamente após um número sem que ele seja considerado um hexadecimal. Existe mais uma exceção0x
.Prolog, 43 bytes
Isso espera uma sequência de códigos como entrada, por exemplo, no SWI-Prolog 7:
a(`hello`).
Explicação
Esta é basicamente uma porta da minha resposta Brachylog.
fonte
Oitava,
7875 bytesEconomizou 3 bytes graças a Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ!
O ideone ainda falha em funções nomeadas, mas aqui está uma execução de teste do código como um programa.
fonte
Perl, 37 bytes
Com base na resposta do xnor.
Inclui +2 para
-lp
Execute com entrada no STDIN, por exemplo
palindromize.pl
:fonte
05AB1E , 18 bytes
Código:
Usa a codificação CP-1252 . Experimente online!
fonte
Pyke, 15 bytes
Experimente aqui!
fonte
J, 20 bytes
Este é um verbo monádico. Experimente aqui. Uso:
Explicação
Estou usando o fato de que a palindromização de S é S + reversa (P) , onde P é o prefixo mais curto de S cuja remoção resulta em um palíndromo. Em J, é um pouco complicado fazer uma pesquisa pelo primeiro elemento de uma matriz que satisfaça um predicado; daí a indexação.
fonte
Haskell, 68 bytes
Exemplo de uso:
f "abcb"
->"abcba"
.Pesquise
inits
a entradai
(por exemploinits "abcb"
- -["", "a", "ab", "abc", "abcb"]
) até encontrar uma em que ela é anexada ao contrário para criari
um palíndromo.fonte
r=reverse
precisa ir antesf i=
...?MATL ,
1716 bytesInspirado livremente na resposta CJam do @ aditsu .
Experimente online!
Explicação
fonte
Ruby, 44 bytes
Esta resposta é baseada nas soluções Python e Haskell da xnor .
fonte
==s?s:
??
entre?:
para ternário ea?x == 'x'
substituição usado desde Ruby 1.9Oracle SQL 11.2, 195 bytes
Sem golfe
fonte
Sério, 34 bytes
O último caractere é um espaço sem quebra (ASCII 127 ou
0x7F
).Experimente online!
Explicação:
fonte
C #, 202 bytes
Eu tentei.
Ungolfed:
Alguém pode me fornecer alguma idéia para agrupar as duas chamadas para .Reverse (). ToArray ()? Um método separado é mais bytes.
fonte
QBIC , 41 bytes
Explicação:
fonte
Haskell, 46 bytes
Gostaria de saber se existe uma maneira de remover o parêntese em
(f$tail l)++[l!!0]
...fonte