查找最近的回文数


22

给定数字N,输出/返回X,使得N + X是回文,其中| X | 必须尽可能小。

回文:数字是回文,如果从左向右读取数字与从右向左读取数字的数字顺序相同。
95359并且6548456是对称的,1232424不是。带有前导零的数字(例如)020不是回文。

输入是一个小于10 15的正整数。从stdin读取它,并将其作为方法参数。

输出必须是整数(正数或负数),并且如果输入已经是回文,则应该为0。您可以将输出写入stdout,从函数或任何您喜欢的东西返回。如果有两个数字(例如2-2)满足要求,则仅输出其中一个。

例子:

Input             Output
3                 0
234               -2
1299931           -10
126               5 or -5 (only one of them)

大概如果两个最接近的回文之间有一个数字,那么输出是可接受的吗?例如对于N=10输出可以是X=-1X=1
彼得·泰勒

@PeterTaylor是的,它必须尽可能小。
CommonGuy 2014年

Answers:


9

佩斯26 20

Lnb_bWP`+QZ=Z-g0ZZ)Z

已更新以满足新规则。

程序在无限循环中运行,该循环测试每个可能的增量,顺序为0,-1、1,-2,-2 ...

说明:

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)

示例运行:

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

这花了23秒。


奖励解决方案,相同字符数:

Wn`+QZ_`+QZ=Z-g0ZZ)Z

只是让您知道,规则更改为查找最近的回文(在任一方向上)。但是我想,既然您在该规则更改之前发布了,就没有义务修复它。
Martin Ender 2014年

是否可以通过[0, 1, -1, 2, -2, ...]更新来保存字符以循环Z Z=-Z+(Z<0)
xnor 2014年

是的-我是独立考虑的。
isaacg 2014年

@xnor添加了。填料。
isaacg 2014年

嗯不错。您是否也考虑过将否定条件放在一边?也许通过将repr应用于P的输入来保存repr?
xnor 2014年


6

CJam,34 29 25字节

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

在线尝试。

例子

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

怎么运行的

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”.                                  ";

5

哈斯克尔-62

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

将其保存到一个名为的文件中golf.hs,然后使用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> 

写作怎么样x<-[0..]>>=(\v->[n+v,n-v])?它更短,使它成为
单线

@proudhaskeller谢谢!单子列表非常优雅。

4

Python 2.7版,98,81

从输入数字创建回文,然后从输入中减去回文以找到增量。

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

用法:

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

取消标注和注释:

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

这不会产生最小的增量。f(19) = -8(回文11),应该在哪里+3制作22
Geobits 2014年

@Geobits是的,10-100的值会给我这种方法带来的问题
Moop Moop

不只是那些。同样,199999给出-8而不是3,9911给出88而不是-22。在很多情况下,仅反转第一位数字并不能获得最小的增量。
Geobits 2014年

好吧,我不会说很多情况,我敢打赌,它适用于99.9%的情况。但是,是的,它需要在100%的情况下
起作用

@Geobits。当然,那里的错误率是27%。但是当您达到100000000s时,错误率会大大下降。计算实际错误率将很有趣。
Moop

4

Perl 5,93 89 88 87 75 63 44

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

取消高尔夫:

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

感谢Dennis的建议,将其降低到43 + -p = 44


1
1. -$a比短$a*-1。2.如果使用($a<1),则不需要? :$a++。3.如果使用的-p开关是$_=<>print$_是隐式的,则可以删除第一个语句并将最后一个语句更改为$_=$a+0
丹尼斯

@丹尼斯·尼斯发现。这只是我第二次尝试打高尔夫球,所以请多多指教!
2014年

通常将-p开关算作一个额外的字节,但是您可以使用($a<1)-$a代替来将其取回-$a+($a<1)
丹尼斯

@Dennis我虽然根据上述答案使用了该方法,但是由于它之前需要一个空格,因此增益得到了损失while
user0721090601 2014年

如果使用$/代替$a,它将起作用。
丹尼斯

4

05AB1E15 14字节(-1感谢Emigna)

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

在线尝试!


方法:

  • 取数字的前一半。
  • 如果是奇数,则镜像相交;如果是偶数,则镜像非相交。
  • 区别。

我认为您可以使用2äн代替g;î£
Emigna

3

Java的:127 109

基本迭代,在移至下一个候选者之前检查负数和正数。

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

对于输入123456789012345,它返回-1358024等于回文123456787654321

换行符:

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

是否可以n+i+""工作并保存括号?我认为优先顺序应该是正确的。
彼得·泰勒

@PeterTaylor Yep,并从中得到了另外一些toString()。谢谢:)
Geobits

1
我可以偷那个甜食i=i<1?-i+1:-i吗?我将其称为“减免”。
雅各布

@Jacob加油;)
Geobits

3

Clojure,92岁

从一个懒惰的序列中获取第一个序列,该序列从0开始工作,并且仅包含产生回文的值:

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

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

2

JavaScript中,175 136 117

直截了当。p如果给定的数是回文数,则返回true,然后f搜索最接近的数。

编辑:由于在这里的Java答案中Geobits的甜美的“递减”把戏,我也打了些高尔夫球

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}

用法:

f(3)
f(234)
f(1299931)

ES6中的104分: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}:)
威廉·巴博萨

1
我敢打赌。function并且return是非常长的保留字...
雅各布

1
很抱歉延迟3年,但在ES6中打到68 s=>{for(i=0;[...s+i+""].reverse().join``!=s+i;i=i<0?-i:~i);r‌​eturn i}。容易出现堆栈溢出61:f=(s,i=0)=>[...s+i+""].reverse().join``==s+i?i:f(s,i<0?-i:~i‌​);)
Shieru Asakoto

2

J-49个字符

一个将整数映射到整数的函数。

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

这是分三部分构建此结果的方法。这是J REPL的显示:缩进的行是用户输入,而缩进的行是REPL输出。是的,J用下划线拼写负号_

   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

例子:

   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

您还可以通过将更_1 1改为,使高尔夫球在相等时优先于正解而不是负解1 _1


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}

这是我第一次遇到代码挑战。希望这个解决方案是可以接受的。

ungolfed: n => { s = (n + '').split(''); for (i = 0, j = s.length - 1; i < j; i++,j--) s[j] = s[i]; return s.join('') - n } 说明:
将输入n转换为String并拆分。
遍历结果数组的两侧,并将s [i]上的数字复制到s [j],直到i <j。这将导致我们期望的回文。
将数组重新连接在一起,然后减去n得到x


欢迎来到PPCG!这个答案具有正确的结构(函数提交通常在JavaScript中效果最好),并且似乎也给出了正确的答案。您可以通过解释此算法为何起作用(对我来说不知道为什么如此)的解释来改善您的帖子,但目前还可以。

谢谢,香港专业教育学院添加了一个简短的解释和非高尔夫版本
Beldraith

您可以更改s=(n+'').split('')s=[...(n+'')]。删除5个字节
Brian H.

我想以同样的方式,但19似乎是第一个反例:f(19)=3因为22是最接近的回文,但在函数返回-8转换成19 11. BTW [...n+'']也将需要额外工作-2字节
Shieru Asakoto

2

JavaScript(ES6),84个字节

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)

我的第一个高尔夫挑战!我知道@Brian H.已经发布了更简短,更优雅的解决方案,但这是另一种方法。

测试代码


1
欢迎来到PPCG!
Steadybox

2

Brachylog,8个字节

;.≜+A↔A∧

在线尝试!

标签谓词在这里至关重要,因为在其他任何事情发生之前通过在输出上使用它(尽管实际上是在包含输入和输出的列表中调用它),它的绝对值被最小化了,因为不是基于约束条件是程序猜测从0开始的每个整数,直到找到可以工作的整数为止。如果省略,则在程序中会发现0是​​一个非常好的回文,它将始终输出输入的负数。

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

1

Groovy- 131 字符

打高尔夫球:

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--}

样品运行:

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

取消高尔夫:

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--
}

1

Python 2-76

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

获取输入数目,并且产生的输入和之间的每个数之间的差异列表02*i仅当数目是回文。

然后,它按绝对值对列表进行排序并打印第一个元素。


我不认为range(2 * i)适用于大输入。
Moop

您可以使用min关键字参数而不是排序。
xnor 2014年

要使用那么长的范围,您需要切换到xrange(它是一个生成器)和min(这会短路),以避免占用内存。
isaacg 2014年

1

C ++ 289

函数P使用<algorithm>方法检查回文。

取消高尔夫:

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;
}

将所有内容放在一行上会更短。

1

Mathematica 75

大概可以打更多..

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

不计算和不需要的空间。


1

CoffeeScript:73

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

说明: 这利用了以下事实:如果我们有多个奇数长度(例如1234567),x.slice(0, y)则将不包括中间数字,但x.slice(0, -y)将包括中间数字。JavaScript的slice可能不应该这样工作,但确实可以。

我原本希望CoffeeScript / JavaScript有更好的方法来反转字符串,但是split / reverse / join方法似乎已经存在。


1

PHP,56字节

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

takes input from command line argument; run with -nr.


1

javascript 68 bytes

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

HUGE props to @Beldraith for the algorithm, i'm posting this as an answer though, because it took me quite the time to get it to work in a single statement.

Any tips are welcome ;)

ungolfed

(
    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

@Beldraith hope you dont mind me porting your answer to a single statement function, i had a blast doing so :D
Brian H.

Golfable to 63: (n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n, but also a non-obvious counterexample (19) exists ;)
Shieru Asakoto

ouch, it's not just 19, it's any number that ends with a 9 and should get a positive result
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)

this throws an error when running (maximum recursion depth exceeded)
Moop

That's not an error in my code. It will exceed maximum recursion depth on a massive number, but it works on decently sized numbers. As there was no maximum test case in the specs, this should still be considered a valid solution.
RageCage

1
The number 123456789 causes it to fail, well below the 10^15 limit posted in the question.
Moop

1
You could easily turn the recursion into a loop and avoid this issue altogether
Moop

1
Running this in the Stackless Python implementation should avoid the recursion depth issue.
xnor

0

QBIC, 38 bytes, nc

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

Explanation:

The code reads an input, and then applies a modifier. It then tests to see if the number + modifier is a palindrome. Then, it flips the sigh on the modifier, re-applies that and tests again.

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

0

Bash, 73 bytes

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

Input goes to the 1st command line argument:

foo.sh 123456789

0

Axiom, 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)

The byte count it is again this, but the algo it would be O(log(n)) because it would dipend only from the digit lenght of its input (and log10(n) would be near the lenght of the decimal digits of n). ungolfed and results

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

The ones had spoken again (or for the complete elimination) the use of goto for computer languages, for my humble hobby programmer prospective: Are incompetent in informatics !!!!
RosLuP

0

Husk, 16 12 9 bytes

ḟoS=↔+⁰İZ

Thanks @H.PWiz for -4 bytes!

Try it online!

Explanation

ḟ(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

0

APL NARS 47 chars

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

this above search but algo can not be fast and right as the g below...

This

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

is a simple loop exit only when it find b≡⌽b so b is a string palindrome

  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 


0

Japt, 8 bytes

nȥsw}cU

Try it

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.