Bonjour à toutes et à tous,

J'espère que vous étiez nombreux à attendre l'annonce d'un nouveau concept pour la rubrique C.

Et bien, c'est désormais chose faite, c'est avec plaisir que je vous annonce la naissance des Défis C.

Voici donc le sujet que vous propose la rédaction C de Developpez.com pour ce premier défi :

Sujet : Pavage de plan

Le but de ce défi est de remplir le mieux possible un plan (une surface) avec une liste de formes. Ces formes seront communiquées à l'exécution.
Chaque programme proposé devra respecter les règles des défis


Données sur les formes à utiliser:

  • Elles peuvent comporter des trous ;
  • Elles ne seront pas plus larges ni plus hautes que 100 cases ;
  • Elles seront définies dans un fichier texte noté "formes.txt" dont voici un exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
***
**
*
 
****
 ***
 ***
 
*
Cet exemple comporte 3 formes, séparées chacune par une ligne vide. Chaque * représente une case de la forme, les espaces marquent les décalages.
  • Le fichier formes.txt devra se situer dans le même répertoire que l'exécutable.



Utilisation des formes

Chaque candidat pourra considérer les formes dans l'ordre qu'il voudra. Il pourra aussi les tourner de 90°, 180° ou 270°. Il ne pourra pas les retourner (symétries axiales). Il devra utiliser ces formes pour paver un plan d'une taille variable, fixée lors de l'exécution.
Pour une largeur donnée du plan, l'objectif est de fournir l'agencement de formes qui nécessitera le moins de lignes de remplissage. La largeur du jeu du plan n'excèdera pas 500 cases.


Paramètres d'exécution

Le programme nécessitera un paramètre pour s'exécuter : la largeur du jeu de tétris à remplir. L'exécution se fera de la manière suivante :
programme_du_defi.exe 17
=> le plan à remplir a une largeur de 17 cases.


Résultat

Le résultat de l'agencement sera également inscrit dans un fichier, noté resultat.txt, ce fichier contiendra l'agencement trouvé, où les formes seront représentées par des lettres. Pour une largeur de 6 cases, un fichier résultat pourra être de la forme suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
BBBAAA
BBB AA
BBBBCA
On y retrouve les 3 formes de départ où A représente la première forme, B la seconde et C la troisième. Le nommage des formes doit respecter l'ordre de départ. L'exemple contient volontairement un faible nombre de formes, les programmes proposés par les candidats devront pouvoir agencer jusqu'à 26 formes. Il n'y aura pas plus de 26 formes à agencer. Le fichier de résultat devra être créé par le programme et être situé dans la même répertoire que l'exécutable.
Le programme affichera également à l'écran le nombre de lignes nécessaires pour agencer les formes.


Cas particuliers

  • Si une forme ne rentre pas dans le plan, le programme l'indiquera lors de son exécution par un message à l'écran, de la forme "La forme A ne rentre pas" où A est le même nommage de la forme que pour l'affichage du résultat. Le programme continuera cependant l'agencement des autres formes.
  • Si plusieurs solutions existent pour un même jeu de formes, le programme n'en inscrira qu'une dans le fichier resultat.txt
  • Si le fichier formes.txt est introuvable ou inaccessible, le programme affichera un message puis fermera proprement.
  • Si le programme ne peut écrire le fichier resultat.txt, il affichera un message puis fermera proprement.
  • Si le paramètre d'exécution est supérieur à 500 ou est absent, le programme affichera un message et fermera proprement.




Pour tout renseignements complémentaires, je vous invite à visiter la page : http://c.developpez.com/defis/


Date de début du défi : Mardi, le 1er juillet
Date de fin du défi : Vendredi, le 1er août


Bonne chance à tous et à vos claviers!