ফ্যাটালআরারের দুর্দান্ত উত্তরে যুক্ত করে লাইনটি return f(b)^f(a-1);আরও ভালভাবে ব্যাখ্যা করা যেতে পারে। সংক্ষেপে, এর কারণ XOR এর এই দুর্দান্ত বৈশিষ্ট্যগুলি রয়েছে:
- এটা মিশুক - প্লেস বন্ধনী আপনি যেখানেই থাকুন না কেন আপনি চান
- এটা পরিবহণযোগ্য - অর্থ আপনি অপারেটরদের চারদিকে সরিয়ে নিতে পারেন (তারা "যাত্রা" করতে পারেন)
এখানে উভয়ই কর্মক্ষম:
(a ^ b ^ c) ^ (d ^ e ^ f) = (f ^ e) ^ (d ^ a ^ b) ^ c
এটার মত:
a ^ b = c
c ^ a = b
অন্যান্য সাহসী / পরিবহিত অপারেটরগুলির দুটি উদাহরণ হ'ল যোগ এবং গুণ করা, তবে তারা নিজেরাই বিপরীত হয় না। ঠিক আছে, তাই, কেন এই বৈশিষ্ট্যগুলি গুরুত্বপূর্ণ? ঠিক আছে, একটি সরল রুট হ'ল এটিকে প্রকৃতপক্ষে কীভাবে প্রসারিত করা যায় এবং তারপরে আপনি এই বৈশিষ্ট্যগুলি কর্মক্ষেত্রে দেখতে পাবেন।
প্রথমে আসুন আমরা যা চাই তা সংজ্ঞায়িত করি এবং এটিকে n বলি:
n = (a ^ a+1 ^ a+2 .. ^ b)
এটি যদি সহায়তা করে তবে এক্সওআর (^) এর মতো মনে করুন যেন এটি অ্যাড was
আসুন ফাংশনটি সংজ্ঞায়িত করুন:
f(b) = 0 ^ 1 ^ 2 ^ 3 ^ 4 .. ^ b
bএর চেয়েও বড় a, তাই কেবলমাত্র কয়েকটি অতিরিক্ত বন্ধনীতে নিরাপদে ফেলে (যা আমরা এটির সহযোগী কারণ) আমরা এটিও বলতে পারি:
f(b) = ( 0 ^ 1 ^ 2 ^ 3 ^ 4 .. ^ (a-1) ) ^ (a ^ a+1 ^ a+2 .. ^ b)
যা এটিকে সরল করে:
f(b) = f(a-1) ^ (a ^ a+1 ^ a+2 .. ^ b)
f(b) = f(a-1) ^ n
এর পরে, আমরা আমাদের যাদু লাইনের জন্য সেই বিপরীত সম্পত্তি এবং চালচলন ব্যবহার করি:
n = f(b) ^ f(a-1)
আপনি যদি কোনও অ্যাডের মতো এক্সওআর নিয়ে ভাবছিলেন, আপনি সেখানে একটি বিয়োগফল ফেলেছেন। এক্সওআর হ'ল এক্সওআরকে যোগকে বিয়োগ করতে হবে!
আমি কীভাবে এই বিষয়টি নিয়ে আসব?
লজিকাল অপারেটরগুলির বৈশিষ্ট্যগুলি মনে রাখবেন। তাদের সাথে প্রায় একটি অ্যাডের মতো কাজ করুন বা যদি এটি সাহায্য করে তবে গুণ করুন। এটি অস্বাভাবিক বোধ করে যে এবং (&), xor (^) এবং বা (|) সম্মিলিত, তবে তারা!
প্রথমে নিষ্পাপ বাস্তবায়ন চালান, আউটপুটে নিদর্শনগুলি দেখুন, তারপরে এমন নিয়মগুলি সন্ধান করুন যা প্যাটার্নটি সত্য তা নিশ্চিত করে। আপনার বাস্তবায়ন আরও সরল করুন এবং পুনরাবৃত্তি করুন। এটি সম্ভবত সেই মূল পথ যা মূল স্রষ্টা গ্রহণ করেছিলেন, এটি পুরোপুরি অনুকূল নয় (যেমন অ্যারের পরিবর্তে একটি স্যুইচ স্টেটমেন্ট ব্যবহার করুন) তা হাইলাইট করে।