HSR Gacha code

import random
import os
import numpy as np

standard=["Bronya",
          "Gepard",
          "Bailu",
          "Welt",
          "Clara",
          "Himeko",
          "Yanqing",
          "Promo"]

limited=["Promo"]

pullcount = []

_rate5 = 0.006 #0.6%
_pity5 = 73
guaranteed = 0
counter5=1
i=0
promoCount=0
standardCount=0
run = 0

while (i < pow(2,16)):
    pulls=1
    while(run==0):
        x = random.randint(0,1000)
        prob5 = _rate5+max(0,(counter5-_pity5)*10*_rate5)
        if (x < (prob5*1000)):
            coinflip = random.randint(0,1)
            if (coinflip==0 and guaranteed == 0):
                drop = random.choice(standard)
                if (drop == "Promo"):
                    promoCount+=1
                    counter5=1
                    pullcount.append(pulls)
                    break
                else:
                    standardCount+=1
                    guaranteed+=1
                    counter5=1
            else:
                drop = random.choice(limited)
                promoCount+=1
                counter5=1
                if (guaranteed==1):
                    guaranteed=0
                pullcount.append(pulls)
                break               
        else:
            counter5+=1
        pulls+=1
    i+=1
suma=promoCount+standardCount
porcentajePromo=(promoCount/suma)*100
porcentajeStandard=(standardCount/suma)*100
pullcount_sorted = np.sort(np.array(pullcount))
print("- HSR System, 56/44 -")
print("Promo character amount: ", promoCount, ",",round(porcentajePromo,4),"%")
print("Standard character amount: ",standardCount,",",round(porcentajeStandard,4),"%")
print("Mean pulls: ",np.mean(pullcount_sorted))
print("Median pulls: ",np.median(pullcount_sorted))
print("Standard Deviation: ",np.std(pullcount_sorted))
print("Min: ",np.min(pullcount_sorted),"\nMax: ",np.max(pullcount_sorted))
print("Percentiles: \n1%: ",np.percentile(pullcount_sorted,1),
        "\n5%: ",np.percentile(pullcount_sorted,5),
        "\n10%: ",np.percentile(pullcount_sorted,10),
        "\n15%: ",np.percentile(pullcount_sorted,15),
        "\n20%: ",np.percentile(pullcount_sorted,20),
        "\n25%: ",np.percentile(pullcount_sorted,25),
        "\n30%: ",np.percentile(pullcount_sorted,30),
        "\n35%: ",np.percentile(pullcount_sorted,35),
        "\n40%: ",np.percentile(pullcount_sorted,40),
        "\n45%: ",np.percentile(pullcount_sorted,45),
        "\n50%: ",np.percentile(pullcount_sorted,50),
        "\n55%: ",np.percentile(pullcount_sorted,55),
        "\n60%: ",np.percentile(pullcount_sorted,60),
        "\n65%: ",np.percentile(pullcount_sorted,65),
        "\n70%: ",np.percentile(pullcount_sorted,70),
        "\n75%: ",np.percentile(pullcount_sorted,75),
        "\n80%: ",np.percentile(pullcount_sorted,80),
        "\n85%: ",np.percentile(pullcount_sorted,85),
        "\n90%: ",np.percentile(pullcount_sorted,90),
        "\n95%: ",np.percentile(pullcount_sorted,95),
        "\n99%: ",np.percentile(pullcount_sorted,99),
        "\n100%: ",np.percentile(pullcount_sorted,100))
np.savetxt("results.txt", pullcount_sorted, fmt='%d')

os.system("pause")

os.system("pause")
Edit

Pub: 28 May 2025 20:58 UTC

Views: 464