দানা

দানা

মধ্যম

ভূমিকা

একদা এক জ্ঞানী ভৃত্য এক রাজপুত্রের প্রাণ বাঁচিয়েছিলেন। রাজা কথা দিলেন, ভৃত্যটি যা কিছু চাইতে পারে তিনি তাই দেবেন। রাজা যে দাবা ভালোবাসেন তা জেনে ভৃত্যটি রাজাকে বললেন, তিনি কিছু গমের দানা চান। দাবাবোর্ডের প্রথম ঘরে এক দানা, আর পরের প্রতিটি ঘরে দানার সংখ্যা দ্বিগুণ হয়ে চলবে।

নির্দেশনা

দাবা বোর্ডে গমের দানার সংখ্যা হিসাব করুন।

দাবা বোর্ডে ৬৪টি ঘর থাকে। ১ নম্বর ঘরে একটি দানা, ২ নম্বর ঘরে দুটি দানা, ৩ নম্বর ঘরে চারটি দানা, এভাবেই প্রতি ঘরে দানার সংখ্যা দ্বিগুণ হতে থাকে।

এমন কোড লিখুন যা হিসাব করে:

  • নির্দিষ্ট একটি ঘরে থাকা দানার সংখ্যা
  • দাবা বোর্ডে থাকা মোট দানার সংখ্যা

সর্বোচ্চ ইন্টিজার মান

PHP ডকুমেন্টেশন অনুযায়ী ইন্টিজারের একটি সর্বোচ্চ মান আছে:

int-এর সাইজ প্ল্যাটফর্ম-নির্ভর, যদিও সাধারণত সর্বোচ্চ মান প্রায় দুই বিলিয়ন হয়ে থাকে (৩২ বিট সাইনড)। 64-বিট প্ল্যাটফর্মে সাধারণত সর্বোচ্চ মান প্রায় 9E18। PHP আনসাইনড int সাপোর্ট করে না।

অন্য কথায়, 2^63 বা তার চেয়ে বড় কোনো সংখ্যা PHP ইন্টিজার হিসেবে প্রকাশ করতে পারে না। এই অনুশীলনীর কিছু টেস্টে 64 বিট ইন্টিজার (2^64) দরকার, যা PHP-এর ইন্টিজার সাইজের সীমার বাইরে।

সংখ্যা খুব বড় হয়ে গেলে PHP স্বয়ংক্রিয়ভাবে int-কে float-এ রূপান্তর করে দেয়:

কোনো সংখ্যা int টাইপের সীমার বাইরে চলে গেলে PHP সেটিকে বদলে float হিসেবে ব্যাখ্যা করে। আর এমন কোনো অপারেশনের ফলাফল যদি int টাইপের সীমার বাইরে চলে যায়, তবে সেটি বদলে float রিটার্ন করে।

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

ভাষাটি সরাসরি যত বড় সংখ্যা গ্রহণ করে, তার চেয়ে বড় সংখ্যাগুলো এড়িয়ে আপনি কি এটি সমাধান করতে পারবেন? আর অনুগ্রহ করে gmp বা bc-এর মতো অন্য PHP লাইব্রেরিও ব্যবহার করবেন না।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
PHP Exercism

দানা শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, PHP ট্র্যাকের 11টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।