প্যালিনড্রোম বিপরীত সংযোজন
বিপরীত সংযোজন প্রক্রিয়াটি যেখানে সংখ্যাটি তৈরি করা সংখ্যাটি প্যালিনড্রোম না হওয়া পর্যন্ত তার বিপরীতে যুক্ত হয়। উদাহরণস্বরূপ, যদি আমরা 68 দিয়ে শুরু করি তবে প্রক্রিয়াটি হ'ল:
68 + 86 => 154 + 451 => 605 + 506 => 1111
আপনি দেখতে পাচ্ছেন, প্যালিনড্রমিক সংখ্যায় পেতে এটি 3 টি সংযোজন করেছে। আমরা যদি শুরু 89
করতে চাই তবে আমাদের 24 টি পদক্ষেপের প্রয়োজন হবে (যা আপনি এখানে ভাঙ্গন দেখতে পারেন )।
প্যালিনড্রোমে পৌঁছানোর আগে নেওয়া সবচেয়ে বেশি পদক্ষেপের বিশ্ব রেকর্ডটি 261, যা সংখ্যার জন্য ঘটে, যা 118 এর1186060307891929990
চেয়ে বেশি সংখ্যক উত্পাদন করে । তবে, বেশ কয়েকটি সংখ্যা রয়েছে যা আমরা প্যালিনড্রোম পেতে সক্ষম হইনি। এগুলিকে বলা হয় ল্যাচরেল সংখ্যা ।
যেহেতু আমরা 10 বেসে কাজ করছি, আমরা সত্যই কেবল তাদের প্রার্থী বলতে পারি, কারণ এই সংখ্যাগুলি কখনই প্যালিনড্রমে পৌঁছায় না তার কোনও প্রমাণ নেই। উদাহরণস্বরূপ, ক্ষুদ্রতম বেস -10 লিচরেল প্রার্থী 196, এবং এক বিলিয়নেরও বেশি পুনরুক্তি করেছেন। যদি প্যালিনড্রোম বিদ্যমান থাকে তবে এটি 10 10 8.77 এর থেকে অনেক বড় । তুলনা হিসাবে, যদি যে অনেক 1 টি পরমাণুতে লিখিত ছিল, আমাদের এটি 2.26772 × 10 588843575 মূল্যবান পরমাণুগুলির এটির জন্য এটি লিখে ধরে রাখতে হবে, এটি অনুমান করে এটি উপস্থিত রয়েছে।
তোমার কাজ
এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করুন যা একটি পূর্ণসংখ্যার ইনপুট নেয় এবং একটি প্যালিনড্রোমে পৌঁছানোর জন্য প্রয়োজনীয় পদক্ষেপগুলির সংখ্যা প্রদান করে বা মুদ্রণ করে। আপনাকে লিচরেল প্রার্থীদের সাথে ডিল করার প্রয়োজন হবে না (যেমন আপনার প্রোগ্রামটি যখন কোনও লিচরেল প্রার্থী দেওয়া হয়, হয় ত্রুটি ছুঁড়ে দেওয়ার জন্য বা চিরকালের জন্য চালানোর অনুমতি দেওয়া হয়)।
পরীক্ষার কেস:
f(0) => 0
f(11) => 0
f(89) => 24
f(286) => 23
f(196196871) => 45
f(1005499526) => 109
f(1186060307891929990) => 261
বিধি
বোনাসেস
- যদি আপনি প্রতিটি সংযোজন পদক্ষেপটি ফর্ম্যাট করে মুদ্রণ করেন তবে আপনি
n + rev(n) = m
আপনার স্কোরকে 0.75 দ্বারা গুণতে পারেন । পদক্ষেপের সংখ্যার আগে অঙ্কগুলি মুদ্রণ করা উচিত। - যদি আপনার কোডটি সনাক্ত করতে পারে যে কোনও নম্বর লিচরেল প্রার্থী হয় তবে আপনি আপনার স্কোরকে 0.85 দিয়ে গুণতে পারেন । এই ক্ষেত্রে 261 এর বেশি পুনরাবৃত্তি লিচরেলের প্রার্থী হ'ল এমনটি ধরে নেওয়া যথেষ্ট। হয় কিছুই ফিরিয়ে দিন না, বা এমন কোনও কিছু যা সঠিক উত্তরের জন্য ভুল হতে পারে এমন কোনও সংখ্যা নয় (ইত্যাদি: কোনও স্ট্রিং বা একটি সংখ্যা 0-261 এর মধ্যে নেই)। কোনও ত্রুটি বৈধ আউটপুট হিসাবে গণনা করে না (উদাহরণস্বরূপ সর্বাধিক পুনরাবৃত্তির গভীরতা অতিক্রম করে) এবং সনাক্তকরণে ব্যবহার করা যায় না।
- আপনার দ্বারা উভয় বনাস সম্পূর্ণ করলে, গুণ করা 0.6 ।
এটি কোড-গল্ফ , তাই কমপক্ষে সংখ্যা বাইট জেতে।
এই কোড স্নিপেট পাইথন 3 এ উভয় বোনাস সহ একটি উদাহরণ সমাধান দেখায়।
def do(n,c=0,s=''):
m = str(n)
o = m[::-1]
if c > 261:
return "Lychrel candidate"
if m == o:
print(s)
return c
else:
d = int(m)+int(o)
s+="%s + %s = %s"%(m,o,str(d))
return do(d,c+1,s)
*0.6
বোনাস রয়েছে? নাকি ঠিক তা-ই?
10 + 01 = 11
বা 10 + 1 = 11
বা এটা আমাদের আপ হয়?
262
?