Thursday, March 31, 2016

Programming Interview with Ahmad Faiyaz

ইন্টারভিউ সিরিজের আগের লিখাগুলা এই লিঙ্কে পাওয়া যাবে ।

প্রশ্ন ঃ ভাইয়া প্রোগ্রামিং কনটেস্ট এর ব্যাপারে প্রথম কিভাবে জানছিলেন মনে আছে ?

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

প্রশ্নঃ প্রথম অনসাইট এর কথা মনে আছে ?

উত্তরঃ হাঁ , অবশ্যই । প্রথম কনটেস্ট ছিল সাস্ট সিএসই ফিস্টা - ২০১১ , এনএসইউ থেকে ৫টা টিম গেছিল । আমার টিমের নাম ছিল , NSU strikers. আমাদের কনটেস্ট ভাল হয় নাই , একটা মিলাইছিলাম মনে হয় । তবে এক্সপেরিয়ান্স অসাধারণ ছিল , ৫ ঘণ্টা ক্যামনে গেছিল মনে নাই ।

প্রশ্ন ঃ ভাইয়া ভার্সিটির সেকেন্ড ইয়ারে এসে কনটেস্ট এর ব্যাপারে জানা কি আপনার মনে হয় আপনি অনেক দেরি করে ফেলছিলেন ? সচরাচর আইওআই যারা করে থাকে তাদের সাথে সব সময় একটা দূরত্ব থেকে যায় ?

উত্তর ঃ  হাঁ হাঁ , I regret . ঐসময় আমি রিজুল ( DU ) এবং BUET এর সাকিবকে চিনতাম । তাদের দুইজনই Uva তে ব্যাপক সল্ভ করে ফেলছিল আর আমি মাত্র 3N + 1 সাবমিট করছি । যদিও সাকিব IOI গেছিলাম , তখন ব্যাপারটা জানতাম না আর রিজুল অনেক সল্ভ করে ফেলছিল Uva তে । ওদের হারানো জন্য অনেক সল্ভ করা লাগত তাই Uva বেশি সল্ভ করি নাই :p তারপর লাকি ভাবে লাইট ওজি এসে গেল , এইখানে সল্ভ স্টার্ট করে দিলাম । অনেক ইন্টারেস্ট ছিল এই ব্যাপারে তাই গ্যাপ আছে এইটা নিয়ে চিন্তা করতাম না । জাস্ট সল্ভ করে গেছি ।

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

উত্তরঃ টেস্ট কেইজ করা অনেক মজার ব্যাপার আর মানুষ এর কোড থেকে নতুন অনেক কিছু শিখা যায় , কি ভুল করতেছে ধরতে পারলে নেক্সড টাইম আমি হয়তো এই ভুল করব না । অনেক কর্নার কেইজ চিন্তা করা যায় । আর ব্লগ লিখা হচ্ছে নিজের জন্য । যখন তুমি কাউকে কিছু বুঝাইতে যাবা  you need to know that topic very well , আমি একটা ব্লগ লিখছিলাম বাই কানেক্টেড কম্পোনেন্ট নিয়ে , লিখতে গিয়ে আরো ভালমত বুঝছি জিনিসটা । মানুষ question করবে তুমি নতুন আরো কিছু জানবা এইসব থেকে , আমি হয়তো আগে ভাবি নাই । অনেক এ ব্লগ এ কোড দিয়ে দেয় । আমি এইটা discourage করব । এতে অনেক এ ব্লগ না বুঝে কোড কপি পেস্ট করে ।

প্রশ্ন ঃ কি টাইপের প্রবলেম সল্ভ করতে ভাইয়া বেশী ভাল লাগে ?

উত্তর ঃ Data Structure, String, Graph ( BCC, SCC )।

প্রশ্ন: ভাইয়া   কোন প্রবলেম সল্ভ এর সময় "Thinking Process" কি থাকে প্রবলেম ?

উত্তর ঃ ক্যাটেগরিতে ফালানোর ট্রাই করি কি টাইপের প্রবলেম । এরপর দেখি এইরকম কিছু আগে করছি কিনা । CF এ দেখছি অনেক এই বলছে ম্যাক্সিমাম প্রবলেম অন্য কোন প্রবলেম এর ভ্যারিয়েশন । যদিও তাও না বের করতে পারি তাহলে প্রবলেমটা আরো সিমপ্লিফাই করতে পারি কিনা তা দেখি , ছোট ছোট টাস্ক এ ভাগ করে তারপর এইগুলাকে দিয়ে কিভাবে সল্যুশন করা যায় - যা আসলে শিখছিলাম ফাহিম ভাইয়ার ( Iqram Mahmud - Smilitude ) কাছ থেকে ।

প্রশ্নঃ কোন প্রবলেম Accepted না হলে কি কি ব্যাপার দেখেন ?
উত্তরঃ ঐ যে কর্নার কেইজ গুলা চিন্তা করি , অনেক রকম ভ্যালু নেই দেখি কি হবার কথা কি হচ্ছে। মাঝে মধ্যে সময় থাকলে brute force করি । দেখি কেন ভুল হচ্ছে । যদিও তাও ভুল না পাই , এল্গো রিভাইস দেই । ইমপ্লিমেন্টেশন চেক করি । ও হাঁ অবশ্যই প্রবলেম আবার পড়ি ।

প্রশ্ন ঃ অনেক সময় দেখা যায় কয়েকদিন কারো কনটেস্ট ভাল না হইলে অনেক এ হতাশ হয়ে কনটেস্ট ছেড়ে দেয় বা অন্যভাবেও বলা হয় সব কনটেস্টেন এর লাইফে হতাশার একটা পিরিয়ড থাকে , এই সময় কিভাবে নিজেকে মোটিভেট করা উচিত ?

উত্তর ঃ ও হাঁ , আমিও দুইবার ছেড়ে দিছিলাম । একবার ন্যাশনাল কনটেস্ট মিস করছিলাম কনটেস্ট ছেড়ে দেবার কারনে । যাই হোক মোটিভেশন এর কিছু নাই , আমার কাছে মনে হইছে তোমার চান্স ৫বার , নিতে সমস্যা কি ? আর এই জিনিসটা হ্যাম্পার করতেছে না আমার ডেইলি লাইফ বা  একাডেমিক এ । যদিও একটু সিজিপিএ কমছে এইটা আমার দোষেই । এই তো জাস্ট ট্রাই করে যাওয়া যাতে কখনো মনে না হয় আরো একবার চান্স ছিল নেই নাই , নিলে হয়তো ভাল করতে পারতাম ।

প্রশ্ন ঃ প্রোগ্রামিং কনটেস্ট এ ইন্সপারেশন এর কেউ আছে , কাউকে ফলো  করতেন ?

উত্তর ঃ হা .. Iqram Mahmud (Fahim ভাই), Mahmud Ridwan ভাই ।

প্রশ্নঃ প্রোগ্রামিং কনটেস্ট এ কোন মজার কোন স্মৃতি আছে যেইটা মনে করলে এখনো হাঁসি পায় ?

উত্তরঃ হাঁ , এইটা ডেফোডিল এর কনটেস্ট ২০১১ এ ছিল । আমরা দুইটা করছিলাম বা একটা প্রবলেম আর মিলাইতে পারতেছিলাম না । আমাদের বাম পাশে ছিল DU এর জুবায়ের ভাইদের টিম । উনারা বলতে ছিল যে একটা প্রবলেম কিভাবে মিলাইছে । আমি পাশে ছিলাম , হাল্কা শুনছি সিমুলেশন করে দেখলেই হয় । তখন মাথায় ঢুকছে সিমুলেশন করে কিভাবে হবে , পরে কনটেস্ট শেষ এর ৫মিনিট আগে এসি :p এইজন্যই আমি আমার টিমমেটদের সবসময় বলি আস্তে ডিসকাস করতে ।

প্রশ্ন ঃ এই বছর ওয়াল্ড ফাইনালের জন্য আপনাদের টিম এর প্রিপারেশন ক্যামন ?

উত্তর ঃ এই তো চলতেছে , ওয়াল্ড ফাইনাল এর সেটগুলা practice করা হইছে । নতুন অনেককিছু শিখতেছি , জানতেছি । hopefully world final ভাল হবে ।

 প্রশ্ন ঃ যদিও এখনও অনেক টাইম বাকি আছে , যারা এই বছর রিজিওনাল করবে সেই টিমগুলার জন্য ভাইয়া কোন সাজেশন ?

উত্তর ঃ আমি কি বলব । সাজেশন এর কিছু নাই । just don't lose the hope . solvable problem solve করাই আসল ।

প্রশ্ন: নতুন যারা কনটেস্ট শুরু করতেছে তাদের কোন সাজেশন ? কিভাবে ভাল করবে ?

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

প্রশ্ন ঃ প্রোগ্রামিং বাদে কোন হবি ? ফ্রি টাইমে কি করেন ?

উত্তরঃ software development, graphics design, photography.. আর ফ্রি টাইমে মুভি দেখি , সিরিয়াল দেখি , আড্ডা মারি , গেইম খেলি , টিউটোরিয়াল পড়ি ।

Friday, March 25, 2016

Dp part - 4

DP নিয়ে আমার আগের লিখাগুলা পাওয়া যাবে এই লিঙ্ক এ । এই পোস্টে কিছু কমন ডিপি সল্যুশন নিয়ে আলোচনা করছি ।


nth premutation :

এই প্রবলেম এ বলা হয়েছে আমাদের একটা string দেওয়া হবে আমাদের এই string এর nth permutation ভ্যালু কত হবে তা বলতে হবে । যদি তা সম্ভব না হয় আমাদের "impossible" প্রিন্ট করতে হবে । এইখানে n এর ভ্যালু হতে পারে ২^৩১ । এইখানে একটা জিনিস দেখি আমরা string এর সাইজ হতে পারে হাইস্ট ২০ লেটারে এবং সব যদি ভিন্ন ভিন্ন লেটার হয় তাহলে পারমুটাশেন সম্ভব হত n! বা ২০! । যা অনেক বড় মান , আমরা যদি built in function,  next_premutation ব্যাবহার করে যাই তাহলে এইটা সম্ভব হবে না । এখন প্রবলেমটাকে ছোট করার জন্য আমরা corner-case চিন্তা করতে পারি । প্রথম এ আছি impossible case এ , কখন কখন impossible হবে । আমরা সহজেই লেটার ফ্রিকিউয়েন্সি কাউন্ট করে দেখতে পারি আমাদের দেওয়া string থেকে কতটা permutation possible , যদি এর মান আমাদের nth value এর মান এর থেকে কম হয় আমরা সহজেই  বলে দিতে পারি যে nth-value string পসিবল না পাওয়া । এইটা আমরা permutation এর ব্যাসিক ফরমুলা থেকে পেতে পারি ।

         ( size_of_the_string ) ! / ( frequency_of_every_letter_in_that_string ) ! ......... ( 1 )

এখন মেইন পার্ট । আমারা এখন nth-value পসিবল string এর কিভাবে আমরা এই  ভ্যালুটা পাব দেখব । আমরা কোন পজিশনে কোন লেটার বসিয়ে , এই লেটার এই পজিশনে বসবে এবং  এর জন্য কতটা permutation হতে পারে তা আমরা সহজেই ( ১ ) ইকুয়েশন থেকে পেয়ে যেতে পারি । যদি এর মান আমাদের nth_value এর চেয়ে কম হয় তাহলে আমরা বুঝব আসলে এই লেটার টা এইপজিশনে বসবে না আমাদের ফাইনাল string এর যদি বসত তা হলে এর জন্য মান nth_value এর সমান বা বেশি হত । কথাগুলা অসংলগ্ন লাগতে পারে একবারে পড়লে । একটা example এর মাধ্যমে দেখলে সহজ হয়ে যাবে  ।

Say string : abc , আমাদের বলতে হবে  এর ৬ষ্ঠ পারমুটেশনের স্ট্রিংটা কি ?

যদি 'a' final string এর ফাস্ট লেটার হত তাহলে আমরা 'a' কে প্রথম পজিশনে বসিয়ে b এবং c থেকে আরো 2টা পারমুটেশন পেতে পারতাম । ( abc , acb ) , কিন্তু তা ৬ এর চেয়ে কম অর্থাৎ আমরা বলতে পারি 'a' প্রথম পজিশনে বসিয়ে আমরা আমাদের ফাইনাল string পাব না । এখন 'b' কে যদি প্রথম পজিশনে বসাই তাহলে আমরা 'b' কে বসিয়ে আরো দুইটা পারমুটেশন পাব a and c এর জন্য । ( bac , bca ) , যেহেতু 'a' এর পর 'b' আসে তাই 'a' জন্য ও মানগুলা এইখানে যুক্ত হবে । টোটাল ২ + ২ = ৪ < ৬ অর্থাৎ 'b' বসিয়েও আমরা আমাদের ফাইনাল string টা পাব না । এখন 'c' এর জন্য দেখা যাবে একই ভাবে ৪ + ২ >= ৬ তাই ফাইনাল string এর প্রথম লেটার আমরা নিশ্চিত ভাবে বলতে পারি 'c' বসবে ,  এবং 'c' বসানোর মাধ্যমে আমরা 'a' এবং 'b' বসানোর জন্য মান গুলা আমাদের ফাইনাল স্ট্রিং থেকে বাদ দিয়ে পারি । এইভাবে প্রতিটা পজিশনের জন্য আমাদের ক্যালকুলেশন করে বুঝতে হবে কোন লেটারটা বসবে ।

কোড

Be Efficient :

এই প্রবলেম এ বলা হয়েছে আমাদের n টা নাম্বার এবং আরো একটা নাম্বার m দেওয়া হবে । আমাদের বলতে হবে এই nটা নাম্বার এর মধ্যে কতগুলা নাম্বার consecutive sequence  m দ্বারা বিভাজ্য । যেমন যদি n = 3 এবং m = 3 হয় এবং n sequence numbers :  3 , 6 , 9 তাহলে মোট ..
{ 3 } , { 3 , 6 } , { 3 , 6 , 9 } , { 6 } , { 6 , 9 } , { 9 } এই  ছয়টি নাম্বার m = 3 দ্বারা বিভাজ্য ।

এইখানে একটা important point হচ্ছে m <= 10^5 . এইটা এইজন্য important আমরা তাহলে নিশ্চিতভাবে বলতে পারব যে consecutive number এর sequence এর mod value কখনই 10^5 থেকে বড় হবে না , যা আমরা কোন array তেও store করে রাখতে পারি । এইখানে কিছু key observation আছে এই consecutive mod value নিয়ে । যদি প্রথম নাম্বার এর জন্য mod value আসল ১ , আবার দেখা গেল প্রথম ৩টা নাম্বার নিয়ে mod value হচ্ছে ১ এবং আমারা যদি  প্রথম ৫টা নাম্বার নিয়েও একই ১ পাই  তাহলে আমরা দেখব যে প্রথম ২ - ৩ নাম্বার অবশ্যই m দ্বারা এবং একই ভাবে ২-৫ এবং ৪-৫ consecutive number গুলা m দ্বারা বিভাজ্য হবে । এইটা একটা example এর মাধ্যমে দেখলে ক্লিয়ার হবে ।

say n = 5 , m = 3 , n sequence numbers are : 1 , 2 , 1 , 1 , 2 । তাহলে { 2 , 1 } , { 2 , 1 , 1 , 2 } , { 1 , 2 } m = 3 দ্বারা ভাগ হবে । consecutive result এর জন্য mod value এর সাথে সাথে আমরা এড ভ্যালু বাড়িয়া আমাদের answer এর সাথে যোগ করব , কোন নাম্বার নিজেও একা m দ্বারা বিভাজ্য হতে পারে বলে mod = 0 , এর নাম প্রথমে ১ করে রাখব ।

কোড ঃ




Thursday, March 17, 2016

Coding Interview question - 1


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


প্রথমে শিরোনাম কোডিং ইন্টারভিউ কেন দিলাম বলি । সফটওয়্যার ইঞ্জিনিয়ার ইন্টাভিউ  এর জন্য প্রায় সবখানেই একাধিক ইন্টাভিউ প্রসেস দিয়ে যেতে হয় । যেখানে নরমাল কোন বোর্ড এর সামনে প্রশ্ন-উত্তর বাদেও একটা ইন্টাভিউ সেকশন থাকে যেখানে আপনাকে একটা ল্যাপটপ/পিসি দিবে । ৩০মিনিট/১ ঘণ্টার মধ্যে ১/২টা প্রবলেম সল্ভ এর কোড করতে বলবে । এইগুলার জন্য ল্যাঙ্গুয়েজ আপনার পচ্ছন্দের বা উনারা স্পেসেফিক করে দিতে পারে । আমার ব্লগ পোস্টটা আসলে সেই একটা ইন্টারভিউ সেকশনকে নিয়ে ।

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

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

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

Thursday, March 10, 2016

Programming Interview - Rajon Bardhan


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

প্রশ্ন ঃ কমন প্রশ্ন ফাস্টে কিভাবে জানছিলা প্রোগ্রামিং কনটেস্ট এর ব্যাপারে ?
উত্তর ঃ প্রথম জানি যখন ফাস্ট সেমিস্টার ছিল তখন । ভার্সিটিতে বড় ভাইরা একটা কনটেস্ট দেন । এইটা করতে হবে । তখন আমি আমার দুই ফ্রেন্ড প্রেমা আর মাইসার সাথে টিম দেই । কিন্তু কনটেস্ট এর দিন ওরা আর আসে না পরে বড় ভাইয়ারা ১/২  এর দুইজন বড় ভাই  এর সাথে টিম করে দেন । তখন তো কিছু করতাম না , কিছু সল্ভ করতে পারি নাই ওইদিন । এমনে পরে আর করা হয় নাই কনটেস্ট । ২/২ এ এসে রিমি আমাকে বলে Uva সল্ভ করতে বলে প্রতিদিন । রিমি , হিমেল অনেক উৎসাহ দিত তখন শুরু করে দেই , প্রথম সল্ভ করছিলাম পারমুটেশন  এর একটা প্রবলেম । অনেক ভাল লাগছিল এসি হবার পর । তারপর আমি করতেই থাকি । তুমি প্রোগ্রামিং গ্রুপ এ একটা পোস্ট দিছিলা শাফায়াত এর ব্লগ নিয়ে কিভাবে কি করতে হবে জুনিওরদের জন্য। ঐটা পড়া শুরু করি । যখনই টাইম পাইতাম প্রবলেম সল্ভ করতাম , আমার মনে আছে আমি ২/২ এর পিএল এ ১৫০/২০০ টা Uva সল্ভ করি ।  পরীক্ষার আগে ২-৩ দিন এর গ্যাপ পাইতাম , আমি দেখা যাইত ১দিন খালি পড়তাম আর বাকি দিন প্রবলেম সল্ভ করতাম ।

প্রশ্নঃ আহসানউল্লাহ এতে একটা জিনিস দেখা যায় যাদের সিজিপি ভাল করার ইচ্ছা থাকে তারা কনটেস্ট এমন করতে চায় না , অনেক এর কাছে টাইম নস্ট । তুমি দুইটা জিনিস মেইন্টেইন করছ । ক্যামনে করলা বা যারা এইসব ভাবে তারা কি ঠিক ?

উত্তর ঃ কনটেস্ট শুরু করার আগে আমার ২/১ পর্যন্ত গ্রেড ছিল ৩.৬২ কিন্তু পরে ২/২ থেকে যখন কনটেস্ট শুরু করি বা প্রবলেম সল্ভ করি তখন কিন্তু প্রায় ৩.৯০ এর মত পাইতাম প্রতি সেমিস্টারে । আসলে এইটা পুরাই ভুল ধারনা । কনটেস্ট শুরু করার আগে আমি অনেক কিছুতে অনেক স্লো ছিলাম , আমার অনেক কিছু বুঝতে , পড়তে অনেক টাইম লাগত । কনটেস্ট শুরু করার পর আমার ব্রেন অনেক ফাস্ট চিন্তা করা শুরু করে , আগে যে জিনিস আমি সারাদিন লাগায়ে  হয়তো পড়তাম এইটা আমার ১ ঘণ্টার মত লাগত । আগে অনেক কিছু আমি হয়তো মুখুস্ত করতাম , আমি কনটেস্ট শুরু করার পর সব কিছু বুঝার ট্রাই করতাম , আমার ১/২ এ জাভাতে কিন্ত্ এ প্লাস ও আসে নাই কারন একটাই আমি বুঝতাম না খুব একটা । পরে ২/২ এর এলগরিদম , ডিএলডি সবকিছুতে এ প্লাস পাইতাম । নরমাল স্টুডেন্ট থেকে যারা কনটেস্ট করে তারা অনেক দ্রুত চিন্তা করতে পারে , অনেক কম সময় এ চিন্তা করতে পারে বা কোন কিছু বুঝতে পারে এইটা আমি নিজেকে দেখে বুঝছি ।


প্রশ্ন ঃ প্রথম কনটেস্ট কবে করছিলা মনে আছে ?

উত্তর ঃ ১/১ এর কনটেস্টটা বাদে প্রথম করি মারুফ ভাইদের টাইমে । ভাইরা যখন ৪/১ এ কনটেস্ট করল । আমি , রিমি আর হিমেল টিম দেই নাম ছিল প্রভাতরবি ।

-- তোমার ব্লগের নামে

হুম ।  ঐটা ভাল হইছি ৩টা সল্ভ করে ৪র্থ হই আমরা । পরে অনসাইট করি ২০১৩ এ আইইউটিতে আমি , মাহির আর অর্ণব । ঐখানে ২টা সল্ভ করছিলাম ।

প্রশ্নঃ তুমি অনেক কমটাইমে অনেক সল্ভ করছিলা বা অনেক কম সময়ে অনেক ইম্প্রুভমেন্ট করছ এইটা কিভাবে করলা ?

উত্তর ঃ  কই কি করলাম ।

-- মানে অনেক সল্ভ তো করছিলা , আমি দুইবছর আগে Uva শুরু করে যা সল্ভ করি নাই , তুমি একবছরের মধ্যে আমারে ক্রস করে গেছিলা ।

আমি খালি অফলাইন সল্ভ করতে চাইতাম , এমনে টার্গেট নিতাম ৬মাসে ৫০০ সল্ভ করতে হবে । টার্গেট ধরে সল্ভ করতে চাইতাম । যদিও অনেক ক্ষেত্রেই হয় নাই কিন্তু চেস্টাটা সব সময় ছিল । যখন কোন প্রবলেম এ আটকাইতাম নেট এ দেখতাম , যদি বুঝতাম এইটা এমন কিছু দিয়ে সল্ভ করতে হবে যেইটা আমি জানি না এইটা দেখে , শিখে আবার সল্ভ করতে চাইতাম ।

প্রশ্ন ঃ কি টাইপের প্রবলেম সল্ভ করতে বেশি ভাল লাগত ?

উত্তরঃ আমার ডাটা স্ট্রাকচার প্রবলেম গুলা , সেগমেন্ট ট্রি , বাইনারি ট্রি , বিআইটি এর প্রবলেম গুলা ভাল লাগত । সাফিক্স এরে এর প্রবলেম ও ভাল লাগত । তবে আমি জিওমেট্রি , ডিপি এর প্রবলেম অনেক পরে শুরু করি , এইটা একটা ভুল ছিল । ঐগুলা একদমই ভাল করতে পারি নাই ।

প্রশ্নঃ ক্যামনে ডাটা স্ট্রাকচার প্রবলেম এ  এত বস হইলা , কিভাবে ভাল হওয়া যায় ডাটা স্ট্রাকচার প্রবলেমগুলাতে ?

উত্তর ঃ কিসের বস ,

--- মজা নেও । সাব এর কনটেস্ট এ বাংলাদেশ এর মধ্যে ফাস্ট MO সল্ভ করে দিছিলা

ঝড়ে বক ভাই একদিনই মরে ভাই ( হাঁ হাঁ ) । এমনে বিভিন্ন ব্লগ পড়ছি । প্রবলেম সল্ভ করতাম আমি অনেক । এইভাবেই তো ।


প্রশ্ন ঃ কোন প্রবলেম সল্ভ এর জন্য তোমার Thinking Process ক্যামন থাকে ?

উত্তরঃ আমি ফাস্ট এ দেখি Brute process এ করা যাবে কিনা । যদি দেখি করা যাবে না তাইলে দেখি অন্য কোন  এল্গো এর মাধ্যমে করা যাবে কিনা । এমনে খুব একটা কিছু পারি ও না যা পারি তার মধ্যে দেখি করতে পারব কিনা।

প্রশ্ন ঃ কোন প্রবলেম এ WA পাইলে কিভাবে ঠিক কর , কি কি জিনিস দেখ ?

উত্তরঃ আমি অনেক টেস্ট কেইস তৈরি করি , বাউন্ডারি কেইজ গুলা দেখি ভুল হচ্ছে কিনা । প্রবলেমটা আমি আবার পড়ি কোন কিছু মিস করলাম কিনা । এইটাও দেখি প্রবলেমটা ভুল বুঝছি কিনা , টাইম লিমিট গুলা দেখি । আমি brute force সল্ভ করে টেস্ট কেইস করে চেক করি পরে ।



প্রশ্ন ঃ আহসানউল্লাহতে আমার নিজের দেখা আমি বলতে শুনছি অনেক জুনিওরকে তোমার মত হইতে চায় বা এখন তুমি তো ভার্সিটি এর শিক্ষক । যারা তোমারকে ফলো করে তুমি তাদের কিছু বলবা ?

উত্তর ঃ আমার মতে যার যেই জিনিসটা ভাল লাগে সেইটা করা উচিত । অবশ্যই ভাল খারাপ ব্যাপার তো দেখেই । কোনটা ভাল কোনটা খারাপ এইটা  ভার্সিটিতে কেউ উঠলে অবশ্যই বুঝা উচিত । কনটেস্ট এর ব্যাপারে হইল যদি কনটেস্ট ভাল লাগে তাইলেই করা উচিত । জোর করে কনটেস্ট করা যাবে না । জোর করে কিছু করলে তাতে ভাল রেজাল্ট ও আসবে না । মন থেকে কিছু করা হইলে অবশ্যই অবশ্যই তুমি একদিন না একদিন সেরা হইবাই । কনটেস্ট এর ব্যাপার হইলে টার্গেট নিয়ে চেস্টা করে যাওয়া উচিত । প্রতি ৬মাসে কোডফরসেস এ আমার রেটিং +২০০/৩০০ বাড়বে , ১ বছর এ আমি Uva ৫০০ নতুন প্রবলেম সল্ভ করব , লাইট ওজিতে ৩০০+ করব এমন ।

প্রশ্নঃ প্রোগ্রামিং কনটেস্ট এর ব্যাপারে কাউকে ফলো কর বা ইন্সপাইরেশন এর কেউ আছে ?

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

প্রশ্ন ঃ জুনিওর যারা কনটেস্ট স্টার্ট করতেছে তাদের ব্যাপারে কোন সাজেশন ? আহসানউল্লাহ এর যারা শুরু করতেছে তাদের ব্যাপারে বলার কিছু আছে ?

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

প্রশ্ন ঃ এমনে প্রোগ্রামিং বাদে কোন হবি ?

উত্তর ঃ আমি খেলা দেখি অনেক । বন্ধুদের সাথে আড্ডা দেই ।


Saturday, March 5, 2016

Programming Interview - Sheikh Moinul Hasan


এইটা প্রোগ্রামিং ইন্টাভিউ সিরিজের দ্বিতীয় লিখা , আজকের অতিথি বুয়েটের পরিচিত মুখ মইনুল । যারা নতুন নতুন প্রোগ্রামিং স্টার্ট করতেছে , কনটেস্ট এ আগ্রহী হচ্ছে তাদের অনেক উপকারে আসবে আশা রাখি :)
প্রশ্নঃ 
 প্রোগ্রামিং প্রোগ্রামিং কনটেস্ট এর ব্যাপারে কিভাবে জানছ প্রথমে ?
-- প্রথম প্রোগ্রামিং কনটেস্ট এর ব্যাপারে জানসি, বুয়েট ভর্তি হবার পর. অনেক বন্ধুরাই আগে থেকেই কন্টেস্ট এর বাপারে জানত. ওদের মাধ্যমেই জানতে পারি. আমারও কৌতূহল জাগল. এছাড়াও সিনিওর অনেক ভাই দের সাথেও কথা হয় ব্যাপারে. এভাবেই আস্তে আস্তে কন্টেস্ট এর জগতে এসে যাই.
প্রশ্নঃ  লাইফের প্রথম কনটেস্ট কবে করছিলা মনে আছে ? কোথায় করছ ?
-- প্রথম কন্টেস্ট করসিলাম বুয়েট এর একটা প্রাকটিস কন্টেস্ট . শান্ত ভাই অ্যারেঞ্জ করসিলেন কন্টেস্ট টা. আর ন্যাশনাল লেভেল এর প্রথম কন্টেস্ট করসিলাম হল ঢাকা রেজিওনাল ২০১২, ড্যাফোডিল ইউনিভার্সিটি এর আন্ডার , অ্যাট রেডিসন.
প্রশ্নঃ  কি টাইপের প্রবলেম সল্ভ করতে বেশি ভাল লাগে ?
-- নতুন কিছু, সেটা যতই সিম্পল হোক না কেন. কিন্তু ক্যাটাগরি যদি বলতে হয় তাহলে তো ডিপি কেই ফেবারেট বলতে হয়. কারন এই ক্যাটাগরিতেই সবচেয়ে ভ্যারিড প্রবলেম থাকে.
প্রশ্নঃ  সবার একটা সাধারন প্রশ্ন থাকে কিভাবে ডিপি প্রবলেম ভাল সল্ভ করা যায় , তুমি ডিপি অনেক ভাল সল্ভ কর এইটা কিভাবে এর ইম্প্রুভ করলা ?
-- ডিপি তে ভাল করার ওয়ে হোলও বেশি ডিপি প্রবলেম সল্ভ করা এবং রিকারেন্স রিলেশান বুঝা. বেশির ভাগ সময় ডিপি এর প্রবলেম ইউনিক থাকে. তোমাকে ওটাকেই চিন্তা করে রিকারেন্স রিলেশান বের করতে হবে. প্রাকটিস এর জন্য আমি বরাবর সাজেস্ট করি LOJ এর ডিপি প্রবলেম সল্ভ করতে.
প্রশ্নঃ  কোন প্রবলেম সল্ভ এর সময় "Thinking Process" কি থাকে প্রবলেম পড়ার পর ? কিভাবে প্রবেলম সল্ভ কর ?
-- প্রবলেম পরার সময় mindset ওপেন থাকা উচিত. আগে থেকেই ডিসাইড করা উচিত না এটা কোন ক্যাটাগরির অথবা এটা segment tree এর প্রবলেম, হয়ত এটা আরও সহজে করা যাবে. প্রবলেম পড়ার পর প্রথম চিন্তা থাকে আমি এই রকম প্রবলেম আগে করসি নাকি. আর বড় কোড করার আগে অবশ্যই খেয়াল করে নেয়া উচিত যে এটা আরও সহজে হয় কিনা এই প্রবলেম লিমিট . প্রব্লেম অ্যাপ্রচ করার সময় অবশ্যই লিমিট এর দিকে খেয়াল রাখা উচিত. অনেক সময় লিমিট এর উপর বেইস করেই বুঝা যায় কোন ক্যাটাগরি.
প্রশ্নঃ  WA হইলে কোন প্রবলেম কিভাবে attempt নেও ? 
-- WA হলে প্রথম কাজ হল কোড recheck করা, overflow, case printing, type casting, faulty or implicit double comparison, logical etc. কোড ভুল না হলে, চেক করতে হবে corner case and special case. তারপর কিছু নিজের নরমাল case সিমুলেট করে দেখতে হবে ঠিক রেসাল্ট আশে নাকি. কিছুই না হলে Idea  ঠিক আসে নাকি আবার দেখতে হবে. 
প্রশ্নঃ   প্রোগ্রামিং কনটেস্ট কাউকে ফলো কর বা ইন্সপারেশন এর কেউ আছে ?
-- ফলো তো অনেকেই করি, শান্ত ভাই, রিয়াদ ভাই, জেহাদ ভাই, লিন্কিন ভাই, সাকিব ভাই, সাদিয়া আপু, কায়সার ভাই, কিন্তু শেষ পর্যন্ত আসলে নিজেকেই decide করতে হয় যে কার কোনটা ফলো করব.
প্রশ্নঃ  অনেক সময় দেখা যায় কয়েকদিন কারো কনটেস্ট ভাল না হইলে অনেক হতাশ হয়ে কনটেস্ট ছেড়ে দেয় বা অন্যভাবেও বলা হয় সব কনটেস্টেন এর লাইফে হতাশার একটা পিরিয়ড থাকে , এই সময় কিভাবে নিজেকে মোটিভেট করা উচিত ?
-- কনটেস্ট জগতে টিকে থাকতে হলে সবাইকেই এই হতাশার পিরিয়ড দিয়ে  যেতে হয়. এই সময় push through করা উচিত, বেশি চিন্তা না করে, just দিন রাত practice করা উচিত. সবাই এই পিরিয়ড দিয়ে গেসে, যারা push through করতে পারসে তারাই ভাল করতে পারসে success এর দিকে না তাকিয়ে নিজের improvement করার জন্য practice করে জেতে হবে.  
প্রশ্নঃ জুনিওরদের জন্য কোন সাজেশন , কিভাবে ভাল হওয়া যাবে ?
-- প্রোগ্রামিং কনটেস্ট ভাল করার কোনও shortcut নাই। practice ছাড়া কিছুই হবে না. প্রাকটিস চালায়ে যাও, দেখবা তুমিও এই রকম সাজেশান দিতেসো একদিন :p.
প্রশ্নঃ   প্রোগ্রামিং বাদে কোন হবি আছে ?
-- আমি প্রচুর পিসি গেমস খেলি mostly role playing games. এছারাও আনিমে দেখি, টিভি সিরিজ দেখি অ্যান্ড মুভি দেখি. অনেকের প্রশ্ন থাকতে পারে প্রোগ্রামিং কনটেস্ট এর টাইম পাই কাম্নে তাইলে. আমার মনে হয়, কোনও কিসুতে নেশা না হইলে তেমন কোনও প্রবলেম হয় না.
বিদ্রঃ মইনুল আমার ব্যাচম্যাট । অনেক প্রবলেম ও সবসময়ই ওর কাছ থেকে অনেক কিছু শিখার সুযোগ হইছিল আমার । নিজের টাইম নস্ট করে প্রশ্নগুলার উত্তর দেওয়ার জন্য অনেক ধন্যবাদ :)