ドラクエ8(PS2版) 3キャラの行動順序を確率計算

X(ツイッター)でまとめた件です
・説明は、下をご覧ください。
・このページでは「3キャラ」まで拡張した確率計算用のコード例(python)を紹介しています。ご自由にお使いください。

# 3キャラの素早さを、並び順の「前から」入力
A = 5
B = 11
C = 5

### ここから下は触らない ##
import numpy as np
def suba(s):
    """ キャラの素早さを受け取り、99通りのありうる数値を出力"""
    l = np.array([int((s*R/32)) for R in range(32,65)])
    return np.concatenate([l-1, l, l+1])

# キャラのラベルづけ、順序づけ、同値の回避
l_a = suba(A)*10 + 3
l_b = suba(B)*10 + 2
l_c = suba(C)*10 + 1

# カウンタの初期化
abc = 0
acb = 0
bac = 0
bca = 0
cab = 0
cba = 0

# 比較
for a in l_a:
    for b in l_b:
        for c in l_c:
            flg = np.mod(max(a,b,c),10)*10 + np.mod(min(a,b,c),10)
            if   flg == 31: abc+=1
            elif flg == 32: acb+=1 
            elif flg == 21: bac+=1 
            elif flg == 23: bca+=1 
            elif flg == 12: cab+=1 
            elif flg == 13: cba+=1 

# めんどくなったので配列に格納
l_count = np.array([abc,acb,bac,bca,cab,cba])
# 率になおす
l_prob = l_count/99/99/99*100

# 表示
print("(A,B,C) = ", [A,B,C])
print("A → B → C : \t{:>8.4f}%".format(l_prob[0]))
print("A → C → B : \t{:>8.4f}%".format(l_prob[1]))
print("B → A → C : \t{:>8.4f}%".format(l_prob[2]))
print("B → C → A : \t{:>8.4f}%".format(l_prob[3]))
print("C → A → B : \t{:>8.4f}%".format(l_prob[4]))
print("C → B → A : \t{:>8.4f}%".format(l_prob[5]))
(A,B,C) =  [5, 11, 5]
A → B → C : 	  0.3036%
A → C → B : 	  0.0003%
B → A → C : 	 57.6493%
B → C → A : 	 42.0164%
C → A → B : 	  0.0022%
C → B → A : 	  0.0281%

・筆者の実行環境では、10秒ほどで終わります。
・無料のwebサービスなどで実行するとタイムアウトするかもしれません。
・改良や拡張は、ご自由にどうぞ。

右弐 2024/4/17

この記事が気に入ったらサポートをしてみませんか?