প্রবলেম অর্থ সমস্যা আর সলভিং অর্থ সমাধান করা। তাহলে এই দুইটাকে মিক্স আপ করলে হয় সমস্যার সমাধান করা। এই সমস্যা কিন্তু খুবই বিরক্তিকর জিনিস। দৈনন্দিন জীবনে আমরা নানা ধরণের সমস্যায় পড়ি। কোনো টাকে সমাধান করতে পারি আবার কোনো প্রবলেম সমাধান করতে পারিনা। যেগুলো সমধান করতে পারি না সেগুলো মাঝে মাঝে আমাদের অন্যতম যন্ত্রণার কারণ হয়ে দাঁড়ায়।
প্রোগ্রামিং করতে গিয়েও আমরা কিন্তু প্রতিনিয়ত সমস্যার পড়ি। অন্যতম একটা সমস্যা হলো আমরা যেভাবে আশা করি সেভাবে কোড কাজ করে না। যেটা খুবই বিরক্তিকর। এই প্রব্লেমে কেউই পড়তে চায় না।কিন্তু এই প্রব্লেমে পড়া এবং এর সমাধান করার মাঝে আলাদা গুরত্ব লুকিয়ে আছে। যখনই প্রোগ্রামিং শিখব আমাদের উচিত প্রব্লেম সলভিং করা। হ্যাঁ, নিজের ইচ্ছায় প্রব্লম সলভ করতে হবে। তবে এই প্রব্লেম কিন্তু কোড কেন কাজ করে না সেই প্রব্লেম না। এই প্রব্লেম হলো এই প্রব্লেম যেটা অন্য আরেকজন আপনাকে কিছু নির্দেশনা দিয়ে সলভ করতে বলবে এবং আপনাকে সেটা সলভ করতে হবে।
প্রবলেম সলভিং কি?
প্রবলেম সলভিং এর শাব্দিক অর্থ আমরা সবাই জানি। এখন জানতে হবে প্রোগ্রামিং এ কিভাবে প্রবলেম সলভিং করা হয়। এই প্রবলেম সলভিং কে অনেকটা অংক সমাধান এর সাথে তুলনা করা যায়। আপনি প্রথমে বইয়ের অংক গুলো দেখেন, কিভাবে সমাধান করা হলো বোঝার চেস্টা করেন, তারপর নিজে সেই অংক টা করেন। আবার বিভিন্ন অনুশীলনী করার সময় অংক গুলো কে বোঝার চেষ্টা করেন, কিভাবে করা যায় তা নিয়ে চিন্তা করেন এবং পরিশেষে তার সমাধান করেন। আবার অনেক চেষ্টা করে না পারলেও শিক্ষকের সাহায্য নেন। ঠিক তেমনিভাবে প্রোগ্রামিং এও এরকম সমস্যা সমাধান করতে হয়। এর জন্য আপনাকে প্রথমে কোনো একটা স্পেসিফিক ল্যাঙ্গুয়েজ শিখতে হয়,সিন্ট্যাক্স গুলো বুঝতে হয়, কন্সেপ্ট গুলো বুঝতে হয়। তারপর প্রবলেম সলভিং করতে হয় চিন্তা করে করে। ধরুন, আপনি সি ল্যাঙ্গুয়েজ পারেন। এখন আপনাকে বলা হলো- "এমন একটি প্রোগ্রাম লেখুন যেটা দুটি সংখ্যার যোগফল বের করবে"। আপনি কিন্তু খুব সহজেই প্রোগ্রাম টা লেখে ফেলবেন। এই যে আপনাকে যোগফল বের করার প্রোগ্রাম লেখতে বলা হলো, এইটাই একটা প্রবলেম। আর আপনি যোগফল বের করার জন্য যে প্রোগ্রাম টা লেখলেন সেটা হলো সমাধান। এরকম হাজারও সহজ-কঠিন প্রবলেম রয়েছে। এগুলো সমাধান করাও এক ধরণের দক্ষতা এবং এগুলো আপনার প্রোগ্রামিং ক্যারিয়ারে বিভিন্ন ভাবে সাহায্য করবে।
কিভাবে করবেন প্রবলেম সলভিং?
প্রবলেম সলভ জন্য আপনাকে প্রথমেই যেকোনো একটা ল্যাংগুয়েজ শিখতে হবে। যেমন-সি,সি++,জাভা,পাইথন,জাভাস্ক্রিপ্ট ইত্যাদি। আপনি যদি একটা ল্যাঙ্গুয়েজ এর বেসিক জিনিস গুলো কভার করে থাকেন তাহলে আপনি প্রবলেম সলভ করার জন্য প্রস্তুত। ল্যাংগুয়েজ এর বেসিক ধাপ গুলো শেখা হয়ে গেলে আপনাকে অ্যালগরিদম সম্পরকে একটূ ধারণা রাখতে হবে। কম্পিউটার সাইন্সে ডাটা স্ট্রাকচার ও অ্যাল্গরিদম আলাদা একটি সাবজেক্ট। কিন্তু প্রব্লেম সলভ করার জন্য আপনার এত এক্সটেন্ড বিষয় জানার প্রয়োজন নেই।
অ্যালগরিদম কি?
কোনো একটি সমস্যা সহজে সমাধান করার পদ্ধতিই হলো অ্যাল্গরিদম। ব্যাস এটুকুই। আপনি প্রবলেম সলভ করার আগে সেই প্রবলেম টা কিভাবে সলভ করবেন সেটার একটা সমাধান বের করবেন। তারপর সেটাকে প্রয়োজন হলে নোট করবেন। তারপর সেটাকে কোডে রূপান্তর করবেন। অংক সমাধান করার আগে যেমন আমরা সমাধান খুজি তেমনি এখানেও তাই করতে হবে। ধরুন আপনাকে একটা সমস্যা দেয়া হলোঃ "এমন একটা প্রোগ্রাম লেখুন যেটা বৃত্তের ক্ষেত্রফল বের করবে"। এখন এই প্রবলেম সলভ করার জন্য সমাধান তথা অ্যালগরিদম কিভাবে বের করবেন তা দেখে নেই চলুন।
- আমরা স্কুলে থাকতে শিখেছি বৃত্তের ক্ষেত্রফল নির্নয়ের সূত্র হলো - πr² যেখানে r এর মান হচ্ছে বৃত্তের ব্যাসার্ধ। আর পাই এর মান ধরা যাক- ৩.১৪১৫৯। এখন এই সূত্র কাজে লাগিয়ে সমাধান বের করতে হবে।
- বৃত্তের ব্যাসার্ধের জন্য একটি সংখ্যা ইনপুট নিতে হবে ইউজারের কাছ থেকে। (এরুকম সমস্যা কিন্তু অন্যরা যাচাই করে যে সমাধান ঠিক হলো কিনা। তাই অন্যরা যাতে ইনপুট দিতে পারে সেই ব্যবস্থা করতে হবে। নিজে একটি ভ্যারিয়েবল কোনো মান বসিয়ে রাখলে হবে না।)
- সূত্র প্রয়োগ করতে হবে। পাই এর মান ৩.১৪১৫৯ এবং r এর মান ইউজার যত দিবে তত। (অর্থাৎ প্রোগ্রাম এ লেখলে হবে- 3.14159rr)
- সবশেষে সেই সূত্র এর মাধ্যমে পাওয়া রেজাল্ট টা আউটপুট এ প্রদর্শন করাতে হবে।
আমি উপরের সমপূর্ণ প্রসেস টাকে সি ল্যাঙ্গুয়েজে কোডের মাধ্যমে দেখাচ্ছি-
#include
int main(){
int r; //ব্যাসার্ধ স্টোর করার জন্য ভ্যারিয়েবল ডিক্লেয়ার করলাম/
float area; //ক্ষেত্রফল স্টোর করার জন্য ভ্যারিয়েবল ডিক্লেয়ার করলাম/
scanf("%d",&r); //ইউজারের কাছ থেকে ব্যাসার্ধ নিয়ে তা r ভ্যরিয়েবল এ স্টোর করলাম/
area= 3.14159*r*r; //সূত্র প্রয়োগ করে তার রেজাল্ট area ভ্যারিয়েবল এর ভেতরে স্টোর করলাম।
printf("%f",area); // পরিশেষে সেটা প্রিন্ট করে দিলাম।
return 0;
}
এইতো আমাদের একটা প্রবলেম সলভ করা শেষ। আপনি যেকোনো ল্যাংগুয়েজে যেকোনো ভাবে সমাধান করতে পারেন। শুধু আপনার প্রোগ্রাম সঠিক হতে হবে।
এখন স্বাভাবিকভাবেই প্রশ্ন আসে যে প্রবলেম সলভ কোথায় করব? আপনি প্রবলেম সলভ করবেন অনলাইন জাজে। এখন এই অনলাইন জাজ কি? এর মানে হলো একটি অনলাইন বিচারক যারা আপনাকে বিভিন্ন প্রবলেম দিবে এবং আপনাকে সেটা কিছু নির্দিষ্ট ল্যাংগুয়েজ দিয়ে যেকোনো নিয়মে সলভ করতে হবে। এরকম কয়েকটী জনপ্রিয় অনলাইন জাজ হলোঃ
- URI Online Judge
- UVA Online Judge
- Hacckerrank
- Toph (Bangladeshi site)
- LightOJ (Bangladeshi site)
- DImikOJ (Bangladeshi site)
আরো হাজারো সাইট রয়েছে অনলাইনে। এখন আসি এই জাজ গুলোতে কিভাবে সলভ করবেন প্রবলেম।
উদাহরণস্বরুপ uri online judge এর একটা প্রব্লেম দেখা যাকঃ-
https://www.urionlinejudge.com.br/repository/UOJ_1001_en.html
একবারে প্রথম লাইন থেকে প্রব্লেম পড়া শুরু করবেন। প্রথম লাইনে বলা আছে দুইটি ভ্যারিয়েবল পড়তে এবং সেই দুইটি ভ্যারিয়েবল এর যোগফল প্রিন্ট করতে। এবং লাস্টে একটা এন্ডলাইন প্রিন্ট করতে যাতে সমাধান গুলো গায়ে গায়ে না লেগে যায়।
এর পর পড়বেন ইনপুট সেকশন;
সবার শেষে পড়বেন আউটপুট সেকশন। সেখানে বলা আছে X এ বড়হাতের অক্ষরে প্রিন্ট করতে হবে এবং একটা স্পেস দিয়ে = চিহ্ন দিয়ে আবার আরেকটা স্পেস দিয়ে সেই যোগফল টা প্রিন্ট করতে হবে। আপনাকে ঠিক সেই ফরম্যাটেই প্রিন্ট করতে হবে যেভাবে স্যাম্পল আউটপুট এ বলা আছে। তাহলে প্রোগ্রাম অনুযায়ী যা প্রিন্ট হওয়ার কথা তাই স্যামপ্ল আউটপুট এ বলা হয়েছে। কোড করার পর আপনি সেখানে কোড টা পেস্ট করে সাবমিট বাটনে ক্লিক করে দেবেন আর জাজ হওয়া পর্যন্ত অপেক্ষা করবেন। কয়েক সেকেন্ডের মধ্যেই তারা রেজাল্ট দিয়ে দিবে। প্রোগ্রাম সঠিক হলে "Accepted" আর প্রোগ্রাম ভুল হলে "Wrong Answer" দেখাবে। অন্য কোনো রেজাল্ট ও দেখাতে পারে। যদি অ্যাক্সেপ্টেড ছাড়া অন্য কোনো রেজাল্ট দেখায় তাহলে বুঝতে হবে আপনার সমাধানে গরমিল আছে। জাজের বিভিন্ন রেজাল্ট নিয়ে অন্য আরেকদিন লেখব ইন শা আল্লাহ।
তো এইভাবেই আপনি অনলাইন জাজে প্রবলেম সলভ করতে পারেন। তবে নিজের মত করে জাস্ট প্রথম লাইনটা দেখেই কোড লেখা শুরু করে দেবেন্ন না। প্রবলেম সহজ হলেও সবকিছু একবার পড়ে নিন।কঠিন হলে ভালোভাবে পড়ুন,বোঝার চেষ্টা করুন।
কেন দরকার প্রবলেম সলভিং?
প্রোগ্রামিন জগতে প্রবেশের আগে বা পরে আপনি হয়তো অ্যাপেলের প্রতিষ্ঠাতার নিম্নক্ত উক্তিটী শুনেছেন।-
Everyone should no computer progamming. Because it teaches you how to think.
- Steve Jobs
কথাটার সারমর্ম হলো কম্পিউটার প্রোগ্রামিং জানলে আমরা চিন্তা করতে পারব, আমাদের চিন্তা শুক্তি বিকশিত হবে। কিন্তু প্রশ্ন হলো প্রোগ্রামিং শেখার মাধ্যমে কিভাবে চিন্তা শক্তি বিকশিত হবে।কই আমি তো ৪-৫ টা ল্যাঙ্গুয়েজ জানি, আমার চিন্তা শক্তি কি বেড়েছে কিনা তা তো আমি বুঝতে পারছি না। এখানেই কাজ করে প্রবলেম সলভিং। এক একটা প্রবলেম সলভ করার সময় আপনাকে প্রচুর পরিমাণ চিন্তা করে তা সলভ করতে হয়। আর প্রবলেম টা যদি হয় কঠিন, তাহলে তো কথাই নেই। এমনও হতে পারে আপনাকে সারাদিন সেই প্রবলেম নিয়ে চিন্তা করতে হবে। আরো অনেক বেনিফিট আছে প্রব্লেম সলভিং এর যা আর এখানে বর্ণনা করলাম না।
পরিশিষ্টঃ
সারাবছর গণিত অনুশীলন করে আমরা যেমন বছর শেষে গণিতের পরীক্ষা দিতে যাই তেমনি ভাবে সারাবছর প্রোগ্রামিং শিখে , প্রবলেম সলভিং করেও আমরা প্রোগ্রামিং প্রতিযোগিতায় অংশগ্রহণ করতে পারি। এই প্রোগ্রামিং প্রতিযোগিতা হলো এক ধরণের প্রতিযোগিতা যেখানে বিভিন্ন কঠিন-মাঝারি প্রবলেম দিবে সেগুলো সলভ করতে হবে। নির্দিষ্ট সময়ের মধ্যে যে যত বেশি প্রবলেম সলভ করতে পারবে সেই বিজয়ী। যদি একাধিক প্রতিযোগী সমসংখ্যাক প্রবলেম সলভ করে তাহলে যে কম সংখ্যক সময়ে শেষ করেছে সেই প্রথম!
বাংলাদেশে বিভিন্ন প্রোগ্রামিং কন্টেস্ট এর আয়োজন করা হয়। এদের মধ্যে একটি হলো- জাতীয় হাই স্কুল প্রোগামিং প্রতিযোগিতা। এছাড়াও বিভিন্ন কলেজ,বিশ্ববিদ্যালয়ে অভ্যন্তরীন ভাবে প্রতিযোগিতার আয়োজন করা হয়। আন্তর্জাতিক কন্টেস্টের মধ্যে উল্লেখযোগ্য- এসিএম আইসিপিসি,ইনফরমেটিক্স অলিম্পিয়াড ইত্যাদি।
এছাড়া অনলাইনে বিভিন্ন সাইটেও কন্টেস্টের আয়োজন করা হয়। যেমনঃ codeshef, codeforces, topcoder, google code jam, hackercup.
ধন্যবাদ সময় নিয়ে লেখাটি পড়ার জন্য। কোনো ভুল হলে ক্ষমা সুন্দর দৃষ্টিতে দেখবেন এবং অবশ্যই জানাবেন।
find this post at blogger site