কম্পিটিটিভ প্রোগ্রামিং এ যারা আমার মত নতুন তারা একটা জিনিস সহজে বুঝতে পারেন না আর সেটা হল Test Case।
টেস্ট কেস জিনিসটা খুব ঝামেলার কিছু না। আপনাকে প্রব্লেম স্টেটমেন্ট এ যে সমস্যাটা সমাধান করতে বলেছে সেটাই মোট কতগুলো ইনপুট দিয়ে চেক করা হবে, সেটা হল টেস্ট কেস সংখ্যা। একটা উদাহরণ দেওয়া যাক।
ধরা যাক, দুইটি ইন্টিজার ইনপুট নিয়ে তাদের যোগফল বের করতে হবে। এখন এই প্রব্লেমে টেস্ট কেস সংখ্যার অর্থ হচ্ছে, মোট কত সেট ইনপুট নেওয়া হবে এবং কতগুলো আউটপুট আসবে।
যদি টেস্ট কেস সংখ্যা হয় ২ তাহলে একবার দুটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল আউটপুট দিবে। এরপর আবার দুটি সংখ্যা ইনপুট নিবে তাদের যোগফলটা আউটপুট দেবার জন্য।
মোট কথা, টেস্ট কেস সংখ্যা হচ্ছে কত গুলো ইনপুট এর জন্য প্রোগ্রামটা টেস্ট করে দেখা হবে সেটা। টেস্ট কেসের সমান সংখ্যক ইনপুট ও আউটপুট হবে।
মূলত যে সব প্রব্লেমে টেস্ট কেসের কথা থাকে তার ক্ষেত্রে প্রোগ্রামের একেবারে শুরুতেই, ভ্যারিয়েবল ডিক্লেয়ারেশন এর পরেই টেস্ট কেস সংখ্যা ইনপুট নিতে হয়। এর পর একটা লুপের মধ্যে মূল সমস্যাটার ইনপুট, সমাধান ও আউটপুট করতে হয়। এই লুপটা টেস্ট কেস সংখ্যার সমান সংখ্যক বার চলবে। উপরের যোগের সমস্যাটা যদি আমরা কোডিং করি তাহলে দেখা যাবে যেঃ
#include<stdio.h>
int main()
{
int a, b, i, sum, T;
scanf("%d", &T); /* টেস্টকেস ইনপুট নেওয়া হল*/
for (i =1; i <=T; i++) /* টেস্ট কেসে লুপ */
{
/* মূল সমস্যার কাজ শুরু এখানে */
scanf("%d%d", &a, &b);
sum= a+b;
printf("%d\n", sum);
/* মূল সমস্যার কাজ শেষ এখানে */
}
return 0;
}
এই কাজটা while স্টেটমেন্ট দিয়েও করা যায়। যেমন,
#include<stdio.h>
int main()
{
int a, b, sum, T;
scanf("%d", &T); /* টেস্টকেস ইনপুট নেওয়া হল*/
while (T--) /* টেস্ট কেসে লুপ */
{
/* মূল সমস্যার কাজ শুরু এখানে */
scanf("%d%d", &a, &b);
sum= a+b;
printf("%d\n", sum);
/* মূল সমস্যার কাজ শেষ এখানে */
}
return 0;
}
কাজেই টেস্ট কেস এর জন্য আমাদের একটা লুপ নিতে হবে যার মধ্যে প্রব্লেম স্টেটমেন্ট এ উল্লিখিত সমস্যার সমাধান এর কোড (ইনপুট, প্রসেসিং এবং আউটপুট) থাকবে।
আশা করি এবার অনুশীলন করার মত জ্ঞান সবার হয়েছে। কয়েকবার অনুশীলন করলেই ব্যাপার টা পরিষ্কার হয়ে যাবে।
টেস্ট কেস জিনিসটা খুব ঝামেলার কিছু না। আপনাকে প্রব্লেম স্টেটমেন্ট এ যে সমস্যাটা সমাধান করতে বলেছে সেটাই মোট কতগুলো ইনপুট দিয়ে চেক করা হবে, সেটা হল টেস্ট কেস সংখ্যা। একটা উদাহরণ দেওয়া যাক।
ধরা যাক, দুইটি ইন্টিজার ইনপুট নিয়ে তাদের যোগফল বের করতে হবে। এখন এই প্রব্লেমে টেস্ট কেস সংখ্যার অর্থ হচ্ছে, মোট কত সেট ইনপুট নেওয়া হবে এবং কতগুলো আউটপুট আসবে।
যদি টেস্ট কেস সংখ্যা হয় ২ তাহলে একবার দুটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল আউটপুট দিবে। এরপর আবার দুটি সংখ্যা ইনপুট নিবে তাদের যোগফলটা আউটপুট দেবার জন্য।
মোট কথা, টেস্ট কেস সংখ্যা হচ্ছে কত গুলো ইনপুট এর জন্য প্রোগ্রামটা টেস্ট করে দেখা হবে সেটা। টেস্ট কেসের সমান সংখ্যক ইনপুট ও আউটপুট হবে।
মূলত যে সব প্রব্লেমে টেস্ট কেসের কথা থাকে তার ক্ষেত্রে প্রোগ্রামের একেবারে শুরুতেই, ভ্যারিয়েবল ডিক্লেয়ারেশন এর পরেই টেস্ট কেস সংখ্যা ইনপুট নিতে হয়। এর পর একটা লুপের মধ্যে মূল সমস্যাটার ইনপুট, সমাধান ও আউটপুট করতে হয়। এই লুপটা টেস্ট কেস সংখ্যার সমান সংখ্যক বার চলবে। উপরের যোগের সমস্যাটা যদি আমরা কোডিং করি তাহলে দেখা যাবে যেঃ
#include<stdio.h>
int main()
{
int a, b, i, sum, T;
scanf("%d", &T); /* টেস্টকেস ইনপুট নেওয়া হল*/
for (i =1; i <=T; i++) /* টেস্ট কেসে লুপ */
{
/* মূল সমস্যার কাজ শুরু এখানে */
scanf("%d%d", &a, &b);
sum= a+b;
printf("%d\n", sum);
/* মূল সমস্যার কাজ শেষ এখানে */
}
return 0;
}
এই কাজটা while স্টেটমেন্ট দিয়েও করা যায়। যেমন,
#include<stdio.h>
int main()
{
int a, b, sum, T;
scanf("%d", &T); /* টেস্টকেস ইনপুট নেওয়া হল*/
while (T--) /* টেস্ট কেসে লুপ */
{
/* মূল সমস্যার কাজ শুরু এখানে */
scanf("%d%d", &a, &b);
sum= a+b;
printf("%d\n", sum);
/* মূল সমস্যার কাজ শেষ এখানে */
}
return 0;
}
কাজেই টেস্ট কেস এর জন্য আমাদের একটা লুপ নিতে হবে যার মধ্যে প্রব্লেম স্টেটমেন্ট এ উল্লিখিত সমস্যার সমাধান এর কোড (ইনপুট, প্রসেসিং এবং আউটপুট) থাকবে।
আশা করি এবার অনুশীলন করার মত জ্ঞান সবার হয়েছে। কয়েকবার অনুশীলন করলেই ব্যাপার টা পরিষ্কার হয়ে যাবে।
0 comments:
Post a Comment