একটি বোলিং গেমের স্কোর করুন।
বোলিং হলো এমন একটি গেম, যেখানে খেলোয়াড়েরা ত্রিভুজে সাজানো পিন ফেলে দেওয়ার জন্য একটি ভারী বল রোল করে। একটি বোলিং গেমের স্কোর হিসাব রাখতে কোড লিখুন।
গেমটি ১০টি ফ্রেম নিয়ে গঠিত। ফ্রেম শুরু করার সময় ১০টি পিন দাঁড়ানো থাকে এবং একটি ফ্রেম এক বা দুটি বল নিক্ষেপে গঠিত হয়। ফ্রেমের হিসাব করার জন্য তিনটি ক্ষেত্র রয়েছে।
ওপেন ফ্রেম হলো এমন একটি অবস্থা, যেখানে ফ্রেমের জন্য ১০-এর কম স্কোর রেকর্ড করা হয়। এক্ষেত্রে ফ্রেমের স্কোর হলো ফেলে দেওয়া পিনের সংখ্যা।
স্পেয়ার হলো এমন একটি অবস্থা, যেখানে দ্বিতীয় নিক্ষেপে দশটি পিনই ফেলে দেওয়া হয়। একটি স্পেয়ারের মোট মান হলো ১০-এর সাথে পরের নিক্ষেপে ফেলে দেওয়া পিনের সংখ্যা যোগ করা।
স্ট্রাইক হলো এমন একটি অবস্থা, যেখানে প্রথম নিক্ষেপেই দশটি পিন ফেলে দেওয়া হয়। একটি স্ট্রাইকের মোট মান হলো ১০-এর সাথে পরের দুটি নিক্ষেপে ফেলে দেওয়া পিনের সংখ্যা যোগ করা। কোনো স্ট্রাইকের ঠিক পরেই যদি আরেকটি স্ট্রাইক হয়, তবে আরও একবার বল না ছোড়া পর্যন্ত প্রথম স্ট্রাইকের মান নির্ণয় করা যায় না।
এখানে তিন ফ্রেমের একটি উদাহরণ:
| ফ্রেম ১ | ফ্রেম ২ | ফ্রেম ৩ |
|---|---|---|
| X (strike) | 5/ (spare) | 9 0 (open frame) |
ফ্রেম ১ হলো (১০ + ৫ + ৫) = ২০
ফ্রেম ২ হলো (৫ + ৫ + ৯) = ১৯
ফ্রেম ৩ হলো (৯ + ০) = ৯
এর মানে হলো চলমান মোট স্কোর ৪৮।
গেমের দশম ফ্রেম একটি বিশেষ ক্ষেত্র। কেউ যদি স্পেয়ার বা স্ট্রাইক করে, তবে সে যথাক্রমে একটি বা দুটি ফিল বল পায়। দশম ফ্রেমের মোট হিসাব করার জন্য ফিল বল থাকে। ফিল বলে স্ট্রাইক বা স্পেয়ার করলে খেলোয়াড় আরও ফিল বল পায় না। দশম ফ্রেমের মোট মান হলো ফেলে দেওয়া পিনের মোট সংখ্যা।
X1/ (একটি স্ট্রাইক ও একটি স্পেয়ার) দশম ফ্রেমের ক্ষেত্রে মোট মান ২০।
XXX (তিনটি স্ট্রাইক) দশম ফ্রেমের ক্ষেত্রে মোট মান ৩০।
একটি বোলিং গেমের স্কোর হিসাব রাখতে কোড লিখুন। এটিকে দুটি অপারেশন সমর্থন করতে হবে:
roll(pins : int) কল করা হয়।
আর্গুমেন্ট হলো ফেলে দেওয়া পিনের সংখ্যা।score() : int কেবল গেমের একেবারে শেষে কল করা হয়।
এটি ওই গেমের মোট স্কোর রিটার্ন করে।একটি game টাপল এবং একটি কনস্ট্রাক্টর <game> ( -- game ) ডিফাইন করুন, যা কোনো রোল ছাড়া একটি নতুন গেম রিটার্ন করে।
একটি গেমের উপর কাজ করে এমন এই শব্দগুলো দিন:
roll ( pins game -- ): রেকর্ড করুন যে pins সংখ্যক পিন পড়ে গেছে। রোলটি অবৈধ হলে একটি এরর থ্রো করুন:
"Negative roll is invalid"."Cannot roll after game is over"."Pin count exceeds pins on the lane".score ( game -- n ): গেমটির মোট স্কোর। গেমটি এখনো সম্পূর্ণ না হলে "Score cannot be taken until the end of the game" থ্রো করুন।মনে রাখবেন, roll শব্দটি kernel ভোকাবুলারির roll শাফল শব্দটিকে শ্যাডো করে। টেস্ট স্যুটটি FROM: bowling => roll ; দিয়ে অস্পষ্টতা দূর করে।
Exercism-এ সাইন আপ করুন, Factor ট্র্যাকের 47টি কনসেপ্ট163টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।