Programmation Efficace – Licence 3 Informatique TP : Un probl` eme d’impression
M. Schlechtberg, imprimeur de son ´etat, a acquis une imprimante `a pesanteur (ce terme sera expliqu´e plus tard dans l’´enonc´e) d’occasion programmable qui lui permet d’imprimer plusieurs affiches color´ees en mˆeme temps. Cette imprimante est programmable dans le sens o`u on lui fournit une liste ordonn´ee d’affiches `a imprimer, et elle interpr`ete cette liste pour d´ecider de l’ordre r´eel d’impression. Elle poss`ede N (2≤N ≤32) cartouches d’encre, chacune de couleur diff´erente (les couleurs sont num´erot´ees de 0 `a N−1) et peut imprimer simultan´ement plusieurs affiches, `a condition que deux quelconques de ces affiches n’utilisent pas une couleur commune.
L’impression d’une affiche (ou simultan´ement de plusieurs affiches comme expliqu´e ci-dessous) se fait en une unit´e de temps, et comme M. Schlechtberg vient d’acqu´erir cette nouvelle impri- mante, il pr´ef`ere qu’un de ses ouvriers soit en permanence `a cˆot´e de la machine pour v´erifier que tout se passe bien. Pour des raisons syndicales, il ne peut donc faire fonctionner l’imprimante plus de T unit´es de temps dans la journ´ee.
Votre travail est le suivant : chaque jour vers 15h30, M. Schlechtberg vous fournit la liste des commandes du lendemain et vous devez lui fournir le programme destin´e `a son imprimante pour 18h30 au plus tard.
La liste des commandes est fournie sous la forme d’un fichier texte ascii au format suivant :
— sur la premi`ere ligne, s´epar´es par des espaces : le nombre N de cartouches d’encre de l’imprimante, le nombre C de commandes pass´ees pour ce jour-l`a, le temps T d’impression disponible ;
— sur chacune des C lignes suivantes, s´epar´es par des espaces : le nombre K de couleurs `a utiliser pour l’affiche, suivi de la liste des K couleurs utilis´ees.
Exemple de liste de commandes :
6 5 3 6cartouches d’encre, 5commandes pass´ees,3unit´es de temps 4 0 1 3 5 la commande0utilise4couleurs :0,1,3et5
3 0 2 3 la commande1utilise3couleurs :0,2et3 3 1 2 4 la commande2utilise3couleurs :1,2et4 1 4 la commande3utilise1couleur :4
2 1 5 la commande4utilise2couleurs :1et5
Le programme que vous devez fournir prend la forme suivante :
— sur la premi`ere ligne : un entier donnant le nombre A d’affiches `a imprimer ;
— sur chacune des A lignes suivantes, le num´ero de la commande.
Il n’est pas imp´eratif que toutes les commandes soient imprim´ees, mais il est obligatoire que le temps d’impression ne d´epasse pas T car on ne peut pas arrˆeter l’imprimante pendant l’ex´ecution d’un programme. La premi`ere impression se fait au temps 0.
Un exemple de programme fourni `a l’imprimante pour la liste pr´ec´edente de commandes est donn´e en figure 1(a).
Un tel programme est interpr´et´e par l’imprimante comme une partie de Tetris : les pi`eces ob´e¨ıssent `a la pesanteur et les affiches sont imprim´ees en fonction du sch´ema obtenu, comme repr´esent´e en figure 1.
Il s’agit bien entendu d’imprimer le plus d’affiches possibles dans le temps imparti. Malheu- reusement, le vendeur a pr´evenu M. Schlechtberg qu’en raison de son ˆage, l’imprimante a un l´eger
1
5 5affiches `a imprimer 1
4 0 3 2
(a) programme fourni `a l’impri- mante (colonne de gauche)
0 1 2 3 4 5
1 1 1
4 4
0 0 0 0
3
2 2 2
(b) traduction `a la Tetris
0 1 2 3 4 5
1 4 1 1 4
0 0 0 0
3
2 2 2
(c) ordonnancement apr`es application de la pe- santeur : les affiches1,3et4sont imprim´ees au temps0, l’affiche0au temps1et l’affiche2au temps2
Figure1 – Interpr´etation d’un programme par l’imprimante : toutes les couleurs d’une affiche sont imprim´ees en mˆeme temps.
d´efaut : on ne peut utiliser simultan´ement toutes les couleurs, sans quoi les tuyaux surchauffent et les couleurs bavent sur les affiches.
Chaque affiche imprim´ee rapporte `a M. Schlechtberg 5 euros, tandis que chaque feuille gˆach´ee parce que l’encre a bav´e lui coˆute 2 euros. Le score des programmes que vous fournirez est calcul´e suivant cette r`egle. Toutefois si le temps d’impression d´epasse T, le score est de 0. Le score obtenu pour le programme de la figure 1 est donc de 2×5−3×2 = 4 euros.
2