একটি ফাংশন লিখুন যা একটি সংখ্যাটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ন্যূনতম সংখ্যা সংযোজন করে এটিকে একটি প্যালিনড্রোম করে তোলে। সংখ্যাটি সর্বোচ্চ 100 ডিজিটের হবে।
Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101
একটি ফাংশন লিখুন যা একটি সংখ্যাটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে এবং ন্যূনতম সংখ্যা সংযোজন করে এটিকে একটি প্যালিনড্রোম করে তোলে। সংখ্যাটি সর্বোচ্চ 100 ডিজিটের হবে।
Sample Inputs
12
122
232
2323
1012121
Sample Outputs
121
1221
232
23232
101212101
উত্তর:
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
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
এরপরে এটি এটিকে নিজের ( $&
) দ্বারা প্রতিস্থাপন করে এবং স্ট্রিংটি ( $`
) দিয়ে শুরু হওয়া বিপরীত সমস্ত কিছু যুক্ত করে।
ẹ;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
সম্পাদনা: @ 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:])
n
।
s=n
সাহায্য করে তা দেখছি না ; আমার s
স্ট্রিং হওয়া দরকার যাতে আমি ডিজিট রেঞ্জগুলি পেতে সাবস্ক্রিপ্ট করতে পারি। সেখানে কি যুক্তি?
হোয়ার উত্তরের ভিত্তিতে :)
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])
return(...).next()
সাধারণত লেখা যেতে পারে এতে অতিরিক্ত চরের দাম পড়তে পারে তবে আমি পরে স্থানটি ফেলে দিতে পারি return
। হোয়া এতে কোনওভাবেই জিই
f=->x{x=x.to_s.split'';99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}
f=->x{x=x.to_s.chars;99.times{|i|x.insert~i,x[i]if x!=x.reverse};x*''}
আপনার উত্তরের ভিত্তিতে , ২ টি চরিত্রের জন্য .split '' এর পরিবর্তে অক্ষর সহ। এবং আমি নিশ্চিত যে আরও কিছুটা চেপে ধরার উপায় রয়েছে <<
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;
}
}
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;
}
আমার মনে হচ্ছে এটি অনেক বেশি শক্ত হতে পারে তবে এটি কীভাবে তা আমার কাছে তাত্ক্ষণিকভাবে স্পষ্ট নয়। ফাংশনটি প্রচুর জায়গা খায় তবে আমার এটি দুটি জায়গায় প্রয়োজন।
এটি কেবল সংখ্যাগুলির জন্য নয়, কোনও স্ট্রিংয়ের জন্য কাজ করে এবং এটি কোনও দৈর্ঘ্য হতে পারে।
for(;strrev($p=$argn.strrev(substr($argn,0,$i++)))!=$p;);echo$p;