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 dansnumAction
é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 brasnumBras
(0 ou 1) du robot, par l'outilnumOutil
.actionneBras(numBras)
: effectue une action avec le brasnumBras
(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 :
- Si votre programme n'effectue pas toutes les actions, vous aurez 0 point.
- Si le robot fait le nombre minimum possible de changements d'outil, vous aurez 100 points.
- Sinon, en partant de 100 points et sans passer en dessous de 40, vous perdrez 5 points pour chaque changement d'outil en trop par rapport à la meilleure solution.
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()
Vous devez être connecté(e) pour résoudre ce problème.
L'inscription ne prendra qu'une minute et vous pourrez alors résoudre les exercices puis faire valider automatiquement vos solutions.
Une fois identifié(e), vous pourrez demander sur cette page des conseils pour résoudre le sujet ou demander de l'aide sur le forum d'entraide.
Lorsque vous serez connecté(e), vous pourrez voir vos actions ici.
Une correction détaillée sera disponible lorsque vous aurez résolu le sujet.