Um palíndromo é uma palavra que é seu próprio reverso.
Agora, existem algumas palavras que podem parecer palíndromos, mas não são. Por exemplo, considere a palavra sheesh
, sheesh
não é um palíndromo porque seu reverso é hseehs
diferente; no entanto, se considerarmos sh
uma única letra, é inverso sheesh
. Esse tipo de palavra chamaremos de semi-palíndromo.
Especificamente, uma palavra é um semi-palíndromo se pudermos dividir a palavra em um número de pedaços, de modo que, quando a ordem dos pedaços for revertida, a palavra original seja formada. (Para sheesh
esses pedaços sh e e sh
). Também não exigiremos que nenhum pedaço contenha letras de ambas as metades da palavra (caso contrário, cada palavra seria um semi-palíndromo). Por exemplo, rear
não é um semi-palíndromo porque r ea r
possui um pedaço ( ea
) que contém letras de ambos os lados da palavra original. Consideramos que o caractere central em uma palavra de comprimento ímpar não está em nenhum dos lados da palavra; portanto, para palavras com comprimento ímpar, o caractere central deve sempre estar em seu próprio pedaço.
Sua tarefa será pegar uma lista de números inteiros positivos e determinar se eles são um semi-palíndromo. Seu código deve gerar dois valores desiguais consistentes, um se a entrada for um semi-palíndromo e o outro caso contrário. No entanto, a sequência de bytes do seu código deve ser um semi-palíndromo .
As respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
[] -> True
[1] -> True
[2,1,2] -> True
[3,4,2,2,3,4] -> True
[3,5,1,3,5] -> True
[1,2,3,1] -> False
[1,2,3,3,4,1] -> False
[11,44,1,1] -> False
[1,3,2,4,1,2,3] -> False
Programa para gerar mais casos de teste.
emprestável apontou que estes são semelhantes aos palíndromos generalizados de Smarandache . Portanto, se você quiser ler mais, esse é o lugar para começar.
fonte
Respostas:
Retina 0.8.2 ,
8569 bytesExperimente online! Explicação:
Seleciona o modo de correspondência. De fato, o Retina usa como padrão o modo Corresponder para um programa de linha única, mas a segunda cópia do código sempre corresponderia, se não fosse por esses caracteres extras.
A partida deve começar do início.
Capture várias execuções de caracteres. Cada execução deve terminar em vírgula.
Opcionalmente, combine uma sequência de dígitos e uma vírgula.
Combine opcionalmente todas as capturas na ordem inversa, exibindo cada uma delas conforme corresponder.
A partida deve terminar no final.
Retroceda, a menos que todas as capturas tenham sido exibidas. Funciona exigindo que a correspondência ainda esteja no início da string, se tivermos uma captura não capturada, o que é impossível.
fonte
Geléia ,
2723 bytesRetorna 1 para semi-palíndromos, 0 caso contrário.
Experimente online!
Como funciona
fonte
Python 2 ,
157153147 147143 bytes-4 bytes graças ao tsh .
Experimente online!
fonte
x==x[::-1]
paralen(x)<2
salvar 2 * 2 bytes; 143 bytes05AB1E ,
59474341 bytes-12 bytes graças a @Emigna .
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
2ä
øøε.œ} `, economizando 6 bytes. Você também parecem ter deixado 30 bytes não utilizados no ...€
vez deε }
. :)05AB1E , 37 bytes
Utiliza aproximadamente a mesma técnica que Jonathan inventou.
Experimente online!
Programa completo. Recebe uma lista de STDIN, gera 1 ou 0 para STDOUT.
Mantenha as partições que atendem ao filtro ...
Esta condição: Os comprimentos de cada (
€g
) são armazenados em uma lista, cujos prefixos (η
) são somados (O
), fornecendo, portanto, as somas cumulativas da lista de comprimentos. Em seguida, a metade do teto da lista máxima é empurrada para a pilha - mas mantendo a lista original também (Z;î
) e, se ocorrer (å
) nas somas acumuladas, a função retornará verdade.Para cada um, compare (
Q
) a com um invertido, que são pressionados separadamente na pilha porÂ
. Retorna uma lista de 0 s e 1 s.Máximo. Se algum for verdade, então mais 1 será 0 . Finalize a execução. Tudo o que se segue é completamente ignorado.
fonte
Python 2 ,
275251205 bytes-24 bytes graças a @KevinCruijssen
-44 bytes graças a @PostLeftGhostHunter
-2 bytes adicionais graças a @KevinCruijssen
Retorna Verdadeiro para semi-palíndromo, Nenhum caso contrário
Experimente online!
fonte
Geléia ,
3332 bytes-1 Agradecimentos a Erik, o Outgolfer
Agradecemos também a Dennis por uma correção de bug e procurando alterar os detalhes de implementação no Jelly.
Rendimento de semi-palíndromos
1
, outros0
.Ou veja a suíte de testes .
Os únicos pedaços são os
ŒḂ
s ({3 ° e 4 ° } vs {29 ° e 30 ° } bytes), apenas para permitir a análise do código.Quão?
Todo o trabalho é realizado pelo lado direito - o "Link principal":
fonte
Perl 6 ,
8779 bytes-8 bytes com alguns truques da resposta de Jo King
Experimente online!
Resposta JavaScript do Port of tsh. Retorna dois objetos Regex diferentes.
fonte
Ruby , 129 bytes
Experimente online!
fonte
JavaScript (Node.js) , 139 bytes
Experimente online!
fonte
C (gcc) (X86), 216 bytes
Experimente online!
p(L,a,n)
retorna 0 se a matriza
de comprimentoL
for um semi-palíndromo, 1 caso contrário. Dado que todos os prefixos de comprimento>n
já estão marcados, ele compara o prefixo de comprimenton
com o sufixo de comprimenton
.p(L,a)
é o ponto de entrada.Infelizmente, a solução mais interessante é mais longa:
224 bytes
Experimente online!
Ungolfed:
fonte
Japonês , 66 bytes
Intérprete Japt
Grande melhoria nesta versão, atualmente supera a maioria das linguagens práticas. Agora opera em uma matriz de números inteiros, já que o método anterior teve um bug.
Explicação:
fonte
PHP 237 bytes
função recursiva, retorna
true
(para entrada contendo menos de dois elementos) ou1
para verdade,0
para falsidade. Experimente online (contém informações detalhadas).O comprimento real do código é 118 bytes; semi-palíndromo criado via duplicação de código.
Para um melhor desempenho, substitua
&
por&&
e insira!$x&&
antes++$i
.fonte
Scala, 252 bytes
Experimente online!
PS. Aparentemente, a solução é duas vezes mais longa apenas para satisfazer um requisito de que o código-fonte também seja semi-palíndromo.
PPS. Não é um candidato a código-golfe, mas uma solução puramente funcional usando a correspondência de padrões:
fonte
Perl 6 , 81 bytes
Experimente online!
Retorna a regex
/../
para True e a regex/^(.+)(.*)$0$/
para False. Funciona de maneira semelhante à resposta de nwellnhof , mas converte a lista em uma sequência de antemão.fonte