diff --git a/shikaku/README.md b/shikaku/README.md new file mode 100644 index 0000000..1e76b2d --- /dev/null +++ b/shikaku/README.md @@ -0,0 +1,153 @@ +Générateur de grilles de Shikaku +================================ + +Introduction +------------ + +Nous sommes en 2025. La directrice de la Clinique du Séquoia, Aimée Surprise, +doit faire face à l’ennui de ses seniors. Les abonnements aux différentes revues +de jeux d’esprit plombent le budget de la clinique et ne parviennent pas à +satisfaire une demande sans cesse croissante. + +Aimée Surprise a donc décidé de faire produire en masse des grilles de Shikaku. + +Le Shikaku +---------- + +Le Shikaku est un casse-tête logique venant du Japon. Il se joue sur une grille +de W×H cases. + +Le but est de réaliser un générateur de grilles de Shikaku. + +Format du fichier produit +------------------------- + +Le générateur produit un fichier dont la structure est la suivante : + +- première ligne : définition de l’aire de jeu + + - 'T' : magic char + - W : largeur de l’aire de jeu + - H : hauteur de l’aire de jeu + +- lignes suivantes : une ligne par aire + + - S : superficie du bloc ( 2 <= S < W×H ) + - X : abscisse du bloc ( 0 <= X < W ) + - Y : ordonnée du bloc ( 0 <= Y < H ) + +Notes : + +- La grille est divisée en plusieurs rectangles +- la grille doit être entièrement recouverte par les rectangles et deux + rectangles ne peuvent pas se chevaucher (Somme des S = W×H) +- des nombres apparaissent sur la grille : chaque rectangle doit en contenir + un et un seul qui indique l’aire du rectangle qui le contient +- 2 < W < 200, 2 < H < 200 +- 2 <= Nombre de blocs <= W×H/3 + +Voici un exemple de fichier : + + T 8 4 -> une grille de 8×4 + 6 7 0 -> un bloc de 6 aux coordonnées (7,0) + 6 5 3 -> un bloc de 6 aux coordonnées (5,3) + 12 2 1 -> un bloc de 12 aux coordonnées (2,1) + 4 4 1 -> un bloc de 4 aux coordonnées (4,1) + 4 3 3 -> un bloc de 4 aux coordonnées (3,3) + +Cet exemple décrit la grille suivante : + + +---+---+---+---+---+---+---+---+ + | 6 | + + + + + + + + + + + | 12 4 | + + + + + + + + + + + | | + + + + + + + + + + + | 4 6 | + +---+---+---+---+---+---+---+---+ + +La solution de cette grille est la suivante : + + +---+---+---+---+---+---+---+---+ + | | | 6 | + + + + + + + + + + + | 12 |4 | | + + + + + + +---+---+---+ -. + | | | | | + +---+---+---+---+ + + + + | + | 4 | |6 | | + +---+---+---+---+---+---+---+---+ +-- bloc + . | + `--------------+ + +Challenge +--------- + +Écrire un programme générant des grilles de Shikaku en laissant l’utilisateur +spécifier : + +- la largeur de la grille voulue +- la hauteur de la grille voulue +- le nombre de blocs à créer sur la grille + +Exemple d’appel du programme pour générer une grille de 8×4 contenant 5 blocs : + + shikakugen 8 4 5 + +Bonus +----- + +Le premier challenge correspond au niveau 1. + +### Niveau 2 ### + +Écrire une version capable d’afficher une version humaine de la grille et du +problème comme ci-dessous: + + +---+---+---+---+---+ + | | | + +---+---+---+---+---+ + | | | | + + + + +---+---+ + | | | | + +---+---+---+---+---+ + | | | | + + + + + + + + | | | | + +---+---+---+---+---+ + + +---+---+---+---+---+ + | 3 2 | + + + + + + + + |2 4 2 | + + + + + + + + | 2 | + + + + + + + + | 4 2 | + + + + + + + + | 4 | + +---+---+---+---+---+ + +### Niveau 3 ### + +Écrire un solveur de grille de Shikaku dont l’entrée est le fichier + +### Niveau 4 ### + +Écrire un générateur de grilles qui ne soient pas uniquement des sous-divisions +de rectangles. + +Exemple d’une telle grille : + + +---+---+---+---+ + | | | + +---+---+---+ + + | | | | + + + + + + + | | | | + + +---+---+---+ + | | | + +---+---+---+---+ + +Note : cela n’est possible qu’à partir de 5 blocs !