天和自動生成マシーン

身近な疑問からトリビアを生み出す、トリビアの種の世界に皆様を紹介したいと思います。では、今回のお手紙、千葉国在住の榎○さんからの投稿です。
 「私は、生まれてこの方かなりの回数麻雀を打ったことがあるのですが、いまだに天和を見たことがありません。そこで思ったのですが、天和って実際どれくらいの確率で出るものなんでしょうか。これってトリビアですよね!」



ここまで書いて飽きた。 で、要は完全ランダム配牌作ってどれくらいの確率で天和になるのか調べるプログラムを作ってみた、と。
コードはツモかどうか判別する部分より

//DMD v0.137 にて動作確認
//雀頭作ってない場合、atama=false、既に作った場合atama=true
bit isTsumo_r(uint tehai, bit atama){
	if(tehai.length == 0 && atama){
		return true;
	}
	if(tehai.length == 2){
		return tehai[0] == tehai[1];
	}
	uint t = tehai[0]; //先頭の牌
	uint i,j;
	if(t == tehai[1]){
		if(t == tehai[2]){ //暗刻ってた場合
			if(isTsumo_r(tehai[3..$], atama))return true;
		}
		if(!atama){ //対子見つかったからとりあえず頭にしてみる
			if(isTsumo_r(tehai[2..$], true))return true;
		}
	}
	
	//順子探す
	int n1,n2;
	plus1:while(true){for(i=1;i array, uint from, uint to){
	if(from == to) return;
	uint tmp = array[from];
	if(from > to){
		while(from > to){
			array[from] = array[from-1];
			from--;
		}
		array[from] = tmp;
	}else{
		while(from < to){
			array[from] = array[from+1];
			from++;
		}
		array[from] = tmp;
	}
}

で、こんな手抜きのコードはどうでもよくて、

randsort count : 20000000
tenho count    : 47
tenho percent  : 0.000235%

(ジャジャーン) 榎○さんの投稿から生まれたトリビア
2000万個の配牌を用意するとそのうち、47回天和が出る


ただし国士無双は計算に入れてないのでもうちょっとだけ高いかも。
考慮して、300,000半荘に1回くらいお眼にかかれるかと。えーと週に平均10半荘くらい打ったとして年間520半荘、これを570年くらい続ければいいんだねっ!