# sudogrille.ads

    --
    -- Cet acteur permet de représenter une grille de Sudoku en cours de résolution
    --
    package SudoGrille is

       -- La taille d'une grille de Sudoku est de 9x9
       Taille : constant Integer := 9 ;

       -- La taille d'une sous-grille est de 3x3
       SousTaille : constant Integer := 3 ;

       -----------------------------
       --        TYPES            --
       -----------------------------

       -- Chaque case de la grille de Sudoku contient un tableau 'Les_Chiffres_Possibles' de 9 booléens.
       -- Par exemple le tableau [ True ; True ; False ; False ; ... ]
       --   indique que les chiffes 1 et 2 sont possibles dans la case, les chiffres 3 et 4 sont impossibles, etc.
       -- Ce tableau contient toujours 9 cases numérotées de 1 à 9.
       type Les_Chiffres_Possibles is array (Integer range 1..Taille) of Boolean ;

       -- Une grille de Sudoku : dans chaque case on indique les chiffres possibles.
       -- Les dimensions de la grille sont toujours les mêmes : 9 lignes et 9 colonnes numérotées de 1 à 9
       type Une_Grille is array (Integer range 1..Taille, Integer range 1..Taille) of Les_Chiffres_Possibles ;

       -- Pour déclarer une variable de type Une_Grille, on écrit :
       -- Ma_Variable_Grille_De_Sudoku : Une_Grille ;
       -- (Ne pas préciser la taille de la matrice car elle est déjà contenue dans la définition du type Une_Grille).

       -- La grille est initialisée automatiquement par l'acteur avec la fonction 'Fabrique', ci-dessous.
       -- On doit lui donner le niveau de difficulté souhaité.
       type Un_Niveau is (Piece_Of_Cake, Moyen, Difficile, Diabolique) ;

       ---------------------------------------
       --         SOUS-PROGRAMMES           --
       ---------------------------------------

       -- Attend que l'utilisateur appuie sur la touche 'Entree'
       procedure Attend_Entree ;

       -- Fabrique une grille de Sudoku du niveau indiqué.
       -- Les cases déjà remplies sont initialisées avec une seule valeur possible sur les 9.
       -- Les cases vides sont initialisées avec toutes les valeurs possibles (1..9).
       function Fabrique (Niveau : Un_Niveau) return Une_Grille ;

       -- Affiche la grille indiquée
       procedure Affiche (Grille : Une_Grille) ;

       -- Si Echoue vaut TRUE, fait échouer le programme en affichant le message.
       procedure Failif (Echoue : Boolean ; Message : String) ;

       --
       -- Pour la deuxième partie
       --

       -- Renvoie un tableau 'Les_Chiffres_Possibles' où toutes les cases sauf une sont à False.
       -- La case 'Valeur' est à True.
       function Fixe(Valeur : Integer) return Les_Chiffres_Possibles ;

    end SudoGrille ;