Files
Algorithmik-II/Uebung-02/dice.py
Jan-Niclas Loosen 90ce78f17d Dice simulator
2025-10-24 20:58:31 +02:00

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}%")