প্রোগ্রামিং এর বিভিন্ন প্রবলেম সমাধানে আমরা যদি কিছু ধাপ অনুসরণ করি, তবে সহজেই সেই সমস্যা সম্পর্কে মানসম্মত সমাধান বের করতে পারবো। সেটা কিভাবে সম্ভব হয় ? কিভাবে প্রথম চেষ্টায় প্রোগ্রাম সম্পর্কে স্পষ্ট ধারণা নেয়া যায় তা এই আর্টিকেলে তুলে ধরতে চেষ্টা করব।
একটি প্রবলেম কেমন হয় , কি কি থাকে !
প্রথমেই একটি প্রবলেম দেখা যাক, তবেই তো আপনি বুঝবেন আমি আসলে কি বুঝাতে চাইতেছি। তার আগে আপনাকে জেনে নিতে হবে একটি প্রবলেমে মূলত কি কি থাকে। নিচে একটি ছবি সংযুক্ত করে দেয়া হলো সেখানে কিছু পার্ট ভাগ করে চিহ্নিত করা থাকবে যা আমরা ধাপে ধাপে পড়বো। এটির সরাসরি দেখতে এখানে যান। প্রবলেম লিঙ্ক।

১। এখানে (1) চিহ্নিত বক্সটা হলো প্রোগ্রাম পরিচিতি। যেখানে প্রবলেমটির নাম দেয়া থাকে (A. Watermelon) , তারপর থাকে টাইম লিমিট এবং মেমোরি লিমিট। এই লিমিট বলতে আপনার কোডটি রান হতে যা টাইম লাগবে তা যদি উক্ত (ex: time limit: 1 second) লিমিটের চেয়ে বেশি লাগে তবে আপনার কোডটি সঠিক হলেও time limit exceeded error খাবে। মেমরির ক্ষেত্রেও একই অবস্থা হবে। তারপর ইনপুট আউটপুট স্ট্যান্ডার্ড হবে।
২। দ্বিতীয় ধাপে প্রোগ্রাম সমস্যা সম্পর্কে একটি গল্প বা বিস্তারিত বর্ণনা থাকে। এখানে আপনি জানতে পারবেন সমস্যা টা মুলত কি , কি করতে হবে, কিভাবে করতে হবে। অনেক সময় পুরো সমাধানটাই এখানেই বলা থাকে। এটা খুবই গুরুত্বপূর্ণ একটি অংশ।
৩। তৃতীয় ধাপে ইনপুট নিয়ে পরিষ্কার ধারণা দেয়া থাকবে। আপনাকে কোন জিনিসগুলো ইনপুট নিতে হবে, কতবার ইনপুট নিতে হবে। আর চতুর্থ ধাপে আউটপুট নিয়ে বলা থাকবে, যেখানে আসলে প্রোগ্রামটা রান করার আউটপুট টা কি হবে তা আপনি বুঝতে পারবেন।
৪। তারপরের ধাপে আপনাকে কিছু নমুনা দেওয়া হবে অর্থাৎ কি ইনপুট নিচ্ছেন এবং তার ফলে কেমন আউটপুট বের হওয়া উচিত। শেষে ঐ ৫ নম্বর ধাপ সম্পর্কে কিছু বিস্তারিত বর্ণনা থাকতে পারে। তো জানা হয়ে গেল একটি প্রবলেমে মূলত কি কি অংশ থাকে।
কিভাবে প্রবলেমটি সমাধানের দিকে আমি অগ্রসর হবো ?
প্রথমত, আপনি সমস্যার নামটি দেখতে পারেন, সেখান থেকে কিছুটা ধারণা হয় যে এটা কি সম্পর্কিত সমস্যা হতে পারে। তারপর আপনি সেই গল্প বা বিস্তারিত অংশটুকু পড়বেন। এখান থেকেই আপনি পুরোপুরি ধারণা পাবেন। ভুলেও পড়য়ার সাথে সাথে কোড নিয়ে চিন্তা করবেন না। আপনি আগে খাতায় বা কোনো জায়গায় লিখে লিখে সেটি সমাধান করতে চেষ্টা করুন। ৯৯% ক্ষেত্রে ওই বর্ণনাতেই সমাধান দেওয়া থাকে। কিছু প্রবলেমে আপনি ইনপুট / আউটপুট দেখেই সলভ করতে পারবেন। তবে অবশ্যই গল্পটি বা স্টেপটি পড়বেন।
তারপর ইনপুট এ আসবেন। সেখানে আপনাকে বলে দেওয়া থাকবে কোন জিনিস রিড করবেন আর কি কি নিয়ে কাজ করবেন। সেখানে কিছু লিমিট দেয়া থাকবে, যা অনুসরণ করে আপনি কার্যকরভাবে কোড লিখতে পারবেন। আর আউটপুটের জন্য কেমন জিনিস আউটপুট হবে তা বলা থাকবে। আপনাকে অবশ্যই সেম জিনিস লিখতে হবে বা বের করতে হবে। একটি উদাহরণ দেই, আপনাকে বলা হলো YES প্রিন্ট করতে, আপনি করলেন Yes প্রিন্ট। তাহলে আপনার উত্তরটি ভুল হবে। অনেক সময় তা উল্লেখ করা থাকে যে কেস ছোট বড় হলেও ভুল আসবে না।
এতখন আপনি সবই পড়লেন কিন্তু অধিকাংশ জিনিসই বুঝেলেন না। তখন আপনি Examples এ দেখবেন আসলে কি হচ্ছে, কি ইনপুট নিচ্ছে কি বের হচ্ছে। হয়ত আপনি কোনো প্যাটার্ন খুজে পেলেন এবং সমাধান করে ফেললেন। Examples এর নিছে থাকা কিছু লাইন থেকেও আপনি ধারণা নিতে পারেন।
” ভুল করেও ভুল করবেন না “
কখনই কোড ইডিটর নিয়ে কোড লিখতে বসবেন না। আগে অবশ্যই খাতায় বা মাথায় পুরো সমাধানটি করুন। তারপর কোড করুন। সবসময় কোনো কিছু আউটপুটের পর নিউ লাইন যেমনঃ “\n”, endl এসব লিখবেন নয়তো Presentation Error খাবেন যদিও আপনার কোড সম্পূর্ণ নির্ভুল ছিল।
কোডফোরসেস এ কিভাবে কন্টেস্ট গুলা দিবেন, কোন রাউন্ড গুলো তে অংশ নেয়া উচিত, কোন সমসাগুলোর লেভেল কিরকম তা জানতে এই আর্টিকেলটি পড়তে পারেন। লিঙ্কঃCompetitive Programming Contests on Codeforces | কোডফোর্সেস এ প্রোগ্রামিং প্রতিযোগিতা