Este es un espejo: |
. ¡Acabo de descubrir que puedes pegar un espejo en el medio de una cuerda si la cuerda se puede reflejar en sí misma! Por ejemplo, la cadena abccba
. Si lo corta por la mitad, las dos mitades son imágenes especulares entre sí:
abc <--> cba
Entonces, podemos pegar un espejo en el medio de la cadena, y nuestra nueva cadena es abc|cba
. A veces, solo parte de la cadena se puede reflejar en sí misma. Por ejemplo, la cadena "espejo". Las dos r se reflejan, pero el resto de la cadena no. Está bien, simplemente eliminaremos las partes de la cadena que no se reflejan entre sí, y obtenemos la siguiente cadena:
r|r
Algunas cadenas pueden reflejarse en múltiples lugares. Por ejemplo, "Hola mundo, xyzzyx". Me gusta tener un montón de texto reflejado en mi espejo, por lo que debes encontrar el mejor lugar para poner mi espejo. En este caso, debe generar la cadena reflejada más larga y, al igual que en nuestro último ejemplo, eliminar todo lo demás. Esta cadena se convierte en:
xyz|zyx
Algunas cadenas mirar como que se pueden reflejar, pero en realidad no pueden. Si una cadena no se puede reflejar en ningún lado, no debe generar nada.
El reto:
Dada una cadena que contiene solo ascii imprimible, encuentra el mejor lugar para poner mi espejo. En otras palabras,
Encuentre la subcadena palindrómica de longitud par más grande, luego envíela con un carácter de tubería '|' en el medio
La entrada tendrá 1-50 caracteres de longitud.
Puede suponer que la entrada no contendrá espejos |
o nuevas líneas. Más allá de eso, todos los personajes imprimibles-ascii son juegos justos. Si la subcadena reflejada más larga está vinculada entre dos subcadenas, puede elegir cuál generar. Por ejemplo, para la cadena "abba ollo", debe generar "ab | ba" u "ol | lo", pero no importa cuál genere. Las cadenas distinguen entre mayúsculas y minúsculas, por ejemplo, "ABba" no debería generar "AB | ba", debería generar la cadena vacía.
Muestra IO:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Como de costumbre, este es el código de golf, por lo que se aplican las lagunas estándar, ¡y gana la respuesta más corta en bytes!
fuente
Respuestas:
Pyth -
19171513 bytesGracias a @FryAmTheEggman por salvarme dos bytes.
ARRGH el caso especial de no respuesta.Resuelto eso!Test Suite .
fuente
:Q)
= Bignose05AB1E ,
191714 bytesCódigo:
Explicación:
Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Python 2,
10297 bytesMás bien lento e ineficiente ... Verifique los casos de prueba más pequeños en Ideone .
fuente
JavaScript,
10099 byteso
fuente
eval
?eval
para evitarreturn
for
no es una expresión, por lo que normalmente requeriría llaves y unreturn
Lua, 133 bytes
Verifique todos los casos de prueba en Ideone.com .
fuente
t==t:reverse()
para guardar un byte :)Retina , 66 bytes
El recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea! (La primera línea permite probar varios casos de prueba separados por salto de línea a la vez).
Hmmm, mucho más de lo que me gustaría ...
fuente
JavaScript (ES6), 91
Menos golf
Prueba
fuente
Perl 5,
10510098 + 1 =10610199 bytesSolo quería probar las expresiones regulares recursivas. Necesita la
-p
opción. Editar: Guardado (tachado 4) 7 bytes gracias a @ msh210. (El byte faltante se debe a un ahorro que fue reemplazado por el último ahorro de @ msh210).fuente
@_=(@_,$1)
puede serpush@_,$1
. (2) Omita las líneas nuevas y la final;
. (3) Sospecho que hay una condición de clasificación más corto puede utilizar (si no otra cosa, al menos, a continuación, tal vez --- --- sustituto-
para<=>
)-
y no funcionó (probablemente necesite parens para tener prioridad, lo que vence el ahorro).y...c>>1
o eny...c/2
lugar delength>>1
. (Sin probar)Python 2, 91 bytes
Reemplace
\x7f
con el carácter real DEL, que es ASCII 127 (crédito a Dennis).Esto sigue una estrategia similar a la respuesta de Dennis de usar
max
y ramificar recursivamente para encontrar el intervalo de palíndromo más largo. Pero, en cambio, encuentra la mitad izquierda, verificando que la mitad derecha reflejada correspondiente viene justo después con un inicio hecho a sí mismo .La función adivina si el primer carácter está en la mitad izquierda reflejada. Si no, simplemente lo suelta y vuelve a aparecer en el resto. Si es así, se agrega a la pila
p
de caracteres invertidos. Si la cadena comienza con la pila, la cadena espejo se genera y se considera como un espejo más largo posible. Para evitar|
como salida, solo se consideran las pilas no vacías.fuente
Jalea , 17 bytes
Pruébalo en línea!
Hecho con la ayuda del Sr. Xcoder y DJMcMayhem en el chat
Cómo funciona
fuente
Haskell,
126111bytesfuente
TSQL
227223 bytesCodifiqué la longitud a un máximo de 99 bytes, esto guardó bytes pero lo hice más lento. Sin embargo, todavía tiene un rendimiento decente.
Golfizado:
Sin golf:
Violín
fuente
Python 2, 149 bytes
Pruébalo en línea
Este programa encuentra la primera mitad de la subcadena palindrómica más grande de longitud par, e imprime esa cadena, seguida de una
|
, seguida de esa cadena invertida. Si no hay una cadena adecuada,t
será la cadena vacía y'|'*(L(t)>0)
se evaluará a la cadena vacía.fuente
Java 8,
294283232 bytesExplicación:
Pruébalo aquí.
fuente