প্রতিযোগিতার শেষ মুহূর্তের প্রস্তুতি

প্রোগ্রামিং প্রতিযোগিতায় ব্যস্ত শিক্ষার্থীরা। ছবি: সংগৃহীত
প্রোগ্রামিং প্রতিযোগিতায় ব্যস্ত শিক্ষার্থীরা। ছবি: সংগৃহীত

দেশের স্কুল ও কলেজের শিক্ষার্থীদের কম্পিউটার প্রোগ্রামিংয়ে দক্ষতা যাচাইয়ের জন্য শুরু হয়েছে স্ট্যান্ডার্ড চার্টার্ড ব্যাংক-প্রথম আলো আন্তস্কুল ও কলেজ প্রোগ্রামিং প্রতিযোগিতা ২০১৮। ২১ অক্টোবর সারা দেশের আগ্রহী দলগুলোর অনলাইন বাছাই প্রতিযোগিতা অনুষ্ঠিত হয়েছে। আগামী ২ নভেম্বর ঢাকার এশিয়া প্যাসিফিক বিশ্ববিদ্যালয়ে প্রতিযোগিতার চূড়ান্ত পর্ব অনুষ্ঠিত হবে।

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

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

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

 তোমরা যারা সি++ প্রোগ্রামিং ভাষায় কোডিং কর তারা স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (এসটিএল) নিয়ে পড়াশোনা করতে পারো। যেগুলো তোমার কোডিংকে সহজ এবং সমস্যা সমাধানে সাহায্য করবে। যেমন—ভেক্টর, কিউ, লিস্ট, ডেক, ম্যাপ কিংবা সর্ট । ধরো, তুমি যদি অনেকগুলো নম্বর সর্ট করতে চাও তাহলে এসটিএলের sort() তোমাকে সহজেই তা করতে সহায়তা করবে। এসব বিষয়ে ইন্টারনেটে খোঁজ করলেই প্রচুর তথ্য তুমি পেয়ে যাবে খুব সহজে।

 এই স্বল্প সময়ে নিজের দক্ষতা আরও বাড়াতে কিছু মৌলিক অ্যালগরিদম, ডেটা স্ট্রাকচার, সিভ অব এরাটোস্থেনেস, বাইনারি সার্চ, ইউক্লিডিয়ান জিসিডি, মার্জ সর্ট, গ্রাফের ডিএফএস-বিএফস, বাইনারি সার্চ ট্রি, ডায়নামিক প্রোগ্রামিং–ন্যাপস্যাক কিংবা কয়েন চেঞ্জ অনুশীলন করা যায়। এ ছাড়া রিকার্শন, স্ট্রিং সম্পর্কিত অ্যালগরিদম কেএমপি, বিট ম্যানিপুলেশন এবং গণিত অনুশীলনের বিকল্প নেই।

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

আন্তস্কুল ও কলেজের মূল পর্বের এখনো এক সপ্তাহ বাকি। মূল পর্বে নিজেদের দক্ষতার প্রমাণ দিতে প্রয়োজন অনুশীলন, সময়ের সঠিক ব্যবহার আর সঠিক কৌশলের প্রয়োগ ।

লেখক : প্রোগ্রামিং মেন্টর, বাংলাদেশ ওপেন সোর্স নেটওয়ার্ক (বিডিওএসএন)।