Un robot est placé devant une chaîne de montage. Devant lui défilent un par un des objets (au plus 40).
Sur chaque objet, il doit effectuer une action, en utilisant un outil bien précis parmi 4 outils possibles, numérotés de 0 à 3 :
0 : marteau | 1 : tourne-vis | 2 : pince | 3 : scie |
![]() |
![]() |
![]() |
![]() |
Le robot n'a cependant que deux bras et ne peut donc tenir que deux outils à la fois. Changer l'outil attaché à un bras prend du temps.
Écrivez un programme qui fait effectuer les actions successives au robot, en minimisant le nombre de fois où il doit changer l'outil d'un bras. Au départ, aucun des deux bras n'a d'outil.
Vous disposez des fonctions suivantes :
nbActionsRestantes()
: retourne le nombre d'actions que doit encore effectuer le robot.outilPourAction(numAction)
: retourne le numéro de l'outil à utiliser pour l'action à effectuer dans numAction
étapes. Ainsi, outilPourAction(0)
retourne l'outil à utiliser à la prochaine action, quelque soit le nombre d'actions déjà effectuées.changeOutil(numBras, numOutil)
: remplace l'outil du bras numBras
(0 ou 1) du robot, par l'outil numOutil
.actionneBras(numBras)
: effectue une action avec le bras numBras
(0 ou 1).Dans l'exemple ci-dessous, il reste 10 actions à effectuer, la prochaine utilise la scie. Chaque action est représentée par le dessin de l'outil à utiliser.
Vous pouvez visualiser ci-dessus l'exécution du programme suivant, qui vous montre comment vous pouvez utiliser ces commandes :
changeOutil(0, outilPourAction(0)); actionneBras(0); changeOutil(1, outilPourAction(0)); actionneBras(1); changeOutil(0, 0); actionneBras(0); changeOutil(1, 2); actionneBras(1); actionneBras(1); nbRestants = nbActionsRestantes();
Score
Votre programme sera exécuté sur plusieurs tests. Le premier sera l'exemple donné ci-dessus.
Pour chaque test :
Voici pour chaque langage le programme complet effectuant les commandes listées ci-dessus, et dont vous pouvez partir. Notez que votre programme peut afficher du texte.
#include "robot.h" int main() { changeOutil(0, outilPourAction(0)); actionneBras(0); changeOutil(1, outilPourAction(0)); actionneBras(1); changeOutil(0, 0); actionneBras(0); changeOutil(1, 2); actionneBras(1); actionneBras(1); int nbRestants = nbActionsRestantes(); return 0; }
#include "robot.h" int main() { changeOutil(0, outilPourAction(0)); actionneBras(0); changeOutil(1, outilPourAction(0)); actionneBras(1); changeOutil(0, 0); actionneBras(0); changeOutil(1, 2); actionneBras(1); actionneBras(1); int nbRestants = nbActionsRestantes(); return 0; }
open Robot;; let _ = changeOutil 0 (outilPourAction 0); actionneBras 0; changeOutil 1 (outilPourAction 0); actionneBras 1; changeOutil 0 0; actionneBras 0; changeOutil 1 2; actionneBras 1; actionneBras 1; let _nbRestants = nbActionsRestantes() in ()
import static algorea.Robot.*; class Main { static public void main(String args[]) { changeOutil(0, outilPourAction(0)); actionneBras(0); changeOutil(1, outilPourAction(0)); actionneBras(1); changeOutil(0, 0); actionneBras(0); changeOutil(1, 2); actionneBras(1); actionneBras(1); int nbRestants = nbActionsRestantes(); } }
void main() { changeOutil(0, outilPourAction(0)); actionneBras(0); changeOutil(1, outilPourAction(0)); actionneBras(1); changeOutil(0, 0); actionneBras(0); changeOutil(1, 2); actionneBras(1); actionneBras(1); int nbRestants = nbActionsRestantes(); }
from robot import * changeOutil(0, outilPourAction(0)) actionneBras(0) changeOutil(1, outilPourAction(0)) actionneBras(1) changeOutil(0, 0) actionneBras(0) changeOutil(1, 2) actionneBras(1) actionneBras(1) nbRestants = nbActionsRestantes()