মোঃ মাহবুবুল হাসান শান্ত এর বইয়ের ভূমিকা লেখার ভার যখন আমাকে দেওয়া হলো তখন আমি বেশ অবাক হই, কিন্তু বইয়ের কনটেন্ট এর ব্যাপ্তি দেখে আরো অনেক বেশি অবাক হই। শান্তর বইয়ে UVa আর্কাইভ এর অনেক প্রবলেম ব্যবহার হয়েছে দেখে ভালো লাগলো, কারণ এটা হয়তো UVa সাইটের জনপ্রিয়তা বৃদ্ধিতে বড় ভূমিকা রাখবে। সেজন্য বইটির ইংরেজি অনুবাদেরও অপেক্ষায় থাকলাম।
তরুণ প্রজন্মের মধ্যে আমার দেখা সর্বশ্রেষ্ঠ শিক্ষক মনে হয় মনিরুল হাসান (তমাল)। কিন্তু আরেকটু তরুণ প্রজন্মের মধ্যে যদি খুঁজে দেখি তাহলে দুটো নামই মাথায়ে আসে- মোহাম্মদ মাহমুদুর রহমান এবং মোঃ মাহবুবুল হাসান শান্ত। মোটামুটি ভালো শিক্ষক হলেই যে সবসময় ভালো লেখক হয়না সেটা নিজেকে দিয়েই বুঝি কিন্তু শান্ত তার বুঝানোর ক্ষমতাকে বই এর মধ্যে আনতে পেরেছে ভালোভাবেই তাই এই বইটি তরুণ প্রজন্মের জন্য অনেক উপকারী হবে সন্দেহ নেই। আজকে কেবলই মনে হচ্ছে কেন আমার বয়স আরো বিশ বছর কম হলো না, তাহলে এই বই দেখে আরো ভালোভাবে সবকিছু অনেক কম বয়সে শিখে ফেলতে পারতাম।
শান্তর প্রোগ্রামিং কনটেস্ট ক্যারিয়ার অনেক দীর্ঘ। তবে তাকে প্রথম ভালো ভাবে চিনি যখন “Dhaka Regional ২০০৫” এ শান্ত ও নাফি এর IOI গামী দল বাংলাদেশের সব বিশ্ববিদ্যালয়কে পেছনে ফেলে দ্বিতীয় স্থান দখল করে। “Lattice triangle” গণনার একটি সমস্যা সমাধান করে তারা সবাইকে তাক লাগিয়ে দিয়েছিল। সৌভাগ্যক্রমে সেই প্রবলেমের স্রষ্টা ছিলাম আমি। ভিসা জটিলতার কারণে তাদের IOI এ অংশগ্রহন করা হয় নাই, নাহলে বাংলাদেশের IOI পদক অনেক আগেই আসতে পারত। শান্ত সম্ভবত এখনো নানান কনটেস্টে অংশগ্রহন করে, তাই তার চেয়ে দীর্ঘ কনটেস্ট ক্যারিয়ার খুব কম লোকেরই আছে। তার উপর শান্তর রয়েছে সমস্যার সমাধান করার সীমাহীন উৎসাহ ও ধৈর্য। জনশ্রুতি রয়েছে যে শান্ত তার বিয়ের দিনও বিভিন্ন সমস্যার সমাধান করেছে। কাজেই এত দীর্ঘ ক্যারিয়ার ও সময়ে শান্ত কী পরিমান সমস্যা সমাধান করেছে তা আন্দাজ করাও অনেকের পক্ষে কঠিন হবে। এই বইয়ে তাই নানা ধরনের সমস্যা সমাধান এর কথা উঠে এসেছে। বাংলা ভাষায় এমন বই আগে প্রকাশিত হয়নি এমনকি ইংরেজিতে অনুদিত হলেও এই বই যথেষ্ট সমাদৃত হবে বলে আমার বিশ্বাস।
সাধারণত দেশের বাইরে গিয়ে লোকজন প্রোগ্রামিং কনটেস্ট এবং প্রবলেমসেটিং কে ভুলে যায়, কিন্তু শান্ত এই দিক থেকে ব্যতিক্রম। এই বইয়ের পাঠক সংখ্যা কয়েক মিলিয়ন হলেই সেই ব্যতিক্রমী প্রচেষ্টা সফল হবে। সেইসব মিলিয়ন প্রোগ্রামার বাংলাদেশকে অনেক সম্মানিত করবে। মনে রাখতে হবে যে পোশাক ও শ্রমিক রফতানি করে বৈদেশিক মুদ্রা অর্জন করা সম্ভব হলেও সম্মনের জন্য প্রয়োজন একটু সৃজনশীল কিছু। কৃত্রিম বুদ্ধিমত্তা (AI) ও রোবটের উত্থানের যুগে, প্রোগ্রামিং ছাড়া অন্য কিছুতে মানুষের প্রয়োজন থাকবে কিনা সেটাও ভাবা দরকার :)। সূচীপত্র অধ্যায় ১ – প্রোগ্রামিং প্রতিযোগিতায় হাতেখড়ি
১.১ শুরুর কথা ১.২ প্রোগ্রামিং প্রতিযোগিতা কী? ১.৩ কেন করব? ১.৪ কীভাবে শুরু করব? ১.৫ কী কী জানতে হবে?
অধ্যায় ২ – C ঝালাই
২.১ একটি ছোট প্রোগ্রাম এবং ইনপুট আউটপুট ২.২ ডেটা টাইপ এবং math.h হেডার ফাইল ২.৩ if – else if – else ২.৪ লুপ (Loop) ২.৫ অ্যারে (Array) ও স্ট্রিং (String) ২.৬ টাইম কমপ্লেক্সিটি (Time Complexity) এবং মেমোরী কমপ্লেক্সিটি (Memory Complexity) ২.৭ ফাংশন এবং রিকার্শন (Recursion) ২.৮ ফাইল (File) ও স্ট্রাকচার (Structure) ২.৯ বিটওয়াইজ অপারেশন (bitwise operation)
অধ্যায় ৩ – গণিত
৩.১ সংখ্যাতত্ত্ব (Number Theory) ৩.১.১ মৌলিক সংখ্যা (Prime Number) ৩.১.২ একটি সংখ্যার গুণনীয়কসমূহ ৩.১.৩ গ.সা.গু. (GCD) ও ল.সা.গু. (LCM) ৩.১.৪ অয়লার এর টোশেন্ট ফাংশন (Euler’s Totient Function) ৩.১.৫ BigMod ৩.১.৬ মডুলার ইনভার্স (Modular Inverse) ৩.১.৭ Extended GCD ৩.২ কম্বিনেটরিক্স (Combinatorics) ৩.২.১ ফ্যাক্টোরিয়ালের পেছনের 0 ৩.২.২ ফ্যাক্টোরিয়ালের অঙ্ক (Digit) সংখ্যা ৩.২.৩ সমাবেশ (Combination) ৩.২.৪ কিছু বিশেষ সংখ্যা ডিরেঞ্জমেন্ট সংখ্যা (Derangement Number) কাটালান সংখ্যা (Catalan Number)Stirling Number of Second Kind Stirling Number of First Kind ৩.২.৫ ফিবোনাচি সংখ্যা (Fibonacci Number) ৩.২.৬ ইনক্লুশন এক্সক্লুশন নীতি (Inclusion Exclusion Principle) ৩.৩ সম্ভাব্যতা (Probability) ও এক্সপেক্টেশন (Expectation) ৩.৩.১ সম্ভাব্যতা (Probability) ৩.৩.২ এক্সপেক্টেশন (Expectation) ৩.৪ বিবিধ ৩.৪.১ ভিত্তি পরিবর্তন (Base Conversion) ৩.৪.২ বিগ ইন্টিজার (Big Integer) ৩.৪.৩ চক্র বা সাইকেল (Cycle) নির্ণয়ের অ্যালগরিদম ৩.৪.৪ গাউসের এলিমিনেশন (Gaussian elimination) ৩.৫ প্রোগ্রামিং সমস্যা ৩.৫.১ অনুশীলনী
অধ্যায় ৪ – সর্টিং (Sorting) ও সার্চিং (Searching)
৪.১ সর্টিং (Sorting) ৪.১.১ ইনসার্শন সর্ট (Insertion Sort) ৪.১.২ সিলেকশন সর্ট (Selection Sort) ৪.১.৩ বাবল সর্ট (Bubble Sort) ৪.১.৪ মার্জ সর্ট (Merge Sort) ৪.১.৫ কাউন্টিং সর্ট (Counting Sort) ৪.১.৬ STL এর sort ফাংশন ৪.২ বাইনারি সার্চ (Binary Search) ৪.৩ টারনারি সার্চ(Ternary Search) ৪.৪ ব্যাকট্র্যাকিং (Backtracking) ৪.৪.১ সবরকম বিন্যাস বের করা (Permutation Generation) ৪.৪.২ সবরকম সমাবেশ বের করা (Combination Generation) ৪.৪.৩ Eight Queen সমস্যা ৪.৪.৪ Knapsack সমস্যা ৪.৫ প্রোগ্রামিং সমস্যা ৪.৫.১ অনুশীলনী