Jean-Jacques BOURDIN


Programmation Impérative
Énoncés des Projets

Second semestre 2022-2023



Présentation

Les énoncés


Présentation


Les projets doivent être réalisés par binômes (C'est-à-dire par groupe de DEUX étudiants).

Les projets devront être rendus le 12 avril 2023, avant 14 heures  (heure de Paris)
Tout jour de retard entamé coûte deux points sur la note (sur vingt).
Il faut fournir :

Ces deux dossiers doivent comporter :
  1. un rapport présentant le travail, les choix faits et les difficultés rencontrées,
  2. un listing du programme, c'est-à-dire toutes les lignes du code,
  3. un mode d'emploi explicite et
  4. l'impression de traces d'exécution.
Les étudiants peuvent poser des questions par mail sur leur projet jusqu'au 7/4/23. Il est conseillé d'envoyer des versions préliminaires afin d'éviter les contresens (nombreux).


Les énoncés

Les énoncés sont accompagnés d'un indice de difficulté de 0 à 3 étoiles (*). Les projets les plus difficiles sont ceux pour lesquels l'écart-type est le plus important : on peut ne pas réussir et avoir une très mauvaise note, il est possible d'obtenir une excellente note. Les projets les plus faciles devraient ne pas présenter de difficulté mais il est quasi-impossible d'avoir une très bonne note.


  1. (***) Scheme ( )

    Écrire en C un programme capable d'exécuter du scheme standard. Les programmes scheme peuvent être :

    L'interprète doit :

  2. (de * à **) La Randonnée ( )

    Soit un terrain discret, donné par un tableau d'altitude de ses points. Le marcheur choisit deux points, un point de départ et un point d'arrivée. Il faut trouver un itinéraire entre ces deux points.

    1) Essayer la ligne droite et calculer le dénivelé positif et le dénivelé négatif (i.e. le total des montées à faire et le total des descentes).

    2) Essayer des variations autour de la ligne droite pour réduire le dénivelé positif.

    3) Chercher un chemin réaliste, voire, chercher le meilleur chemin (par exemple le chemin qui minimise le dénivelé positif de tous les chemins possibles).

    À défaut de trouver le meilleur chemin, chercher une méthode qui permette de trouver un chemin acceptable, au moins.

  3. (*) Labyrinthe 3D : le spéléologue ( )

    Un labyrinthe peut être vu comme une structure de graphe, c'est-à-dire que, pour chaque position, on connait un pointeur sur les positions disponibles à partir de là. Dans un labyrinthe 3D à salles cubiques, il y a au maximum 6 voisins pour chaque salle. Il faut donc disposer de six successeurs pour chaque noeud.

    Ou encore, à partir de chaque salle, il faut disposer d'une liste de salles atteignables directement.

    Définir le labyrinthe de la façon la plus simple possible.
    Programmer un algorithme qui trouve une façon de sortir du labyrinthe quelle que soit la salle dans laquelle on se trouve.

    Programmer une méthode permettant de trouver la façon la plus courte de sortir du labyrinthe quelle que soit la salle dans laquelle on se trouve.

    Nous donnons ici un exemple de labyrinthe simple, mais il est possible de faire plus retort.
    Exemple Chaque salle est donnée avec U (up) si on peut monter, D (down) si on peut descendre et les quatre (eventuellement) murs.
    Premier niveau
    Deuxième niveau
     
     |   ----------------| 
     |   |               | 
     |   |               | 
     |   |               | 
     |   |   ---------   | 
     |   |   |       |   | 
     |   |   | U     |   | 
     |   |   |       |   | 
     |   |   ----    |   | 
     |   |           |   | 
     |   |           |   | 
     |   |           |   | 
     |   -------------   | 
     |                   | 
     |                   | 
     |                   | 
     |-------------------| 
     |                   | 
     | U               U | 
     |                   | 
     |-------------------| 
    
     |-------------------| 
     |   |   |           | 
     | U |   |           | 
     |   |   |           | 
     |       --------    | 
     |           |       | 
     |         D |       | 
     |           |       | 
     |           |   ----| 
     |           |       | 
     |           |       | 
     |           |       | 
     |   ------------    | 
     |   |       |       | 
     |   |       |    U  | 
     |   |       |       | 
     |---|   -----   ----| 
     |           |       | 
     | D       U |    D  | 
     |           |       | 
     --------------------- 
    
     
    Troisième niveau
    Quatrième niveau
    Cinquième niveau
     |-------------------| 
     |   |               | 
     | D |             U | 
     |   |               | 
     |   |               | 
     |                   | 
     |                   | 
     |                   | 
     |-------|           | 
     |       |           | 
     |       |           | 
     |       |           | 
     |   |   ------------| 
     |   |       |       | 
     |   |       | U   D | 
     |   |       |       | 
     |   ----|   --------| 
     |       |           | 
     |     U | D         | 
     |       |           | 
     --------------------- 
    
     |-------------------| 
     |                   | 
     |                 D | 
     |                   | 
     |   -------------   | 
     |   |               | 
     |   |               | 
     |   |               | 
     |   |   ------------| 
     |   |       |       | 
     |   |       |       | 
     |   |       |       | 
     |   -----   |   |   | 
     |       |   |   |   | 
     |       |   | D |   | 
     |       |   |   |   | 
     |-------|   |---|   | 
     |       |   |       | 
     | U   D | U | U     | 
     |       |   |       | 
     |-------------------| 
    
     |-------------------| 
     |                   | 
     |                   | 
     |                   | 
     |   -------------   | 
     |   |               | 
     |   |               | 
     |   |               | 
     |   |   |   --------| 
     |   |   |       |   | 
     |   |   |       |   | 
     |   |   |       |   | 
     |   |   |   |---|   | 
     |   |   |   |       | 
     |   |   |   |       | 
     |   |   |   |       | 
     |   |   ----|   |   | 
     |   |       |   |   | 
     | D |     D | D |   | 
     |   |       |   |   | 
     |---------------|   | 
    

  4. (**) Calculs matriciels par pointeurs  ( )

    Dans beaucoup de calculs, une matrice est un grand tableau quasiment vide. Au lieu de mémoriser la totalité du tableau, il convient de ne remplir que les cases non nulles. On peut alors les mémoriser sous la forme d'un triplet : < x, y, valeur >. De telles cases sont liées entre elles par des pointeurs. Vous fabriquerez donc une liste des cases non nulles de la matrice.
    Cela s'étend bien sûr à une autre matrice et à leur addition, leur multiplication... et à la résolution d'une équation linéaire.
    Mettre en place une telle structure puis les opérations élémentaires entre deux ou trois matrices.

    Voici un exemple de système à résoudre :

    ( 5  0  2  0  1  0  0  0)   ( a)   (  5)
    ( 0  3  0  2  0  0  0  0)   ( b)   (  1)
    ( 2  0  3  0  2  0  0  0)   ( c)   (  3)
    ( 0  2  0  3  0  2  0  0)   ( d)   (  3)
    ( 0  0  2  0  3  0  2  0) x ( e) = (  2)
    ( 0  0  0  2  0  3  0  2)   ( f)   (  2)
    ( 0  0  0  0  2  0  3  0)   ( g)   (  1)
    ( 0  0  0  1  0  2  0  3)   ( h)   (  0)
    
    Vous pouvez, bien sûr le résoudre "à la main", mais les déterminants et les méthodes génériques sont vraiment utiles :-)

    Vous pouvez obtenir une bonne infinité d'autres exemples auprès de votre enseignant (essayez tous les nombres possibles pour toutes les tailles possibles de matrice...).

  5. (***) Twixt ( )

    Le principe de ce jeu est simple : relier ses deux côtés opposés d'un plateau à maillage carré avec une chaîne ininterrompue de ponts. Les ponts sont à poser entre deux piles de la même couleur distantes d'un saut de cavalier des échecs.

    On ne peut pas poser un pont qui croiserait un autre pont.

    À chaque tour de jeu chaque joueur doit :

    Créer un programme qui

    1. vérifie si la case (i,j) est libre.
    2. vérifie si on peut poser un pont entre deux piles A et B.
    3. permet de jouer à twixt,
    4. joue à twixt,
    5. joue bien à twixt.

    Si vous avez le temps, vous pouvez aussi faire une présentation du jeu autrement que par des printf.

  6. (**) Football des philosophes   ( )

    Ce jeu se joue sur un damier à deux joueurs. Il y a un pion blanc positionné au départ au centre du damier. A chaque tour chaque joueur peut soit positionner un pion noir sur le damier, soit deplacer le pion blanc. Le pion blanc se déplace comme un pion qui "mange un autre pion aux dames". Le but du jeu est d'emmener le pion blanc sur un des bords du damier (Nord pour le premier joueur et Sud pour le second).

    On trouvera un bon résumé des règles sur ce site

    Créer un programme qui

    1. permet de jouer à deux,
    2. permet de jouer contre la machine,
    3. joue bien au Football des philosophes.

  7. (**) 3D Discrète ( )

    Soit un espace formé de cases cubiques (voxels) toutes de même taille. Il s'agit de calculer la trajectoire d'un rayon lumineux dans cet espace. On donnera ce rayon par les coordonnées de deux de ses points.

    Puis calculer les voxels appartenant à un plan, puis à une sphère, puis à une surface complexe.

    Il faudra enfin calculer l'intersection entre un rayon lumineux et une surface préalablement définie.

  8. (***) Jeu de Shannon    ( )

    Soit un graphe, dont deux noeuds (D et A) sont particuliers et deux joueurs, le lieur et le casseur. À chaque tour de jeu, le casseur casse une arête entre deux noeuds. À chaque tour de jeu, le lieur rend incassable une arête (non cassée) entre deux noeuds. Si, à un moment du jeu, il n'y a plus aucun moyen d'aller de D à A, le casseur a gagné. Si, à un moment donné, il existe un chemin incassable reliant D à A, le lieur a gagné.

    L'implémentation du ou des graphes devra être faite sous la forme soit de listes chaînées soit de tableaux d'arêtes et de brins (voir votre enseignant).

  9. (**) Morpion solitaire  (  )

    Jouer au morpion, c'est facile, vous avez tous fait cela. On joue sur une grande grille régulière, par exemple une feuille A4 avec quadrillage 5 mm. Le joueur dessine des croix en cherchant à en aligner des groupes de cinq.
    La situation initiale consiste à prendre une page et à dessiner un certain nombre de croix initiales. Puis, à chaque coup, le joueur doit faire un nouvel alignement de cinq croix. Un alignement est donc formé de quatre segments. Un segment ne peut être utilisé qu'une fois.

    Vous devez écrire un programme qui joue seul au morpion solitaire et tente de trouver le plus grand nombre possible de coups consécutifs.

    Jusqu'à combien de croix suplémentaires ira votre programme ? 150 ?
    En tout cas, s'il ne dépasse pas 80, avec des coups bien notés et vérifiables, vous devez encore l'améliorer.
    Position initiale :

           ****
           *  *
           *  *
        ****  ****
        *        *
        *        *
        ****  ****
           *  *
           *  *
           ****
    
    Un premier coup pourrait être :
          1----
           *  *
           *  *
        ****  ****
        *        *
        *        *
        ****  ****
           *  *
           *  *
           ****
    
    À quoi peut succéder :
          1---+
           *  |
           *  |
        ****  |***
        *     2  *
        *        *
        ****  ****
           *  *
           *  *
           ****
    
    puis :
         1----+
           *  |
           *  |
        **** 3+---
        *     2  *
        *        *
        ****  ****
           *  *
           *  *
           ****
    
    And so on...

  10. (*) Trafic  (   )

    Il arrive que les carrefours soient saturés. Dans ce cas il faut réussir à débloquer la situation. Le principe du jeu est simple : des véhicules sont bloqués à un carrefour, ils ne peuvent que avancer ou reculer d'une case (plusieurs fois si nécessaire). L'un de ces véhicules doit traverser.
    Exemple de situation initiale

    ---------------------------
    |            EE     DDDD  |
    |            EE     DDDD  |
    |            EE   BBBBBBBB|
    |            EE   BBBBBBBB|
    |VVVV                   CC S
    |VVVV                   CC S
    |            FF         CC|
    |            FF         CC|
    |            FF   AAAAAAAA|
    |            FF   AAAAAAAA|
    ---------------------------
    
    Notons que les véhicules V, D, B et A avancent horizontalement, les autres verticalement.
    Il faut que le véhicule V sorte par la sortie S. Que devons-nous faire ?

    Deuxième exemple
    ---------------------------
    |              EE   DDDD  |
    |              EE   DDDD  |
    |              EE BBBBBBBB|
    |              EE BBBBBBBB|
    |VVVV                   CC S
    |VVVV                   CC S
    |      IIIIIIIIIII      CC|
    |GG HH IIIIIIIIIII      CC|
    |GG HH       FF   AAAAAAAA|
    |GG HH       FF   AAAAAAAA|
    ---------------------------
    
    Il faut que le véhicule V sorte par la sortie S. Que devons-nous faire ?

    Votre programme doit pouvoir lire une position initiale et trouver la suite de mouvements à faire pour résoudre le problème. La position initiale doit pouvoir être donnée dans un fichier.

  11. (*) Problème du Cheval ivre  (  )

    Vous connaissez aux échecs le mouvement et le problème du cheval ? Il s'agit de faire parcourir toutes les cases à un cavalier, en suivant les mouvements normaux du cavalier aux échecs, sans jamais repasser par la même case.

    Ici, avec un cheval ivre, tous les trois coups, il rue et saute, dans un mouvement plus long que d'habitude : au lieu d'un mouvement (2,1) il fait alors un mouvement (3,2). Par exemple, à partir de la case A1, le cheval fou peut passer (premier coup) en B3 (ou en C2) puis (deuxième coup) en C5 (ou C1 ou...) puis, de là, en (troisième coup, le saut) F7 (ou en E2...). And so on.

    Il s'agit de

    1. programmer ces mouvements ;
    2. faire une fonction qui fait bouger le cheval ivre jusqu'à ce que toutes les cases aient été parcourues une et une seule fois chacune.
    3. faire une fonction qui essaie de faire bouger le cheval ivre jusqu'à ce que toutes les cases aient été parcourues une et une seule fois en arrivant sur une case permettant d'atteindre la case de départ.

  12. (*) Crible d'Eratosthène  (  )

    Programmez en C le crible d'Eratosthène pour calculer la liste nombres premiers à partir de la liste de tous les entiers (au moins jusqu'à un rang donné en paramètre).
    ? (crible 10)
    = (2 3 5 7)
    
    Le crible est une méthode aisée pour chercher les nombres premiers :
    1. Prenez L une liste de tous les nombres naturels sauf 0 et 1.
    2. Prenez v, le premier élément de L, c'est un nombre premier.
    3. Enlevez tous les multiples de v de L.
    4. Recommencez au point 2.
    Attention, il faudra gérer la situation des listes vraiment très longues qui ne rentrent pas en mémoire, par exemple si n vaut 1 000 000 000 000 000.

  13. (**) Quel taquin !  (  )

    Le taquin est un jeu dans lequel on déplace des pièces carrées jusqu'à les mettre toutes à leur place réservée. Une adaptation de ce jeu consiste à disposer de pièces de taille variée (par exemple des pièces de taille 1 x 1 et des pièces de taille 1 x 2) et des les amener à leur position.

    Exemple :
    ici, un numéro signifie une pièce et un numéro répété est celui d'une pièce plus grande. Un vide signifie la case vide.
    Situation initiale

    ---------------
    | 7  1  3  3  |
    | 7  4  4  5  |
    | 8    10  9  |
    |11  2 12  6  |
    ---------------
    

    Situation à obtenir
    ---------------
    | 1  2  3  3  |
    | 4  4  5  6  |
    | 7  8  9 10  |
    | 7 11 12     |
    ---------------
    
    Écrire un programme qui prend une situation initiale, une situation à obtenir et propose les mouvements pour y aboutir.

  14. (**) Forteresse  ( )

    Principe du jeu : sur un plateau carré, deux joueurs s'affrontent. Chacun joue à tour de rôle. Jouer consiste à construire une tour sur une case. Un joueur peut jouer jusqu'à trois fois sur la même case de façon à obtenir une tour de hauteur 3.
    Toute tour posée donne une domination sur les cases adjacentes (y compris sur la case où elle est posée). Si la tour est de hauteur n elle donne un contrôle de valeur n.
    Quand une tour d'un joueur est sur une case dominée majoritairement par l'autre joueur, elle est dominée et s'écroule.
    Exemple :

      -------------------------
      |   |   |   |   |   |   |
    6 |   |   |   |   |   |   |
      |   |   |   |   |   |   |
      -------------------------
      |   |   |   |   |   |   |
    5 |   |   |   |   |   |   |
      |   |   |   |   |   |   |
      -------------------------
      |   |   |   |   |   |   |
    4 |   | a1| b1|   |   |   |
      |   |   |   |   |   |   |
      -------------------------
      |   |   |   |   |   |   |
    3 |   |   |   |   |   |   |
      |   |   |   |   |   |   |
      -------------------------
      |   |   |   |   |   |   |
    2 |   |   |   |   |   |   |
      |   |   |   |   |   |   |
      -------------------------
      |   |   |   |   |   |   |
    1 |   |   |   |   |   |   |
      |   |   |   |   |   |   |
      -------------------------
        1   2   3   4   5   6
    
    Sur la case (2,4), le joueur a a posé une tour. Elle donne une case de contrôle sur les cases voisines (2,3),(2,4),(2,5),(1,4),(3,4). Quand b pose sa tour sur la case (3,4), il obtient un contrôle sur les cases (3,3),(3,4),(3,5),(2,4),(4,4). Donc les contrôles sont annulés (+1 -1 = 0) sur les cases (2,4) et (3,4). Ces deux cases-là sont "neutres" en ce moment. Les tours qui s'y trouvent sont en danger. Si a veut gagner, il lui suffit de jouer, par exemple, (4,4). Dans ce cas, il prend un contrôle de plus sur la case (3,4) qui est majoritairement dominée par a et donc la tour de b s'écroule.
    Quelques remarques supplémentaires :
    1. Faire un programme qui permet de jouer, à deux, à ce jeu. Attention, l'esthétique est secondaire, une série de "printf" suffira.
    2. Ajouter à ce programme le jeu par l'ordinateur.
    3. Étudier et définir des stratégies de gain.
    4. Faire que l'on puisse jouer contre l'ordinateur, mais que l'ordinateur joue bien.

  15. (**) Grille d'anagrammes  (  )

    Soit une grille d'anagrammes (c'est-à-dire de mots croisés dont on connaît non pas une définition mais la liste des lettres). On suppose l'existence d'un dictionnaire (qu'il faudra, en partie, construire ou récupérer). Écrire un programme qui trouve la solution de ces anagrammes.
    Dans un premier temps le dictionnaire sera limité et la taille de la grille aussi. Dans un second temps ces éléments pourront grandir jusqu'à être en mesure de résoudre les anagrammes des journaux spécialisés.
    Il serait bon d'utiliser un fichier pour gérer le dictionnaire.

  16. (* à **) Création de grilles de Sudoku  ( )

    L'objectif de ce projet est de mettre en place un programme qui crée des grilles de sudoku de différents niveaux de difficulté.
    Attention, une grille de sudoku doit respecter la règle du sudoku (unicité des chiffres par ligne colonne et sous-grille) ainsi que la règle suivante :
    il existe une et une seule solution à partir des valeurs déjà données.
    Pour cela il faudra suivre et passer les étapes suivantes :

    1. Soit une grille donnée écrire un programme qui trouve la (les) solution (s). Si plusieurs solutions existent, elles doivent toutes être affichées et le programme doit signaler que la règle d'unicité n'est pas respectée.
    2. Construire une grille "pseudo-aléatoire" comportant un nombre donné, n, de valeurs et répondant aux règles du sudoku. Vérifier que cette grille répond à la règle d'unicité de la solution. Si c'est le cas, l'afficher.
      Essayez votre programme avec des valeurs faibles de n, entre 20 et 17. S'il ne fonctionne pas (ne renvoie pas une grille correcte en moins de quelques minutes), il faut l'améliorer.
    3. Faire la même chose mais avec une grille plus grande, par exemple de taille 16x16 en notant les valeurs en hexadécimal.

  17. (**) Perspective  (  )

    Si un individu est placé en face d'une série d'immeubles, il peut voir le plus proche, P. Mais il peut voir aussi un immeuble P' si P' est plus loin que P mais plus haut que P. De même pour P'' et les suivants.
    On veut fabriquer un paté d'immeubles. Les immeubles ont une hauteur, donnée par un X ci-dessous. Les valeurs indiquées sur les bords sont les nombres d'immeubles visibles de ce point. Par exemple si vous êtes en bas et le plus à droite possible, que vous regardez vers le haut, vous devez voir 3 immeubles, ce qui veut dire que un seul des immeubles sera caché par les autres.

    Dernières règles, dans chaque ligne et chaque colonne il y a un seul immeuble d'une hauteur donnée et un problème a une solution unique.
    La taille du quartier est variable, l'exemple ci-dessous est de taille 4 mais une taille 5, ou 6, ou plus doit être traitée.

       1  2  3  2
    1  X  X  X  X  4
    4  X  X  X  X  1
    2  X  X  X  X  2
    2  X  X  X  X  2
       2  1  2  3
     
    Vous devez maintenant trouver la hauteur de chacun des immeubles. Il est assez facile de trouver la solution :
       1  2  3  2
    1  4  3  2  1  4
    4  1  2  3  4  1
    2  2  1  4  3  2
    2  3  4  1  2  2
       2  1  2  3
    
    Il faut écrire un programme qui puisse

  18. (de * à ***) Échecs. ( )

    Il s'agit, ici de pouvoir résoudre des problèmes d'échecs, tels ce que l'on trouve dans certains journaux.
    1. Créer une fonction permettant de saisir de tels problèmes.
      Dans un premier temps on ne considérera pas toutes les pièces, on se limitera à des problèmes à peu de pièces.
    2. Créer une fonction pour résoudre de simples problèmes. Du genre "Blanc joue et fait mat en un coup".
    3. Créer une fonction pour résoudre des problèmes plus complexes du genre "Blanc joue et fait mat en deux coups".
    4. Créer une fonction pour résoudre des problèmes du genre "Blanc joue et fait mat en n coups".
    5. Résolution de problèmes généraux : "Noir joue et gagne".

  19. (de * à ***) Go.   ( )

    On peut trouver un certain nombre de problèmes de Go en ligne. Il s'agit ici de mettre en place un système de résolution de problèmes. La taille maximale du goban est fixée TMAX et, dans un premier temps, ne pourra pas dépasser 6 x 6.
    Voici les premières étapes de votre travail :
    1. Très facile :
      • quel est le nombre de libertés de la pierre isolée (x,y) ?
      • quel est le nombre de libertés de la paire de pierres (x,y), (x', y') ?
      • quel est le nombre de libertés du triplet de pierres (x,y), (x', y'), (x", y") ?
      • la pierre (x,y) est-elle isolée ?
      • quel est le nombre de libertés de la pierre non isolée (x,y) ?
    2. Quelle est la meilleure structure de données pour ce travail ?
    3. Faites une fonction qui permet facilement de saisir un problème.
    4. Écrivez un programme qui résout des problèmes simples de go.
    5. Écrivez un programme qui résout des problèmes de go.

  20. (*) Prairie. (  )

    Il s'agit ici d'écrire un programme qui joue correctement à Prairie. Le programme devrait gagner à tous les coups lorsqu'il joue les bisons.
    Votre Structure de données sera importante et la mémorisation des coups suivants et des choix faits déterminante.
    La présentation est secondaire et ne devra utiliser des images que si le programme joue déjà vraiment bien.

  21. (**)Analyse syntaxique( )

    En français, il est parfois complexe de faire l'analyse d'une phrase, même quand il n'y a pas d'ambiguïté. Il est possible de procéder par étapes : associer les mots à des catégories (noms, verbes, articles, adjectifs,...), puis, en fonction de la forme de la phrase, déterminer quel est le groupe nominal, quels sont les qualificatifs, etc.
    Le programme pourra ensuite analyser les phrases avec des propositions subordonnées...
    L'enseignant pourra donner des phrases et voir ce que votre programme propose comme analyse.

  22. (de * à **) Anagrammeur pour le Scrabble ()

    Soit une série de n lettres, trouver tous les mots qui existent et sont composés de ces n lettres.
    Écrivez également une fonction qui calcule le nombre de points rapportés par un mot au scrabble.
    Profitez-en pour écrire une fonction qui permet de vous aider à jouer au scrabble, c'est-à-dire qui, dans une certaine situation, propose les mots qui rapportent le plus de points.

    On peut à partir de là, mettre en place un solveur de problèmes de scrabble : on donne un problème et le programme trouve tous les scrabbles qu'on peut faire dans cette situation. (On trouvera de tels problèmes sur de vieux numéros de Jeux et Stratégie trouvables sur le web)

    La dernière étape, facultative, consistera à écrire un programme qui joue contre vous en faisant à chaque tour de jeu, le plus grand total possible.
    On aura soin de gérer, dans un premier temps, un petit fichier dictionnaire, qu'il faudra, plus tard, étendre jusqu'à disposer de tous les mots disponibles au scrabble.

    NB. On se limitera à la version française du jeu.

  23. (**) Boggle ( )

    Écrire en C un programme qui trouve toutes les solutions d'une grille de Boggle. Les mots authorisés peuvent être stockés dans un fichier texte où chaque ligne contiendra un mot. Le programme doit prendre en compte le fait qu'au Boggle toutes les lettres sont non accentuées. (à un E peut correspondre l'un des caractères suivants :ÉÈËÊ)

  24. (*) Tentes ( )

    Dans ce jeu, des arbres et des indications sont donnés sur une grille carrée. On pourra voir des exemples sur jeux tentes

    Il s'agit de poser des tentes qui doivent respecter les règles suivantes :

    Écrire en C un programme qui prend trouve la solution à un tel problème. Pour cela il faudra :

    1. Faire une fonction qui lit un problème, par exemple dans un fichier.
    2. Faire une fonction d'affichage du problème et de la solution.
    3. Faire une fonction qui résout le problème.

  25. (*) Norinori ( )

    Dans le jeu norinori , des régions sont délimitées sur une grille carrée. Il faut griser des dominos (groupes de deux cases) de façon à ce que :

    Écrire en C un programme qui prend trouve la solution à un tel problème. Pour cela il faudra :

    1. Faire une fonction qui lit un problème, par exemple dans un fichier.
    2. Faire une fonction d'affichage du problème et de la solution.
    3. Faire une fonction qui résout le problème.


Publié le 03/03/2023

Mis à jour le 3/3/2023