ぷよぷよの発火確率の計算方法
このページでは、「速攻の成功確率」に載せた表の数値を計算するのに使用した数式などを示します。実際の数値の計算はJavaで書いたプログラムで行なっています。
計算方針
基本的な場合から始めて、より複雑な場合の確率を順に求めていきます。複雑な場合について考えるときは、(n-k)手目に必要なぷよが1個(もしくは2個)埋まったとしてより簡単な(既に求めた)確率との積に持ち込みます。これは、現在手だけで置く場所が決定されるということを前提にしています。そのため、ネクネクまで見てから置く場所を判断するような場合は計算が困難になります。(今のところ計算していません。)この記事はあくまで参考情報、というか自分のメモ書きそのものなので、理解は難しいと思います。興味のある人だけ覗いてみて下さい。
なお、p(・:n)はその状態でn手以内に発火できない確率を表します。また、C(n,k)は二項係数で、sum(for k=1,...,n-1)はkについての和を表します。その他の記号の定義は「ぷよぷよにおいてn手で発火できない確率」を参照して下さい。
1ツモについての確率
1つのツモについて
ハチイチ:1/8
ゾロ:1/16
特定の色が1個も来ない:9/16
特定の色が1個以上来る(ゾロ含):7/16
特定の色が1個だけ来る(ゾロでない):6/16
特定の色が含まれ、かつ別の特定の色とのハチイチでないツモ:5/16
上記のようなツモで、かつゾロでないツモ:4/16
特定の2色が両方とも来ない:1/4
確率の計算
■p(a1*:n)
★p(a1*:n) = (9/16)^n
■p(a2*:n)
★p(a2*:n) = p(a1*:n) + n*(9/16)^(n-1)*(6/16)
■p(a3*:n)
★p(a3*:1) = 1
★p(a3*:n≧2) = p(a2*:n) + C(n,2)*(9/16)^(n-2)*(6/16)^2+C(n,1)*(9/16)^(n-1)*(1/16)
//これは結局使わない。「特定の色」4個が必要な場面は極めて限定的。
■p(a4*:n)
★p(a4*:1) = 1
★p(a4*:2) = 1-(1/16)^2
★p(a4*:n≧3) = p(a3*:n) + C(n,3)*(9/16)^(n-3)*(6/16)^3 + n!/(n-2)!*(9/16)^(n-2)*(6/16)*(1/16)
■p(aa*:n) ゾロ発火
★p(aa*:n) = (15/16)^n
■p(ab*:n) ハチイチ発火
★p(ab*:n) = (7/8)^n
■p(a1+a1*:n)
★p(a1+a1*:1) = 1.0
n≧2のとき
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)
aが(n-k)手目で来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(7/16)*(9/16)^k = (9/16)^(n-1)*(7/16)
★p(a1+a1*:n) = p(a1*:n-1) + (n-1)*(9/16)^(n-1)*(7/16)
■p(a1+b1*:n)
★p(a1+b1*) = p(a1+a1*)
■p(a1-b1*:n)
★p(a1-b1*:1) = 7/8
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)*(7/8)
abハチイチでないaが(n-k)手目で来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(5/16)*(9/16)^k = (9/16)^(n-1)*(5/16)
★p(a1-b1*:n) = p(a1*:n-1)*(7/8) + (n-1)*(9/16)^(n-1)*(5/16)
■p(a1+a2*:n)
★p(a1+a2*:1) = 1
n≧2のとき
ここでは最初にaが来たときにはa1に置くとする(連鎖を完成させてから発火することを仮定すれば、ゾロ発火が可能になるこの手順が最善手のため)
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)
(n-k)手目にaが来る(ゾロ含)場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(7/16)*p(a2*:k)
★p(a1+a2*:n≧2) = p(a1*:n-1) + sum(for k=1,...,n-1){(9/16)^(n-k-1)*(7/16)*p(a2*:k)}
■p(a1+b2*:n)
ここでは、a1にaがまだ置かれていない段階でabのハチイチが来たときにはa1に置くとする(連鎖を完成させてから発火することを仮定すれば、ゾロ発火が可能になるこの手順が最善手のため)
★p(a1+b2*:n) = p(a1+a2*:n)
■p(a1-b2*:n)
★p(a1-b2*:1) = 1
n≧2のとき
(n-1)手目までにaもbも来ない
=> (1/4)^(n-1)
(n-k)手目にabハチイチでないaが来る(ゾロ含)場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a2*:k)
(n-k)手目にabハチイチが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a1*:k)
(n-k)手目にabハチイチでないbが来る(ゾロ含)場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a1-b1*:k)
★p(a1-b2*:n≧2) = (1/4)^(n-1) + sum(for k=1,...,n-1){(1/4)^(n-k-1)*{(5/16)*p(a2*:k)+(1/8)*p(a1*:k)+(6/16)*p(a1-b1*:k)}}
■p(a2+a1*:n)
★p(a2+a1*:1) = 1
n≧2のとき
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)
(n-k)手目にゾロでないaが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(6/16)*p(a1+a1*:k)
(n-k)手目にaゾロが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(1/16)*p(a1*:k)
★p(a2+a1*:n≧2) = p(a1*:n-1) + for(k=1,...,n-1){(9/16)^(n-k-1)*{(6/16)*p(a1+a1*:k) + (1/16)*p(a1*:k)}}
■p(a2+b1*:n)
★p(a2+b1*:n) = p(a2+a1*:n)
■p(a2-b1*:n)
★p(a2-b1*:1) = 1
n≧2のとき
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)
(n-k)手目にゾロでないaが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(6/16)*p(a1-b1*:k)
(n-k)手目にaゾロが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(1/16)*p(a1*:k)
★p(a2-b1*:n≧2) = p(a1*:n-1) + sum(for k=1,...,n-1){(9/16)^(n-k-1)*{(6/16)*p(a1-b1*:k) + (9/16)^(n-k-1)*(1/16)*p(a1*:k)}}
■p(ab-b1*:n)
★p(ab-b1*:1) = 1
n≧2のとき
(n-1)手目までにabが来ない
=> (7/8)^(n-1)
(n-k)手目にabが来る
=> (7/8)^(n-k-1)*(1/8)*p(a1*:k)
★p(ab-b1*:n≧2) = (7/8)^(n-1) + sum(for k=1,...,n-1){(7/8)^(n-k-1)*(1/8)*p(a1*:k)}
■p(b1/a1-a1*:n)
★p(b1/a1-a1*:1) = 1
n≧2のとき
(n-1)手目までにaが1個も来ない
=> p(a1*:n-1)
(n-k)手目にabハチイチでないaが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(5/16)*p(a1-b1*:k)
(n-k)手目にabハチイチが来る場合 (k=1,...,n-1)
=> (9/16)^(n-k-1)*(1/8)*p(a1*:k)
★p(b1/a1-a1*:n≧2) = p(a1*:n-1) + sum(for k=1,...,n-1){(9/16)^(n-k-1)*((5/16)*p(a1-b1*:k)+(1/8)*p(a1*:k))}
■p(a1+b1+c1*:n)
abのハチイチが来たときにaとbのどちらに置くかをネクスト・ネクネクを見て判断するという場合があるので計算が困難
p(a1-b1+c1*:n)に近いと考えて良い
abのハチイチが生かせない分、p(a1-b1+>c1:n)よりも確率は増えるはずだが、ハチイチをaとbのどちらに使うかの選択をネクネクまで見て判断できるため、その増分はわずかだと考えられる
■p(a1-b1+c1*:n)
★p(a1-b1+c1*:1) = 1
n≧2のとき
(n-1)手目までにaもbも来ない
=> (1/4)^(n-1)
(n-k)手目でabハチイチでないaまたはbが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*2*(5/16)*p(a1+b1*:k)
(n-k)手目でabハチイチが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a1*:k)
★p(a1-b1+>c1:n) = (1/4)^(n-1) + for(k=1,...,n-1){(1/4)^(n-k-1)*{2*(5/16)*p(a1+b1*:k) + (1/8)*p(a1*:k)}}
■p(a1-b1-c1*:n)
未計算
■p(a1-b1*-c1:n)
こんなのもある(未計算)
■p(a1-b3*:n)
★p(a1-b3*:1) = 1
/*★p(a1-b3*:2) = 1-2*(1/8)*(1/16)*/
n≧2のとき
(n-1)手目までにaもbも来ない
=> (1/4)^(n-1)
(n-k)手目にabハチイチでないa(ゾロ含)が来る(bは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a3*:k)
(n-k)手目にabハチイチが来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a2*:k)
(n-k)手目にbが1個だけ来る(aは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(4/16)*p(a1-b2*:k)
(n-k)手目にbが(ゾロで)2個来る(aは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(1/16)*p(a1-b1*:k)
★p(a1-b3*:n≧3) = (1/4)^(n-1) + sum(for k=1,...,n-1){(1/4)^(n-k-1)*{(5/16)*p(a3*:k) + (1/8)*p(a2*:k) + (4/16)*p(a1-b2*:k) + (1/16)*p(a1-b1*:k)}}
■p(a1-b2+c1*:n)
★p(a1-b2+c1*:1) = 1
n≧2のとき
(n-1)手目までにaもbも来ない
=> (1/4)^(n-1)
(n-k)手目でabハチイチでないaが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a2+b1*:k)
(n-k)手目でabハチイチでもゾロでもないbが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(4/16)*p(a1-b1+c1*:k)
(n-k)手目でbゾロが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(1/16)*p(a1+b1*:k)
(n-k)手目でabハチイチが来る場合 (k=1,...,n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a1+b1*:k)
★p(a1-b2+c1*:n≧2) = (1/4)^(n-1) + sum(for k=1,...,n-1){(1/4)^(n-k-1)*{(5/16)*p(a2+b1*:k) + (5/16)*p(a1-b1+c1*:k) + (1/8)*p(a1+b1*:k)}}
■p(a2+a2*:n)
★p(a2+a2*:1) = 1
★p(a2+a2*:2) = 1-(1/16)*(1/16)
n≧2のとき
aは連鎖尾側から埋めていくとする
(n-1)手目までにaが1個も来ない
=> p(a1:n-1)
(n-k)手目にaが1個だけ来る (k=1,...,n-1)
=> (9/16)^(n-k-1)*(6/16)*p(a1+a1*:k)
(n-k)手目にaのゾロが来る (k=1,...,n-1)
=> (9/16)^(n-k-1)*(1/16)*p(a2*:k)
★p(a2+a2*:n≧2) = p(a1*:n-1) + sum(for k=1,...,n-1){(9/16)^(n-k-1)*{(6/16)*p(a1+a1*:k) + (1/16)*p(a2*:k)}}
■p(a2+b2*:n)
abハチイチが来たときにa2とb2のどちらに置くかをネクネクまで見て判断することができるため、計算が困難。p(a2-b2*:n)よりもわずかに大きい程度だと考えられる。
■p(a2-b2*:n)
★p(a2-b2*:1) = 1
★p(a2-b2*:2) = 1-(1/16)*(1/16)-(1/8)*(1/8)
n≧2のとき
(n-1)手目までにaとbが両方とも来ない
=> (1/4)^(n-1)
(n-k)手目にabハチイチでもaゾロでもないaが来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(4/16)*p(a1-b2*:k)
(n-k)手目にabハチイチでないb(ゾロ含)が来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a2-b1*:k)
(n-k)手目にabハチイチが来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a1-b1*:k)
(n-k)手目にaゾロが来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(1/16)*p(a2*:k)
★p(a2-b2*:n≧2) = (1/4)^(n-1) + sum(k=1,...,n-1){(1/4)^(n-k-1)*{(4/16)*p(a1-b2*:k) + (5/16)*p(a2-b1*:k) + (1/8)*p(a1-b1*:k) + (1/16)*p(a2*:k)}}
//これは結局使わない。「特定の色」4個が必要な場面は極めて限定的。
■p(a1-b4*:n)
★p(a1-b4*:1) = 1
n≧2のとき
(n-1)手目までにaもbも来ない
=> (1/4)^(n-1)
(n-k)手目にabハチイチでないa(ゾロ含)が来る(bは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(5/16)*p(a4*:k)
(n-k)手目にabハチイチが来る (k=1,...n-1)
=> (1/4)^(n-k-1)*(1/8)*p(a3*:k)
(n-k)手目にbが1個だけ来る(aは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(4/16)*p(a1-b3*:k)
(n-k)手目にbが(ゾロで)2個来る(aは0個)(k=1,...n-1)
=> (1/4)^(n-k-1)*(1/16)*p(a1-b2*:k)
★p(a1-b4*:n≧3) = (1/4)^(n-1) + sum(for k=1,...,n-1){(1/4)^(n-k-1)*{(5/16)*p(a4*:k) + (1/8)*p(a3*:k) + (4/16)*p(a1-b3*:k) + (1/16)*p(a1-b2*:k)}}