Encuentra el número palindrómico más cercano

22

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.
95359y 6548456son simétricos, 123y 2424no lo son. Números con ceros a la izquierda como 020no 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. 2Y -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)
CommonGuy
fuente
Presumiblemente, si un número está a medio camino entre los dos palíndromos más cercanos, ¿es un resultado aceptable? Por ejemplo, para N=10la salida puede ser X=-1o X=1?
Peter Taylor
@PeterTaylor Sí, solo tiene que ser lo más pequeño posible.
CommonGuy

Respuestas:

9

Pyth , 26 20

Lnb_bWP`+QZ=Z-g0ZZ)Z

Actualizado 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:

Q=eval(input())     implicit
Z=0                 implicit
Lnb_b               def P(b): return b != rev(b)
WP`+QZ              while P(repr(Q+Z)):
=Z-g0ZZ             Z=(0>=Z)-Z
)                   <end while>
Z                   print(Z)

Ejemplo de ejecución:

python3 pyth.py programs/palin.pyth <<< 965376457643450
-2969881

Esto tomó 23 segundos.


Solución adicional, mismo recuento de caracteres:

Wn`+QZ_`+QZ=Z-g0ZZ)Z
isaacg
fuente
Solo para hacerle saber, las reglas cambiaron para encontrar el palíndromo más cercano (en cualquier dirección). Pero supongo que dado que publicó antes de ese cambio de regla, no hay obligación de que lo arregle.
Martin Ender
¿Podría guardar caracteres para recorrer Z mediante [0, 1, -1, 2, -2, ...]una actualización Z=-Z+(Z<0)?
xnor
Sí, pensé en eso independientemente.
isaacg
@xnor Añadido. Relleno.
isaacg
Está bien. ¿También ha considerado poner la negación de la condición en el tiempo? ¿Y tal vez guardar una repr aplicándola a la entrada a P?
xnor
7

Ruby, 111 84 bytes

i=$*[j=-1].to_i
r=->j{s=(i+j).to_s
abort(j.to_s)if s==s.reverse}
loop{r[j+=1]
r[-j]}

Toma el número como su único argumento de línea de comandos.

Martin Ender
fuente
¿Qué tal este sitio web ?
CommonGuy
@Manu ¡Gracias no sabía eso! Mi presentación funciona hasta donde puedo ver.
Martin Ender
6

CJam, 34 29 25 bytes

q~:I!{:R1<R-RI+`_W%=!}g;R

Pruébalo en línea.

Ejemplos

$ cjam palfind.cjam <<< 120; echo
1
$ cjam palfind.cjam <<< 121; echo
0
$ cjam palfind.cjam <<< 122; echo
-1

Cómo funciona

q~:I    " Read from STDIN, evaluate and save the result in “I”.                           ";
!       " Compute the logical NOT (0 since the integer is positive).                      ";
{       "                                                                                 ";
  :R    " Save the topmost integer in “R”.                                                ";
  1<R-  " Compute (R < 1) - R. This produces the sequence 0 → 1 → -1 → 2 → -2 → … .       ";
  RI+   " Push I + R.                                                                     ";
  `_    " Cast to string and push a copy.                                                 ";
  W%=!  " Check if the reversed copy matches the original.                                ";
}g      " If it doesn't, repeat the loop.                                                 ";
;R      " Discard the integer on the stack and push “R”.                                  ";
Dennis
fuente
5

Haskell - 62

f n=[x-n|x<-[0..]>>= \v->[n+v,n-v],show x==(reverse.show)x]!!0

Guárdelo en un archivo llamado golf.hsy luego pruébelo con ghci:

*Main> :l golf
[1 of 1] Compiling Main             ( golf.hs, interpreted )
Ok, modules loaded: Main.
*Main> map f [1000..1050]
[-1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10,-11,-12,-13,-14,-15,-16,-17,-18,-19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31,-32,-33,-34,-35,-36,-37,-38,-39,-40,-41,-42,-43,-44,-45,-46,-47,-48,-49]
*Main> 
Rayo
fuente
¿qué tal escribir x<-[0..]>>=(\v->[n+v,n-v])? Es más corto y lo convierte en una
frase
@proudhaskeller Gracias! Truco muy elegante con la lista mónada.
Ray
4

Python 2.7, 98 , 81

Crea un palíndromo a partir del número de entrada, luego lo resta de la entrada para encontrar el delta.

def f(n):
    m=map(int,str(n));l=len(m)/2;m[-l:]=m[l-1::-1];return int(`m`[1::3])-n

uso:

print f(3)          # 0
print f(234)        # -2
print f(2342)       # -10
print f(129931)     # -10
print f(100000)     # 1

sin golf y anotado:

def f(n):                      # take a integer n
    m=map(int,str(n));         # convert n into array of ints
    l=len(m)/2;                # get half the length of the array of ints
    m[-l:]=m[l-1::-1];         # replace the last elements with the first elements reversed
    return int(`m`[1::3])-n    # convert array of ints backinto single int and subtract the original number to find the delta
Trapeador
fuente
Esto no da el delta más pequeño. f(19) = -8(palíndromo 11), donde debería ser +3para hacer 22.
Geobits
@Geobits Sí, los valores de 10-100 me darán un problema con este enfoque
Moop
No son solo esos. Del mismo modo, 199999 da -8 en lugar de 3, 9911 da 88 en lugar de -22. Solo invertir los primeros dígitos no funciona para obtener el delta más pequeño en muchos casos.
Geobits
bueno, no diría muchos casos, apuesto a que el 99.9% de los casos funciona. Pero sí, tiene que funcionar para el 100% de los casos
Moop
@Geobits. Claro, entonces 27% de tasa de error allí. Pero cuando llegas a los 100000000s, la tasa de error cae considerablemente. Sería interesante calcular la tasa de error real.
Moop
4

Perl 5, 93 89 88 87 75 63 44

$/=($/<1)-$/while$_+$/-reverse$_+$/;$_=$/+0

Sin golf:

while($input + $adjustment - reverse($input + $adjustment)) {
    $adjustment = ($adjustment < 1) - $adjustment;   
}
$input = $adjustment + 0;  ## gives 0 if $adj is undefined (when $input is a palindrome)
print $input;  ## implicit

Gracias a las sugerencias de Dennis, lo reduje a 43 + -p = 44

usuario0721090601
fuente
1
1. -$aes más corto que $a*-1. 2. Si lo usa ($a<1), no hay necesidad de hacerlo ? :$a++. 3. Si utiliza el modificador -p, $_=<>y print$_está implícito, puede soltar la primera instrucción y cambiar la última a $_=$a+0.
Dennis
@ Dennis Nice encuentra. Este es solo mi segundo intento de golf de código, ¡así que agradezco los consejos!
user0721090601
Es habitual contar el -pinterruptor como un byte adicional, pero puede recuperarlo usando en ($a<1)-$alugar de -$a+($a<1).
Dennis
@Dennis Pensé en usar ese método basado en su respuesta anterior, pero la ganancia se pierde porque requiere un espacio anteswhile
user0721090601
Si usa en $/lugar de $a, funcionará.
Dennis
4

05AB1E , 15 14 bytes (-1 Gracias a Emigna)

2äнsgÈi∞ë.∞}s-

Pruébalo en línea!


Método:

  • Toma la primera mitad del número.
  • Duplíquelo si es impar, no intersecado si es par.
  • Diferencia.
Urna de pulpo mágico
fuente
Creo que puedes usar en 2äнlugar de g;î£.
Emigna
3

Java: 127 109

Iteración básica, comprobando tanto negativo como positivo antes de pasar al siguiente candidato.

int p(long n){int i=0;for(;!(n+i+"").equals(new StringBuilder(n+i+"").reverse()+"");i=i<1?-i+1:-i);return i;}

Para la entrada 123456789012345, vuelve -1358024al palíndromo igual 123456787654321.

Saltos de línea:

int p(long n){
    int i=0;
    for(;!(n+i+"").equals(new StringBuilder(n+i+"").reverse()+"");i=i<1?-i+1:-i);
    return i;
}   
Geobits
fuente
¿ n+i+""Funciona y guarda los corchetes? Creo que la precedencia debería ser correcta.
Peter Taylor
@ PeterTaylor Sí, y obtuve otros toString(). Gracias :)
Geobits
1
¿Puedo robar ese dulce i=i<1?-i+1:-i? Lo llamaré "indecremento".
Jacob
@Jacob Go for it;)
Geobits
3

Clojure, 92

Toma el primero de una secuencia for perezosa que funciona desde 0 y solo incluye valores que hacen palíndromos:

(defn p[x](first(for[i(range)j[1 -1]k[(* i j)]s[(str(+ x k))]:when(=(seq s)(reverse s))]k)))

Sesión REPL-LPER:

golf-flog> (p 3)
0
golf-flog> (p 10)
1
golf-flog> (p 234)
-2
golf-flog> (p 1299931)
-10
golf-flog> (p (bigint 1e15))
1
YosemiteMark
fuente
2

JavaScript, 175 136 117

Sencillo. pdevuelve verdadero si un número dado es palíndromo, fbusca 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í.

p=function(n){return (s=''+n).split('').reverse().join('')==s}
f=function(n){for(i=0;!p(n+i);i=i<1?-i+1:-i);return i}

Uso:

f(3)
f(234)
f(1299931)
Jacob
fuente
104 en ES6: 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}:)
William Barbosa
1
Apuesto a que es. functiony returnson terriblemente largas palabras reservadas ...
Jacob
1
Lo siento por el retraso de 3 años, pero golfed a 68 en ES6: s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);r‌​eturn i}. Propenso a desbordamiento de pila 61 f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i‌​)
:;
2

J - 49 char

Una función que asigna enteros a enteros.

((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0)

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 _.

   236 (_1 1*]) 4                          NB. -ve and +ve of right arg
_4 4
   236 (f=._1 1*]) 4                       NB. name it f
_4 4
   236 (+f=._1 1*]) 4                      NB. add left to each
232 240
   236 (":@+f=._1 1*]) 4                   NB. conv each to string
232
240
   236 ((-:|.)@":@+f=._1 1*]) 4            NB. palindrome? on each
1 0
   236 (g=.(-:|.)@":@+f=._1 1*]) 4         NB. name it g
1 0
   236 (+:/@g=.(-:|.)@":@+f=._1 1*]) 4     NB. logical NOR (result 1 if both=0)
0
   palin =: (+:/@g=.(-:|.)@":@+f=._1 1*])


   236 (>:@]) 0                            NB. increment right
1
   236 (>:@]^:2) 0                         NB. functional power
2
   236 (>:@]^:(236 palin 3)) 3             NB. power 1 if no palindromes
4
   236 (>:@]^:(236 palin 4)) 4             NB. power 0 if has palindrome
4
   236 (>:@]^:palin) 4                     NB. syntactic sugar
4
   236 (>:@]^:palin^:_) 0                  NB. increment until palindrome, start with 0
4
   (>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0) 236    NB. bind 0
4
   delta =: >:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0


   ((f) delta) 236       NB. f=: -ve and +ve
_4 4
   ((g) delta) 236       NB. g=: which are palindromes
1 0
   ((g#f) delta) 236     NB. select the palindromes
_4
   ((g#f) delta) 126     NB. what if both are equal?
_5 5
   ((0{g#f) delta) 126   NB. take the first element
_5
   ((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0) 236   NB. it works!
_4

Ejemplos:

   pal =: ((0{g#f)>:@]^:(+:/@g=.(-:|.)@":@+f=._1 1*])^:_&0)
   pal 3
0
   pal every 234 1299931 126
_2 _10 _5
   pal 2424
18
   2424 + pal 2424
2442

También puede hacer que el golf prefiera la solución positiva sobre la negativa cuando son iguales, cambiando _1 1a 1 _1.

Algoritmo de tiburón
fuente
2

Javascript 86

n=>{s=(n+'').split('');for(i=0,j=s.length-1;i<j;i++,j--)s[j]=s[i];return s.join('')-n}

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

Beldraith
fuente
Bienvenido a PPCG! Esta respuesta tiene la estructura correcta (las presentaciones de funciones normalmente funcionan mejor en JavaScript), y parece dar las respuestas correctas también. Su publicación podría mejorarse a través de una explicación de por qué funciona este algoritmo (no es obvio por qué lo hace), pero está bien en este momento.
Gracias, he agregado una pequeña explicación y una versión sin
golf
puede cambiar s=(n+'').split('')a s=[...(n+'')]. reducir 5 bytes
Brian H.
Estaba pensando de la misma manera, pero 19 parece ser el primer contraejemplo: f(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 adicionales
Shieru Asakoto
2

JavaScript (ES6), 84 bytes

n=>[...(''+n)].reduce((p,c,i,s,m=s.length-1)=>i<m/2?p+(c-s[m-i])*Math.pow(10,i):p,0)

¡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

yetirs
fuente
1
Bienvenido a PPCG!
Steadybox el
2

Brachylog , 8 bytes

;.≜+A↔A∧

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.

            The input
;  +        plus
 .          the output
  ≜         which is instantiated immediately
    A       is A
     ↔      which reversed
      A     is still A
       ∧    but isn't necessarily the output.
Cadena no relacionada
fuente
1

Maravilloso - 131 111 107 caracteres

Golfizado:

n=args[0] as long;a=n;b=n;f={if("$it"=="$it".reverse()){println it-n;System.exit 0}};while(1){f a++;f b--}

ejecuciones de muestra:

bash-2.02$ groovy P.groovy  0
0
bash-2.02$ groovy P.groovy  234
-2
bash-2.02$ groovy P.groovy  1299931
-10
bash-2.02$ groovy P.groovy  123456789012345
-1358024

Sin golf:

n=args[0] as long
a=n
b=n
f={ if("$it"=="$it".reverse()) {
       println it-n
       System.exit 0
    }
}

while(1) {
    f a++
    f b--
}
Michael Easter
fuente
1

Python 2 - 76

i=input()
print sorted([r-i for r in range(2*i)if`r`==`r`[::-1]],key=abs)[0]

Obtiene el número de entrada y genera una lista de las diferencias entre la entrada y cada número entre 0 y 2*isolo si el número es palindrómico.

Luego ordena la lista por valor absoluto e imprime el primer elemento.

BeetDemGuise
fuente
No creo que el rango (2 * i) funcione para entradas grandes.
Moop
Puede usar mincon un argumento de palabra clave en lugar de ordenar.
xnor
Para usar rangos tan largos, debe cambiar a xrange, que es un generador, y min, que cortocircuita, para evitar saturar su memoria.
isaacg
1

C ++ 289

La función P busca palíndromos utilizando el <algorithm>método.

Sin golf:

bool P(int32_t i)
{
string a,b;
stringstream ss;
ss<<i;
ss>>a;
b=a;
reverse_copy(b.begin(),b.end(),b.begin());
int k=a.compare(b);
return (k==0);
}
int main()
{
int32_t n; cin>>n;
int32_t x=0,y=n,z=n,ans=x;
while(1)
{
if(P(y)){ans=x; break;}
if(P(z)){ans=-1*x; break;}
x++;
y+=x;
z-=x;
}
cout<<ans<<endl;
return 0;
}
bacchusbeale
fuente
Será más corto poner todo en una línea.
gato
1

Mathematica 75

Probablemente se pueda jugar más al golf.

p = (j=0; b=#; While[a=IntegerDigits[b]; b += ++j(-1)^j; a!=Reverse[a]]; #-b+(-1)^j) &

Espacios no contados y no necesarios.

freddieknets
fuente
1

CoffeeScript: 73

(x)->(x+="")[0...(y=x.length/2)]+x[0...-y].split("").reverse().join("")-x

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 lo x.slice(0, -y)hará. JavaScript sliceprobablemente 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.

Justin Morgan
fuente
1

PHP, 56 bytes

for(;strrev($i+$n=$argv[1])-$n-$i;$i=($i<1)-$i);echo+$i;

toma datos del argumento de la línea de comando; correr con -nr.

Tito
fuente
1

javascript 68 bytes

(n,s=[...(''+n)],j=s.length)=>s.map((v,i,)=>i>--j?s[j]:v).join('')-n

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

(
    n, // input
    s=[...(''+n)], // input split to array of chars
    j=s.length, // highest available index in s
)=> 
s.map( // this will return a new array, without modifying s
    (
        v, // value of current iteration
        i, // index of current iteration
    )=> i > --j ? s[j] : v
).join('') - n
Brian H.
fuente
@Beldraith espero que no te importe que porte tu respuesta a una sola función de declaración, me divertí mucho al hacerlo: D
Brian H.
Golfable a 63:, (n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-npero también existe un contraejemplo no obvio (19);)
Shieru Asakoto
ay, no es solo 19, es cualquier número que termina con un 9 y debería obtener un resultado positivo
Brian H.
0

Python, 109

def q(x,z):
 r=lambda s:int(str(s)[::-1])
 if x+z==r(x+z):return z
 if x-z==r(x-z):return -z
 return q(x,z+1)
RageCage
fuente
esto arroja un error al ejecutar (profundidad de recursión máxima excedida)
Moop
Eso no es un error en mi código. Superará la profundidad máxima de recursión en un número masivo, pero funciona en números de tamaño decente. Como no había un caso de prueba máximo en las especificaciones, esto aún debería considerarse una solución válida.
RageCage
1
El número 123456789hace que falle, muy por debajo del límite de 10 ^ 15 publicado en la pregunta.
Moop
1
Puede convertir fácilmente la recursión en un bucle y evitar este problema por completo
Moop
1
Ejecutar esto en la implementación de Stackless Python debería evitar el problema de profundidad de recursión.
xnor
0

QBIC , 38 bytes, nc

:{[-1,1,2|A=!a+b*c$~A=_fA||_xb*c]c=c+1

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.

:{        Read the input value, start a DO-loop
[-1,1,2|  FOR (b = -1; b <= 1; b+=2 )
A=!a+b*c$ Get a string from the input number, 
            plus modifier c (which is 0 at the start of QBIC)
            times -1 or 1, depending on b's iteration.
~A=_fA|   if that string is equal to it's own reversed version
|_xb*c]   then Quit, printing the modifier * sign
c=c+1     Increment the modifoer and DO-LOOP again.
          The DO-loop is implicitly closed by QBIC at EOF
Steenbergh
fuente
0

Bash, 73 bytes

i=$1;x=$i;while((x-10#$(rev<<<$x)));do ((r=(1>r)-r,x=r+i));done;echo $x

La entrada va al primer argumento de la línea de comando:

foo.sh 123456789
iBug
fuente
0

Axioma, 720 594 412 bytes

R(x)==>return x;p(r,a)==(n:=#(a::String);if r<0 then(a=0=>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2));if r>0 then(n=1 and a<9=>R(a+1);a=10^n-1=>R(a+2));r=0 and n=1=>1;v:=a quo 10^(n quo 2);repeat(c:=v;w:=(n rem 2>0=>v quo 10;v);repeat(c:=10*c+w rem 10;w:=w quo 10;w=0=>break);r<0=>(c<a=>R c;v:=v-1);r>0=>(c>a=>R c;v:=v+1);R(c=a=>1;0));c)
D(a:NNI):INT==(p(0,a)=1=>0;w:=p(-1,a);s:=p(1,a);a-w<s-a=>w-a;s-a)

La 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

-- Ritorna il precedente numero palidrome rispetto ad 'a' NNI, se r<0
--                               ha la particolarita' palpn(-1,0) = 0
-- Ritorna il successivo numero palidrome rispetto ad 'a' NNI, se r>0
-- Se r=0 ritorna 1 se 'a' e' palindrome, 0 se 'a' non e' palindrome
R(x)==>return x
palpn(r,a)==
    n:=#(a::String) -- n la lunghezza in cifre di base 10 di a
    if r<0 then(a=0        =>R a;n=1 or a=10^(n-1)=>R(a-1);a=10^(n-1)+1=>R(a-2))
    if r>0 then(n=1 and a<9=>R(a+1);    a=10^n-1  =>R(a+2))
    r=0  and n=1=>1
    v:=a quo 10^(n quo 2)
    repeat -- because here not there is a goto instruction i have to use repeat
        c:=v;w:=(n rem 2>0=>v quo 10;v)
        repeat
          c:=10*c+w rem 10
          w:=w quo 10
          w=0=>break
        r<0=>(c<a=>R c;v:=v-1)
        r>0=>(c>a=>R c;v:=v+1)
        R(c=a=>1;0) -- for r==0
    c

-- Ritorna la distanza minima tra l'input 'a' e una palindrome:
--        0 se 'a' e' una palindrome
--        r numero con segno negativo se tale palindrome precede 'a'
--        r numero con segno positivo se tale palindrome e' successiva ad 'a'
palDistance(a:NNI):INT==
    palpn(0,a)=1=>0
    p:=palpn(-1,a);s:=palpn(1,a)
    a-p<s-a=>p-a
    s-a

--------------------------------------

(3) -> [[i,D(i)] for i in [3,10,234,1299931,126]]
   (3)  [[3,0],[10,1],[234,- 2],[1299931,- 10],[126,5]]
                                                  Type: List List Integer
(4) -> D 7978986575546463645758676970789089064235234524548028408198401348930489104890184018410
   (4)  - 199223418598327604580355025458434427119613
                                                            Type: Integer
(5) ->  p(0,7978986575546463645758676970789089064235234524548028408198401348930489104890184018410+%)
   (5)  1
                                                    Type: PositiveInteger
(6) -> 7978986575546463645758676970789089064235234524548028408198401348930489104890184018410+%%(-2)
   (6)
       7978986575546463645758676970789089064235234325324609809870796768575463646455756898797
                                                    Type: PositiveInteger
RosLuP
fuente
Los que habían hablado nuevamente (o para la eliminación completa) del uso de goto para los lenguajes de computadora, para mi humilde programador de pasatiempos prospectivo: ¡¡¡Son incompetentes en informática !!!!
RosLuP
0

Cáscara , 16 12 9 bytes

ḟoS=↔+⁰İZ

¡Gracias @ H.PWiz por -4 bytes!

Pruébalo en línea!

Explicación

ḟ(S=↔+⁰)İZ  -- input ⁰ a number, for example: 126
        İZ  -- built-in integers: [0,1,-1,2,-2...]
ḟ(     )    -- first element that satisfies the following (eg. 5):
     +⁰     --   add element to input: 131
  S=        --   is it equal to itself..
    ↔       --   ..reversed: 131 == 131
ბიმო
fuente
0

APL NARS 47 caracteres

r←s a;b
r←0
A:b←⍕a+r⋄→0×⍳b≡⌽b⋄r←-r⋄→A×⍳r<0⋄r+←1⋄→A

esta búsqueda de arriba pero algo no puede ser rápido y correcto como la g de abajo ...

Esta

A:b←⍕a+r⋄→0×⍳b≡⌽b⋄r←-r⋄→A×⍳r<0⋄r+←1⋄→A

es una salida de bucle simple solo cuando encuentra b≡⌽b, entonces b es un palíndromo de cuerda

  s¨3,10,234,1299931,126
0 1 ¯2 ¯10 5 

∇r←g w;n;a;y;t;o;h;v
         r←0J1
   →0×⍳0≠⍴⍴w⋄→0×⍳''≡0↑w ⍝ if arg is not scalar int>=0→0J1
   →0×⍳(w<0)∨w≠⌊w
   h←{z←⍕⍺⋄q←⍕⍵⋄⍎(z,⌽q)}⍝ h return as digit ⍺⌽⍵
   n←⍴⍕w⋄r← 0
   →0×⍳n≤1              ⍝ arg one digit return r←0
   a←10*⌊n÷2
B: v←a⋄→C×⍳∼2∣n⋄v←a×10
C: t←⌊w÷v ⋄y←⌊w÷a
   o←y h t⋄r←(y+1)h t+1
   →D×⍳∼(∣r-w)<∣o-w⋄r←r-w⋄→0
D: r←o-w
∇

  g¨3,10,234,1299931,126
0 1 ¯2 ¯10 ¯5 
RosLuP
fuente
0

Japt , 8 bytes

nȥsw}cU

Intentalo

nȥsw}cU     :Implicit input of integer U
      cU     :Get the first number in the sequence [U,U-1,U+1,U-2,U+2,...,U-n,U+n]
 È           :That returns true when passed the the following function
  ¥          :  Test for equality with
   s         :  Convert to string
    w        :  Reverse
     }       :End function
n            :Subtract U from the result
Lanudo
fuente