প্রোগ্রামিং কনটেস্ট এবং অনলাইন জাজে হাতেখড়ি
তোমার বয়স যতই হোক বা যেখানেই পড়ালেখা করো তুমি প্রোগ্রামিং কনটেস্টে অংশ নিতে পারবে, এমনকি তুমি যদি স্কুলে পড়ো তাহলেও। ইনফরমেটিক্স অলিম্পিয়াড হলো স্কুল-কলেজের স্টুডেন্টদের জন্য প্রোগ্রামিং কনটেস্ট, বাংলাদেশ জাতীয় পর্যায়ের অলিম্পিয়াডে ভালো করে তুমি অংশ নিতে পারবে আন্তর্জাতিক ইনফরমেটিক্স অলিম্পিয়াডে। তুমি যদি স্কুল-কলেজ থেকেই সিরিয়াসলি কনটেস্ট করা শুরু করো তাহলে খুবই ভালো সম্ভাবনা আছে বিশ্ববিদ্যালয় পর্যায় গিয়ে তুমি দেশের সেরা একজন কনটেস্টেন্ট হতে পারবে, রাশিয়া-চীনের মতো যেসব দেশ কনটেস্টে সবথেকে ভালো তারা খুব কম বয়সে এটা শুরু করে। তুমি যদি এরই মধ্যে কোনো বিশ্ববিদ্যালয়ে ১ম বা ২য় বর্ষে পড়ালেখা করো তাহলেও মোটেও দেরী হয়ে যায়নি, তুমি বিভিন্ন বিশ্ববিদ্যালয়ের আয়োজিত ন্যাশনাল লেভেলের কনটেস্টগুলোতে অংশ নিতে পারবে। তবে তোমার লক্ষ্য হবে আকাশ ছোয়ার, তুমি হয়তো একসময় অংশ নিবে acm icpc ওয়ার্ল্ড ফাইনালে, প্রোগ্রামিং কনটেস্টের সবথেকে সম্মানজনক প্রতিযোগীতায়। এটার জন্য তোমাকে খুবই ভালো ফলাফল করতে হবে রিজিয়নাল কনটেস্টে। প্রতি বছরই বাংলাদেশ থেকে ১টি বা ২টি টিম ওয়ার্ল্ড ফাইনালে অংশ নেয়।
এগুলো ছাড়াও বিভিন্ন ওয়েবসাইটে নিয়মিত অনলাইন কনটেস্ট হয়, সেগুলোতে অংশ নিতে পারে যে কেও, শুধু তোমাকে ইমেইল আইডি দিয়ে সাইটে রেজিস্টার করতে হবে। সেখানে তুমি সারা বিশ্বের প্রোগ্রামারদের সাথে প্রতিযোগীতা করবে, তোমাকে পারফরমেন্স অনুযায়ী গ্র্যান্ডমাস্টার/এক্সপার্ট ইত্যাদি রেটিং দেয়া হবে, সেখানে দেখতে পারবে বাংলাদেশি প্রোগ্রামাররা ইন্টারন্যাশনাল পর্যায়েও খুবই ভালো ফলাফল করে। প্রোগ্রামিং কনটেস্ট টপ-রেটেড কোডারদের অনেকের বয়স ১৫-১৬ বা তারও কম তাই তোমার ইউনিভার্সিটিতে যাওয়া পর্যন্ত অপেক্ষা করা দরকার নেই।
এখন আসি যেটা শিখাতে মুলত লেখাটা শুরু করেছিলাম সেই অংশে, অনলাইন জাজে হাতেখড়ি। তুমি যখন একটা প্রবলেম সলভ করবে সেটা সঠিক নাকি সেটা বলে দিবে অনলাইন জাজ। অনলাইন জাজ আসলে এক ধরণের অনলাইন সফটওয়্যার যে তোমার কোড পরীক্ষা করে কয়েক সেকেন্ডের মাঝে বলে দেয় সেটা সঠিক নাকি। প্র্যাকটিস করার জন্য অসংখ্য অনলাইন জাজ আছে। তুমি হয়তো জানো এইসব জাজের মধ্যে একটি আছে একজন বাংলাদেশির তৈরি করা, জাজটির নাম lightoj, তৈরি করেছেন ঢাকা বিশ্ববিদ্যালয়ের জানে আলম জান যিনি বর্তমানে গুগলে কাজ করছেন। তবে আমরা শুরু করবো বাংলাদেশিদের মধ্যে সবথেকে পপুলার UVa online judge দিয়ে, এটা তৈরি করেছে স্পেনের ভ্যালাডোলিড ইউনিভার্সিটি, লিংকটা হলো http://uva.onlinejudge.org/। তুমি শুরুতেই এখানে একটা অ্যাকাউন্ট খুলে ফেলো।
অ্যাকাউন্ট খুলে তুমি বামে browse problems থেকে “Contest Volumes” লিংকটাতে যাও। সেখানে দেখবে উপরের মতো volume C,volume CI ইত্যাদি লেখা আছে। তুমি volume C তে ক্লিক করো। সেখানে দেখবে প্রবলেমের একটা লিস্ট এসে গিয়েছে।
BD programmers
Bangladesh Informatics Olympiad
এগুলো ছাড়াও বিভিন্ন ওয়েবসাইটে নিয়মিত অনলাইন কনটেস্ট হয়, সেগুলোতে অংশ নিতে পারে যে কেও, শুধু তোমাকে ইমেইল আইডি দিয়ে সাইটে রেজিস্টার করতে হবে। সেখানে তুমি সারা বিশ্বের প্রোগ্রামারদের সাথে প্রতিযোগীতা করবে, তোমাকে পারফরমেন্স অনুযায়ী গ্র্যান্ডমাস্টার/এক্সপার্ট ইত্যাদি রেটিং দেয়া হবে, সেখানে দেখতে পারবে বাংলাদেশি প্রোগ্রামাররা ইন্টারন্যাশনাল পর্যায়েও খুবই ভালো ফলাফল করে। প্রোগ্রামিং কনটেস্ট টপ-রেটেড কোডারদের অনেকের বয়স ১৫-১৬ বা তারও কম তাই তোমার ইউনিভার্সিটিতে যাওয়া পর্যন্ত অপেক্ষা করা দরকার নেই।
এখন আসি যেটা শিখাতে মুলত লেখাটা শুরু করেছিলাম সেই অংশে, অনলাইন জাজে হাতেখড়ি। তুমি যখন একটা প্রবলেম সলভ করবে সেটা সঠিক নাকি সেটা বলে দিবে অনলাইন জাজ। অনলাইন জাজ আসলে এক ধরণের অনলাইন সফটওয়্যার যে তোমার কোড পরীক্ষা করে কয়েক সেকেন্ডের মাঝে বলে দেয় সেটা সঠিক নাকি। প্র্যাকটিস করার জন্য অসংখ্য অনলাইন জাজ আছে। তুমি হয়তো জানো এইসব জাজের মধ্যে একটি আছে একজন বাংলাদেশির তৈরি করা, জাজটির নাম lightoj, তৈরি করেছেন ঢাকা বিশ্ববিদ্যালয়ের জানে আলম জান যিনি বর্তমানে গুগলে কাজ করছেন। তবে আমরা শুরু করবো বাংলাদেশিদের মধ্যে সবথেকে পপুলার UVa online judge দিয়ে, এটা তৈরি করেছে স্পেনের ভ্যালাডোলিড ইউনিভার্সিটি, লিংকটা হলো http://uva.onlinejudge.org/। তুমি শুরুতেই এখানে একটা অ্যাকাউন্ট খুলে ফেলো।
অ্যাকাউন্ট খুলে তুমি বামে browse problems থেকে “Contest Volumes” লিংকটাতে যাও। সেখানে দেখবে উপরের মতো volume C,volume CI ইত্যাদি লেখা আছে। তুমি volume C তে ক্লিক করো। সেখানে দেখবে প্রবলেমের একটা লিস্ট এসে গিয়েছে।
ডানের কলামগুলোতে দেয়া আছে কতজন প্রবলেমটা সলভ করেছে আর কতজন চেষ্টা করেছে। যে প্রবলেম যত বেশি মানুষ সলভ করেছে সেটা তত সহজ হবার সম্ভাবনা বেশি। তুমি নিচে স্ক্রল করে 10055 – Hashmat the Brave Warrior প্রবলেমটায় ক্লিক করো। প্রবলেমটি সেট করেছেন বাংলাদেশের Shahriar Manzoor,তিনি খুবই বিখ্যাত প্রবলেমসেটার এবং পুরো পৃথিবীতে হাতেগোণা অল্প যে কয়জন মানুষ তিনি ওয়ার্ল্ড ফাইনালের জাজ হতে পেরেছেন তাদের একজন। প্রবলেমটা একবার তুমি রিডিং পরো তারপর আমি ব্যাখ্যা করছি।
যেকোনো প্রবলেমকে ৩টা অংশ ভাগ করা যায়। প্রথম ভাগে থাকে প্রবলেমের বর্ণনা। এরপরে থাকে “Input” অংশ। এই অংশ বলা থাকে তোমাকে কি ধরণের ভ্যালুর জন্য প্রবলেমটা সলভ করতে হবে। “Output” অংশে থাকে কিভাবে আউটপুট প্রিন্ট করতে থাকে। কয়েকটি sample input/output দেয়া হয় বোঝার সুবিধার জন্য। কিন্তু এটা কিন্তু জাজ এর Input না। জাজের একটি ইনপুট ফাইল থাকে, hashmat প্রবলেমটার জন্য সেটা হতে পারে এরকম
সত্যিকারের জাজ ইনপুট ফাইলে কি আছে সেটা খালি প্রবলেম সেটাররা জানেন, তোমাকে বা আমাকে সেটা দেয়া হবেনা, তোমাকে খালি বলা হবে ইনপুট ফাইলে কি ধরণের ইনপুট আছে, ইনপুট ফাইল কত বড়, যে সংখ্যা বা স্ট্রিং ইনপুট দেয়া হবে সেগুলো কত বড় ইত্যাদি। প্রতিটি ইনপুটের জন্য তোমাকে আউটপুট প্রিন্ট করতে হবে প্রবলেমে বলা ইনস্ট্রাকশন অনুযায়ী। জাজের কাছে একটা answer ফাইল আছে। তুমি যেসব আউটপুট প্রিন্ট করবে জাজ সেটাকে আরেকটি আউটপুট ফাইলে নিয়ে যাবে। তারপরে answer ফাইলের এর সাথে তোমার কোডথেকে পাওয়া আউটপুট মিলিয়ে দেখবে। এই কারণে তুমি আউটপুটে অতিরিক্ত কোনো কিছু প্রিন্ট করতে পারবেনা, যেমন hashmat প্রবলেমে তুমি প্রতি লাইনে সুন্দর করে “the answer is 10” এভাবে প্রিন্ট করলে হবেনা, যেভাবে বলেছে সেভাবে শুধুমাত্র উত্তরটা প্রিন্ট করতে হবে। তোমাকে ফাইল নিয়ে চিন্তা করতে হবেনা, তুমি সাধারণভাবেই printf,scanf দিয়ে কাজ করবে, ফাইলের ব্যাপার জাজ হ্যান্ডেল করবে।
তুমি একটা সলিউশন লিখে ফেলবে। সলিউশনটা হতে পারে এরকম:
আমি সরাসরি কোড না দিয়ে ইমেজ দিলাম যাতে কেও কপি-পেস্ট করে প্রথম সলিউশন লেখার আনন্দ মিস না করে। while এর ভিতর scanf এর এরকম ব্যবহার হয়তো তুমি আগে দেখোনি, আপাতত জেনে রাখো এভাবে লিখলে যতক্ষণ ২টি সংখ্যা ইনপুট দেয়া হবে ততক্ষন তোমার কোড কাজ করবে, ফাইল যখন শেষ হবে(EOF=end of file) তখন কোড টার্মিনেট করবে। এই কোডটা লিখে স্যাম্পল ইনপুট গুলো কিবোর্ড দিয়ে ইনপুট দিয়ে দেখো যে আউটপুটের সাথে মিলছে নাকি। মনে রাখবে শুধুমাত্র আউটপুট অংশটা ভিন্ন একটা ফাইলে নিয়ে জাজের সাথে মিলিয়ে দেখা হবে।
এবার বামে quick submit এ ক্লিক করো। প্রবলেম আইডি হলো 10055 যেটা প্রবলেমের উপরেই লেখা আছে। ল্যাংগুয়েজ সিলেক্ট করো C++ 4.5.3।
এরপর সাবমিট বাটনে ক্লিক করো। জাজের সার্ভার ঠিকঠাক থাকলে কয়েক সেকেন্ডে জাজ হয়ে যাবে।
প্রবলেম সলভ করতে গিয়ে অনেক সময়ই তুমি আটকে যাবে, বারবার wrong answer খাবে। তখন তুমি কি করবে? প্রথম কাজ হলো আরো ভালোভাবে চিন্তা করো। এরপরেও না পারলে সাহায্য নাও। হতে পারে তুমি এমন জায়গায় থাকো যেখানে সাহায্য করার মতো শিক্ষক বা বড় ভাই নাই। ইন্টারনেটের যুগে এটা কোনো ব্যপারই না, তুমি বিভিন্ন ফোরামের সাহায্য নাও। তুমি জান ভাইয়ের lightoj তে রেজিস্টার করলে একটি চমৎকার ফোরাম পাবে যেখানে অনেকেই সাহায্য করবে। uva সহ প্রায় সব অনলাইন জাজেরই ফোরাম আছে, তুমি গুগলে সার্চ করলেই লিংক পাবে সেগুলোর। সেখানে তুমি বড় বড় প্রোগ্রামারদের সাথে কথা বলো, দেখো তারা কিভাবে প্র্যাকটিস করে। বাংলাদেশের প্রোগ্রামারদের সাথে যোগাযোগ করার জন্য চমৎকার জায়গা হতে পারে ফেসবুক, তুমি নিচের গ্রুপ গুলোতে জয়েন করো:
প্রোগক্রিয়া-বাংলা ইনফরমেটিক্স ব্লগBD programmers
Bangladesh Informatics Olympiad
আপাতত এখানেই শেষ করছি। তোমার আরো কোনো প্রশ্ন থাকলে অবশ্যই জানাও, তোমাকে সাহায্য করতে পারলে খুশি হবো। শুভকামনা থাকলো।
সংগৃহীত
No comments