#-*- coding:latin-1 -*-

"""
Problème 462 - 2 du BV de l'APMEP
On joue 20 fois à pile ou face et on obtient :
00 11 0000 1 0 11 00000 1 00
On regroupe les blocs formés par le même chiffre (comme suggéré graphiquement). 
Ici, il y en a 9. De tels blocs s'appellent des runs en anglais.

Un élève est censé avoir joué 50 fois à pile et face et prétend avoir 
obtenu le résultat suivant :
101 011 010 010 110 001 010 010 101 100 010 101 001 100 101 0100

Soit 36 runs.

La probabilité d'un nombre si élevé de runs est faible et fait douter de 
la réalité des lancers.

Écrire un algorithme qui simule 100 lancers de 50 P ou F et qui 
compte le nombre moyen de runs et imprime ce nombre de runs. 
"""
 
from random import *

def tirage(n) :
    """
    effectue n pile ou face? Stocke le résultat sous forme d'un string
    """
    tirage = ""
    for i in range(0,n) :
        tirage+=str(randrange(0,2))
    return tirage

def compteRuns(tirage) :
    """
    Compte les changements de valeurs du tableau
    """
    # il ne faut pas sortir de tirage. Ce compteur permet de s'en assurer
    cpt = 1
    # parcourt de la liste. 
    # A chaque fois que l'on rencontre deux chiffres différents
    # on rajute 1 au compteur cpt
    # Il y a toujours au moins 1 run
    for i in range(0,len(tirage)-1) :
        if tirage[i] != tirage[i+1] :
            cpt+=1
    print(tirage)
    print("Le nombre de runs est de : ",cpt)
    return cpt

s=0
for i in range(0,100) :
    s+=compteRuns(tirage(50))

    print("Simulation de 100 tirages de 50 piles ou faces, et calculs du nombre de runs")
print("Le nombre moyen de runs est : "+str(s/100))


