Skip to content

Exercices

lalBi94 edited this page Nov 7, 2026 · 1 revision

Exercices

Le mode exercice transforme un .sp3 en sujet d’entraînement avec consignes, squelette, tests et feedback.

Principe

Un exercice est un workspace normal auquel s’ajoute un manifeste exercise :

  • titre et consignes ;
  • snapshot de départ (le squelette) ;
  • tests d’entrée ou de fonction ;
  • verrou d’édition optionnel.

Les tests ne sont pas des nœuds source et n’entrent pas dans l’AST.

Côté enseignant

  1. Préparer le squelette dans le canvas, avec le point d’entrée et les fonctions attendues.
  2. Exercise → Create exercise : le squelette courant devient le starter.
  3. Edit exercise : titre, consignes.
  4. Résoudre l’exercice, puis capturer les attendus :
    • Capture entry point output exécute le point d’entrée et enregistre sa sortie ;
    • Add a function test exécute une fonction avec des arguments typés et enregistre sa valeur de retour.
  5. Reset to starter remet le squelette.
  6. Enregistrer le .sp3 et le distribuer.

Sans Reset to starter avant l’enregistrement, l’élève reçoit votre solution.

Côté élève

  1. Ouvrir le .sp3 : le panneau Exercise s’ouvre automatiquement.
  2. Travailler normalement dans le canvas.
  3. Check exécute les tests dans le Web Worker, avec annulation.
  4. Le panneau affiche réussi/échoué, attendu et obtenu.
  5. Reset to starter restaure le squelette après confirmation.
  6. Le robot réagit : succès si tout passe, erreur sinon.

Tests

kind Exécution Comparaison
entry point d’entrée sans paramètre sortie complète, ligne par ligne
function fonction nommée + args returnValue formaté, égalité stricte

Règles :

  • arguments JSON primitifs uniquement ;
  • fonction introuvable ou ambiguë → erreur de test ;
  • budget de simulation 10 000 pas ;
  • un test en erreur n’interrompt pas les suivants ;
  • résultats non enregistrés dans le fichier.

Manifeste

{
  "version": 1,
  "title": "Additionner deux entiers",
  "instructions": "Implémentez add(a, b).",
  "starter": {
    "project": { "formatVersion": 1, "id": "workspace", "modules": [], "nodes": [] },
    "presentation": {
      "cards": [],
      "camera": { "x": 0, "y": 0, "zoomLevel": 0 },
      "selected": null
    }
  },
  "tests": [
    { "id": "…", "kind": "entry", "title": "affiche ok", "expectedOutput": ["ok"] },
    { "id": "…", "kind": "function", "title": "add(2,3)", "functionName": "add", "args": [2, 3], "expectedReturn": "5" }
  ]
}

Verrou d’édition

  • Sans lock, l’exercice est éditable.
  • Protect exercise demande un mot de passe et sa confirmation.
  • Seule une empreinte PBKDF2-SHA256 est stockée : sel aléatoire, 150 000 itérations, 32 octets.
  • Verrouillé, Edit exercise devient Unlock to edit. Le déverrouillage vaut pour la session.
  • Remove protection est disponible après déverrouillage.

C’est un verrou d’interface, pas un chiffrement. Le .sp3 reste modifiable dans un éditeur de texte, et le verrou peut être retiré.

Banque de solutions

Quand tous les tests passent, Save solution apparaît. Il enregistre une copie .sp3 sous <titre>-solution.sp3, sans changer le fichier courant.

La « banque de corrections » est le dossier où l’enseignant range ces fichiers. Aucun stockage interne, aucun catalogue caché.

Limites

  • Tests lisibles et modifiables dans le JSON.
  • Pas d’anti-triche, de verrouillage des cartes, d’indices, de notation partielle, de soumission ni de comptes.
  • Un test de fonction dépend du nom de la fonction.
  • Arguments limités aux primitifs simples.
  • Un exercice ne doit pas dépendre d’un tirage aléatoire ou d’un état externe.

Clone this wiki locally