প্রোগ্রামিং প্রতিযোগিতায় হাতেখড়ি

প্রোগ্রামিং প্রতিযোগিতায় হাতেখড়ি

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

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

প্রোগ্রামিং প্রতিযোগিতা কী?

তোমরা যদি মনে কর যে প্রোগ্রামিং প্রতিযোগিতায় বুঝি কোনো একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ যে যত ভালো পারে সে তত ভালো করবে তাহলে জেনে রাখ তোমার এই ধারণা সম্পূর্ণ ভুল।

আমরা কিন্তু সেই ছোট্টবেলাতেই 1, 2, 3, 4 শিখেছি; শিখেছি যোগ, বিয়োগ, গুণ, ভাগ করা। কিন্তু এখানেই কিন্তু গণিতের শেষ হয়ে যায়নি। এর পরেও অনেক অনেক অনেক কিছু আমরা জেনেছি, শিখেছি। প্রোগ্রামিং ল্যাঙ্গুয়েজও এখানে সেই 1, 2, 3, 4 এর মতো। আমরা গণিতে সংখ্যাগুলোকে যেমন এসব অঙ্ক দিয়ে প্রকাশ করে থাকি ঠিক তেমনি আমাদের প্রোগ্রামিং প্রতিযোগিতার সমস্যার সমাধানগুলো প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে প্রকাশ করে থাকি। এই ল্যাঙ্গুয়েজ আমাদের সমাধান প্রকাশের একটি মাধ্যম মাত্র। এটি এমন একটি মাধ্যম যা আমাদের কম্পিউটার বুঝে থাকে।

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

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

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

অর্থাৎ তুমি কত দক্ষতার সঙ্গে তোমাকে দেওয়া সীমাবদ্ধতার মধ্যে সমস্যার সমাধান করতে পারছ সেটাই দেখা হয় প্রোগ্রামিং প্রতিযোগিতায়। বিশ্বে দুইটি বেশ বড় সড় প্রোগ্রামিং প্রতিযোগিতা আছে। একটি হলো ACM ICPC World Finals আর আরেকটি হল International Olympiad for Informatics বা সংক্ষেপে IOI. ACM প্রোগ্রামিং এ বিশ্ববিদ্যালয় পর্যায়ের ছেলেমেয়েরা অংশগ্রহণ করে থাকে। বিভিন্ন রকমের টপিক থেকে প্রবলেম আসে: সংখ্যাতত্ত্ব (Number Theory), ক্যালকুলাস (Calculus), গ্রাফ থিওরী (Graph Theory), গেইম থিওরী (Game Theory), ডায়নামিক প্রোগ্রামিং (Dynamic Programming), সম্ভাব্যতা (Probability) ইত্যাদি।

এখানে আসলে টপিকের সীমাবদ্ধতা নেই। এটি দলগত প্রতিযোগিতা। বিশ্বের প্রায় 100 টি দল বা বিশ্ববিদ্যালয় প্রতি বছর ACM ICPC World Finals এ অংশ গ্রহণ করে থাকে। এইসব দল নির্বাচন হয় ICPC এর মাধ্যমে যা প্রতি বছর বিশ্বের বিভিন্ন স্থানে হয়ে থাকে। যেমন প্রতি বছর ঢাকাতে ICPC হয়ে থাকে এবং এতে যেই দল champion হয় তারা World finals এ যায়। অপর দিকে ইনফরমেটিক্স অলিম্পিয়াডএ স্কুল কলেজ লেভেলের ছেলেমেয়েরা অংশ নিয়ে থাকে। এটিতে একটি নির্দিষ্ট সিলেবাস থেকে প্রশ্ন হয়ে থাকে। যেমন সিলেবাসে calculus নেই। এর মানে এই না যে প্রবলেমগুলি সহজ হয়।

বরং এসব প্রতিযোগিতার সমস্যাগুলি অনেক বেশি algorithmic হয়ে থাকে। এটি individual প্রতিযোগিতা। প্রতিটি দেশ হতে চারজনের একটি দল অংশ নিয়ে থাকে। কনটেস্টের rank অনুসারে এখানে স্বর্ণ, রৌপ্য ও ব্রোঞ্জ পদক দেয়া হয়। তোমরা হয়তো অনেকেই গণিত অলিম্পিয়াডের সাথে পরিচিত। গণিত অলিম্পিয়াডে যেমন গণিতের সমস্যা সমাধান করতে হয়, IOI তে তেমনি অ্যালগরিদম ভিত্তিক সমস্যা সমাধান করতে হয়।

প্রোগ্রামিং প্রতিযোগিতা কেন করব?

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

তাহলেই দেখবে তুমি ভালো করছ, তখন Google, Facebook, Microsoft এর মতো কোম্পানি এমনিই তোমাকে নিয়ে যাবে। বা ওই সব কোম্পানি কেন? হয়তো তুমি নিজেই একটা Google প্রতিষ্ঠা করে ফেলবে একদিন। অথবা তুমি হয়তো এমন একটা প্রোগ্রামিং ল্যাঙ্গুয়েজ বানিয়ে ফেলবে যেটা সারা বিশ্বের মানুষ ব্যবহার করবে। এর মধ্যে অন্যরকম মজা আছে। এই অপার্থিব আনন্দ যারা পেতে চাও তাদের জন্য এই প্রোগ্রামিং প্রতিযোগিতা।

প্রোগ্রামিং প্রতিযোগিতা কীভাবে শুরু করব?

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

অনেকে বলে থাকে তারা নাকি অন্য কোডার এর কাছ থেকে সাহায্য পায় না। এটা ঠিক না, আমার মনে হয় আমাদের দেশে অনেকেই শেখাতে বেশ আগ্রহী। অনেক ফেসবুক গ্রুপ আছে যেখানে গোটা বাংলাদেশের অনেক প্রোগ্রামার আছে। সেসব গ্রুপে পোস্ট দিলেই দেখা যায় অনেকে সাহায্যের জন্য এগিয়ে আসে। এখন তাই বলে তুমি যদি কোন একটা সমস্যা পারছ না যেটা হয়তো তোমার বিশ্ববিদ্যালয়ের আরও 10 জন পারে, কিন্তু তুমি করলে কি Petr কে মেইল করে বসলে যে আমার কোড ডিবাগ (Debug) করে দাও বা এই সমস্যার আইডিয়া পাচ্ছি না আমাকে শেখায়ে দাও, তাহলে কি ঠিক হল?

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

এর পরে দেশের সবার মধ্যে এগিয়ে থাকার চেষ্টা করতে থাকো। এক সময় বিশ্বে সবার মধ্যে এগিয়ে থাকতে পার কিনা দেখ। তুমি যদি না পার তাহলে কিন্তু হতাশ হওয়ার কিছু নেই। এই যে তোমার এগিয়ে যাওয়ার চেষ্টা, এটাই তোমাকে প্রতিযোগিতা না করা অন্য 100 জনের চেয়ে এগিয়ে রাখবে। তুমি নিজেই বুঝবে না তুমি অন্যদের তুলনায় কত দক্ষ হয়ে গিয়েছ! হয়তো তুমি প্রথম 10 জনের একজন না, কিন্তু আগে হয়তো তুমি 1000 জনের মধ্যে ছিলেনা, এখন 100 জনের মধ্যে এসেছ এটা কিন্তু সামান্য অর্জন না।

নিচে তোমাদের সুবিধার জন্য প্রোগ্রামিং সম্পর্কিত কিছু ওয়েবসাইটের লিংক এবং এদের সংক্ষিপ্ত বিবরণি দেওয়া হলো:

1.  uva.onlinejudge.org প্রোগ্রামিং প্রতিযোগিতার জন্য সবচেয়ে জনপ্রিয় ওয়েবসাইট এখানে প্রায়ই ৫ ঘণ্টার প্রতিযোগিতা হয়ে থাকে বিশেষ করে অক্টোবর থেকে ডিসেম্বর এই সময়ে। এছাড়াও এখানে আছে ৪০০০ এরও বেশি প্র্যাকটিস প্রবলেম।

2. icpcarchive.ecs.baylor.edu এটা uva ওয়েবসাইটের ভাই। এখানে 1988 সাল থেকে শুরু করে আজ পর্যন্ত হয়ে আসা বহু ICPC Regional Programming Contest এবং ACM ICPC World Finals এর প্রবলেমসমূহ আছে।

3. acm.sguru রাশিয়ান প্রোগ্রামিং সাইট। এখানে তুলনামূলকভাবে অনেক কম প্রবলেম আছে, কিন্তু একেকটা সমস্যা সমাধান করতে মাথার ঘাম পায়ে পড়ে! যদি কেউ এখানের সবগুলো সমস্যা সমাধান করে তাহলে আমার মনে হয় না সে কোথাও সহজে আটকাবে।

3. cacm.timus.ru আরও একটি রাশিয়ান সাইট। এখানে প্রবলেমগুলো বেশ কিছু ক্যাটাগরিতে ভাগ করা আছে। তোমরা যারা নতুন নতুন প্রোগ্রামিং শুরু করেছ তারা এই সাইটের Beginners Problem সেকশনের 20টি সমস্যা সমাধান করে দেখতে পার। এগুলো সমাধান করতে কোনো অ্যালগরিদম বা ডেটা স্ট্রাকচারের দরকার হয় না, শুধু প্রোগ্রামিং ল্যাঙ্গুয়েজ জানলেই চলে। এখানের সমস্যাগুলোও বেশ কঠিন হয়, হাজার হোক রাশিয়ান প্রবলেম বলে কথা! একবার আমাদের দেশের এক world finalist এর সঙ্গে কথা হচ্ছিল, সে গর্ব করে বলছিল যে সে একবার timus এর কোন এক প্রতিযোগিতার সমস্যা সমাধান করেছিল।

 আমি বললাম- হ্যাঁ timus এর প্রতিযোগিতার সমস্যাগুলো বেশ কঠিন হয়, কনটেস্ট সময়ে একটা করতেই খবর খারাপ হয়। তখন সে বলে যে সে আসলে কনটেস্ট এর তিন চারদিন পর সমাধান করেছিল। মানে এই সমস্যাগুলি এতোই কঠিন যে সেটা আসলে তিন চার দিন পর সমাধান করতে পারলেও বেশ বড় ব্যাপার বলা যায়! তার মানে কি তুমি কঠিন বলে এসব সাইট এর সমস্যা সমাধান করবে না? এসব সাইটে কনটেস্ট করবে না? মোটেও না। তুমি যদি কঠিন কঠিন সমস্যা সমাধান না কর তোমার উন্নতি হবে না! হয়তো তুমি ICPC তে champion হয়ে world Finals এ যাবে কিন্তু এরপর দেখবে আর চাইনিজ, পোলিস বা রাশিয়ানদের সাথে পেরে উঠছ না।

4. www.codechef.com এখানে প্রতিমাসে তিন ধরনের প্রতিযোগিতা হয়। একটি 10 দিনব্যাপী, একটি 5 ঘণ্টার ACM স্টাইল আরেকটি 4 ঘণ্টার IOI স্টাইল প্রতিযোগিতা। প্রতিযোগিতাগুলোতে যারা ভালো করে তারা এখানে পুরস্কার পেয়ে থাকে। প্রতিযোগিতা শেষে তারা editorialও দিয়ে থাকে।

5. www.codeforces.com প্রতি সপ্তাহে প্রায় 2টি করে প্রতিযোগিতা হয়ে থাকে এখানে। দুই division এ হয়ে থাকে সেই প্রতিযোগিতা। Division 2 তে আছে যারা beginner তারা, আর Division 1 এ আছে যারা advanced তারা। এখানে প্রতি প্রতিযোগিতা শেষে তোমার রেটিং আপডেট হবে। সুতরাং তুমি দেশের বা বিশ্বের আর সবার সঙ্গে নিজেকে তুলনা করতে পারবে! তোমার রেটিং অনুযায়ী তোমাকে রংও দেওয়া হয়। লাল রং বা Red coder মানে হলো এরা খুবই ভাল! এর মানে এই না যে orange বা purple যারা, তারা ফালতু! বরং orange বা purple হয়েও অনেকে পদক জিতেছে।

6. www.topcoder.com/tc codeforces এর মতোই এখানেও রেটিং ব্যবস্থা আছে। এখানে প্রতি মাসে প্রায় 3 থেকে 4 টি প্রতিযোগিতা হয়ে থাকে। বলা হয়ে থাকে ডায়নামিক প্রোগ্রামিং শেখার জন্য এই সাইটের আগের প্রবলেমগুলো খুবই ভালো।

7. acm.hust.edu.cn/vjudge এটি মূলত প্র্যাকটিস কনটেস্ট আয়োজন করতে ব্যবহার হয়ে থাকে। এর মাধ্যমে তুমি অন্যান্য ওয়েবসাইট এর প্রবলেমগুলি নিয়ে কনটেস্ট আয়োজন করতে পার।

8. www.lightoj.com এটি বাংলাদেশের প্রথম অনলাইন জাজ (practice ওয়েবসাইটকে আমরা অনলাইন জাজ বা সংক্ষেপে OJ বলে থাকি)। এটা বানিয়েছেন জানে আলম জান। উনি ঢাকা বিশ্ববিদ্যালয় থেকে 2009 সালে ACM ICPC World Finals এ অংশগ্রহণ করেছেন।

9. www.z-trening.com এটি ইনফরমেটিক্স অলিম্পিয়াড এর প্রস্তুতি নেওয়ার জন্য খুবই ভালো ওয়েবসাইট। তবে সাম্প্রতিক সময়ে প্রায়শই down থাকে।

10. ipsc.ksp.sk সমগ্র বিশ্বব্যাপী IPSC খুবই সমাদৃত একটি প্রতিযোগিতা। বছরে একবার এই প্রতিযোগিতা হয়ে থাকে এবং সবাই এই কনটেস্ট করার জন্য মুখিয়ে থাকে। এখানে বিভিন্ন ধরনের প্রবলেম দেওয়া হয়ে থাকে। এনক্রিপশন (Encryption), মিউজিক
(Music), New Language, গেইম (Game) আরও নানা ধরনের প্রোগ্রামিং সমস্যা দেওয়া হয়ে থাকে যা অন্য কনটেস্টগুলোতে দেখা যায় না বললেই চলে।

11. www.spoj.com এটি একটি পোলিস ওয়েবসাইট। এখানের সমস্যাগুলোও বেশ ভালো। বিভিন্ন দেশের ইনফরমেটিক্স অলিম্পিয়াড এর প্রবলেমগুলো এখানে পাওয়া যায়। এছাড়াও এখানে বিভিন্ন টপিকের বেশ কঠিন কঠিন এবং শিক্ষণীয় প্রবলেম থাকে। কিন্তু অনেক
প্রবলেমের মধ্যে থেকে বাছাই করা একটি কঠিন কাজ। তোমরা চাইলে ভালো কোনো প্রোগ্রামারের প্রোফাইল নির্বাচন করে তার সমাধান করা সব সমস্যা সমাধান করতে পার।

12. ace.delos.com/usacog মার্কিন যুক্তরাষ্ট্রের ইনফরমেটিক্স অলিম্পিয়াড দলকে প্রশিক্ষণ দেওয়ার জন্য মূলত এই ওয়েবসাইট। সেপ্টেম্বর থেকে এপ্রিল মাস পর্যন্ত প্রতিমাসে প্রবলেমগুলো ক্যাটাগরি অনুযায়ী করা আছে এবং তুমি কোনো সমস্যা সমাধান করলে তার
সাধারণত একটি করে কনটেস্ট হয়ে থাকে IOI এর প্রস্তুতিস্বরূপ। এখানকার অফলাইন পর্যালোচনা বা অ্যানালাইসিস পাবে।

কিছু চাইনিজ অনলাইন জাজ: 

বেশ কিছু চাইনিজ OJ আছে।

1. acm.pku.edu.cn

2. acm.zju.edu.cn

3. acm.tju.edu.cn 

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

 আমি ঠিক জানি না কেউ সমাধান করেছিল কিনা। এছাড়াও Rujia Liu এর কিছু সমস্যা তুমি uva তে খুঁজে পাবে (তার নাম দিয়ে আলাদা সেকশনই আছে uva তে), যার প্রতিটি সমস্যাই খুবই শিক্ষণীয়। Rujia Liu একসময় চীনের IOI দলকে প্রশিক্ষণ দিতেন, নিজেও ACM World Finals এ মেডেল জিতেছিলেন।

👉 projecteuler.net এই ওয়েবসাইটটিতে অনেক গাণিতিক সমস্যা আছে যেগুলো তুমি হাতে কলমে সমাধান করতে পারবে না, কোড করে সমাধান করতে হবে। কিন্তু এখানে মূল জিনিস হলো তোমার গাণিতিক দক্ষতা। অ্যালগরিদমিক স্কিলের থেকে এখানে তোমার
গাণিতিক দক্ষতারই চর্চা বেশি হবে।

uva সাইটের কিছু হেল্পিং টুল: 

uhunt.felix-halim.netuvatoolkit.com হলো
এমন দুটি টুল। এখানে তুমি নির্দিষ্ট ক্যাটাগরির প্রবলেমের তালিকা পাবে, তোমার ইউজার আইডি দিলে তোমার জন্য এরপরে কোন সমস্যা সমাধান করা ভালো হবে তার তালিকা পাবে। এছাড়াও দুজনের ইউজার আইডি দিলে তাদের মধ্যে সমাধান করা প্রবলেম এর
তুলনা বা comparison দেখায়। উল্লেখ্য যে, দুই ভাই Felix Halim এবং Steven Halim প্রোগ্রামিং জগতে বেশ নামি নাম। তারা একটি বই লিখেছেন যাতে ব্যবহৃত
প্রবলেমের তালিকাও এই ওয়েবসাইটটিতে পাওয়া যাবে।

👉 www.e-maxx.ru এটি রাশিয়ান ভাষায় লেখা একটি ওয়েবসাইট। এখানে তুমি বিভিন্ন টপিকের উপরে লেখা আর্টিকেল পাবে। Google Translator কিংবা Bing Translator ব্যবহার করে পড়ে দেখতে পার।

👉 infoarena.ro এটি রোমানিয়ান ভাষায় লেখা একটি ওয়েবসাইট। এখানেও বেশ কিছু ভালো আর্টিকেল আছে।
👉 www.hsin.hr/coci/ এটি ক্রোয়েশিয়ান ইনফরমেটিক্স অলিম্পিয়াড এর ওয়েবসাইট। এখানে বেশ কিছু প্র্যাকটিস কনটেস্ট হয়ে থাকে।

এখন কিছু বইয়ের নাম বলা যাক:

  1. Introduction to Algorithms Thomas Cormen, Charles Leserson,Ronald Rivest Clifford Stein
  2. Programming Challenges লেখক Steven S Skiena এবং Miguel A Revilla
  3. The Algorithm Design Manual লেখক Steven S Skiena
  4. Algorithm Design এবং Jon Kleinberg এবং Eva Tardos
  5. Computational Geometry Algorithms and Applications লেখক Mark de Berg, Otfried Cheong, Marc van Kreveld এবং Mark Overmars
  6. Computational Geometry in C এবং Joseph O'Rourke
  7. Art of Programming Contest লেখক Ahmed Shamsul Arefin
  8. Data Structures and Algorithms in C++ লেখক Michael Goodrich, David Mount এবং Roberto Tamassia
  9. Competitive Programming লেখক Felix Halim এবং Steven Halim
  10. কম্পিউটার প্রোগ্রামিং লেখক তামিম শাহরিয়ার সুবিন
বেশ কিছু ভালো ভালো ব্লগও আছেঃ
  1. Petr এর ব্লগঃ petr-mitrichev.blogspot.com
  2. Bruce Merry এর ব্লঃগঃ http://blog.brucemerry.org.za
  3. শাফায়েতের ব্লগঃ http://www.shafaetsplanet.com/planetcoding

অনেক কিছুই তো পেলে, কিন্তু এখানে সবকিছুর দরকার নেই। তোমার যেটা ভালো লাগবে তা থেকে শুরু করবে। যেই OJ তে প্রবলেম সলভ করতে ভালো লাগবে সেখানে সলভ করবে। যে বই পড়তে ভালো লাগবে সেই বই পড়বে। কিন্তু প্রধান কাজ হলো করতে হবে। তুমি যদি নিজে না দেখে অন্যদের জিজ্ঞাসা করে বেড়াও যে কী করব কী পড়ব, তাহলে কিন্তু হবে না। যত বেশি প্র্যাকটিস করবে তত ভালো করতে পারবে। আগেই বলেছি এটা ইন্টারনেট এর যুগ, তুমি ইন্টারনেটে খোঁজ করলেই এসব বইয়ের preview দেখতে পাবে। সেখানে থেকেও তুমি বুঝতে পারবে কোন বইটি তোমার ভাল লাগছে।

প্রোগ্রামিং প্রতিযোগিতায় অংশ গ্রহণের জন্য কী কী জানতে হবে?

শুরু করার জন্য তোমাকে শুধু একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ জানলেই চলবে। ACM প্রতিযোগিতাগুলোতে C, C++, Java এই তিনটি ভাষা ব্যবহার হয়ে থাকে। অন্যদিকে ইনফরমেটিক্স অলিম্পিয়াড গুলোতে C, C++ এবং Pascal ব্যবহার হয়। আমরা বাংলাদেশের প্রোগ্রামিং প্রতিযোগিতাগুলোতে দেখে আসছি যে বেশির ভাগ মানুষই C বা C++ ব্যবহার করে থাকে। এখানে বলে রাখা ভালো যে, অনেকে মনে করে C আর C++ একদম আলাদা। আসলে তা না। তুমি C তে যা যা লিখবে তা C++ এও চলবে। উপরন্তু C++ এ কিছু বাড়তি সুবিধা আছে যা আমরা আমাদের সুবিধার জন্য ব্যবহার করে থাকি।

তবে এটা সত্য যে আমরা C++ বলতে আসলে যেই অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (Object Oriented Programming) বুঝে থাকি তার ছিটে ফোটাও প্রোগ্রামিং প্রতিযোগিতায় ব্যবহার করি না বললেই চলে। সুতরাং তোমরা যদি C শেখো তাহলেই প্রোগ্রামিং প্রতিযোগিতা শুরু করে দিতে পারবে। তোমাকে পুরো C শিখে এর পরে শুরু করতে হবে তাও কিন্তু না। মজার জিনিস হচ্ছে প্রায় সব ল্যাঙ্গুয়েজেরই মূল জিনিস প্রায় একই রকম। if-else থাকবে, লুপ থাকবে, ফাংশন, অ্যারে সবই থাকবে, শুধু লিখবে একটু অন্যভাবে। এজন্য তুমি যদি একটি ল্যাঙ্গুয়েজ জানো তাহলে অন্য ল্যাঙ্গুয়েজের কোডও বুঝতে পারবে। মাঝে মধ্যে কিছু জিনিস না বুঝলে ইন্টারনেট তো আছেই।

Next Post Previous Post
2 Comments
  • Anonymous
    Anonymous 11:52 AM

    vaia apnar youtube channel ase

    • Md Shamim Hossain
      Md Shamim Hossain 11:52 PM

      Na vai...

Add Comment
comment url