«前の日記(2015年11月10日) 最新 次の日記(2015年11月16日)» 編集

ema log


2015年11月13日 [長年日記]

_ [game]ごいたのシミュレーション修正版

全ての数値を自分が積もる確率に変更しました。シミュレーション回数は1000万回です。(11/16追記)ごいたのシミュレーション決定版に更新しました。5し5しについては、ゆっくり考えて理論値を算出してみます。

シミュレーション結果

名称シミュ理論値
五し3.70%3.69%≒1/27.1
六し0.46%0.46%≒1/217
七し0.0255%0.0251%≒1/3,984
八し0.000430%0.000428%≒1/233,740
だまだま5.65%5.65%≒1/17.7
三香3.73%3.74%≒1/26.8
四香0.191%0.195%≒1/514

理論値の算出方法

基本的にこの考え方で合っているはずです。例えば8しを算出すると

10C8 * (32-10)C(8-8) / 32C8 = 10C8 * 22C0 / 32C8 = 0.000428%

また、5しを算出すると

10C5 * (32-10)C(8-5) / 32C8 = 10C5 * 22C3 / 32C8 = 3.6896%

ソースコード

class SHI  ; def to_s; "し"; end; def to_i; 0x11; end; end
class GON  ; def to_s; "香"; end; def to_i; 0x21; end; end
class GIN  ; def to_s; "金"; end; def to_i; 0x31; end; end
class KIN  ; def to_s; "銀"; end; def to_i; 0x32; end; end
class BAKKO; def to_s; "馬"; end; def to_i; 0x33; end; end
class KAKU ; def to_s; "角"; end; def to_i; 0x41; end; end
class HI   ; def to_s; "飛"; end; def to_i; 0x42; end; end
class OU   ; def to_s; "王"; end; def to_i; 0x51; end; end

TIMES = 10000000

def main
	yama = Array.new(10, SHI.new)
	yama.concat Array.new( 4, GON.new)
	yama.concat Array.new( 4, GIN.new)
	yama.concat Array.new( 4, KIN.new)
	yama.concat Array.new( 4, BAKKO.new)
	yama.concat Array.new( 2, KAKU.new)
	yama.concat Array.new( 2, HI.new)
	yama.concat Array.new( 2, OU.new)

	goshi = rokushi = nanashi = hasshi = sanngon = yonngon = 0

	damadama = 0

	TIMES.times do
		yama.shuffle!
		hand1 = yama[ 0,8]
		hand2 = yama[ 8,8]
		hand3 = yama[16,8]
		hand4 = yama[24,8]

		 ou_count = hand1.count{|o|o.class == OU}
		shi_count = hand1.count{|o|o.class == SHI}
		gon_count = hand1.count{|o|o.class == GON}

		damadama += 1 if ou_count == 2

		case shi_count
		when 5 then goshi   += 1
		when 6 then rokushi += 1
		when 7 then nanashi += 1
		when 8 then hasshi  += 1
		end

		case gon_count
		when 3 then sanngon += 1
		when 4 then yonngon += 1
		end
	end

	puts "だまだま:#{damadama}…#{damadama*100.0/TIMES} %"
	puts "五し:#{goshi  }…#{goshi  *100.0/TIMES} %"
	puts "六し:#{rokushi}…#{rokushi*100.0/TIMES} %"
	puts "七し:#{nanashi}…#{nanashi*100.0/TIMES} %"
	puts "八し:#{hasshi }…#{hasshi *100.0/TIMES} %"
 	puts "三香:#{sanngon}…#{sanngon*100.0/TIMES} %"
	puts "四香:#{yonngon}…#{yonngon*100.0/TIMES} %"
end

main