Mô tả bài toán
Viết một chương trình để tính điểm của 1 ván bowling dựa trên đầu vào là 1 dãy số điểm của các lượt ném hợp lệ. Một số thứ sẽ không cần có trong chương trình:
- Không kiểm tra tính hợp lệ của các lần ném bowling.
- Không kiểm tra tính đúng đắn của số lượt ném (frame) và số lần ném (roll).
- Không tính điểm sau từng lượt ném (chỉ tính tổng điểm cuối cùng sau khi ném đủ 10 lượt).
Tuỳ thuộc vào mỗi dojo khác nhau mà chương trình có thể được xây dựng hoàn thiện hoặc không, nhưng chúng tôi không xử lý ba điều trên nhằm giúp bài Kata “sáng sủa” hơn, người luyện Kata tập trung vào vấn đề chính cần giải quyết. Nếu bạn muốn viết một trò chơi bowling thật, bạn sẽ phải thực hiện các bước kiểm tra ở trên.
Quy tắc tính điểm ngắn gọn của bowling như sau:
- Mỗi ván bowling có 10 lượt ném (10 frame).
- Mỗi frame, người chơi có hai lần ném (roll) để làm đổ hết 10 pin.
- Nếu sau hai lần ném (trong 1 frame) mà người chơi không ném đổ được hết 10 pin, điểm số cho frame đó là tổng số pin đã bị ném đổ.
- Nếu sau hai lần ném (của 1 frame), người chơi ném đổ hết 10 pin, frame này được gọi là “spare” và điểm cho 1 frame spare được tính bằng 10 cộng thêm số pin mà bạn ném đổ ở lần ném tiếp theo (Ví dụ ở frame thứ 1 bạn đạt spare, frame thứ hai bạn ném lần 1 đổ 3 pin, lần 2 đổ 5 pin, điểm số của frame 1 (spare) sẽ là (10 + 3), và tổng điểm của frame 1 và frame 2 sẽ là: (10+3) + (3+5).
- Nếu sau lần ném đầu tiên (của 1 frame), người chơi làm đổ hết 10 pin, frame đó được gọi là “strike”, điểm số của của frame strike được tính bằng 10 cộng thêm số pin mà người chơi ném đổ ở 2 lần ném tiếp theo (Ví dụ ở frame thứ 1 bạn đạt strike, frame thứ hai bạn ném lần 1 đổ 3 pin, lần 2 đổ 5 pin, điểm số của frame 1( strike) sẽ là (10 + 3 + 5) , và tổng điểm của frame 1 và frame 2 sẽ là: (10 + 3 + 5) + (3 + 5).
- Lượt ném thứ 10 thì hơi khác hơn 1 chút. Nếu bạn đạt strike hoặc spare ở lượt ném thứ 10 thì bạn sẽ được ném thêm (bạn được ném tối đa 3 lần trong lượt ném thứ 10). Ví dụ nếu ngay lần ném đầu tiên của frame thứ 10 bạn đạt strike thì bạn sẽ được ném tiếp hai lần, nếu bạn đạt spare thì bạn sẽ được ném thêm 1 lần nữa. ( Tối đa điểm bạn có thể có trong frame 10 là (10+10+10) khi 3 lần némcủa frame này đều dành được strike).
- Bạn có thể xem thêm về luật trò bowling tại: www.topendsports.com/sport/tenpin/scoring.htm
Gợi ý
Trò bowling thú vị là nhờ strike và spare. Khi chúng ta giành được một frame strike hoặc spare, chúng ta không thể biết điểm của frame đó ngay mà phải chờ 1 hoặc 2 lần ném (một nửa hoặc cả 1 frame) để biết được điểm thưởng thêm là bao nhiêu.
Một số test case mẫu
(Dấu “X” là strike, “/” là spare và “-” là miss: Không ném đổ pin nào).
- “XXXXXXXXXXXX” (12 lần ném với 12 strike) = 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 + 10+10+10 = 300 (điểm)
- “9-9-9-9-9-9-9-9-9-9-” (20 lần ném với 10 cặp: 9 và miss) = 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90 (điểm)
- “5/5/5/5/5/5/5/5/5/5/5” (21 lần ném với 10 cặp: 5 rồi spare, lần ném cuối ném đổ 5 pin) = 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 = 150 (điểm)
Nguồn Kata: http://codingdojo.org/kata/Bowling/
0 Lời bình