#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May  8 10:32:03 2025

@author: lafond
"""

##
#%% Sujet 1 2024
import random as rd
import math as m 

def expo(lambda_):
     return -m.log(1-rd.random())/lambda_
 
##
#%% Sujet 2 2024
    
def integre(L):
    S=0
    for i in range(len(L)):
        S+=L[i]/(i+1)
    return S

##
#%% Sujet 3 2024
import numpy as np


def ps(U,V):
    S=0
    for i in range(len(U)):
        S+=U[i]*V[i]
    return S


def Gram(L):
    n=len(L)
    G=np.zeros([n,n])
    for i in range(n):
        for j in range(n):
            G[i][j]=ps(L[i],L[j])
    return G

print(Gram([[1,-1,0],[1,0,-1],[1,1,1]]))


#%%
## Sujet 4 agro 2024
import  random as rd 
def simul(n):
    NbUrne=[0,0,0] #nb de bille dans chaque urne
    for i in range(n):
        r=rd.randint(0,2) #décalage indice tableau
        NbUrne[r]+=1
    NbVide=0
    for i in range(3):
        if NbUrne[i]==0:
            NbVide+=1
    return NbUrne[0],NbVide 
        
        
N=10**5
S1,S2,S3=0,0,0
for i in range(N):
    X,Y=simul(10)
    S1+=X
    S2+=Y
    S3+=X*Y
    
print("E(X)≃", S1/N)
print("E(Y)≃", S2/N)
print("E(XY)≃", S3/N)
print("Cox(X,Y)≃", -S1*S2/N**2+S3/N)



##
#%% Sujet Agro 2024

def multi(P,a):
    n=len(P)-1
    R=[-a*P[0]]
    for i in range(1,n+1):
        R.append(P[i-1]-a*P[i])
    R.append(P[n])
    return R
        
def H_rec(k):
    if k==0:
        return [1]
    else:
        return multi(H_rec(k-1),k-1)
    
def H(k):
    R=[1]
    for i in range(0,k):
        R=multi(R,i)
    return R
    