今回は、Coding DojoのKataCatalogueから「KataBowling:ボウリングのスコア計算」をやってみた。
これまたすべて英語なので、練習がてら翻訳した内容をまとめていく。
※ 英語は苦手なので、最低限意味がわかる程度に超訳した。
KataBowling
ボウリングの合計スコアを計算するプログラムを作成する。
前提
- 有効な投球かどうかはチェックしない
- 投球数・フレーム数はチェックしない(1フレーム最大2投、10フレームのみ最大3投)
- 途中結果のスコアは表示しない
採点方法
- 各ゲーム、10フレームある
- 1フレーム最大で2投できる
- 2投しても全部倒せなかったら、倒したピンの合計がスコアになる
- 2投目で全部倒したら、10 + 次の投球で倒した本数の合計がスコアになる(スペア)
- 1投目で全部倒したら、10 + 次の2投で倒した本数の合計がスコアになる(ストライク)
- 10フレーム目でスペア、ストライクをとったら、1~2回投球することができる
- ゲームスコアは、すべてのフレームのスコアの合計になる
手がかり
ストライクやスペアのときのスコアの先読みがおもしろい。
そのときフレームスコアを計算することができない。
ボーナスを計算するためには、1~2フレーム待たないといけない。
推奨テストケース
X:ストライク、/:スペア、-:ミス(ガター)
- ケース1:"XXXXXXXXXXXX"(12投、12ストライク)
→ (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 - ケース2:"9-9-9-9-9-9-9-9-9-9-"(20投、9+ガターを10フレーム分)
→ 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 + 9 = 90 - ケース3:"5/5/5/5/5/5/5/5/5/5/5"(21投、5→スペアを10フレーム分、10フレームの3投目は5本)
→ 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 + 10+5 = 150
実践
私が実装したソースコードを、GitHubにアップロードした。
リポジトリの「commits」を見ると、私がどのようにしてボウリングのスコア計算を実装していったかがわかると思う。
ヒントとしては、
- 10フレーム目は"特別"
- ストライクやスペアのときは、スコアの先読みが必要
- ストライク以外は、2投しないと次のフレームに移らない
ボウリングのスコア計算なんてしたことなく、ちょっと戸惑った。
でも上記3つに気づいたら、すんなり実装することができた。
関連記事
今回は、JasmineというJavaScriptのテストフレームワークを使った。
簡単な使い方は、以下の記事にまとめてあるので参照ください。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿