37 lines
1.2 KiB
Python
37 lines
1.2 KiB
Python
from lib.Natives import NativeLoader
|
|
|
|
def throw_dice_cpp(n: int, sides: list, probs: list):
|
|
loader = NativeLoader()
|
|
dice_mod = loader.cpp("dice")
|
|
Dice = dice_mod.Dice
|
|
d = Dice(sides, probs)
|
|
d.reset_stats()
|
|
res = d.throw_dice(n)
|
|
accepted, rejected = d.stats()
|
|
return res, accepted, rejected
|
|
|
|
|
|
dice_sides = ['1', '2', '3', '4', '5', '6']
|
|
dice_props = [0.1, 0.1, 0.1, 0.1, 0.1, 0.5]
|
|
|
|
coin_sides = ['Head', 'Number']
|
|
coin_head = [0.1, 0.5]
|
|
|
|
rep = 100000
|
|
|
|
# --- Dice test ---
|
|
res_cpp, acc_dice, rej_dice = throw_dice_cpp(rep, dice_sides, dice_props)
|
|
total = sum(res_cpp.values())
|
|
probs_estimated = {k: v / total for k, v in res_cpp.items()}
|
|
print("C++ Dice result (relative):", probs_estimated)
|
|
print(f"Accepted: {acc_dice/(acc_dice+rej_dice)*100:.2f}%, "
|
|
f"Rejected: {rej_dice/(acc_dice+rej_dice)*100:.2f}%\n")
|
|
|
|
# --- Coin test ---
|
|
res_coin, acc_coin, rej_coin = throw_dice_cpp(rep, coin_sides, coin_head)
|
|
total_coin = sum(res_coin.values())
|
|
probs_coin = {k: v / total_coin for k, v in res_coin.items()}
|
|
print("C++ Coin result (relative):", probs_coin)
|
|
print(f"Accepted: {acc_coin/(acc_coin+rej_coin)*100:.2f}%, "
|
|
f"Rejected: {rej_coin/(acc_coin+rej_coin)*100:.2f}%")
|