#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May  8 09:14:04 2025

@author: lafond
"""

#%%
def test1(L):
    n=len(L)
    for i in range(n):
        if L[i]>=n or L[i]<0:
            return False
    return True

def test2(L):
    if test1(L)==False:
        return False
    else:
        n=len(L)
        R=[0]*n
        for i in range(n):
            R[L[i]]+=1 
        for i in range(n):
            if R[i]!=1:
                return False
        return True  
    
##
#%%

def verif(L,a,b):
    for x in L:
        if x<a or x>b:
            return False
    return True

def dénombre(L,a,b):
    R=[0]*(b-a+1)
    for x in L:
        if a<=x<=b:
            R[x-a]+=1
    return R  

##
#%%
import random as rd
def marche(i,N):
    for x in range(N):
        if rd.random()<0.5:
            i=i+1
        else:
            i=i-1
    return i  

def marche2(n,i,a,b):
    while i!=n and i!=0:
        if rd.random()<0.5:
            i=i+1
        else:
            i=i-1
    if i==0:
        return a
    else:
        return b
    
##
#%%
Voyage=[[1,2,3,4],[2,3,4,5],[2,4,6,7],[4,5,7,8]]

def temps(coords):
    T=[]
    for i in range(len(coords)):
        T.append(coords[i][3])
    return T
def plus_haut(coords):
    M=coords[0][2]
    M_coords=[coords[0][0],coords[0][1]]
    for i in range(len(coords)):
        if coords[i][2]>M:
            M=coords[i][2]
            M_coords=[coords[i][0],coords[i][1]]
    return M_coords


##
#%%

import random as rd
def lancer(N):
    R=[]
    for i in range(N):
        if rd.random()<0.5:
            R.append(0)
        else:
            R.append(1)
    return R

def sequence():
    R=lancer(3)
    while R[-1]!=0 or R[-2]!=1 or R[-3]!= 1:
        if rd.random()<0.5:
            R.append(0)
        else:
            R.append(1)
    return R, len(R)

N=10**5
S=0
for i in range(N):
    _,l=sequence()
    S+=l
print(S/N)
  
    
            
    
    ##
    #%
    
def eval(P,a):
    s=0
    for i in range(len(P)):
        S+=P[i]*a**i
    return s

        
def deriv(P):
    DP=[0]*len(P)
    for i in range(len(P)-1):
        DP[i]=P[i+1]*(i+1)
    return DP
    
    
def f(P):
    R=[0]*(len(P)+1)
    DP=deriv(P)+[0] #pour avoir une liste de la bonne taille
    XP=[0]+P # decalage des coeff pour calculer XP
    for i in range(len(P)+1):
        R[i]=2*XP[i]-DP[i]
    return R
    