You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.2 KiB

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 à lennui de ses seniors. Les abonnements aux différentes revues de jeux desprit 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 laire de jeu

    • 'T' : magic char
    • W : largeur de laire de jeu
    • H : hauteur de laire 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 laire 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 lutilisateur spécifier :

  • la largeur de la grille voulue
  • la hauteur de la grille voulue
  • le nombre de blocs à créer sur la grille

Exemple dappel 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 dafficher 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 lentrée est le fichier

Niveau 4

Écrire un générateur de grilles qui ne soient pas uniquement des sous-divisions de rectangles.

Exemple dune telle grille :

+---+---+---+---+
|           |   |
+---+---+---+   +
|   |       |   |
+   +   +   +   +
|   |       |   |
+   +---+---+---+
|   |           |
+---+---+---+---+

Note : cela nest possible quà partir de 5 blocs !