ビンゴゲーム

先日の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?