Problema
Digamos que una palabra es casi un palíndromo si es posible eliminar una de sus letras para que la palabra se convierta en un palíndromo. Su tarea es escribir un programa que, para una palabra determinada, determine qué letra eliminar para obtener un palíndromo.
El código más corto para hacer esto en cualquier lenguaje de programación gana.
Entrada
La entrada consiste en una palabra de letras mayúsculas de 2 a 1000 caracteres de longitud.
Salida
Imprima la posición indexada 1 (la letra más a la izquierda tiene la posición 1, la siguiente tiene la posición 2 y así sucesivamente) de la letra que debe eliminarse. Si hay opciones posibles que conducen al palíndromo, envíe cualquiera de esas posiciones. Tenga en cuenta que debe eliminar una letra incluso si la palabra dada ya es un palíndromo. Si la palabra dada no es casi un palíndromo, salida -1.
Ejemplo
La entrada:
racercar
podría producir la salida:
5
porque quitando la 5
letra th produce racecar
, que es un palíndromo.
Además, la entrada
racecar
todavía puede producir la salida
4
porque eliminar la 4
letra th para producir raccar
todavía es un palíndromo.
Respuestas:
J -
3125 charTarifa estándar en gran medida para J, así que solo señalaré los bits geniales.
El adverbio
\.
se llama Outfix .x u\. y
quita cada infija de longitudx
a partir dey
y se aplicau
al resultado de cada suspensión. Aquí,x
es 1,y
es la cadena de entrada yu
es(-:|.)
una prueba de si la cadena coincide con su reverso. Por lo tanto, el resultado de esta aplicación\.
es una lista de booleanos, 1 en lugar de cada carácter cuya eliminación hace que la entrada sea un palíndromo.I.
crea una lista de todos los índices (origen 0) desde arriba donde había un 1. Agregar 1 con1+
hace que estos índices de origen 1. Si no hay índices 1, la lista está vacía. Ahora, tratamos de tomar el último elemento con_1{
. (¡Se nos permite enviar cualquiera de las letras extraíbles!) Si esto funciona, volveremos. Sin embargo, si la lista estaba vacía, no había elementos en absoluto, por lo que{
arroja un error de dominio que atrapamos::
y devolvemos el -1 con[
.Uso (recuerde que
NB.
es para comentarios):fuente
Pythonno PHP(73):Donde a es la cadena que desea verificar.
Esto, sin embargo, arroja un error si no puede convertirlo en un palíndromo. En cambio, podrías usarEDITAR: No, espera, ¡funciona!Gracias, esto realmente aumenta el contenido de php de este script en aproximadamente un 25% (eso es lo que quieres, ¿verdad?)
fuente
1>0
lugar deTrue
y eliminando el espacio entre]
yfor
en...[::-1] for g...
1
lugar deTrue
también.1 == True
, después de todo.Mathematica,
106988791 caracteresSupongo que estoy un poco discapacitado por los nombres largos de funciones, pero problemas como este son bastante divertidos en Mathematica:
Lanza algunas advertencias, porque el
l_
patrón también coincide con todos los caracteres dentro, queReverse
no pueden funcionar. Pero oye, ¡funciona!Algo sin golf:
fuente
GolfScript,
2826 caracteresGracias a Peter por acortar en 2 personajes. Pruebe los casos de prueba en línea :
fuente
RACECAR
sigue siendo un palíndromo con la E. ¿Es necesario especificar un carácter para eliminar, cuando la palabra ingresada ya es un palíndromo?-2]$-1=)
? Al comienzo de ese bloque, tienes como máximo un elemento en la pila, por lo que puedes acortarlo fácilmente-2]0=)
. (O por la misma longitud,]-2or)
he aprendido a amaror
los casos especiales).Rebol (81)
Ejemplo de uso en la consola Rebol:
Arriba devuelve el índice del último palíndromo encontrado. Una solución alternativa (85 caracteres) que devuelve cada palíndromo encontrado sería:
Entonces para
"racercar"
esto volvería la lista[4 5]
.fuente
C #, 134 caracteres
Sé que pierdo :( pero aún así fue divertido : D
Versión legible:
fuente
R
define y se usa?Stax ,
810 bytesEjecutar y depurarlo
Este programa muestra todos los índices basados en 1 que se pueden eliminar de la cadena para formar un palíndromo. Y si no hay ninguno, muestra -1.
fuente
aaabb
salidas en5
lugar de-1
).Rubí (61):
Aquí, ten una solución de rubí. Devolverá la posición del personaje a eliminar o -1 si no se puede hacer.
No puedo evitar sentir que hay mejoras con la sección de duplicación y corte, pero Ruby no parece tener un método de cadena que elimine un carácter en un índice específico y devuelva la nueva cadena -__-.
Editado según el comentario, ty!
fuente
-1
si no se encuentra un palíndromo.-1
, gracias. Sin embargo, no estoy seguro de lo que tienes en mente para sacarlo de un método, lo pensaré.05AB1E , 10 bytes
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
No PythonPHP ,858381 bytesPruébalo en línea!
Innecesariamente recursivo:
PHP , 96 bytes
Pruébalo en línea!
fuente
Haskell, 107 caracteres:
Como una función ( 85 caracteres ):
versión original sin golf:
fuente
C # (184 caracteres)
Admito que este no es el mejor lenguaje para hacer golf de código ...
Formateado y comentado:
fuente
C # (84 caracteres)
Sentencia LINQpad esperando que la variable
i
contenga la cadena de entrada. La salida se almacena en lao
variable.fuente
Haskell, 80
Llamado así:
fuente
Japt , 8 bytes
Intentalo
fuente
Haskell, 118C
Sin golf:
fuente
Jalea ,
1714 bytesPruébalo en línea!
Como cambié mi enfoque lo suficientemente rápido como para que la versión anterior no apareciera en el historial de edición, fue esto:
ŒPṚḊŒḂ€TṂ©’<La®o-
fuente
Brachylog , 24 bytes
Pruébalo en línea!
Se siente demasiado tiempo.
Podría ser dos bytes más corto si la salida pudiera ser indexada en 2 :
Dos iteraciones anteriores e incluso peores:
El uso de una variable global por parte de este último requiere un encabezado de prueba diferente .
fuente
Python 3 , 71 bytes
Pruébalo en línea!
Devuelve el carácter indexado 1 si la operación se puede realizar y de lo
-1
contrario.fuente
Wolfram Language (Mathematica) , 56 bytes
Pruébalo en línea!
Toma la entrada como una lista de caracteres. Para la entrada de cadena, agregue
@*Characters
.PalindromeQ
se introdujo en 2015. La alternativa cuesta +4 bytes .fuente
Perl 5
-p
,5652 bytesPruébalo en línea!
fuente
C (gcc) ,
180168159157140139 bytesPruébalo en línea!
21617 bytes recortados gracias a ceilingcat! Y 3 bytes más, ya que las reglas establecen que la longitud mínima de la entrada es de 2 caracteres, por lo que no tiene que buscar cadenas vacías.Sin golf:
fuente
&&!++p
es complicado de explicar :)Python, 84
Esto no verifica si la entrada (cadena) es casi palíndromo, pero es eficiente en el tiempo y legible.
fuente
s[-(i+1)]
se puede acortar as[-i-1]
. Además, no estoy seguro, pero puede reemplazarloif...else...
conreturn i+1 if ... else len(s)-1
s = "abcde"
, debería devolver -1.Mi primer código de golf.
Java. ~ 1200 caracteres en las funciones principales (y secundarias). Sí bebé.
Clase superior y uso:
La función principal:
Subfunciones:
Clase completa:
fuente