f=lambda n,k=1:`k`in bin(n^n/2)and-~f(n,k*10)
এটি অনলাইন চেষ্টা করুন!
কিভাবে এটা কাজ করে
দ্বারা XORing এন এবং N / 2 (দ্বারা বিভাজক 2 মূলত গত বিট বন্ধ চপ), আমরা একটি নতুন পূর্ণসংখ্যা পেতে মি যার সেট না বিট মধ্যে সংলগ্ন বিট মিলে ইঙ্গিত এন ।
উদাহরণস্বরূপ, যদি n = 1337371 হয় তবে আমাদের নিম্নলিখিতটি রয়েছে।
n = 1337371 = 101000110100000011011₂
n/2 = 668685 = 10100011010000001101₂
m = 1989654 = 111100101110000010110₂
এটি দীর্ঘতম শূণ্যতম সন্ধানের কাজটি হ্রাস করে। যেহেতু একটি ধনাত্মক পূর্ণসংখ্যা বাইনারি উপস্থাপনা সবসময় একটি দিয়ে শুরু হয় 1 , আমরা দীর্ঘতম এটি চেষ্টা করব 10 * সংখ্যা স্ট্রিংটি বাইনারি উপস্থাপনা দেখা মি । এটি পুনরাবৃত্তভাবে করা যেতে পারে।
1 কে হিসাবে শুরু করুন । প্রতিটি সময় চ মৃত্যুদন্ড কার্যকর করা হয়, আমরা প্রথমে পরীক্ষা করে এর দশমিক উপস্থাপনা ট বাইনারি উপস্থাপনা দেখা মি । যদি এটি হয়, আমরা কে 10 দ্বারা গুণিত করব এবং আবার এফ কল করব । যদি এটি না হয়, ডানদিকে কোডটি কার্যকর করা হয়নি এবং আমরা মিথ্যা ফিরিয়ে আছি ।and
এটি করার জন্য, আমরা প্রথমে গণনা করি bin(k)[3:]
। আমাদের উদাহরণে, bin(k)
ফিরে আসে '0b111100101110000010110'
এবং 0b1
শুরুতে এটি দিয়ে মুছে ফেলা হয় [3:]
।
এখন, -~
recursive কল করার আগে বাড়তি মিথ্যা / 0 প্রত্যেক সময় জন্য একবার চ যাও recursively বলা হয়। একবার 10 {ঞ} ( 1 দ্বারা অনুসরণ ঞ এর পুনরাবৃত্তির 0 ) বাইনারি উপস্থাপনা মধ্যে প্রদর্শিত হবে না ট , এ শূন্যর দীর্ঘতম চলা ট দৈর্ঘ্য ঞ - 1 । যেহেতু ঞ - 1 টানা শূণ্যসমূহ ট ইঙ্গিত ঞ মধ্যে ম্যাচিং সংলগ্ন বিট এন , আকাঙ্ক্ষিত ফল ঞ , যা কি আমরা বৃদ্ধিশীল দ্বারা প্রাপ্ত মিথ্যা / 0মোট জে বার।