নিকটতম প্যালিনড্রমিক নম্বরটি সন্ধান করুন


22

একটি নম্বর এন দেওয়া হয়েছে , আউটপুট / রিটার্ন এক্স যাতে এন + এক্স প্যালিনড্রোম হয়, যেখানে | এক্স | যতটা সম্ভব ছোট হতে হবে।

প্যালিনড্রোম : একটি সংখ্যা একটি প্যালিনড্রোম, যদি বাম থেকে ডানে বামে পড়ার সময় অঙ্কের ক্রমিক একই হয় তবে ডান থেকে বামে পড়ার সময়।
95359এবং 6548456প্রতিসম হয়, 123এবং 2424না। শীর্ষস্থানীয় জিরোগুলির সাথে সংখ্যাগুলি যেমন 020প্যালিনড্রোম নয়।

ইনপুট একটি ধনাত্মক পূর্ণসংখ্যা 10 15 এর চেয়ে কম । স্ট্যাডিনের কাছ থেকে এটি একটি পদ্ধতি-প্যারামিটার হিসাবে পড়ুন, যাই হোক না কেন।

আউটপুটটি একটি পূর্ণসংখ্যার (ধনাত্মক বা negativeণাত্মক) হতে হবে এবং ইনপুটটি ইতিমধ্যে প্যালিনড্রোম হলে 0 হওয়া উচিত। আপনি আপনার আউটপুট stdout এ লিখতে পারেন, এটি কোনও ফাংশন বা আপনার পছন্দসই থেকে ফিরিয়ে আনতে পারেন। যদি 2 টি সংখ্যা থাকে (যেমন 2এবং -2) যা প্রয়োজনীয়তাগুলি পূরণ করে, তবে তাদের মধ্যে কেবলমাত্র একটিকে আউটপুট দিন।

উদাহরণ:

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

সম্ভবত একটি সংখ্যা দুটি নিকটতম প্যালিনড্রোমগুলির মধ্যে অর্ধেক হয়ে থাকলে, হয় গ্রহণযোগ্য আউটপুট? উদাহরণস্বরূপ N=10আউটপুট জন্য X=-1বা হতে পারে X=1?
পিটার টেলর

@ পিটারটেলর হ্যাঁ, এটি যতটা সম্ভব ছোট হতে হবে।
কমনগ্যু

উত্তর:


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

কেবল আপনাকে জানাতে, নিয়মগুলি নিকটতম প্যালিনড্রোম (উভয় দিকেই) সন্ধানে পরিবর্তিত হয়েছিল। তবে আমি অনুমান করি যেহেতু আপনি যখন এই নিয়ম পরিবর্তনের আগে পোস্ট করেছিলেন তখন এটি ঠিক করার জন্য আপনার কোনও বাধ্যবাধকতা নেই।
মার্টিন ইন্ডার

এটি [0, 1, -1, 2, -2, ...]কোনও আপডেটের মাধ্যমে জেড লুপে চরগুলি সংরক্ষণ করতে পারে Z=-Z+(Z<0)?
xnor

হ্যাঁ - আমি স্বাধীনভাবে এটি ভেবেছিলাম।
isaacg

@xnor যোগ করা হয়েছে। ফিলার।
isaacg

ঠিক আছে শান্ত হও. আপনি কি এই অবস্থার অবহেলা কিছু সময়ের মধ্যে রেখেছেন? এবং সম্ভবত পি তে ইনপুটটিতে এটি প্রয়োগ করে কোনও রিপ্রেস সংরক্ষণ করছেন?
xnor

7

রুবি, 111 84 বাইট

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

সংখ্যাটিকে তার একমাত্র কমান্ড-লাইন আর্গুমেন্ট হিসাবে গ্রহণ করে।


কিভাবে এই ওয়েবসাইট সম্পর্কে ?
কমনগ্যু

@ মানু ধন্যবাদ যে এটি জানত না! আমার জমা যতদূর আমি বলতে পারি কাজ করে।
মার্টিন ইন্ডার

6

সিজেম, 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])কেমন? এটি সংক্ষিপ্ত এবং এটি একে ওয়ান-লাইনারে পরিণত করেছে
গর্বিত হাসেলেলার

ধন্যবাদ তালিকা monad সঙ্গে খুব মার্জিত কৌশল।
রায়

4

পাইথন ২.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

@Geobits হ্যাঁ, 10-100 মান আমাকে একটি সমস্যা এই পদ্ধতির সঙ্গে দেব
Moop

এটি কেবল তাদের নয়। একইভাবে, 199999 3-এর পরিবর্তে -8 দেয়, 991 -22 এর পরিবর্তে 88 দেয়। কেবলমাত্র প্রথম অঙ্কগুলি উল্টিয়ে দেওয়া অনেক ক্ষেত্রে ক্ষুদ্রতম ব-দ্বীপ পেতে কাজ করে না।
জিওবিটস

ভাল, আমি অনেকগুলি মামলা বলব না, আমি 99.9% ক্ষেত্রে এটির জন্য কাজ করি। তবে হ্যাঁ, এটির 100%
কেসগুলির

@Geobits। অবশ্যই, সেখানে 27% ত্রুটি হার। তবে আপনি যখন 100000000 এ যাবেন ত্রুটি হার যথেষ্ট হ্রাস পায়। আসল ত্রুটির হার গণনা করা আকর্ষণীয় হবে।
মোপ

4

পার্ল 5, 93 89 88 87 75 63 44

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

Ungolfed:

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

ডেনিসের পরামর্শগুলির জন্য ধন্যবাদ, এটি 43 + -p = 44 এ নেমে গেছে


1
1. এর -$aচেয়ে কম $a*-1। ২. আপনি যদি ব্যবহার করেন ($a<1)তবে এর দরকার নেই ? :$a++। ৩. যদি আপনি -pস্যুইচটি ব্যবহার করেন , $_=<>এবং print$_অন্তর্নিহিত হয়, তাই আপনি প্রথম বিবৃতিটি ড্রপ করে শেষটিতে পরিবর্তন করতে পারেন $_=$a+0
ডেনিস

@ ডেনিস ভাল লাগছে কোড গল্ফ এ এটি আমার দ্বিতীয় প্রচেষ্টা, তাই পরামর্শটির প্রশংসা করুন!
user0721090601

এটি -pএকটি অতিরিক্ত বাইট হিসাবে সুইচ গণনা করার প্রথাগত , তবে আপনি এটি ব্যবহার ($a<1)-$aনা করে আবার ফিরে পেতে পারেন -$a+($a<1)
ডেনিস

@ ডেনিস আমি যদিও আপনার উত্তরের উপর ভিত্তি করে সেই পদ্ধতিটি ব্যবহার করছি, তবে লাভটি হারাবে কারণ এটির আগে একটি স্থান প্রয়োজনwhile
ব্যবহারকারী0721090601

আপনি যদি এর $/পরিবর্তে ব্যবহার করেন তবে $aএটি কার্যকর হবে।
ডেনিস

4

05 এবি 1 ই , 15 14 বাইট (-1 এমিগানাকে ধন্যবাদ)

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

এটি অনলাইন চেষ্টা করুন!


পদ্ধতি:

  • সংখ্যার প্রথম অর্ধেক নিন।
  • বিজোড় হলে এটি ছেদ করে মিরর করুন, যদি না ছেদ করা হয় তবেও।
  • পার্থক্য।

আমি মনে করি আপনি এর 2äнপরিবর্তে ব্যবহার করতে পারেন g;î£
এমিগিনা

3

জাভা: 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, it returns -1358024, to equal palindrome 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;
}   

Does n+i+"" work and save the brackets? I think that the precedence should be correct.
Peter Taylor

@PeterTaylor Yep, and got another few from toString(). Thanks :)
জিওবিটস

1
Can I steal that sweet i=i<1?-i+1:-i? I shall call it "indecrement".
Jacob

@Jacob Go for it ;)
Geobits

3

Clojure, 92

Takes the first from a lazy for-sequence that works from 0 out and only includes values that make palindromes:

(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 session:

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

Straightforward. p returns true if a given number is palindrome, f searches the nearest.

EDIT: I also golfed it a little bit more thanks to the sweet "indecrement" trick by Geobits in the Java answer here.

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}

Usage:

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 থেকে golfed: 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‌​)
:;

2

জে - 49 চর

পূর্ণসংখ্যার সাথে সংখ্যার ম্যাপিং একটি ফাংশন।

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

আপনি এখানে তিনটি ভাগে এই ফলাফলটি কীভাবে তৈরি করতে পারেন তা এখানে। এটি জে আরপিএল এর প্রদর্শন: ইনডেন্টড রেখাগুলি হ'ল ব্যবহারকারী ইনপুট এবং আউটডেন্টেডগুলি হ'ল আরপিএল আউটপুট। এবং হ্যাঁ, জে আন্ডারস্কোর সহ নেতিবাচক চিহ্নটি বানান _

   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

জাভাস্ক্রিপ্ট 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 } Explanation:
Convert input n to String and split.
Iterate over both sides of the resulting array and copy digit on s[i] to s[j] until i < j. This will result in our desired palindrome.
Join array back together and subtract n to get x


পিপিসিজিতে আপনাকে স্বাগতম! এই উত্তরের সঠিক কাঠামো রয়েছে (ফাংশন সাবমিশনগুলি সাধারণত জাভাস্ক্রিপ্টে সবচেয়ে ভাল কাজ করে) এবং মনে হয় সঠিক উত্তরও দেয়। এই অ্যালগরিদম কেন কাজ করে তার ব্যাখ্যা দিয়ে আপনার পোস্টের উন্নতি হতে পারে (এটি কেন হয় তা আমার কাছে স্পষ্ট নয়) তবে এই মুহুর্তে এটি ঠিক আছে।

ধন্যবাদ, ive একটি ছোট ব্যাখ্যা এবং একটি অসম্পূর্ণ সংস্করণ যুক্ত করেছে
বেলড্রাইথ

আপনি পরিবর্তন করতে পারেন s=(n+'').split('')থেকে s=[...(n+'')]। 5 বাইট
ব্রায়ান এইচ।

আমি একইভাবে ভাবছিলাম, তবে 19 টি প্রথম প্রতিরূপ হিসাবে বলে মনে হচ্ছে: f(19)=3 কারণ 22 নিকটতম প্যালিনড্রোমিক, তবে ফাংশনটি -8 19-এ 11 রূপান্তর করার জন্য ফিরে আসে[...n+'']
বিটিডব্লুও

2

জাভাস্ক্রিপ্ট (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)

আমার প্রথম গল্ফ চ্যালেঞ্জ! আমি জানি যে সংক্ষিপ্ততর এবং আরও মার্জিত সমাধান ইতিমধ্যে @ ব্রায়ান এইচ পোস্ট করেছেন, তবে এটি অন্য পদ্ধতি another

পরীক্ষার কোড


1
পিপিসিজিতে আপনাকে স্বাগতম!
স্টেডিবক্স

2

ব্র্যাচল্যাগ , 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

গ্রোভি - 131 111 107 অক্ষর

Golfed:

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

Ungolfed:

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

পাইথন 2 - 76

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

ইনপুট নম্বর পায় এবং ইনপুট এবং প্রতিটি সংখ্যার মধ্যে পার্থক্যগুলির তালিকা তৈরি করে 0এবং 2*iকেবল যদি সংখ্যাটি প্যালিনড্রমিক হয়।

এটি পরম মান অনুসারে তালিকাটি সাজায় এবং প্রথম উপাদানটি প্রিন্ট করে।


আমি মনে করি না পরিসর (2 * i) বড় ইনপুটগুলির জন্য কাজ করবে।
মোপ

আপনি minবাছাইয়ের পরিবর্তে কীওয়ার্ড যুক্তি দিয়ে ব্যবহার করতে পারেন ।
xnor

আপনার দীর্ঘস্থায়ী রেঞ্জগুলি ব্যবহার করার জন্য, আপনার স্মৃতিটিকে বাড়াতে না পারার জন্য আপনাকে এক্সরেঞ্জে পরিবর্তন করতে হবে, যা জেনারেটর এবং ন্যূনতম, যা শর্ট সার্কিট।
isaacg

1

সি ++ 289

ফাংশন পি <algorithm>পদ্ধতি ব্যবহার করে প্যালিনড্রোমগুলি পরীক্ষা করে ।

Ungolfed:

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

গণিত 75

সম্ভবত আরও গল্ফ করা যেতে পারে ..

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

শূন্যস্থান গণনা করা হয় না এবং প্রয়োজন হয় না।


1

কফিস্ক্রিপ্ট: 73

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

ব্যাখ্যা: এটি এই সত্যটির সুবিধা গ্রহণ করে যে আমাদের যদি বেশ কয়েকটি বিজোড় দৈর্ঘ্য (1234567 বলুন) হয় x.slice(0, y)তবে মাঝের অঙ্কটি অন্তর্ভুক্ত করবে না তবে x.slice(0, -y)হবে। জাভাস্ক্রিপ্ট sliceসম্ভবত করা উচিত নয় এইভাবে কাজ করা , তবে এটি করে।

আমি কফিস্ক্রিপ্ট / জাভাস্ক্রিপ্টের স্ট্রিংটিকে বিপরীত করার জন্য আরও ভাল উপায়ের প্রত্যাশা করছিলাম, তবে বিভাজন / বিপরীত / যোগদানের পদ্ধতিটি সেখানে রয়েছে বলে মনে হচ্ছে।


1

পিএইচপি, 56 বাইট

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

কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়; দিয়ে চালানো -nr


1

জাভাস্ক্রিপ্ট 68 বাইট

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

অ্যালগরিদমের জন্য বিশাল বেলড্রাইথের কাছে প্রপোসগুলি, আমি যদিও এটি একটি উত্তর হিসাবে পোস্ট করছি, কারণ এটি একটি বিবৃতিতে কাজ করতে আমার বেশ সময় নিয়েছিল।

কোনও টিপস স্বাগত জানাই;)

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

@ বেলড্রাইথ আশা করছেন আপনি একক বক্তব্য ফাংশনটির উত্তরটি আমার কাছে আঁকতে দ্বিধা করবেন না, আমার এমন একটা বিস্ফোরণ ঘটেছে: ডি
ব্রায়ান এইচ।

Golf৩: এ গল্ফযোগ্য (n,s=[...n+''],j=s.length)=>s.map((v,i)=>i>--j?s[j]:v).join``-n, তবে একটি অ-সুস্পষ্ট কাউন্টারিক্স
নমুনা

ওহ, এটি কেবল 19 নয়, এটি এমন কোনও সংখ্যা যা 9 দিয়ে শেষ হয় এবং ইতিবাচক ফলাফল পাওয়া উচিত
ব্রায়ান এইচ।

0

পাইথন, 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)

চলমান অবস্থায় এটি ত্রুটি ছুঁড়ে দেয় (সর্বাধিক পুনরাবৃত্তির গভীরতা অতিক্রম করে)
মোপ

এটি আমার কোডে ত্রুটি নয়। এটি একটি বিশাল সংখ্যায় সর্বাধিক পুনরাবৃত্তির গভীরতা ছাড়িয়ে যাবে, তবে এটি শালীন আকারের সংখ্যায় কাজ করে। চশমাগুলিতে কোনও সর্বাধিক পরীক্ষার কেস না থাকায় এটি এখনও একটি বৈধ সমাধান হিসাবে বিবেচনা করা উচিত।
রেজকেজ

1
সংখ্যাটি 123456789এটি ব্যর্থ হওয়ার কারণ হিসাবে প্রশ্নটিতে পোস্ট করা 10 ^ 15 সীমাটির নিচে।
মোপ

1
সহজেই আপনি একটি লুপ মধ্যে পুনরাবৃত্তির তুলতে পারে এবং এড়ানো এই সমস্যা পুরাপুরি
Moop

1
স্ট্যাকলেস পাইথন প্রয়োগে এটি চালানো পুনরাবৃত্তির গভীরতার সমস্যা এড়ানো উচিত।
xnor

0

কিউবিআইসি , 38 বাইট, এনসি

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

ব্যাখ্যা:

কোডটি একটি ইনপুট পড়ে এবং তারপরে একটি সংশোধক প্রয়োগ করে। এটির পরে এটি পরীক্ষা করে পরীক্ষা করে থাকে যে সংখ্যাটি + সংশোধক একটি প্যালিনড্রোম কিনা। তারপরে, এটি সংশোধনকারীটির উপর দীর্ঘশ্বাস ফ্লিপ করে, এটি পুনরায় প্রয়োগ করে এবং আবারও পরীক্ষা করে।

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

বাশ, 73 বাইট

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

ইনপুটটি প্রথম কমান্ড লাইনের যুক্তিতে যায়:

foo.sh 123456789

0

অ্যাক্সিয়াম, 720 594 412 বাইট

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)

বাইট গণনাটি এটি আবার এটি, তবে আলগোটি এটি ও (লগ (এন)) হবে কারণ এটি কেবলমাত্র তার ইনপুটটির অঙ্কের দৈর্ঘ্য (এবং লগ 10 (এন) এর দশমিক অঙ্কগুলির দৈর্ঘ্যের কাছাকাছি হবে dip )। অসম্পূর্ণ এবং ফলাফল

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

এগুলি আবার কথা বলেছিল (বা সম্পূর্ণ নির্মূলের জন্য) কম্পিউটার ভাষার জন্য গোটো ব্যবহার করার জন্য, আমার নম্র শখের প্রোগ্রামার সম্ভাব্য: তথ্যসূচীতে অক্ষম !!!!
রোজলুপ

0

হুশ , 16 12 9 বাইট

ḟoS=↔+⁰İZ

-৪ বাইটের জন্য @ এইচ.পি.উইজকে ধন্যবাদ!

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

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

এপিএল NARS 47 অক্ষর

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

উপরের এই অনুসন্ধানটি কিন্তু নীচের ছের মতো দ্রুত এবং সঠিক হতে পারে না ...

এই

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

কেবলমাত্র লুপের প্রস্থানটি যখন এটি খুঁজে পায় ঠিক ততই b একটি স্ট্রিং প্যালিনড্রোম

  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 


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.