আমাদের একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে যার আকার N (৪ এর গুণিতক) এবং আমাদের অ্যারে এক্সক্লুসিভ OR অপারেশন করতে হবে যাতে input[1-4] utility_arr[1-4] কে প্রতিফলিত করে এবং গণনার শর্ত হল: যদি arr[1-4] = {a1, a2, a3, a4} হয়, তবে q[1-4] = {a1 ⊕ a2 ⊕ a3, a1 ⊕ a2 ⊕ a4, a1 ⊕ a3 ⊕ a4, a2 ⊕ a3 ⊕ a4}
বিভিন্ন ইনপুট-আউটপুট পরিস্থিতি
উদাহরণ ১
ইনপুট: int[] input = { 5, 2, 3, 4 };
আউটপুট: XOR অপারেশনের ফলাফল 4 3 2 5
ব্যাখ্যা: একটি এক্সক্লুসিভ-OR গেটের আউটপুট শুধুমাত্র "HIGH" হয় যখন এর দুটি ইনপুট টার্মিনাল একে অপর থেকে "DIFFERENT" লজিক লেভেলে থাকে। আউটপুট "0" হয় যদি এই দুটি ইনপুট A এবং B উভয়ই লজিক লেভেল "1" বা "0" এ থাকে, যা গেটটিকে "বিষম কিন্তু সম নয় গেট" করে তোলে। অর্থাৎ, ইনপুটগুলোর মধ্যে ১ এর সংখ্যা বিজোড় হলে আউটপুট "১" হয়।
a1 ⊕ a2 ⊕ a3 = 5 ⊕ 2 ⊕ 3 = 4 a1 ⊕ a2 ⊕ a4 = 5 ⊕ 2 ⊕ 4 = 3 a1 ⊕ a3 ⊕ a4 = 5 ⊕ 3 ⊕ 4 = 2 a2 ⊕ a3 ⊕ a4 = 2 ⊕ 3 ⊕ 4 = 5
উদাহরণ ২
ইনপুট: int[] input = { 7, 6, 4, 4, 3, 8, 9, 5 };
আউটপুট: XOR অপারেশনগুলির ফলাফল 5 5 7 6 2 14 15 4
ব্যাখ্যা: শুধুমাত্র ৪ এর গুণিতক আকারের input[] অ্যারের জন্য কাজ করবে, অন্যান্য আকারের ইনপুট অ্যারে বিজোড় অবস্থানের সংখ্যাগুলোর জায়গায় ০ দেখাবে।
নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি
- XOR-এর বৈশিষ্ট্য অনুযায়ী a ⊕ a = 0 এবং a ⊕ 0 = a। (a ⊕ b ⊕ c) ⊕ (b ⊕ c ⊕ d) = a ⊕ d (কারণ (b ⊕ c) ⊕ (b ⊕ c) = 0)
- গণনার জন্য অ্যারেটি ৪-৪ টির গ্রুপে ভাগ করা হয় এবং XOR-এর বৈশিষ্ট্যগুলো ব্যবহার করে প্রতিটি গ্রুপের ফলাফল নির্ণয় করা হয়।
- উপরের বৈশিষ্ট্য থেকে (a ⊕ d) ব্যবহার করে b এবং c নির্ণয় করা যায়: (a ⊕ b ⊕ d) ⊕ (a ⊕ d) = b এবং (a ⊕ c ⊕ d) ⊕ (a ⊕ d) = c
- b এবং c ব্যবহার করে a এবং d নির্ণয় করা যায়: (a ⊕ b ⊕ c) ⊕ b ⊕ c = a এবং (b ⊕ c ⊕ d) ⊕ b ⊕ c = d
- এই প্রক্রিয়া সব ৪টি গ্রুপের জন্য পুনরাবৃত্তি করা হয়
- দুটি পয়েন্টার i এবং j দিয়ে একটি লুপ অ্যারের দৈর্ঘ্য ৪ দিয়ে ভাগ করার পর্যায়ন চলে এবং একটি টেম্প ভ্যালু (ans) ও একটি ইউটিলিটি অ্যারে (যে উত্তরগুলো সংরক্ষণ করে) ব্যবহৃত হয়।
- ফর লুপের ভিতরে নিচের XOR অপারেশনগুলো বাস্তবায়ন করা হয়:
ans = input[i] ⊕ input[i+3] utility[i+1] (b গণনা) = input[i+1] ⊕ ans utility[i+2] (c গণনা) = input[i+2] ⊕ ans utility[i] (a গণনা) = input[i] ⊕ (utility[i+1] ⊕ utility[i+2]) utility[i+3] (d গণনা) = input[i+3] ⊕ (utility[i+1] ⊕ utility[i+2])
- পয়েন্টারগুলো পরবর্তী ৪টি ক্যারেক্টার সেটের জন্য আপডেট করা হয়
- শেষে অ্যারেটি প্রিন্ট করা হয় এবং ফলাফল ইউজারকে ফেরত দেওয়া হয়।
উদাহরণ কোড
import java.util.Arrays;
import java.util.List;
public class Tutorials {
static int ans = 0;
public static void main(String args[]) {
int[] input = {7, 1, 2, 3};
int[] arr = new int[input.length];
for (int i = 0, j = 0; j < input.length / 4; j++) {
ans = input[i] ^ input[i + 3];
arr[i + 1] = input[i + 1] ^ ans;
arr[i + 2] = input[i + 2] ^ ans;
arr[i] = input[i] ^ ((arr[i + 1]) ^ (arr[i + 2]));
arr[i + 3] = input[i + 3] ^ (arr[i + 1] ^ arr[i + 2]);
i += 4;
}
System.out.println("Different XORs of elements in groups of size 4 is: ");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
আউটপুট
Different XORs of elements in groups of size 4 is : 4 5 6 0