দানা

দানা

সহজ

ভূমিকা

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

নির্দেশনা

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

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

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

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

GNU awk এবং আরবিট্রারি প্রিসিশন অ্যারিথমেটিক

ডিফল্টভাবে awk-এ সংখ্যাগুলো ডাবল-প্রিসিশন ফ্লোটিং পয়েন্ট সংখ্যা হিসেবে উপস্থাপিত হয়। এতে ৫৩ বিট প্রিসিশন পাওয়া যায় (ম্যানুয়ালের সারণি ১৬.৩ দেখুন)। দুর্ভাগ্যবশত, এই অনুশীলনীটি সম্পূর্ণ করতে এটি যথেষ্ট নয় (স্পয়লার অ্যালার্ট: একটি টেস্টে ৬৩ বিট প্রিসিশন দরকার)।

"যথেষ্ট প্রিসিশন নেই" দেখতে এরকম হয়:

$ gawk 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
not enough precision

GNU awk-এর আরবিট্রারি-প্রিসিশনের সংখ্যা ব্যবহারের ক্ষমতা আছে, যদি সংশ্লিষ্ট লাইব্রেরিগুলো awk এক্সিকিউটেবলে কম্পাইল করা থাকে। আপনার awk ভার্সন দেখে নিন, এবং "GNU MPFR" খুঁজুন:

$ gawk --version
GNU Awk 5.0.1, API: 2.0 (GNU MPFR 4.0.2, GNU MP 6.2.0)
...

যদি সেটি থাকে, তাহলে -M অপশন দিয়ে এই ক্ষমতাটি চালু করুন:

$ gawk -M 'BEGIN {
  n = 2 ^ 54
  if (n == n + 1)
    print "not enough precision"
  else
    print "OK"
}'
OK

আমার awk-এ যদি -M না থাকে তাহলে কী করব? তাহলে bc-এর মতো এমন বাইরের কোনো প্রোগ্রাম কল করতে হবে, যা আরবিট্রারি প্রিসিশন অ্যারিথমেটিক করতে পারে। এটি কীভাবে করা যায় তার একটি উদাহরণের জন্য পাইপ থেকে getline দিয়ে একটি ভ্যারিয়েবলে আনা অংশটি দেখুন।

আরও পড়ুন: আরবিট্রারি প্রিসিশন অ্যারিথমেটিক

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

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

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