O código mais curto que encontra todos os "subpalíndromos" exclusivos de uma sequência, ou seja: qualquer substring com comprimento> 1 que seja um palíndromo.
eg.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
eg.2
input: "3333"
output: "33", "333", "3333"
code-golf
string
palindrome
subsequence
Eelvex
fonte
fonte
333
? Ingenuamente você acaba imprimindo33
duas vezesRespostas:
J, 24
3140Uso da amostra:
Tome isso, GolfScript!
fonte
/dev/random
aqui para nos enganar ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 caracteres)?Python 124
fonte
Haskell 98, 88
9196fonte
Python -
138136Este código não duplica sub-palíndromos.
fonte
'"'+t+'"'
parat
para economizar espaço, embora use aspas simples.Ruby -
126 10297 caracteresfonte
Golfscript, 48 caracteres
subpalindrome.gs
Uso:
A primeira operação
{,}{(;}/
transforma uma string em uma lista de substrings finais. Uma transformação de substrings principais semelhante é mapeada sobre o resultado. Em seguida, aplane com{+}*
, filtre os palíndromos usando o predicado.,1>\.-1%=*
, obtenha valores exclusivos.&
e depois imprima.Seria melhor extrair a transformação de substrings finais como um bloco e reutilizá-los como um substituto para substrings principais depois de reverter cada substring final, mas não consigo descobrir uma maneira sucinta de fazer isso.
fonte
Haskell -
170, 153fonte
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
pormain=getLine>>=putStrLn.intercalate", ".toList.p
. Eu também substituiria uma ligaçãop
com seu corpo.subsequences
! Seu programa relata mais subpalíndromos do que a saída de referência, por exemplo 1. ("1111", por exemplo)J, 48
por exemplo
fonte
Prolog, 92
Uso da amostra:
fonte
Windows PowerShell, 104
109111Isso espera a entrada no stdin e lançará todos os palíndromos encontrados um por linha no stdout:
(Quando executado,
cmd
ele se tornaecho 12131331|powershell -file subp.ps1
- é apenas que$input
assume um significado ligeiramente diferente, dependendo de como o script foi chamado, mas pode ser stdin, mas não de maneira interativa.)2011-01-30 13:57 (111) - Primeira tentativa.
2011-01-30 13:59 (109) - Declaração variável embutida.
02-06-2011 13:18 (104) - Refone a descoberta de substring juntando-se a uma matriz char em vez de chamar
.Substring()
e inline um pouco mais.fonte
Q, 78
uso
fonte
Retina ,
3427 bytesExperimente online!
O conjunto de testes precisa de um
M
porque é seguido por outro estágio para inserir linhas vazias entre os casos de teste.Explicação
Imprima (
!
) todas as correspondências exclusivas (@
), sobrepostas (&
) da regex(.)+.?(?<-1>\1)+(?(1)^)
. Isso corresponde a um palíndromo de comprimento 2 ou mais usando grupos de balanceamento. Há uma ressalva na parte "todas as partidas sobrepostas": podemos obter no máximo uma partida por posição inicial. No entanto, se dois palíndromos de comprimento diferente começarem na mesma posição, o palíndromo mais curto aparecerá novamente no final do palíndromo mais longo. E como a ganância de+
priorizar correspondências mais longas, estamos recebendo todos os palíndromos de qualquer maneira.fonte
05AB1E ,
1110 bytesExperimente online!
fonte
1›
para≠
. :)Perl, 112
fonte
JavaScript (ES6), 120 bytes
Esta função pega uma string como entrada e gera uma matriz.
fonte
Clojure, 81 bytes
for
foi uma combinação perfeita aqui :) Poderia usar:when(=(reverse p)p)
se a entrada fosse uma lista de caracteres OU uma sequência completa não contasse como um palíndromo, na verdade, nesse caso, o intervalo máximo de tambémi
poderia ser(count %)
.Estojo mais compacto para referência:
fonte
Python, 83
102caracteresA frase
(t[1:]or())and...
é equivalente(...)if t[1:]else()
e salva um caractere! Estou muito orgulhoso disso, dada a economia.Exemplo:
fonte
Scala 127
Para manter essa comparação de maçãs com maçãs com a outra resposta do Scala, também fiz do meu um objeto que estende o App. Em vez de iterar a sequência de entrada manualmente e usar substring, aproveitei o slide () para criar uma sequência de todas as substrings para mim.
fonte
Scala 156
170fonte
Perl 6 ,
3532 bytesTeste-o
Teste-o
Expandido:
fonte
Coco , 69 bytes
Experimente online!
Python 2 , 73 bytes
Experimente online!
fonte
Geléia , 9 bytes
Experimente online!
fonte
APL (Dyalog Classic) , 27 bytes
Experimente online!
fonte
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
é válido.Japonês , 14 bytes
Experimente online!
Explicação:
fonte
PowerShell , 99 bytes
Experimente online!
Menos golfe:
fonte
Braquilog , 11 bytes
Experimente online!
(O cabeçalho do link está quebrado no momento da postagem, então aqui está o predicado (função equivalente no Brachylog) apenas no primeiro caso de teste, com um
w
no final para realmente imprimir a saída.)Sinto que há uma maneira mais curta de verificar se o comprimento é maior que 1. (Se não filtrasse palíndromos triviais, seria apenas
{s.↔}ᵘ
).fonte
APL (NARS), 65 caracteres, 130 bytes
teste:
alguém sabe melhor o porquê e pode explicar isso melhor, livre de alterações, tudo isso ... Não tenho tanta certeza desse código, possível se os exemplos de teste forem mais numerosos, algo vai dar errado ...
fonte
Japonês , 9 bytes
Tente
fonte
Java 8,
202201199 bytesExperimente aqui.
Se uma função não for permitida e um programa completo for necessário,
serão256255253 bytes :Experimente aqui.
Explicação:
fonte
JavaScript (ES6), 107 bytes
Retorna um conjunto .
Casos de teste
Mostrar snippet de código
fonte