jeudi 5 décembre 2019

Rolling a roulette with chances and counting the maximum same-side sequences of a number of rolls in python

I am trying to generate a random sequence of numbers, with each "result" having a chance of {a}48.6%/{b}48.6%/{c}2.8%. Counting how many times in a sequence of 6 or more {a} occurred, same for {b}. {c} counts as neutral, meaning that if an {a} sequence is happening, {c} will count as {a} , additionally if a {b} sequence is happening, then {c} will count as {b}.

The thing is that the results seem right, but every "i" iteration seems to give results that are "weighted" either on the {a} side or the {b} side. And i cant seem to figure out why. I would expect for example to have a result of : {a:6, b:7, a:8, a:7, b:9} but what i am getting is {a:7, a:9, a:6, a:8} OR {b:7, b:8, b:6} etc. Any ideas?

import sys
import random

from random import seed
from random import randint
from datetime import datetime
import time

loopRange = 8
flips = 500

median = 0


for j in range(loopRange):

    random.seed(datetime.now())

    sequenceArray = []

    maxN = 0
    count = 0

    max1 = 0
    max2 = 0
    max3 = 0

    flag1 = -1
    flag2 = -1

    for i in range(flips):

        number = randint(1, 1000)

        if(number <= 486):
            max1 += 1
            count += 1
            flag1 = 0
            sequenceArray.append(number)

        elif(number > 486 and number <= 972):
            max2 += 1
            count += 1
            flag1 = 1
            sequenceArray.append(number)

        elif(number > 972):
            max3 += 1
            count += 1
            sequenceArray.append(number)

        if(flag1 != -1 and flag2 == -1):
            flag2 = flag1

        if(flag1 != flag2):
            count -= 1
            if(count > maxN):
                maxN = count

            sequenceArray.pop()
            if(len(sequenceArray) >= 6):
                print(len(sequenceArray))
                print(sequenceArray)
            # print(sequenceArray)
            sequenceArray = []
            count = 0

    median += maxN
    print("Maximum sequence is %d " % maxN)
    print("\n")
    time.sleep(random.uniform(0.1, 1))


median = float(median/loopRange)
print("\n")
print(median)



Aucun commentaire:

Enregistrer un commentaire