お題
- (1)サイコロを降って出た目を返すメソッドdiceを定義せよ
- サイコロには1〜6の数字がある
- (もちろん)サイコロなのでランダムに値が返る
- (2)10個のサイコロを振って出た目の合計を返すメソッドdice10も定義せよ
回答
(1)の回答
def dice(ary) puts ary.sample end ary = [1,2,3,4,5,6] dice(ary) => 4など
(2)の回答
def dice10(ary) count = 0 10.times do count += ary.sample end puts "合計: #{count}" end ary = [1,2,3,4,5,6] dice10(ary)
説明
(1)の場合
def dice(ary) puts ary.sample end ary = [1,2,3,4,5,6] dice(ary) => 4など
サイコロの目を入れた配列aryを用意する。 Array#sampleで配列の中からランダムに数値を1つ取り出すので表示する。
(2)の場合
def dice10(ary) count = 0 10.times do count += ary.sample end puts "合計: #{count}" end ary = [1,2,3,4,5,6] dice10(ary)
(1)と同様にサイコロを用意する。
「サイコロを10個振る」ということは、「サイコロを10回振る」と同じ意味なので、10回繰り返す意味で10.times do
を使った。
カウンタ変数countに0を代入し、ary.sampleでランダムに取得した数値を足していく。
最後に文字列も交えて出力する。
反省
配列を使わずにもっとシンプルに書けた。
(1)ならこう書ける。
def dice Random.rand(6) + 1 end
Random.rand(i)で、「0からi未満」の数値が返る。つまりここでは「0〜6未満」の数値を取得できる。この場合は1〜6を表示したいので、1を足す。
(2)の場合はこう書けた。
def dice Random.rand(6) + 1 end def dice10 count = 0 10.times do count += dice end puts count end dice10
基本的な考えは同じだが、こっちのほうがシンプルだなぁ。