Nous souhaitons afficher sur la console des carrés de la façon suivante :
# print_string (carre 5);; . . . . . . . . . . . . . . . . . . . . . . . . .
Écrire la fonction ligne : int -> string retournant n points séparés par des espaces avec un retour à la ligne à la fin. Par exemple,
# ligne 6;; - : string = ". . . . . . \n"
Écrire la fonction carre : int -> string retournant un carré un coté n avec deux retours à la ligne à la fin. Par exemple,
# carre 6;; - : string = ". . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n. . . . . . \n\n"
Nous souhaitons maintenant afficher un carré contenant un rectangle d’étoiles. Par exemple,
# print_string (carre_etoiles (2, 8, 4, 9) 10);; . . . . . . . . . . . . . * * * * * * . . . . * * * * * * . . . . * * * * * * . . . . * * * * * * . . . . * * * * * * . . . . * * * * * * . . . . * * * * * * . . . . . . . . . . . . . . . . . . . . .
Écrire la fonction etoiles : int -> int -> int -> string telle que etoiles a b n retourne n caractères séparés par des espaces avec un retour à la ligne à la fin, et dont les caractères dont l’indice se trouve entre a et b sont des étoiles. Par exemple,
# etoiles 3 8 10;; - : string = ". . * * * * * * . . \n"
Écrire la fonction carre_etoiles : int * int * int * int -> int -> string telle que carre_etoiles (lhaut, lbas, cgauche, cdroite) n retourne un carré un coté n contenant un rectangle d’étoiles dont le sommet en haut à gauche admet pour coordonnées (cgauche, lhaut) et le sommet en bas à droite (cdroite, lbas).
Nous souhaitons afficher tous les carrés d’étoiles possible. Par exemple,
# print_str_list (tous_les_carres 3);; * . . . . . . . . . . . * . . . . . . . . . . . * . . * * . * * . . . . . . . * * . * * . * * * * * * * * * . * . . . . . . . . . . . * . . . . . . . . . . . * . . * * . * * . . . . . . . * * . * * . . * . . . . . . . . . . . * . . . . . . . . . . . *
Écrire la fonction couples_coordonnees_a_fixe : int -> int -> (int * int) list telle que couples_coordonnees_a_fixe a b retourne tous les couples (a, y) vérifiant a ≤ y ≤ b. Par exemple,
# couples_coordonnees_a_fixe 3 8;; - : (int * int) list = [(3, 3); (3, 4); (3, 5); (3, 6); (3, 7); (3, 8)]
Combien de couples sont retournés par cette fonction ?
Écrire la fonction couples_coordonnees : int -> (int * int) list telle que couples_coordonnees n retourne tous les couples (x, y) vérifiant 1 ≤ x ≤ y≤ n. Par exemple,
# couples_coordonnees 3;; - : (int * int) list = [(1, 1); (1, 2); (1, 3); (2, 2); (2, 3); (3, 3)]
Combien de couples sont retournés par cette fonction ?
Écrire la fonction coordonnees_carres_colonnes_fixees : int * int -> int -> (int * int * int * int) list telle que coordonnees_carres_colonnes_fixees (cgauche, cdroite) n retourne les coordonnées de tous les carrés d’étoiles dont les colonnes ont les indices (cgauche, cdroite). Par exemple,
# coordonnees_carres_colonnes_fixees (3, 5) 7;; - : (int * int * int * int) list = [(1, 3, 3, 5); (2, 4, 3, 5); (3, 5, 3, 5); (4, 6, 3, 5); (5, 7, 3, 5)]
Combien d’éléments contient la liste retournée par cette fonction ?
Écrire la fonction coordonnees_carres : int -> (int * int * int * int) list telle que coordonnees_carres n retourne les coordonnées de tous les carrés d’étoiles qu’il est possible de former dans un carré de côté n. Par exemple,
# coordonnees_carres 3;; - : (int * int * int * int) list = [(1, 1, 1, 1); (2, 2, 1, 1); (3, 3, 1, 1); (1, 2, 1, 2); (2, 3, 1, 2); (1, 3, 1, 3); (1, 1, 2, 2); (2, 2, 2, 2); (3, 3, 2, 2); (1, 2, 2, 3); (2, 3, 2, 3); (1, 1, 3, 3); (2, 2, 3, 3); (3, 3, 3, 3)]
Combien d’éléments contient la liste retournée par cette fonction ?
Définir une fonction tous_les_carres : int -> string list telle que tous_les_carres n retourne un liste contenant tous les carrés d’étoiles au format chaîne de caractère. Par exemple,
# tous_les_carres 3;; - : string list = ["* . . \n. . . \n. . . \n\n"; ". . . \n* . . \n. . . \n\n"; ". . . \n. . . \n* . . \n\n"; "* * . \n* * . \n. . . \n\n"; ". . . \n* * . \n* * . \n\n"; "* * * \n* * * \n* * * \n\n"; ". * . \n. . . \n. . . \n\n"; ". . . \n. * . \n. . . \n\n"; ". . . \n. . . \n. * . \n\n"; ". * * \n. * * \n. . . \n\n"; ". . . \n. * * \n. * * \n\n"; ". . * \n. . . \n. . . \n\n"; ". . . \n. . * \n. . . \n\n"; ". . . \n. . . \n. . * \n\n"]
Écrire la fonction print_str_list : string list -> unit telle que print_str_list l affiche toutes les chaînes de la liste l les unes à la suite des autres. Par exemple,
# print_str_list ["debut " ; "milieu et " ; "fin"];; debut milieu et fin - : unit = ()
Nous souhaitons afficher tous les rectangles d’étoiles possible. Par exemple,
# print_str_list (tous_les_rectangles 2);; * . . . * * . . . * . . * . * . * * * * . * . * . . * . . . * * . . . *
Définir une fonction concat_produits : ’a * ’b -> (’c * ’d) list -> (’a * ’b * ’c * ’d) telle que concat_produits (a, b) l retourne une liste de quadruplets dont les deux premiers éléments sont a et b et les deux suivants pris dans la liste l. Par exemple,
# concat_produits (2, 4) [(1,2);(3,4);(5,6);(7,8);(9,0)];; - : (int * int * int * int) list = [(2, 4, 1, 2); (2, 4, 3, 4); (2, 4, 5, 6); (2, 4, 7, 8); (2, 4, 9, 0)]
Définir une fonction croise_coordonnees : (’a * ’b) list -> (’c * ’d) list -> (’a * ’b * ’c * ’d) list telle que croise_coordonnees a b retourne tous les 4-uplets qu’il est possible de former avec un élément de a et un élément de b. Par exemple,
# croise_coordonnees [(1,2);(3,4)] [(5,6);(7,8)];; - : (int * int * int * int) list = [(1, 2, 5, 6); (1, 2, 7, 8); (3, 4, 5, 6); (3, 4, 7, 8)]
Définir une fonction coordonnees_rectangles : int -> (int * int * int * int) list telle que coordonnees_rectangles n retourne la liste des coordonnées de tous les rectangles qu’il est possible de former à l’intérieur d’un carré de côté n. Par exemple,
# coordonnees_rectangles 2;; - : (int * int * int * int) list = [(1, 1, 1, 1); (1, 1, 1, 2); (1, 1, 2, 2); (1, 2, 1, 1); (1, 2, 1, 2); (1, 2, 2, 2); (2, 2, 1, 1); (2, 2, 1, 2); (2, 2, 2, 2)]
Définir une fonction tous_les_rectangles : int -> string list telle que tous_les_rectangles n retourne une liste contenant les représentations sous forme de chaînes de caractères de tous les rectangles qu’il est possible de former à l’intérieur d’un carré de côté n. Par exemple,
# tous_les_rectangles 2;; - : string list = ["* . \n. . \n\n"; "* * \n. . \n\n"; ". * \n. . \n\n"; "* . \n* . \n\n"; "* * \n* * \n\n"; ". * \n. * \n\n"; ". . \n* . \n\n"; ". . \n* * \n\n"; ". . \n. * \n\n"]
Combien peut-on former de rectangles d’étoiles dans un carré de côté n ?