Dado un número N , salida / retorno X para que N + X sea un palíndromo, donde | X | tiene que ser lo más pequeño posible.
Palíndromo: un número es un palíndromo, si su secuencia de dígitos es la misma al leerlos de izquierda a derecha que al leer de derecha a izquierda.
95359
y 6548456
son simétricos, 123
y 2424
no lo son. Números con ceros a la izquierda como 020
no son un palíndromo.
La entrada es un entero positivo menor que 10 15 . Léalo desde stdin, como parámetro de método, lo que sea.
La salida debe ser un número entero (positivo o negativo) y debe ser 0 si la entrada ya es un palíndromo. Puede escribir su salida en stdout, devolverla desde una función o lo que quiera. Si hay 2 números (p. Ej. 2
Y -2
) que satisfacen los requisitos, envíe solo uno de ellos.
Ejemplos:
Input Output
3 0
234 -2
1299931 -10
126 5 or -5 (only one of them)
fuente
N=10
la salida puede serX=-1
oX=1
?Respuestas:
Pyth ,
2620Actualizado para cumplir con las nuevas reglas.
El programa se ejecuta en un bucle infinito que prueba cada incremento posible, en el orden 0, -1, 1, -2, -2 ...
Explicación:
Ejemplo de ejecución:
Esto tomó 23 segundos.
Solución adicional, mismo recuento de caracteres:
fuente
[0, 1, -1, 2, -2, ...]
una actualizaciónZ=-Z+(Z<0)
?Ruby,
11184 bytesToma el número como su único argumento de línea de comandos.
fuente
CJam,
342925 bytesPruébalo en línea.
Ejemplos
Cómo funciona
fuente
Haskell - 62
Guárdelo en un archivo llamado
golf.hs
y luego pruébelo con ghci:fuente
x<-[0..]>>=(\v->[n+v,n-v])
? Es más corto y lo convierte en unaPython 2.7,
98, 81Crea un palíndromo a partir del número de entrada, luego lo resta de la entrada para encontrar el delta.
uso:
sin golf y anotado:
fuente
f(19) = -8
(palíndromo11
), donde debería ser+3
para hacer22
.Perl 5,
93898887756344Sin golf:
Gracias a las sugerencias de Dennis, lo reduje a 43 +
-p
= 44fuente
-$a
es más corto que$a*-1
. 2. Si lo usa($a<1)
, no hay necesidad de hacerlo? :$a++
. 3. Si utiliza el modificador-p
,$_=<>
yprint$_
está implícito, puede soltar la primera instrucción y cambiar la última a$_=$a+0
.-p
interruptor como un byte adicional, pero puede recuperarlo usando en($a<1)-$a
lugar de-$a+($a<1)
.while
$/
lugar de$a
, funcionará.05AB1E ,
1514 bytes (-1 Gracias a Emigna)Pruébalo en línea!
Método:
fuente
2äн
lugar deg;î£
.Java:
127109Iteración básica, comprobando tanto negativo como positivo antes de pasar al siguiente candidato.
Para la entrada
123456789012345
, vuelve-1358024
al palíndromo igual123456787654321
.Saltos de línea:
fuente
n+i+""
Funciona y guarda los corchetes? Creo que la precedencia debería ser correcta.toString()
. Gracias :)i=i<1?-i+1:-i
? Lo llamaré "indecremento".Clojure, 92
Toma el primero de una secuencia for perezosa que funciona desde 0 y solo incluye valores que hacen palíndromos:
Sesión REPL-LPER:
fuente
JavaScript,
175136117Sencillo.
p
devuelve verdadero si un número dado es palíndromo,f
busca el más cercano.EDITAR: También lo jugué un poco más gracias al dulce truco de "indecisión" de Geobits en la respuesta de Java aquí.
Uso:
fuente
p=n=>[...s=''+n].reverse().join('')==s f=n=>{r=t=0;while(!(p(n+r++)||p(n+t--)));return p(n+r-1)?r-1:t+1}
:)function
yreturn
son terriblemente largas palabras reservadas ...s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);return i}
. Propenso a desbordamiento de pila 61f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i)
J - 49 char
Una función que asigna enteros a enteros.
A continuación, le mostramos cómo podría obtener este resultado, en tres partes. Esta es la visualización de J REPL: las líneas con sangría son entradas de usuario y las con sangría son salidas de REPL. Y sí, J deletrea el signo negativo con un guión bajo
_
.Ejemplos:
También puede hacer que el golf prefiera la solución positiva sobre la negativa cuando son iguales, cambiando
_1 1
a1 _1
.fuente
Javascript 86
Este es mi primer desafío codegolf. Espero que esta solución sea aceptable.
ungolfed:
n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n }
Explicación:Convierte la entrada n en String y divide.
Itere sobre ambos lados de la matriz resultante y copie el dígito en s [i] a s [j] hasta que i <j. Esto dará como resultado nuestro palíndromo deseado.
Vuelva a unir la matriz y reste n para obtener x
fuente
s=(n+'').split('')
as=[...(n+'')]
. reducir 5 bytesf(19)=3
porque 22 es el palindrómico más cercano, pero la función devuelve -8 para convertir 19 en 11. por cierto[...n+'']
, también funcionará por -2 bytes adicionalesJavaScript (ES6), 84 bytes
¡Mi primer desafío de golf! Sé que la solución más corta y elegante ya ha sido publicada por @Brian H., pero este es otro enfoque.
Código de prueba
Mostrar fragmento de código
fuente
Brachylog , 8 bytes
Pruébalo en línea!
El predicado de la etiqueta
≜
es vital aquí, porque al usarlo en la salida antes de que suceda algo más (aunque realmente se invoca en la lista que contiene la entrada y la salida), su valor absoluto se minimiza, porque en lugar de hacer algo más inteligente basado en el El programa adivina cada número entero a partir de 0 hasta que puede encontrar uno que funcione. Si≜
se omite, amanece en el programa que 0 es un palíndromo muy agradable, y siempre generará el negativo de la entrada.fuente
Maravilloso -
131111107 caracteresGolfizado:
ejecuciones de muestra:
Sin golf:
fuente
Python 2 - 76
Obtiene el número de entrada y genera una lista de las diferencias entre la entrada y cada número entre
0
y2*i
solo si el número es palindrómico.Luego ordena la lista por valor absoluto e imprime el primer elemento.
fuente
min
con un argumento de palabra clave en lugar de ordenar.C ++ 289
La función P busca palíndromos utilizando el
<algorithm>
método.Sin golf:
fuente
Mathematica 75
Probablemente se pueda jugar más al golf.
Espacios no contados y no necesarios.
fuente
CoffeeScript: 73
Explicación: Esto aprovecha el hecho de que si tenemos un número de longitud impar (digamos 1234567),
x.slice(0, y)
no incluiremos el dígito del medio, pero lox.slice(0, -y)
hará. JavaScriptslice
probablemente no debería funcionar de esta manera, pero lo hace.Esperaba que CoffeeScript / JavaScript tuviera una mejor manera de invertir una cadena, pero el método de división / inversión / unión parece ser todo lo que hay.
fuente
PHP, 56 bytes
toma datos del argumento de la línea de comando; correr con
-nr
.fuente
javascript 68 bytes
ENORMES apoyos a @Beldraith para el algoritmo, aunque estoy publicando esto como una respuesta, porque me llevó bastante tiempo hacerlo funcionar en una sola declaración.
Cualquier consejo es bienvenido;)
sin golf
fuente
(n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n
pero también existe un contraejemplo no obvio (19);)Python, 109
fuente
123456789
hace que falle, muy por debajo del límite de 10 ^ 15 publicado en la pregunta.QBIC , 38 bytes, nc
Explicación:
El código lee una entrada y luego aplica un modificador. Luego prueba para ver si el número + modificador es un palíndromo. Luego, voltea el suspiro sobre el modificador, lo vuelve a aplicar y lo prueba nuevamente.
fuente
Bash, 73 bytes
La entrada va al primer argumento de la línea de comando:
fuente
Axioma,
720594412 bytesLa cuenta de bytes es nuevamente esto, pero el algoritmo sería O (log (n)) porque solo dependería de la longitud de los dígitos de su entrada (y log10 (n) estaría cerca de la longitud de los dígitos decimales de n ) sin golf y resultados
fuente
Cáscara ,
16 129 bytes¡Gracias @ H.PWiz por -4 bytes!
Pruébalo en línea!
Explicación
fuente
APL NARS 47 caracteres
esta búsqueda de arriba pero algo no puede ser rápido y correcto como la g de abajo ...
Esta
es una salida de bucle simple solo cuando encuentra b≡⌽b, entonces b es un palíndromo de cuerda
fuente
Python 2 ,
5554 bytesPruébalo en línea!
fuente
Japt , 8 bytes
Intentalo
fuente