
//On définit ici la fonction pour les coefficients binomiaux

function y=binomial_coeff(n,k)
    y=prod(n-k+1:n)/prod(1:k)
endfunction

// Une main est une matrice 5X2. 
// La première colonne correspond aux valeurs et la seconde aux couleurs.
//On définit une fonction qui teste la main est un full ou non.

function y=test_full(main)
    
    // dis_val renvoie les valeurs distinctes de la main.    
    dist_val = unique(main(:,1))
    n_dist = size(dist_val)
    count_dist = []    
    
    // ici, on mesure pour chacune des valeurs distinctes 
    // le nombre de fois qu'elle apparaît dans la mains
    for i=1:n_dist(1)
        count_dist(i)=sum(main(:,1)==dist_val(i,1))
    end
    
    // Enfin, si il y a 3 cartes d'une valeur et 2 cartes d'une autre valeur, on renvoie 'vrai'
    y=(prod(gsort(count_dist)==[3;2])==1)
endfunction


//On définit une fonction qui teste la main est un brelan ou non selon le même principe

function y=test_brelan(main)
    dist_val = unique(main(:,1))
    n_dist = size(dist_val)
    count_dist = []    
    for i=1:n_dist(1)
        count_dist(i)=sum(main(:,1)==dist_val(i,1))
    end
    y=(prod(gsort(count_dist)==[3;1;1])==1)
endfunction

// Ensuite, on génère le jeu de cartes.

val=['as','roi','dame', 'valet', 'dix', 'neuf', 'huit', 'sept'];
coul=['pique', 'coeur', 'carreau', 'trefle']
cartes = []

for i=1:8
    for j=1:4
        cartes(4*(i-1)+j,1)=val(i)
        cartes(4*(i-1)+j,2)=coul(j)
    end
end

// on obtient une matrice 32X2

n_main = 5

n_combi_total=binomial_coeff(32,5)
p_full = 8*7*binomial_coeff(4,3)*binomial_coeff(4,2)/n_combi_total
p_brelan = (8*binomial_coeff(4,3)*binomial_coeff(28,2))/n_combi_total-p_full
p=[p_brelan,p_full]

// On peut ici changer le nombre d'essais.

n_essais=1000000


n=[0,0]
for i=1:n_essais
    // On génère ici, à chaque essai la main en prenant les cinq premières cartes d'une permutation alétoire des 32 cartes
    // C'est un peu lourd car on doit ici faire 32 tirages aléatoires à chaque fois mais je n'ai pas trouvé mieux.
    main=grand(1, "prm", 1:32)
    main=cartes(main(1:5),:)
    
    // A chaque tirage, on mesure simultanément si c'est un brelan ou un full et on stocke cela dans le vecteur n
    n=n+[test_brelan(main),test_full(main)]
end

// A la fin le vecteur f donne les fréquences observées.
f=n/n_essais


// puis on fait l'affichage dans la console.
disp(f,'fréquences observées:',p,'probabilités:')

