একটি সংখ্যা প্যালিনড্রোম তৈরি করুন


12

একটি ফাংশন লিখুন যা একটি সংখ্যাটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ন্যূনতম সংখ্যা সংযোজন করে এটিকে একটি প্যালিনড্রোম করে তোলে। সংখ্যাটি সর্বোচ্চ 100 ডিজিটের হবে।

Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101

golf.shinh.org/p.rb? রেফারেন্স দৈর্ঘ্যের জন্য পৃথক করুন
Nabb

নমুনা ইনপুট এবং আউটপুটগুলিতে এমন একটি উদাহরণ অন্তর্ভুক্ত করা যেতে পারে যেখানে সঠিক উত্তরটি এমনকি সংখ্যার একক সংখ্যা, কেবল নিশ্চিত করা যায় যে সাবমিটাররা সেই কেসটি কভার করে? আমার কাছে মনে হবে যে অর্ধপথটি একটি সংখ্যার পরিবর্তে অঙ্কের মধ্যে থাকলে কিছু অ্যালগরিদম ব্যর্থ হতে পারে।
Computronium

1
পছন্দ করেছেন
fR0DDY

উত্তর:


4

জে, 50 , 32 26 অক্ষর!

f=:{.@(,"1(-:|.)\.#|.@}:\)

যেমন

f '12'
121 
f '232'
232   
f '2323'
23232   
f '1012121'
101212101     

এটি কীভাবে কাজ করে (উদাহরণস্বরূপ)

y =: '1012121'

[\.y   NB. Sub lists of y
1012121
012121 
12121  
2121   
121    
21     
1 

|.\. y  NB> Reverses of sub lists of y
1212101
121210 
12121  
1212   
121    
12     
1  

([\. y) -:"1 (|. \. y) NB. Which of them are equal? (those are palindromes)
                       NB. ( -:"1 ) checks equality item by item
0 0 1 0 1 0 1

(-:  |.)\. y NB. Shortcut of the above
0 0 1 0 1 0 1

(0 0 1 0 1 0 1) # }:\y NB. Choose (#) the palindrome prefixes (\)
10    
1012  
101212

y, |.'10'   NB. Reverse and append the first prefix.
101212101

10

পার্ল, 32 টি অক্ষর

s/((.)(?1)\2|.?)$/$&.reverse$`/e

রেগেক্স বৈশিষ্ট্যগুলির জন্য পার্লের 5.10 বা তার পরে প্রয়োজন, তবে কোনও বিশেষ কমান্ড-লাইন সুইচ নেই।

নমুনা ব্যবহার:

$ perl -pe 's/((.)(?1)\2|.?)$/$&.reverse$`/e' << EOT
> 12
> 232
> 2323
> 1012121
> EOT
121
232
23232
101212101

এর মতো দীর্ঘতম ট্রেলিং প্যালিনড্রোমের সাথে মেলে পার্ল l.১০ এর পুনরাবৃত্তিমূলক রেজেক্স এক্সটেনশনগুলি ব্যবহার করুন:

m/
    (      # paren 1 - a palindrome is either:
      (.)  # paren 2 - a character
      (?1) # a palindrome as defined in paren 1
      \2   # the same character as in paren 2
    |        # or:
      .?   # a 0- or 1-character string
    )
    $      # at end of string
/x

এরপরে এটি এটিকে নিজের ( $&) দ্বারা প্রতিস্থাপন করে এবং স্ট্রিংটি ( $`) দিয়ে শুরু হওয়া বিপরীত সমস্ত কিছু যুক্ত করে।


5

ব্র্যাচল্যাগ 2, 8 বাইট, ভাষা পোস্টডেটস চ্যালেঞ্জ

ẹ;AcB↔Bc

এটি অনলাইন চেষ্টা করুন! প্রশ্নটি কোনও ফাংশন চেয়েছে, তাই আমি একটি সরবরাহ করেছি; টিআইও লিঙ্কটি একটি আর্গুমেন্ট নেয় যা একটি সম্পূর্ণ প্রোগ্রামের মতো একটি ফাংশন চালায়।

ব্যাখ্যা

ẹ;AcB↔Bc
ẹ          Split {the input} into digits
 ;Ac       Append {the shortest possible} list
    B↔B    to produce a palindrome
       c   then concatenate the resulting list of digits back into a number

3

পাইথন, 88 টি অক্ষর

def f(x):
 x,y=list(str(x)),[]
 while x!=x[::-1]:y+=x.pop(0)
 return''.join(y+x+y[::-1])

পপ দিয়ে সুন্দর। করুণা আপনি
gnibbler

2

পাইথন ( 101 96)

সম্পাদনা: @ gnibbler এর সমাধানের ভিত্তিতে সংক্ষিপ্ত

def p(n):s=str(n);r=s[::-1];l=len(s);return[int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i]][0] 

মূল:

def p(n):
 s=str(n);r=s[::-1];l=len(s)
 for i in range(l):
  if s[i:]==r[:l-i]:return int(s+r[l-i:])

আপনি s = str (n) কে s = দিয়ে প্রতিস্থাপন করতে পারেন n
fR0DDY

@ এফআর0 ডিডিওয়াই, এটি দীর্ঘমেয়াদে প্রয়োজন যদি এন যথেষ্ট বড় হয় তবে কাজ করবে না
gnibbler

@ fR0DDY, পাইথন আর আর ইনস বনাম লম্বা বিষয়ে তেমন যত্ন করে না। int (2346765434567875432456) 2326765434567875432456 v2.6.5 এ ফেরত দেয়। আমি কিভাবে s=nসাহায্য করে তা দেখছি না ; আমার sস্ট্রিং হওয়া দরকার যাতে আমি ডিজিট রেঞ্জগুলি পেতে সাবস্ক্রিপ্ট করতে পারি। সেখানে কি যুক্তি?
হোয়া লং ট্যাম

@ হোয়া, আমার মনে হয় fR0DDY এর সেখানে ব্যাকটিকস ছিল কিন্তু তারা মন্তব্যগুলিতে দেখায় না
গনিবল

@ হোয়া এটি s = [টিক] এন [টিক] ছিল।
fR0DDY

1

পাইথন - 98 টি অক্ষর

হোয়ার উত্তরের ভিত্তিতে :)

def p(n):s=str(n);r=s[::-1];l=len(s);return next(int(s+r[l-i:])for i in range(l)if s[i:]==r[:l-i])

নিশ্চিত না যে আমি এই অধিকারটি ব্যবহার করছি, তবে: "নামেরর: বিশ্বব্যাপী নাম 'পরবর্তী' সংজ্ঞায়িত করা হয়নি"
জেবি

@ জেবি, আহ, আপনাকে তার জন্য পাইথন ২..6 প্রয়োজন :) অন্যথায় এটি return(...).next()সাধারণত লেখা যেতে পারে এতে অতিরিক্ত চরের দাম পড়তে পারে তবে আমি পরে স্থানটি ফেলে দিতে পারি return। হোয়া এতে কোনওভাবেই জিই

1

গল্ফস্ক্রিপ্ট - 32 টি অক্ষর

{`:s-1%:r,,{s<r+..-1%=*}%{}?~}:f

1

হাস্কেল, 85

প্রত্যেকের মতো একই অ্যালগরিদম ব্যবহার করে:

import List
r=reverse
f s=s++(r.snd.head.filter g.zip(tails s)$inits s)
g(s,_)=s==r s

সমস্যার বিবরণ থেকে উদাহরণ:

*Main> map (f.show) [12,232,2323,1012121]
["121","232","23232","101212101"]

1

রুবি ১.৯, rs২ টি চর

f=->x{x=x.to_s.split'';99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}

x. 'এর পরিবর্তে x *' 'দুটি অক্ষর সাশ্রয় করে।
স্টেনস্ল্যাগ

1
সুন্দর একটি @ স্টেনস্লাগ, শিক্ষার জন্য ধন্যবাদ, আমি রুবি নবাগত :-)
আপনি

1

রুবি , 70 বাইট

f=->x{x=x.to_s.chars;99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}

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

আপনার উত্তরের ভিত্তিতে , ২ টি চরিত্রের জন্য .split '' এর পরিবর্তে অক্ষর সহ। এবং আমি নিশ্চিত যে আরও কিছুটা চেপে ধরার উপায় রয়েছে <<


1

জাভাস্ক্রিপ্ট (ES6), 145 টি অক্ষর

 p=a=>{S=x=>x.split``.reverse();for(s=String(a),i=0;i<s.length;i++)if(x=s+S(s.substring(0,i)).join``,x==S(x).join``)return x}

মন্তব্য করেছে:

function palindrome(n){
  s = String(n);
  for(i=0;i<s.length;i++)
  {
    x=s+s.substring(0,i).split("").reverse().join("") //take first n characters, reverse and append to the end
    if(x==x.split("").reverse().join("")) //is the number a palindrome?
      return x;
  }
}

0

জাভা, 174 বাইট

x->{Function<String,String>r=t->new StringBuilder(t).reverse().toString();String y=r.apply(x),z=x;int m=x.length();while(!z.equals(r.apply(z)))z=x+y.substring(--m);return z;}

Ungolfed:

x -> {
        Function<String, String> r = t -> new StringBuilder(t).reverse().toString();
        String y = r.apply(x), z=x;
        int m = x.length();
        while (!z.equals(r.apply(z))) z = x+y.substring(--m);
        return z;
    }

আমার মনে হচ্ছে এটি অনেক বেশি শক্ত হতে পারে তবে এটি কীভাবে তা আমার কাছে তাত্ক্ষণিকভাবে স্পষ্ট নয়। ফাংশনটি প্রচুর জায়গা খায় তবে আমার এটি দুটি জায়গায় প্রয়োজন।

এটি কেবল সংখ্যাগুলির জন্য নয়, কোনও স্ট্রিংয়ের জন্য কাজ করে এবং এটি কোনও দৈর্ঘ্য হতে পারে।


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