SL3 Framework

Competitive Programming

একজন ভালো প্রোগ্রামার হওয়ার একমাত্র উপায় হচ্ছে প্রচুর কোড করা। কোড করতে হলে আপনাকে প্রচুর চিন্তা করতে হবে, প্রোগ্রামিং ফান্ডামেন্টালস নিয়ে ভাবতে হবে, সুডো কোড দিয়ে প্রব্লেম সল্ভ করতে হবে, মানে আমরা যা যা দেখিয়েছি তার সব কিছুই রিপিটেডলি করে যেতে হবে। আর এগুলো বার বার করতে করতে আপনি একজন ভালো প্রব্লেম সল্ভার, সহজ কথায় বললে একজন ভালো প্রোগ্রামার হয়ে যাবেন। তবে আবারও বলি, আপনাকে প্রচুর পরিমাণ কোড করতে হবে। তাহলে এত সমস্যা কোথায় পাবো? একটু যারা এক্সপার্ট হয়ে গেছে তাদের প্রব্লেম খোঁজা নিয়ে সমস্যা হয় না। কারণ তারা যেদিকে তাকায় সেদিকেই প্রব্লেম দেখতে পায়। কিন্তু বিগিনারসরা? তারা কি করবে? তাদের জন্য সহজ সমাধান হচ্ছে OJ বা অনলাইন জাজ।

What is Online Judge?

জাজের নাম শুনলেই আমাদের মনে হয় কেউ একজন হয়তো অনলাইনে বসে থাকবে, আমরা কি কোড করছি, ঠিক করছি না ভুল করছি সেগুলো দেখবে। ভুল করলে কান ধরে টেনে কান লাল করে দিবে। এই রকম অসংখ্য অদ্ভুত চিন্তা অনেকের ভিতরেই থাকে। আর কারোর কথা না জানলেও আমি আমারটা বলতে পারি। আমি কিছু দিন আগেও অনলাইন জাজকে ভয় পেতাম। ওরে বাবা, অনালাইন জাজ 😨।

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

আমরা যখন আমাদের কোড সাবমিট করি তখন অনলাইন জাজ এই কোডটা তার কাছে থাকা কম্পাইলার ব্যবহার করে রান করে। সে কিন্তু ভুল করেও আপনার কোডের দিকে তাকায় না। অনালাইন জাজের কোড নিয়ে কোনো মাথা ব্যাথা নেই। তার মাথা ব্যাথা তিনটা বিষয়ের ওপরে, প্রথমত আপনি টাইম লিমিট এক্সসিড করছেন কি না? দ্বিতীয়ত আপনি মেমরি লিমিট এক্সসিড করছেন কি না? আর তৃতীয়ত নির্দিষ্ট ইনপুটের জন্য আপনার কোড সঠিক আউটপুট দিচ্ছে কি না? এর বাইরে অনালাইন জাজের কোনো মাথা ব্যাথা নেই। জাজের কাছে থাকা কম্পাইলারে আপনার কোড প্রথমে কম্পাইল করা হবে। কম্পাইল করার সময়ই যদি কোনো ইরোর আসে যেমন সিনট্যাক্স ইরোর তখন আপনার কাছে মেসেজ আসবে যে কোড এক্সেপ্টেড হয় নি। এখানে কম্পাইলেশন ইরোর ঘটেছে। যদি কোড সঠিক কম্পাইল হয় এর পরের স্টেপে জাজ কোডটাকে রান করবে, রান করার সময় যদি কোনো ইরোর হয় যেমন ইন্টিজার নাম্বারের জায়গায় আপনি ডাবল নাম্বার দিয়েছেন তাহলে এটা রানটাইম ইরোর শো করবে। যদি এ যাত্রাতেও কোনো সমস্যা না থাকে তাহলে কোডের এক্সিকিউশন টাইম এবং মেমরি চেক করা হবে। যদি কোনো একটা লিমিট ক্রস করে তাহলে আপনাকে সুন্দর করে ইরোর মেসেজ শো করবে এবং আপনাকে বলবে আমরা আপনার কোড এক্সেপ্ট করতে পারছি না। কারণ আপনি টাইম অথবা মেমরি লিমিট ক্রস করে ফেলেছেন। এই যাত্রা পার করার পরে তারা হাজার হাজার র‍্যান্ডমলি জেনারেটেড ডেটা আপনার কোডে ইনপুট দিবে ইনপুট। প্রতিটা ইনপুটের জন্য আগে থেকেই তাদের আউটপুট জেনারেট করা থাকে। আপনার কোডের আউটপুট আর জাজের আউটপুট যদি এক না হয় তাহলে রং অ্যান্সার। এই যে জাজ একটার পরে একটা র‍্যান্ডম ইনপুট করছে আপনার প্রোগ্রামটা টেস্ট করার জন্য, এই প্রতিটা ইনপুটকে বলা হয় টেস্ট কেস। মনে করলাম জাজ ১০০ টা টেস্ট ইনপুট প্রোভাইড করেছে, এবং ৯৫ টা ইনপুটের জন্য আউটপুট সঠিক এসেছে। মানে জাজের আউটপুটের সাথে আপনার আউটপুট মিলে গিয়েছে। কিন্তু মাত্র ৫ টা ইনপুটের জন্য মেলে নি। তার মানে জাজ আপনাকে বলবে ৫% রং অ্যান্সার। আবার যদি আপনার কোডের আউটপুট এবং জাজের আউটপুট শতভাগ মিলে যায় কিন্তু দুইটা আউটপুট দেখতে শতভাগ একরকম না হয় তাহলে সেটা হচ্ছে প্রেসেন্টেশন ইরোর। এত গুলো ইরোর পাশ করার পরেও যদি আপনার কোড সার্ভাইভ করতে পারে তাহলে আপনার কোডের পাশে সবুজ কালিতে লেখা আসবে অ্যাক্সেপ্টেড।

একজন বিগিনার সচরাচরই এত প্যারা মেনে নিতে চাই না। তারা প্রথম প্রথম সাবমিট করলেই ইরোর শো করে। কি বা কেন ইরোর শো করছে তারা সেটাও বুঝতে পারে না। তাই তারা বিরক্ত হয়ে অনালাইন জাজে প্রব্লেম সল্ভিং করায় ছেড়ে দেয়। কিন্তু ভাইয়া একটু ধৈর্য্য ধরতে হবে। আপনাকে মনে রাখতে হবে আছাড় না খেয়ে আপনি একবারেই হাঁটা শেখেন নি। প্রথম ১০ টা প্রব্লেম সল্ভ করতে পারলেই আপনি একটা নেশার মধ্যে পরে যাবেন। আর যেই নেশাটা খুবই ভালো। হাজারটা প্রব্লেম সল্ভ করার পরেও কোনো প্রব্লেম সল্ভার বলতে পারে না যে তার পরবর্তী প্রব্লেম এক চান্সেই এক্সেপ্ট হবে। অনেক সময় এমন হয় যে স্যাম্পল যে কয়টা ইনপুট দেওয়া আছে তার আউটপুটের সাথে আপনার আউটপুট মিলে যাচ্ছে। কিন্তু সাবমিট করলে দেখায় ১০% রং অ্যান্সার। একটা বিষয় আপনাকে মাথায় রাখতে হবে, স্যাম্পল হিসেবে এখানে ৩-৫ টা টেস্ট কেস তারা দিয়েছে, কিন্তু যখন আপনি আপনার কোড সাবমিট করছেন তখন হাজার হাজার টেস্ট কেস পার করার পরেই আপনার কোড এক্সেপ্ট করা হবে। ইরোর আসছে মানে ভুলটা আপনার, অনলাইন জাজের নয়। এই সিম্পল সত্য কথাটা সব সময় মাথায় রাখতে হবে।

Competitive Programming

অনলাইন জাজে প্রব্লেম সল্ভ করা আর কম্পিটিটিভ প্রোগ্রামিং করা এক জিনিস না। নিজের লজিক্যাল স্কিল, প্রব্লেম সল্ভিং স্কিল বৃদ্ধি করার জন্য অনলাইন জাজে প্রব্লেম যে কেউ সল্ভ করতে পারে। এর সাথে কম্পিটিটিভ প্রোগ্রামিং এর কোনো সম্পর্ক নেই। কম্পিটিটিভ প্রোগ্রামিং মানে হচ্ছে আপনি অন্যের সাথে প্রোগ্রামিং প্রব্লেম সল্ভিং নিয়ে কম্পিটিশন করবেন। এটা পুরো পুরি ভিন্ন একটা মাইন্ডসেট। এর জন্য ভিন্ন প্রাকটিস, ভিন্ন স্কিল এর দরকার। ব্যাপারটা অনেকটা এরকম যে, প্রব্লেম সল্ভিং করছেন মানে আপনি এলাকার মাঠে ক্রিকেট খেলছেন। আর কম্পিটিভ প্রোগ্রামিং করছেন মানে আপনি ন্যাশনাল টিমের প্লেয়ার। ক্রিকেট আমরা সবাই ভালবাসলেও সবাই কিন্তু ন্যাশনাল টিমে খেলি না, বেশির ভাগ মানুষ এলাকার মাঠে মাশরাফি হয়েই জীবন পার করে দেয়। কম্পিটিভ প্রোগ্রামিং সম্পূর্ণ ভিন্ন একটা সেক্টর এবং চাইলে সেটা নিয়ে পুরো একটা বই লিখে ফেলা যাবে। তবে সেটা আমাদের SL3 Framework এর অন্তর্ভুক্ত কোনো বিষয় নয়।

Real Life Problem Solving

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

Edit this page on GitHub