বোলিং

বোলিং

মধ্যম

নির্দেশনা

একটি বোলিং গেমের স্কোর করুন।

বোলিং হলো এমন একটি গেম, যেখানে খেলোয়াড়েরা ত্রিভুজে সাজানো পিন ফেলে দেওয়ার জন্য একটি ভারী বল রোল করে। একটি বোলিং গেমের স্কোর হিসাব রাখতে কোড লিখুন।

বোলিংয়ের স্কোর গণনা

গেমটি ১০টি ফ্রেম নিয়ে গঠিত। ফ্রেম শুরু করার সময় ১০টি পিন দাঁড়ানো থাকে এবং একটি ফ্রেম এক বা দুটি বল নিক্ষেপে গঠিত হয়। ফ্রেমের হিসাব করার জন্য তিনটি ক্ষেত্র রয়েছে।

  • ওপেন ফ্রেম হলো এমন একটি অবস্থা, যেখানে ফ্রেমের জন্য ১০-এর কম স্কোর রেকর্ড করা হয়। এক্ষেত্রে ফ্রেমের স্কোর হলো ফেলে দেওয়া পিনের সংখ্যা।

  • স্পেয়ার হলো এমন একটি অবস্থা, যেখানে দ্বিতীয় নিক্ষেপে দশটি পিনই ফেলে দেওয়া হয়। একটি স্পেয়ারের মোট মান হলো ১০-এর সাথে পরের নিক্ষেপে ফেলে দেওয়া পিনের সংখ্যা যোগ করা।

  • স্ট্রাইক হলো এমন একটি অবস্থা, যেখানে প্রথম নিক্ষেপেই দশটি পিন ফেলে দেওয়া হয়। একটি স্ট্রাইকের মোট মান হলো ১০-এর সাথে পরের দুটি নিক্ষেপে ফেলে দেওয়া পিনের সংখ্যা যোগ করা। কোনো স্ট্রাইকের ঠিক পরেই যদি আরেকটি স্ট্রাইক হয়, তবে আরও একবার বল না ছোড়া পর্যন্ত প্রথম স্ট্রাইকের মান নির্ণয় করা যায় না।

এখানে তিন ফ্রেমের একটি উদাহরণ:

ফ্রেম ১ ফ্রেম ২ ফ্রেম ৩
X (strike) 5/ (spare) 9 0 (open frame)

ফ্রেম ১ হলো (১০ + ৫ + ৫) = ২০

ফ্রেম ২ হলো (৫ + ৫ + ৯) = ১৯

ফ্রেম ৩ হলো (৯ + ০) = ৯

এর মানে হলো চলমান মোট স্কোর ৪৮।

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

X1/ (একটি স্ট্রাইক ও একটি স্পেয়ার) দশম ফ্রেমের ক্ষেত্রে মোট মান ২০।

XXX (তিনটি স্ট্রাইক) দশম ফ্রেমের ক্ষেত্রে মোট মান ৩০।

প্রয়োজনীয়তা

একটি বোলিং গেমের স্কোর হিসাব রাখতে কোড লিখুন। এটিকে দুটি অপারেশন সমর্থন করতে হবে:

  • খেলোয়াড় প্রতিবার বল রোল করলে roll(pins : int) কল করা হয়। আর্গুমেন্ট হলো ফেলে দেওয়া পিনের সংখ্যা।
  • score() : int কেবল গেমের একেবারে শেষে কল করা হয়। এটি ওই গেমের মোট স্কোর রিটার্ন করে।

এক্সেপশন মেসেজ

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

এই নির্দিষ্ট অনুশীলনীতে স্কোরিং বা খেলার নিয়ম না মানা হলে raise স্টেটমেন্ট দিয়ে একটি এরর "থ্রো" করতে বলা হয়েছে। আপনি যদি exception raise করেন এবং তার সঙ্গে একটি মেসেজও যুক্ত করেন, তবেই টেস্ট পাস করবে।

কোনো মেসেজসহ ValueError রেইজ করতে, মেসেজটি exception টাইপের একটি আর্গুমেন্ট হিসেবে লিখুন:

# example when a bonus is attempted with an open frame
raise IndexError("cannot throw bonus with an open tenth frame")

# example when fill balls are invalid
raise ValueError("invalid fill balls")
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

বোলিং শুরু করতে প্রস্তুত?

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