User:Prowler/Chargeable ring generation sim
Jump to navigation
Jump to search
#!/usr/bin/env python
import random
def rn2(n):
return random.randint(0, n - 1)
def blessorcurse(chance):
if not rn2(chance):
return random.choice(['blessed', 'cursed'])
return 'uncursed'
def bcsign(buc):
return {'blessed': 1, 'uncursed': 0, 'cursed': -1}[buc]
def gen_chargeable_ring():
buc = blessorcurse(3)
charge_sign = 0
if rn2(10):
if rn2(10) and bcsign(buc):
charge_sign = bcsign(buc)
else:
charge_sign = random.choice([-1, 1])
if charge_sign == 0:
charge = rn2(4) - rn2(3)
if charge > 0:
charge_sign = 1
elif charge < 0:
charge_sign = -1
if charge_sign < 0 and rn2(5):
buc = 'cursed'
return buc, charge_sign
N = 10000000
table = {}
for i in range(N):
key = gen_chargeable_ring()
table.setdefault(key, 0)
table[key] += 1
for buc in ('blessed', 'uncursed', 'cursed'):
for charge_sign in (1, 0, -1):
charge_sign_str = {-1: '<= -1', 0: '0', 1: '>= +1'}[charge_sign]
print(f"{buc} {charge_sign_str}:\t{table[buc, charge_sign]/N*100:.2f}%")
Output:
blessed >= +1: 15.08% blessed 0: 0.42% blessed <= -1: 0.23% uncursed >= +1: 33.32% uncursed 0: 1.67% uncursed <= -1: 6.34% cursed >= +1: 1.58% cursed 0: 0.42% cursed <= -1: 40.94%