Dada uma sequência l
, encontre todas as substrings palindrômicas p
de l
(incluindo duplicatas e cadeias de caracteres únicos). Em seguida, reorganize todas as sub-strings em p
um palíndromo válido (pode haver várias respostas corretas). Se não for possível reorganizar p
em um único palíndromo, seu programa poderá ter um comportamento indefinido (erro, estouro de pilha, saída, suspensão / assassinato prematuro de John Dvorak, etc ...)
Exemplos
Casos de teste válidos
l = anaa
p = ['a', 'n', 'a', 'a', 'aa', 'ana']
result = anaaaaana or aanaaanaa or aaananaaa
l = 1213235
p = ['1', '2', '1', '3', '2', '3', '5', '121', '323']
result = 1213235323121
l = racecar
p = ['r', 'a', 'c', 'e', 'c', 'a', 'r', 'cec', 'aceca', 'racecar']
result = racecarcecaacecracecar (there are others)
l = 11233
p = ['1', '11', '1', '2', '3', '33', '3']
result = 113323311 or 331121133
l = abbccdd
p = ['a', 'b', 'bb', 'b', 'c', 'cc', 'c', 'd', 'dd', 'd']
result = bbccddaddccbb or ccbbddaddbbcc or (etc...)
l = a
p = ['a']
result = a
Casos de teste inválidos (não é possível)
l = 123456789
p = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
result = <not possible, behavior undefined>
l = hjjkl
p = ['h', 'j', 'jj', 'j', 'k', 'l']
result = <not possible, behavior undefined>
l = xjmjj
p = ['x', 'j', 'jmj', 'm', 'j', 'jj', 'j']
result = <not possible, behavior undefined>
Regras
- Se a palavra de entrada for um palíndromo, ela sempre será válida como entrada.
- Somente uma substring deve ser retornada, e a que você escolher é arbitrária, desde que válida.
- Se a entrada não tiver saída viável, seu código pode ter um comportamento indefinido.
- As entradas conterão apenas caracteres imprimíveis ASCII entre
0x20-0x7E
. - Este é o código-golfe , o menor número de bytes é o vencedor.
code-golf
array-manipulation
permutations
palindrome
Urna de polvo mágico
fonte
fonte
"abbccdd"
está errado: as duas últimas letras devem estar"bb"
, não"dd"
.Respostas:
Braquilog , 10 bytes
Experimente online!
Falha (isto é, impressões
false.
), se não for possível.Explicação
fonte
Coco , 140 bytes
Experimente online!
fonte
JavaScript (ES6), 193 bytes
"Olha, mãe, sem permutação embutida!" (Então sim ... é longo ...)
Retorna uma matriz vazia se não houver solução.
Demo
Mostrar snippet de código
Quão?
Vamos dividir o código em partes menores.
Definimos P () , uma função que retorna s se s é um palíndromo ou falso, caso contrário.
Computamos todas as substrings da string de entrada s . Usando P () , isolamos os palíndromos não vazios e os armazenamos na matriz a .
A principal função recursiva f () pega a como entrada e calcula todas as suas permutações. Ele atualiza S sempre que o próprio permutação é um palíndromo (uma vez juntou-se), e, eventualmente, retorna o valor final de S .
fonte
Gelatina , 13 bytes
Experimente online!
Imprime
0
no caso inválido.fonte
05AB1E ,
1312 bytesExperimente online!
-1 byte graças ao Magic Octopus Urn e Enigma.
fonte
J
fatora automaticamente para que você não precise€J
apenasJ
; Além disso, você deve retornar um dos palíndromos, não todos. Experimente online! é válido para a mesma contagem de bytes.Ùć
poderia ser¤
(ou um número de outras opções)Ù
não era necessário.Stax , 13 bytes
Executar casos de teste (leva cerca de 10 segundos na minha máquina atual)
Esta é a representação ascii correspondente do mesmo programa.
Não é força bruta pura , mas é tão pequena quanto a implementação de força bruta que escrevi. Aquele travou meu navegador após cerca de 10 minutos. Enfim, aqui está como funciona.
fonte
Ruby ,
131123120 bytesExperimente online!
Um lambda aceitando uma sequência e retornando uma sequência. Retorna
nil
quando não existe solução.-5 bytes: substitua
select{|t|l[t]}
porselect(&l)
-3 bytes: Substitua
map{..}.flatten
porflat_map{...}
-1 bytes: loop sobre o comprimento da substring e o início da substring, em vez de sobre o início e o final da substring
-2 bytes: declarar
z
no primeiro uso em vez de antesfonte
Pitão , 13 bytes
Experimente online!
-1 byte graças ao Sr. Xcoder
fonte
h_I#sM.p_I#.:
oue_IDsM.p_I#.:
para 13 bytes.Python 3 , 167 bytes
Experimente online!
-2 bytes graças ao Sr. Xcoder
fonte
a[i:j+1]
se usar emfor j in range(i,len(a))
vez disso, para -2 bytes.Japonês , 19 bytes
Impedido por Japt não (ainda) ser capaz de obter todos os substrings de uma string (e em parte pelos meus níveis atuais de exaustão!).
Saídas
undefined
se não houver solução.Tente
Explicação
fonte
¬
da sua resposta: P?m¬
mas então eu precisariaæ_¬êQ
para que não tivesse salvo bytes de qualquer maneira!Casca , 12 bytes
Experimente online!
Explicação
fonte
J , 53 bytes
Experimente online!
fonte