ビンゴゲーム
先日のHokuriku.rbで、ノベルティの抽選がビンゴゲームだったんだが、 irb 上で rand(76) *1を繰り返し実行してみる方式だと、抽選で進むにつれて重複が多くなるという課題と、既に出た数字のマークを手動でしなければならなかったという課題があり、それに対してやっぱプログラム組まないかんだろということで、RubyじゃなくなぜかIokeで。
ポイントは以下。
- Bingoオブジェクトはクラス的扱い。
- Bingo newGameでゲーム開始。Bingo mimicでもよかったが、Ioke用語になってしまうので。
- Bingo initializeは、Bingoのmimicを作るときに呼ばれる。そのときに、markedセルを空リストとして定義する。
- Bingo nextは、数字の範囲からmarkedを除外して、ランダムにソートし、先頭要素を返す。同時に、markedセルに出目を追加する。
- game nextで抽選。
- gameで、出目を確認できる。
- TODO
- ビンゴ申告があったカードのチェック
iik> Bingo = Origin mimic +> Origin Bingo_0x17F2E0: kind = "Origin Bingo" iik> Bingo range = 1..75 +> 1..75 iik> Bingo initialize = method(self marked = []) +> initialize:method(self =(marked, [])) iik> Bingo next = method((marked << (range asList - marked) sortBy(System randomNumber) first) last) +> next:method((marked <<((range asList -(marked)) sortBy(System randomNumber) first)) last) iik> Bingo newGame = method(self mimic) +> newGame:method(self mimic) iik> game = Bingo newGame +> Origin Bingo_0x32B4EB: marked = [] iik> game next +> 17 iik> game next +> 64 iik> game next +> 43 iik> game +> Origin Bingo_0x18AEB5: marked = [17, 64, 43]
15分くらいかな。まだまだだ…。
*1:rand(76) は1〜75?