パチンコ転落型の確率をPythonで計算する

# 概要
絶対需要はないですが・・・

最近、ひぐらし～憩～が大好きになったのですが、絆ラッシュが割と即落ちするので、転落型の継続率を計算してみます。
転落型はなぜか、継続率をスペック説明で書いてないことが多いです。たぶん転落を引いたらOUTなので、転落確率分母数を目安で遊ぶのかもしれません。ひぐらしの場合、転落分母は20回なので、20回中に当たり1/7.72を引くという考え方になるのかもしれません。
ひぐらしの音はすべての感情を破壊する（笑）


# 計算

```
転落確率 1/20
当選確率 1/7.72
```

1. 当該保留に対し、まず転落抽選を行う
1. 転落->体隠しへ、当選抽選。当たっていたとしても残保留当たり扱いとなり体隠し継続
1. 転落せず当たり->ラッシュ継続

ここでまずわかることは、絆ラッシュ転落から絆ラッシュに戻すには二回体隠しを突破する必要があるということです。
しかも、絆ラッシュに入るには残保留4つでなく、前半4つで当てる必要があるので
この確率は

1. 5回転以内に当てる確率50.0%
1. 4回転以内に当てる確率42.5%

の二つを通すので21.3%になります。
もともと、絆ラッシュには入りにくいですが、一度落ちてから戻すのもかなりきついみたいです。

時短型の場合

```math
1-(1-当選確率)^{時短回数}
```
で容易に継続率は計算できます。

今回のひぐらしの場合

1回転目

```
移行率:100%
当選確率:1/7.72*(1 - 1/20)
転落確率:1/20
```
当選確率が落ちていますが、これは当選する前に転落していた場合絆ラッシュは終わり、身隠しに移行するためです。


2回転目

```
移行率:(1-1/7.72*(1-1/20) -1/20)*100%
当選確率:1/7.72*(移行率)
転落確率:1/20*(移行率)
```
ここで移行率とは1回転目で転落せず、当たらず2回転目に移行する確率です。
非転落かつ当選＋転落を除いた割合になります。

回転数が増えるほど、移行率（その回転数に達する確率）が減っていきます。

最終的には（1回転目の当選確率）+（2回転目の当選確率）+・・・
の累計が継続率になります。

```Python

Tenraku_Probability = 1/20.2
Tousen_Probability = 1/7.72 + 1/119.2
Tenraku_and_Tousen = (1/20.2) * (1/7.72 + 1/119.2)


toutatu_probability = 1
Tousen_Sum = 0
End_Sum = 0

for i in range(100):
    End_Sum = End_Sum + toutatu_probability * Tenraku_Probability
        
    Tousen_Sum = Tousen_Sum + toutatu_probability * Tousen_Probability*(1-Tenraku_Probability)
        
    toutatu_probability = toutatu_probability \
                             *(1 - Tenraku_Probability - Tousen_Probability*(1-Tenraku_Probability))
                             
    #print(toutatu_probability)
    
print("tousen",Tousen_Sum)
print("tenraku",End_Sum)

```
で継続率72.6%と計算できました。普通の甘ST型と同じ継続率ですね。



#平均連荘数の計算方法

```
1回で終わる確率 : (1 - 継続率)
2回で終わる確率 : (1 - 継続率)*継続率
3回で終わる確率 : (1 - 継続率)*継続率^2
・
n回で終わる確率 : (1 - 継続率)*継続率^(n-1)
```
です。平均回数は（確率）*　連荘回数 を総和すれば計算すれば求まります。
継続率を$p$、連荘回数を$n$とすれば

```math
\Sigma_{n = 1}^{\infty} (1-p)p^{n-1} n
```
で計算できます。数列和忘れました（笑）プログラムで求めます


```Python
p=72/100

sum = 0
for i in range(100):
    ren = i + 1
    sum = sum + (1-p)*(p**(ren-1))*ren
    #print(sum)
    
print(sum)
```

3.57回ですね

絆ラッシュ突入もかなりきついですが、平均3.57回連荘ならまぁ楽しめますね。
といいながら今日は16連してきました。楽しすぎる。

（追記）最近は全然絆に入らない上に、すぐ転落する・・・もっとすんなり当たっていいのよ

さらに言うと、この台かなり特殊でVアタッカーが1R目に設定されています。Vに1個入れたら終わりでなく、少ししか開かないVアタッカーに10個入れるのを忘れないようにしましょう。間違ってるかもしれません。今度Vからの返しをよく見てみます。
（追記）V入賞はいつでも1個返しなので10個入れる必要は全くないと思います。ラウンド振り分けは当選時に決定するはずなので・・・

スペックは

https://machine.p-gabu.jp/guideworks/machinecontents/detail/5616

このサイトが一番わかりやすいです。


# ユニコーン継続率の計算

https://p-town.dmm.com/specials/2370

スペックはこちらを参考にしました。継続率81.1%を検証します。

```
転落確率 1/153.7
当選確率 1/41.4
```
1回転目の当選確率　=　1回転目に到達する確率　*　当選確率
2回転目の当選確率　=　2回転目に到達する確率　*　当選確率
・
・
・
1回転目に到達する確率　= 100%
2回転目に到達する確率　= 1 - 1回転目の当選確率*(1回転目で転落しない確率)　- 1回転目の転落確率

また、転落を引いた後も残保留5つ残っているので（その確率9.3%）*移行率を足して、継続率を計算しています
結果正しく81.1%と計算できました。

```Python
Tenraku_Probability = 1/153.7
Tousen_Probability = 1/41.4
Tenraku_and_Tousen = (1/153.7) * (1/41.4)


toutatu_probability = 1
Tousen_Sum = 0
End_Sum = 0

for i in range(500):
        
    Tousen_Sum = Tousen_Sum + toutatu_probability * Tousen_Probability*(1-Tenraku_Probability)
    
    #転落後残保留5回転の当選確率を追加
    Tousen_Sum = Tousen_Sum + toutatu_probability * Tenraku_Probability * (1 - (1-Tousen_Probability)**5)   
        
    toutatu_probability = toutatu_probability \
                             *(1 - Tenraku_Probability - Tousen_Probability*(1-Tenraku_Probability))
                             
    print(toutatu_probability)

    
print("tousen",Tousen_Sum)
```

ユニコーンは正直700ハマリと普通に行くし、打てる気がしないのでYoutubeでしか見たことがないです。
しかし、残保留9.3%は意外と確率高くてびっくりしました。といいながら乙女6のラスト5回転（7.5%）もほぼ引けないですが。

ちなみに、平均継続回数は5.29なので、初回突破50%超えた後からカウントすると、ユニコーンラッシュ3.29回目で落ちます。よって即落ちハイパーには平均的にはならないみたいです。3回あの音が聞けたら満足ですかね？

あと、絆ラッシュも平均3.57回だったので、もしかしたら転落型は平均3~4連荘ぐらいに設定する目安があるのかもしれません。源さんスペック（継続93%）＋転落とか楽しそうだとおもうんですが。1/2で当たり、1/13で転落、残保留1にすれば92.8%になります。
(追記)源Lightで突入即落ち7%引いてきました（笑）

でも残り少ないという感情が楽しさを増加させているのかもしれないですね。
転落型は落ちるな、落ちるなという祈り・ドキドキがメインなので、当選確率は低めにして時短が長いほうが楽しめるかもしれません。

```Python
Tenraku_Probability = 1/13
Tousen_Probability = 1/2
Tenraku_and_Tousen = Tenraku_Probability * Tousen_Probability


toutatu_probability = 1
Tousen_Sum = 0
End_Sum = 0

for i in range(500):
        
    Tousen_Sum = Tousen_Sum + toutatu_probability * Tousen_Probability*(1-Tenraku_Probability)
    
    #転落後残保留5回転の当選確率を追加
    Tousen_Sum = Tousen_Sum + toutatu_probability * Tenraku_Probability * (1 - (1-Tousen_Probability)**1)   
        
    toutatu_probability = toutatu_probability \
                             *(1 - Tenraku_Probability - Tousen_Probability*(1-Tenraku_Probability))
                             
    print(toutatu_probability)

    
print("tousen",Tousen_Sum)
```