Dada uma sequência s
, retorne a menor substring contígua que você pode remover para criar um palíndromo.
Exemplos:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Sugestões de casos de teste dos usuários (se você encontrar um caso de borda não listado, poste um comentário):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Regras
- Somente caracteres ASCII imprimíveis aparecerão na entrada (sem novas linhas, mantenha-o simples).
- Não é realmente uma regra, mas nota
<>
,/\
,()
,[]
e{}
não são palíndromos.
Este é o código-golfe , o menor número de bytes ganhos.
+100 recompensa foi reivindicada por Adnan
code-golf
string
palindrome
Urna de Polvo Mágico
fonte
fonte
aabaab
[[]]
um palíndromo?]][[
. Considere queaabb
é a mesma coisa, apenas personagens diferentes.Respostas:
Gelatina , 16 bytes
Experimente online!
Como funciona
fonte
J , 24 bytes
Experimente online!
Explicação
fonte
(;"e f)&>
como verbo de equipamento de teste?Wolfram Language (Mathematica) ,
5351 bytesA contagem de bytes assume a codificação CP-1252.
Experimente online!
Define um operador unário
±
(ou uma funçãoPlusMinus
). Entrada e saída são listas de caracteres. O conjunto de testes faz a conversão de e para seqüências reais por conveniência.fonte
Reverse
então comparar esse reverso com o original mais curto que o PalindromeQ? Eu não conheço o Mathematica, então não faço ideia.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
tem dois bytes a mais. Não sei se existe alguma alternativa mais curta.Gelatina , 20 bytes
Experimente online!
fonte
05AB1E , 18 bytes
Usa a codificação 05AB1E . Experimente online!
fonte
ǝ
foi seriamente um gênio.Python 3 , 97 bytes
Experimente online!
fonte
Python 2 , 116 bytes
Experimente online!
Salvei alguns bytes com a ajuda de Halvard Hummel !
fonte
Japonês ,
2622 bytesTeste online! Tentando descobrir como mapear
false
para algo falso e qualquer string para algo verdadeiro em um byte. Atualmente estou usando+0
...fonte
Bash , 108 bytes
Recebe entrada como argumento da linha de comando.
Experimente online! com aspas impressas ao redor da saída para visualizar espaços à esquerda / à direita.
fonte
Prolog , 271 bytes
Em algum momento, percebi que isso seria enorme para os padrões do código-golfe, então guardei alguns espaços em branco extras para preservar a semelhança com a versão não ofuscada. Mas ainda acho que pode ser interessante, pois é uma abordagem diferente para o problema.
A versão não ofuscada:
fonte
C ++,
254248246 bytes-6 bytes graças a Zacharý -2 bytes graças a Toby Speight
Assim...
T
como uma definição de macro porque fazerR""
como outro efeito no literal de cadeia (é um prefixo usado para definir literais de cadeia brutos, consulte cppreference para obter mais informações) que não existe quando eu façoT""
p(std::string)
para testar se a sequência é um palíndromo. Se for, retorna para1
qual lançatrue
, caso contrário, retorna para0
qual lançafalse
the last index - number of erased char
. Se achar que apagar alguma parte é um palíndromo, ele retornará. Por exemplo, ao passar a string"aabcdbaa"
como parâmetro, tantoc
ed
são a resposta válida, mas este código irá retornarc
porque apagá-lo e testar se é um palíndromo vem antes de testar se apagandod
e testando se é palíndromoAqui está o código para testar:
fonte
using s=std::string;int p(s t){for(int i=0;i<t.S/2;++i)if(t[i]!=t[t.S-i-1])T 0;T 1;}s d(s e){if(!p(e))for(int i,w=1;w<e.S;++w)for(i=0;i<=e.S-w;++i){s t=e;t.erase(i,w);if(p(t))T e.substr(i,w);}T"";}
/2
ser omitido? A iteração em todo o comprimento simplesmente repetirá os testes que fizemos, que devem ser inofensivos. Você pode expandir o que quer dizer com o "outro efeito" deR""
(ou seja, é analisado como uma literal de cadeia de caracteres bruta).Gelatina , 33 bytes
Experimente online!
fonte
PHP 104 + 1 bytes
Execute como pipe
-nR
ou experimente online .fonte
Haskell ,
109105 bytesExperimente online!
EDIT: Obrigado @ H.PWiz por decolar 4 bytes! Eu preciso melhorar com essas mônadas!
fonte
JavaScript, 90 bytes
Experimente online!
Mostrar snippet de código
fonte
Perl 5, 72 +1 (-p) bytes
Experimente online
fonte
JavaScript (ES6),
9178 bytesEntrada e saída são listas de caracteres.
Remove recursivamente uma fatia cada vez maior da entrada até que um palíndromo seja encontrado.
Snippet:
Mostrar snippet de código
fonte
TSQL (2016) 349B
Não é a solução mais compacta, mas direta:
fonte
@
como uma variável por alguns bytes. No CTE, você pode usarwhere''=value)
para outro e não precisa retornarC
o resultado.Casca , 18 bytes
Experimente online!
Explicação
fonte
Haskell ,
98948180 bytesExperimente online! Exemplo de uso:
""#0 $ "aabaab"
rendimentos"b"
.Edit: -1 byte graças a Ørjan Johansen.
fonte
""
port
.C ++,
189186176167 bytesComecei com a resposta de HatsuPointerKun , alterando o teste para simplesmente comparar igualdade com string invertida; então mudei como enumeramos as cadeias de candidatos. Depois disso, as macros eram usadas apenas uma ou duas vezes cada, e era mais curto para incorporá-las.
Explicação
Código legível equivalente:
A enumeração de candidatos começa inicializando uma sequência com os primeiros
w
caracteres omitidos e copiando caracteres sucessivos do original para mover a lacuna. Por exemplo, com a sequênciafoobar
ew
== 2:A primeira passagem (com
w
== 0) é no-op; portanto, a sequência completa será considerada repetidamente. Tudo bem - o golfe supera a eficiência! A última iteração desse loop acessará o índice one-past-the-end; Parece que me dou bem com o GCC, mas estritamente esse é um comportamento indefinido.Programa de teste
Um levantamento direto da resposta de HatsuPointerKun :
fonte
REXX, 132 bytes
fonte
Ruby ,
8684 bytesExperimente online!
fonte
z=s.size-l+1
.C (gcc) , 307 bytes
Experimente online!
fonte