前提・実現したいこと
マーチンゲール法のシミュレーションをrubyでやろうとしています
[1つ目の作業]
所持金・賭ける金額・目標金額を設定します。
所持金が賭ける金額に足りなくなるか、目標金額に達したら処理を終わります
処理が終わった時点で出た所持金を、
・目標金額に達した
・掛け金に足りなくなったが所持金は増えた
・負けた
に分けて、それぞれの回数をカウントします
[2つ目の作業]
上の作業を何回繰り返すか指定します。
最後に
・目標金額に達した
・掛け金に足りなくなったが所持金は増えた
・負けた
の確立をそれぞれ出します
[賭けのルール]
赤と黒のみのルーレットを想定
指定した色なら勝ち、違うなら負け
・勝った場合
掛け金+1000を所持金に足す
掛け金を一番最初の額に戻す
・負けた場合
掛け金を所持金から引く
掛け金を二倍にする
発生している問題・エラーメッセージ
処理の繋げ方が分かりません
該当のソースコード
ruby
1print "所持金を入力してください:" 2x = gets.chomp.to_i 3w = x 4print "最初の掛け金を入力してください:" 5y = gets.chomp.to_i 6u = y 7print "目標金額を入力してください:" 8z = gets.chomp.to_i 9print "試行回数を入力してください:" 10n = gets.chomp.to_i 11a = 0 #目標達成 12b = 0 #目標未達成かつ勝ち 13c = 0 #負け 14 15 until w < u || w >= z do 16 roulette = rand(2) 17 i_choice = rand(2) 18 if roulette == i_choice 19 w += u + 1000 20 u = y 21 else 22 w -= u 23 u *= 2 24 end 25 end 26# n.times do 27 if w >= z 28 a += 1 29 elsif w < z and w > x 30 b += 1 31 else 32 c += 1 33 end 34# end 35 36 print "目標達成した回数:", a, "\n" 37 print "確率:", a/n.to_f, "\n" 38 39 print "目標未達成かつ勝った回数:", b, "\n" 40 print "確率:", b/n.to_f, "\n" 41 42 print "負けた回数:", c, "\n" 43 print "確率:", c/n.to_f, "\n" 44
試したこと
defとして2つの作業を作るのかと思いましたが、知識が足りなくて上手くいきませんでした
どのように書けば良いでしょうか?
また、今回のようなケースで参考にしたら良い記事などあれば教えてください
よろしくお願いします
補足情報(FW/ツールのバージョンなど)
ruby
1=begin[賭けのルール] 2赤と黒のみのルーレットを想定 3指定した色なら勝ち、違うなら負け 4・勝った場合 5掛け金+1000を所持金に足す 6掛け金を一番最初の額に戻す 7・負けた場合 8掛け金を所持金から引く 9掛け金を二倍にする 10=end 11class Roulette 12 x = 0 13 y = 0 14 u = y 15 z = 0 16 roulette = rand(2) 17 i_choice = rand(2) 18 if roulette == i_choice 19 x += u + 1000 20 u = y 21 else 22 w -= u 23 u *= 2 24 end 25end 26 27 # 初期設定を入力 28x,y,z = gets.split.map(&:to_i) 29#x:所持金、y:掛け金、z:目標金額 30 31# 試行回数を入力 32n = gets.to_i 33#インスタンス変数として掛け金と所持金をもち賭けを実行するメソッド 34def roulette.bet 35 @u = x 36 @v = y 37 return do roulette 38end 39#所持金を返すメソッド 40def roulette.money 41 return x 42end 43#続行可能かを判定するメソッド 44def roulette.continue? 45 return x >= y and x < z 46end 47 48結果 = {"目標達成": 0,"増加": 0, "敗北": 0} 49n.times{ 50 roulette = Roulette.new(x, y) 51 roulette.bet while roulette.money < z && roulette.continue? 52 if roulette.money >= 目標金額 53 結果[:"目標達成"] += 1 54 elsif roulette.money >= 所持金 55 結果[:"増加"] += 1 56 else 57 結果[:"敗北"] += 1 58 end 59} 60# 結果を表示して終了 61a = 目標達成/n 62b = 増加/n 63c = 敗北/n
回答を参考に考えをまとめました。文法は間違いだらけです
どこから手をつければ良いでしょうか?
ruby
1print "所持金を入力してください:" 2x = gets.chomp.to_i 3v = x 4print "最初の掛け金を入力してください:" 5y = gets.chomp.to_i 6u = y 7print "目標金額を入力してください:" 8z = gets.chomp.to_i 9 10print "試行回数を入力してください:" 11n = gets.chomp.to_i 12 13i = 0 14a = 0 15b = 0 16c = 0 17 18n.times do 19until v < u || v >= z do 20 i += 1 21 roulette = rand(2) 22 i_choice = rand(2) 23 if roulette == i_choice 24 v += u + 1000 25 u = y 26 else 27 v -= u 28 u *= 2 29 end 30end 31 32if v >= z 33 a += 1 34elsif v < u and v >= x 35 b += 1 36else 37 c += 1 38end 39end 40 41puts [a,b,c] 42
最初に書いたコードがこれでした
このコードだと、[a,b,c]のどれか1つに試行結果がいってしまうので何か間違いがあるのはわかるのですが、具体的な所が分かりません。
何がいけないのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/24 14:08
2019/05/24 14:49
2019/05/24 15:57