Bonjour je dois faire cet exo. J'ai réussi à faire les deux premières questions mais après je n'y arrive plus. Je vous mets ce que j'ai fait. Si vous pouvez m'aider pour la suite ça serait sympa. Merci beaucoup
On considère un jeu de 54 cartes et on définit le type carte de la façon suivante :
type carte = Joker | Pique of int | Coeur of int | Carreau of int | Trefle of int;;
Les cartes sont codées par leur valeur faciale, avec pour convention pour les «figures» les
correspondances suivantes :
A tout Valet on fait correspondre la valeur 11
A toute Dame on fait correspondre la valeur 12
A tout Roi on fait correspondre la valeur 13
Exemple : Dame de Coeur est représentée par Coeur 12
.
1. Écrire une fonction joker de profil carte list -> int qui compte le nombre de cartes joker
présentes dans la liste de cartes.
2. Écrire une fonction separe de profil
carte list -> carte list * carte list * carte list * carte list qui sépare
une liste de cartes en la liste des cartes à coeur, pique, carreau, et trèfle respectivement.
3. Écrire une fonction valide de profil carte list -> bool qui détermine si la liste de cartes
donnée en entrée correspond à un paquet de 54 cartes complet.
4. Donner une fonction suite de profil carte list -> bool testant si la liste de cartes donnée en
argument est une longue suite (5 cartes de même «couleur» et de valeur successives). On supposera
pour simplifier que si la liste de cartes donnée en argument est une telle suite, alors elle est donnée
par ordre croissant de valeur faciale. Techniquement au poker on appelle cette combinaison une
«quinte flush».
Donner un exemple d’une telle suite en Ocaml.
5. Écrire une fonction distribue de profil
carte list -> int -> carte list list * carte list qui distribue 5 cartes, une par
une, à chaque joueur dans l’ordre où elles apparaissent dans le tas de cartes donné en argument (et
retourne aussi le tas de cartes restantes). Par exemple distribue paquet 2 enlève les 10 premières
cartes du tas de cartes paquet , construit deux listes de 5 cartes contenant les cartes de chacun des
deux joueurs, et retourne un couple constitué de la liste de ces deux donnes de 5 cartes et de la liste
des cartes restantes.
1)2)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 # let rec joker l = match l with []->0 | t::q -> if (t=Joker)then 1 + (joker q) else (joker q);; val joker : carte list -> int = <fun>3)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #let rec separe l = match l with []->([],[],[],[]) |t::q -> let(pi,ca,co,tr)= separe q in match t with Joker ->(pi,ca,co,tr) |Pique v -> (t::pi,co,ca,tr) |Coeur v -> (pi,t::co,ca,tr) |Carreau v -> (pi,co,t::ca,tr) |Trefle v-> (pi,co,ca,t::tr);; val separe : carte list -> carte list * carte list * carte list * carte list = <fun>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #let rec compte_occur x l = match l with []->0 |t::q-> if t=x then 1 + compte_occur x q else compte_occur x q;; val compte_occur : 'a -> 'a list -> int = <fun>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #let get_val c = match c with Joker ->0 |Pique v->v |Coeur v->v |Carreau v->v |Trefle v->v;; val get_val : carte -> int = <fun>
Partager