Dada una cadena s
, devuelve la subcadena contigua más pequeña que puedes eliminar para crear un palíndromo.
Ejemplos:
800233008 -> 2
racecarFOOL -> FOOL
abcdedcba -> (empty string)
ngryL Myrgn -> "L " (or " M")
123456789 -> 12345678 (or 23456789)
aabcdbaa -> c (or d)
[[]] -> [[ (or ]])
a -> (empty string)
Sugerencias de casos de prueba de los usuarios (si encuentra un caso límite no listado, publique un comentario):
aabaab -> b | Suggested by Zgarb, some returned "aa".
Reglas
- Solo aparecerán caracteres ASCII imprimibles en la entrada (sin líneas nuevas, que sea simple).
- En realidad, no una regla, pero nota
<>
,/\
,()
,[]
y{}
no son palíndromos.
Este es el código de golf , el menor recuento de bytes gana.
+100 recompensa ha sido reclamada por Adnan
code-golf
string
palindrome
Urna de pulpo mágico
fuente
fuente
aabaab
[[]]
un palíndromo?]][[
. Considera queaabb
es lo mismo, solo personajes diferentes.Respuestas:
Jalea , 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
J , 24 bytes
Pruébalo en línea!
Explicación
fuente
(;"e f)&>
como verbo de arnés de prueba?Wolfram Language (Mathematica) ,
5351 bytesEl recuento de bytes supone la codificación CP-1252.
Pruébalo en línea!
Define un operador unario
±
(o una funciónPlusMinus
). La entrada y la salida son listas de caracteres. El conjunto de pruebas realiza la conversión desde y hacia cadenas reales para mayor comodidad.fuente
Reverse
Entonces, comparar ese reverso con el original es más corto que PalindromeQ? No conozco Mathematica, así que no tengo idea.Characters@#/.{a___,Shortest@b___,c___}/;PalindromeQ[a<>c]:>b~~""&
Reverse[x={a,c}]==x
es dos bytes más largo. No sé si hay alguna alternativa más corta.Jalea , 20 bytes
Pruébalo en línea!
fuente
05AB1E , 18 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
ǝ
fue en serio genio sin embargo.Python 3 , 97 bytes
Pruébalo en línea!
fuente
Python 2 , 116 bytes
Pruébalo en línea!
¡Ahorré un par de bytes con la ayuda de Halvard Hummel !
fuente
Japt ,
2622 bytes¡Pruébelo en línea! Tratando de descubrir cómo mapear
false
algo falso y cualquier cadena a algo verdadero en un byte. Actualmente estoy usando+0
...fuente
Bash , 108 bytes
Toma entrada como argumento de línea de comando.
Pruébalo en línea! con comillas impresas alrededor de la salida para ver los espacios iniciales / finales.
fuente
Prólogo , 271 bytes
En algún momento me di cuenta de que esto sería enorme para los estándares de código de golf, así que mantuve algunos espacios en blanco adicionales para preservar el parecido con la versión no ofuscada. Pero sigo pensando que podría ser interesante ya que es un enfoque diferente del problema.
La versión no ofuscada:
fuente
C ++,
254248246 bytes-6 bytes gracias a Zacharý -2 bytes gracias a Toby Speight
Entonces...
T
como una definición de macro porque lo hagoR""
como otro efecto en el literal de cadena (es un prefijo utilizado para definir literales de cadena sin procesar, vea cppreference para obtener más información) que no está allí cuando lo hagoT""
p(std::string)
para probar si la cadena es un palíndromo. Si es así, devuelve el1
que emitetrue
, de lo contrario, regresa el0
que emitefalse
the last index - number of erased char
. Si encuentra que borrar alguna parte es un palíndromo, entonces regresa. Por ejemplo, cuando se pasa la cadena"aabcdbaa"
como parámetro, tantoc
yd
son respuesta válida, pero el código volverác
a causa de borrarlos y probar si es un palíndromo viene antes de probar si el borradod
y probar si es palíndromoAquí está el código para probar:
fuente
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
puede omitir? Iterar en toda la longitud simplemente repetirá las pruebas que hemos realizado, que deberían ser inofensivas. Es posible que desee ampliar lo que quiere decir con el "otro efecto" deR""
(es decir, se analiza como un literal de cadena sin formato).Jalea , 33 bytes
Pruébalo en línea!
fuente
PHP 104 + 1 bytes
Ejecutar como tubería
-nR
o probarlo en línea .fuente
Haskell ,
109105bytesPruébalo en línea!
EDITAR: ¡Gracias @ H.PWiz por despegar 4 bytes! ¡Necesito mejorar con esas mónadas!
fuente
JavaScript, 90 bytes
Pruébalo en línea!
Mostrar fragmento de código
fuente
Perl 5, 72 +1 (-p) bytes
Pruébalo en línea
fuente
JavaScript (ES6),
9178 bytesLa entrada y la salida son listas de caracteres.
Recursivamente elimina una porción cada vez más grande de la entrada hasta que se encuentra un palíndromo.
Retazo:
Mostrar fragmento de código
fuente
TSQL (2016) 349B
No es la solución más compacta pero sencilla:
fuente
@
como variable para unos pocos bytes. En el CTE puede usarlowhere''=value)
para otro y no necesita devolverC
el resultado.Casco , 18 bytes
Pruébalo en línea!
Explicación
fuente
Haskell ,
98948180 bytesPruébalo en línea! Ejemplo de uso:
""#0 $ "aabaab"
rendimientos"b"
.Editar: -1 byte gracias a Ørjan Johansen.
fuente
""
port
.C ++,
189186176167 bytesComencé con la respuesta de HatsuPointerKun , cambiando la prueba para simplemente comparar la igualdad con la cadena invertida; luego cambié la forma en que enumeramos las cadenas de candidatos. Después de esto, las macros solo se usaron una o dos veces cada una, y fue más corto alinearlas.
Explicación
Código legible equivalente:
La enumeración de candidatos comienza inicializando una cadena con los primeros
w
caracteres omitidos, y luego copiando los caracteres sucesivos del original para mover la brecha. Por ejemplo, con la cadenafoobar
yw
== 2:El primer paso (con
w
== 0) es un no-op, por lo que la cadena completa se considerará una y otra vez. Eso está bien: ¡el golf supera la eficiencia! La última iteración de este bucle accederá al índice de una pasada; Parece que me salgo con la suya con GCC, pero estrictamente, ese es un comportamiento indefinido.Programa de prueba
Un levantamiento directo de la respuesta de HatsuPointerKun :
fuente
REXX, 132 bytes
fuente
Ruby ,
8684 bytesPruébalo en línea!
fuente
z=s.size-l+1
.C (gcc) , 307 bytes
Pruébalo en línea!
fuente