Dice simulator
This commit is contained in:
36
Uebung-02/dice.py
Normal file
36
Uebung-02/dice.py
Normal file
@@ -0,0 +1,36 @@
|
||||
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}%")
|
||||
Reference in New Issue
Block a user