Les questions peuvent être traitées de manière indépendante. Cependant, le code écrit pour une question peut être utile pour les suivantes.
Les questions sont corrigées automatiquement et en temps-réel pendant toute la durée de l'épreuve. Pour cela, vous allez soumettre une archive pour chaque question à un serveur. Chaque archive contient un ou plusieurs fichiers source ainsi qu'un script permettant de fabriquer un exécutable. La page de livraison et les fonctions de tests de vos soumissions sont hébergées sur le site de Paracamplus.
Attention : toute compilation, si compilation il y a, doit être des plus précautionneuse et ne produire aucune erreur ni aucun avertissement.
Pour vous familiariser avec ce processus de livraison, un exercice d'entraînement est à réaliser avant le début de l'épreuve. Vous y accèdez en utilisant le bouton
Vous retrouverez ce bouton tout au long du sujet.Pour poser une pièce, il faut respecter les deux règles suivantes :
1 | ![]() | 2 | ![]() | 3 | ![]() | 4 | ![]() | 5 | ![]() | 6 | ![]() | 7 | ![]() |
8 | ![]() | 9 | ![]() | 10 | ![]() | 11 | ![]() | 12 | ![]() | 13 | ![]() | 14 | ![]() |
15 | ![]() | 16 | ![]() | 17 | ![]() | 18 | ![]() | 19 | ![]() | 20 | ![]() | 21 | ![]() |
Elles peuvent être tournées ou retournées arbitrairement avant d'être posées. Par exemple, la pièce numéro 9 peut être posée de 4 manières différentes, qui sont
![]() | ![]() | ![]() | ![]() |
D'une manière générale, les pièces peuvent être posées de 1, 2, 4 ou 8 manières différentes selon les cas. L'ensemble des 91 façons différentes de poser une pièce sur la grille est décrit dans ce fichier : pieces.txt. Le format de ce fichier est le suivant. Une première ligne identifie la pièce et donne ses dimensions, sous la forme suivante :
ic h wà savoir un entier i sur un ou deux chiffres, une lettre c entre a et h, un espace, un entier h sur un chiffre h, un espace et un entier w sur un chiffre. L'entier i indique le numéro de la pièce (entre 1 et 21). La lettre c indique son orientation. L'ensemble ic est appelé l'identifiant. Le chiffre h indique la hauteur et le chiffre w la largeur. Ainsi,9b 2 3 correspond à une orientation particulière de la pièce 9, de hauteur 2 et de largeur 3.
Les h lignes suivantes contiennent chacune w caractères, et chaque caractère indique soit une case occupée (caractère #) soit une case inoccupée (caractère .). Ainsi, les trois lignes
9b 2 3 ##. .##définissent l'un des 4 placements possibles de la pièce 9, de hauteur 2 et de largeur 3.
Le placement d'une pièce sur la grille est défini de manière unique par l'identifiant de la pièce et les coordonnées x,y de la case en bas à gauche de la matrice rectangulaire définissant la pièce. Les coordonnées sur la grille sont des entiers compris entre 1 et 14, et la case (1,1) est située en bas à gauche. Ainsi la notation
9b 6 3représente le placement de la pièce 9b sur les quatre cases (6,4), (7,4), (7,3) et (8,3), c'est-à-dire
L'entrée est constituée d'une unique ligne donnée sur l'entrée standard du programme. Elle contient le placement d'une pièce. La sortie contient une ligne par case, chaque ligne contenant deux coordonnées x et y séparées par un caractère espace.
Ainsi, sur l'entrée
9b 6 3votre programme doit produire sur la sortie standard les lignes
5 3 5 5 8 5 9 4 9 2 6 2ou toute autre permutation de ces mêmes lignes.
Vous devez rendre une archive contenant au moins un script de compilation compile.sh qui permet d'engendrer un exécutable de nom q1.
Votre programme sera testé successivement avecVotre programme reçoit sur son entrée standard la liste des coups joués. Chaque coup est donné sur une ligne, avec une alternance joueur 1 / joueur 2. Une ligne est de la forme
9b 6 3pour indiquer qu'une pièce (ici 9b) est posée à une certaine position (ici 6,3). Votre programme doit afficher sur la sortie standard soit le message
validepour signaler que la suite de coups est valide, soit le message
invalidepour signaler qu'elle ne l'est pas.
Exemples : votre programme doit répondre valide pour les entrées
2a 1 1 2b 13 14 11b 2 3 17b 10 11et
4d 1 1 1a 14 14 2a 2 3et doit répondre invalide pour les entrées
4b 1 1et
4d 1 1 1a 14 14 4c 2 3
Vous devez rendre une archive contenant au moins un script de compilation compile.sh qui permet d'engendrer un exécutable de nom q2.
Votre programme sera testé successivement sur 18 entrées de un ou plusieurs coups, valides ou invalides. Chaque entrée vous rapportera 1 point.passe
Par exemple, pour le début de partie suivant
13a 1 1 7g 13 12 1a 3 1 2a 12 12 2a 3 4 13d 9 13 5a 4 2 19a 10 8 4c 1 5 9a 7 11 15b 4 4 11a 6 8 3a 7 1 4c 4 10 20c 3 7 16c 12 7 19f 7 4 3b 9 6votre programme doit déterminer qu'il existe 142 coups possibles pour le joueur 1, qui sont (à permutation près) les suivants.
Vous devez rendre une archive contenant au moins un script de compilation compile.sh qui permet d'engendrer un exécutable de nom q3.
Votre programme sera testé sur 8 entrées différentes. Chaque entrée rapporte 3 points.Lorsque c'est à votre programme de jouer, il doit afficher son coup sur sa sortie standard, ou la ligne passe s'il ne peut pas jouer.
Lorsque c'est à l'adversaire de jouer, votre programme reçoit sur son entrée standard le coup joué par l'adversaire (qui vaut éventuellement passe).
Votre programme dispose de 20 secondes de calcul pour l'intégralité de son exécution. Le temps passé dans le programme adversaire n'est pas compté. Si votre programme dépasse cette limite de temps avant la fin de la partie, il perd la partie.
Votre programme n'a pas à se préoccuper de détecter la fin de partie.
Vous devez rendre une archive contenant au moins un script de compilation compile.sh qui permet d'engendrer un exécutable de nom q4.
Votre programme affrontera successivement deux adversaires de force croissante. Au total, 4 parties seront jouées (une en tant que joueur 1 et l'autre en tant que joueur 2 pour chaque adversaire).Vous pouvez gagner :
Dans un affrontement de deux joueurs, un temps maximal de réflexion est alloué à chaque joueur (comme dans une partie d'échec). Pour chaque joueur, on ne décompte que le temps passé entre le moment où l'adversaire a joué et celui où le joueur donne sa réponse.