|
|
|
|
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 !
|