Saturday, June 4, 2016

End-Of-File online judge (EOF)

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

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

আচ্ছা মেইন বিষয়ে আশি । আমরা যেসব অনলাইনে প্রবলেম সল্ভ করি সেগুলা আসলে আপনার জন্য ইনপুট নিয়ে বশে থাকেনা । তারা একটা ইনপুট ফাইল আর আরেকটা আউটপুট ফাইল তৈরি করে রাখছে আর কি যে একটা সিস্টেম বানাই রাখছে আপনি আপনার প্রোগ্রাম সাবমিট করার সাথে সাথেই ওই বানিয়ে রাখা ফাইল থেকে ইনপুট এসে আপনার প্রোগ্রাম এর আউটপুট নিয়ে উনাদের সঠিক আউটপুট এর সাথে মিলাবেন । যদি মিলে তবে আপনি পাবেন Accepted মার্কা নয়ত পাবেন বিশ্ব বিখ্যাত wrong answer ট্যাগ ।

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

আচ্ছা যেটা বলছিলাম আপনি কি আমার লেখাগুলা পরে কোন হিন্ট পাইছেন ? না পাইলেও প্রবলেম নাই আমি হিন্ট বলে দিচ্ছি । আমি বলেছি "ফাইল শেষ না হওয়া পর্যন্ত ইনপুট নিবে" । while loop এর গন্ধ কি পাচ্ছেন ? "শেষ না হওয়া পর্যন্ত" ।

মেইন বিষয়টা হইল যে প্রবলেম এ বলবে  EOF(End Of File) পর্যন্ত ইনপুট নিতে আপনি চোখ বন্ধ করে  while loop এর মদ্ধে আপনাকে যে ইনপুট নিতে বলা হইসে নিয়ে নিবেন ।

যেমন ,


১ । মনে করেন প্রবলেম নাম্বার ১০০৫৫ এর কথাই বলি আই মিন হাশ্মত আর তার সেনাবাহিনীর কথা । ওইখানে আপনাকে বলেছে প্রতিবার এ দুইটা করে ইনপুট নিতে হবে এবং অবশ্যই  এন্ড অফ ফাইল পর্যন্ত । মনে করেন এইটা অনলাইন জাজ এর  একটা ইনপূট ফাইল ।


                                         | 10  12    |
                                         | 10  100  |
                                         | 100 200 |
                                         |200 400  |
                                         | 300 500 |



তো আপনি যদি C++ ইউজ করেন তাইলে লিখবেন ,

                                                               while (cin>>a>>b)
                                                                    {
                                                                       
                                                          ............. Your programme...........

                                                                           }

এইটার মানে হচ্ছে আপনার প্রোগ্রাম প্রতিবারে a আর b এর দুইটা করে মান ইনপুট নিবে আর ফাইল শেষ হয়ে গেলে আপনার প্রোগ্রাম ওঁ শেষ । শেষ বলতে আপনার প্রোগ্রাম মারা যাবেনা ভয় পাইয়েন না । আপনার প্রোগ্রাম ইনপুট নেয়া বন্ধ করে দিবে ।


আর আপনি যদি সি তে প্রোগ্রাম লিখেন তাইলে আপনাকে লিখতে হবে ,

                                                   while(scanf(%d%d,&a,&b)==2)
                                                                   {

                                                                   ............. Your programme...........

                                                                     }


নিশ্চয় ভয় পাইছেন এখানে  (==২) কেন দিছি । সি তে লিখলে এইটা দিতে হবে এইটা বুঝাবে আপনার প্রোগ্রাম যতক্ষণ ২ তা করে ইনপুট পাবে ততক্ষণ ইনপুট নিবে বা চলবে নইতো ইনপুট নেয়া বন্ধ করে দিবে ।

আচ্ছা এতক্ষন বললাম ইনপুট ফাইল থেকে ইনপুট নেয়ার কথা কিন্তু আপনার কনসোল তো আর ইনপুট ফাইল না সো এইখানে আপনাকে নিজে ইনপুট দিতে হবে এবং ইনপুট প্রোগ্রাম টারমিনেট করতে চাইলে Ctrl+Z বাটন চেপে ইন্টার মারুন টারমিনেট হয়ে যাবে ।

আপনাকে ধন্যবাদ এতক্ষন আমাকে বরদাস্ত করার জন্য ।

1 comment:

  1. Thank you vai.It's
    Help me for clear its basic thinking.

    ReplyDelete