যে সংখ্যাতে ০ থেকে বেস B পর্যন্ত সব ডিজিট (digit) থাকে, সেটিকে সেই বেসে প্যান্ডিজিটাল (Pandigital) সংখ্যা বলা হয়। কিছু সংখ্যা ১ থেকে ৯ পর্যন্ত ডিজিট ধারণ করে, সেগুলোকে জিরোলেস প্যান্ডিজিটাল (zeroless pandigital) বলা হয়। প্যান্ডিজিটাল সংখ্যার উদাহরণ: 0123456789, 0789564312 ইত্যাদি।
এই টিউটোরিয়ালে আমরা একটি সমস্যা আলোচনা করব যেখানে একটি সংখ্যা এবং একটি বেস দেওয়া আছে, এবং আমাদের চেক করতে হবে সংখ্যাটি সেই বেসে প্যান্ডিজিটাল কিনা। উদাহরণ −
ইনপুট: num = "9651723467380AZ", base = 10 আউটপুট: YES ব্যাখ্যা: num বেস ১০-এ ০ থেকে ৯ পর্যন্ত সব ডিজিট ধারণ করে, তাই প্যান্ডিজিটাল। ইনপুট: num = "130264ABCDE745789", base = 16 আউটপুট: NO ব্যাখ্যা: num বেস ১৬-এ F (১৫) ধারণ করে না, তাই প্যান্ডিজিটাল নয়।
এই সমস্যা সমাধানের জন্য আমরা Set (সেট) ব্যবহার করব এবং প্রতিটি ডিজিট সেটে ইনসার্ট করব কারণ আমাদের ইউনিক (unique) ভ্যালু রাখতে হবে।
স্ট্রিং ট্রাভার্স করে প্রতিটি ক্যারেক্টার নেওয়া।
চেক করা এলিমেন্টটি ইন্টিজার (integer) কিনা অ্যালফাবেট (alphabet)।
যদি অ্যালফাবেট হয়, তবে অ্যালফাবেটে তার পজিশনে ১০ যোগ করে ২-ডিজিট রিপ্রেজেন্ট করা।
মানগুলো সেটে স্টোর করা।
ট্রাভার্সাল শেষে চেক করা সেটের সাইজ বেসের সমান কিনা।
উপরোক্ত পদ্ধতির C++ কোড
#include<bits/stdc++.h> using namespace std; int main(){ int base = 10; char n[] = "9651723467380AZ"; // ইউনিক ভ্যালু রাখার জন্য সেট ডিক্লেয়ার set<int, greater<int> > s; // স্ট্রিং ট্রাভার্স for (int i = 0; i < strlen(n); i++){ // এলিমেন্ট ইন্টিজার কিনা চেক if (n[i] >= '0' && n[i] <= '9') s.insert(n[i] - '0'); // এলিমেন্ট অ্যালফাবেট কিনা চেক else if (n[i] - 'A' <= base - 11) s.insert(n[i] - 'A' + 10); } // সব ডিজিট উপস্থিত কিনা চেক if(s.size() == base) cout << "YES"; else cout << "NO"; return 0; }
YES
এই টিউটোরিয়ালে আমরা একটি সমস্যা আলোচনা করেছি যেখানে একটি সংখ্যা এবং বেস দেওয়া আছে, এবং আমাদের চেক করতে হবে সংখ্যাটি প্যান্ডিজিটাল কিনা। আমরা একটি সহজ পদ্ধতি দেখিয়েছি সেটে ভ্যালু ইনসার্ট করে এবং এর সাইজ বেসের সাথে মিলিয়ে। এই সমস্যার C++ প্রোগ্রামও দেওয়া আছে যা C, Java, Python ইত্যাদি ভাষায়ও করা যাবে। আশা করি আপনি এই টিউটোরিয়ালটি সহায়ক পাবেন।