cisstech / platon

Platform for Learning and Teaching Online
Other
13 stars 3 forks source link

Automator Editor Issue #9

Closed Ofghanirre closed 1 year ago

Ofghanirre commented 1 year ago

Hello ! J'espère que tout va bien ! J'ai un problème autour des automates avec le automaton-viewer et automaton-editor. Il semblerait qu'il y ait un problème d'affichage et de gestion des données à travers un exercice platon.

Exemples : J'ai cet exercice PL:

input = :wc-automaton-editor
input.debug = true

inputSolution = :wc-automaton-editor

inputSolution.debug = true

builder==
inputSolution.automaton = {
    "states": [
      "S2",
      "S1"
    ],
    "alphabet": [
      "a",
      "b"
    ],
    "position": {
      "S1": {
        "x": 432,
        "y": 199
      },
      "S2": {
        "x": 598,
        "y": 235
      }
    },
    "transitions": [
      {
        "symbols": [
          "a"
        ],
        "toState": "S2",
        "fromState": "S1"
      },
      {
        "symbols": [
          "b"
        ],
        "toState": "S2",
        "fromState": "S2"
      }
    ],
    "initialStates": [
      "S1"
    ],
    "acceptingStates": [
      "S2"
    ]
  }

input.automaton =  {
    "states": [
      "S2",
      "S1"
    ],
    "alphabet": [
      "a",
      "b"
    ],
    "position": {
      "S1": {
        "x": 432,
        "y": 199
      },
      "S2": {
        "x": 598,
        "y": 235
      }
    },
    "transitions": [
      {
        "symbols": [
          "a"
        ],
        "toState": "S2",
        "fromState": "S1"
      },
      {
        "symbols": [
          "b"
        ],
        "toState": "S2",
        "fromState": "S2"
      }
    ],
    "initialStates": [
      "S1"
    ],
    "acceptingStates": [
      "S2"
    ]
  }
==

grader==
grade = 0
feedback = {}
feedback.type = "error"
feedback.content = "Mauvaise réponse"
if (input.automaton === inputSolution.automaton) {
  grade = 100
  feedback.type = "success"
  feedback.content = "Bonne réponse"
}
==

title==
Automaton editor
==

statement ==
Test Implementation
==

form==
{{input}}
==

solution==
{{inputSolution}}
==

Et j'obtiens les affichages suivants: image

On observe que les liens ne sont pas préservés à l'affichage

Comme on peut le voir dans le code en théorie les 2 champs automatonssont identique sur input et inputSolution, et pourtant : image

Voilà j'espère que c'est assez clair !

Ofghanirre commented 1 year ago

Il semblerait qu'il y ai un autre problème, peut être à l'origine de celui ci :

Si on définit des variables dans le before, elles sont supprimées / non accessible depuis le evaluator ! J'ai définis input.automaton depuis le before car je n'ai pas trouvé de syntaxe pour déclarer une liste d'objet directement dans une variable, et cela a peut être donc mené au problème!

Edit :

Il semblerait que ça soit les mots clés let / const qui peuvent empêcher la sauvegarde, pourquoi pas mais il manquerait cruellement une documentation / explication pour enseignant / utilisation de platon 💯 !

Sinon super travail et j'aime beaucoup l'identité du sire

mciissee commented 1 year ago

Hello, merci pour la description complète du problème.

La syntaxe de déclaration déclaration d'objet dans le langage PL est légèrement différente du JSON, il ne faut pas mettre de guillemets sur le nom des clés. Je mettrais à jour le parser pour prendre en compte les guillemets. Une PR est la bienvenue pour cela aussi 🙂

input = :wc-automaton-editor
input.debug = true

inputSolution = :wc-automaton-editor

inputSolution.debug = true

inputSolution.automaton = {
    states: [
      "S2",
      "S1"
    ],
    alphabet: [
      "a",
      "b"
    ],
    position: {
      S1: {
        x: 432,
        y: 199
      },
      S2: {
        x: 598,
        y: 235
      }
    },
    transitions: [
      {
        symbols: [
          "a"
        ],
        toState: "S2",
        fromState: "S1"
      },
      {
        symbols: [
          "b"
        ],
        toState: "S2",
        fromState: "S2"
      }
    ],
    initialStates: [
      "S1"
    ],
    acceptingStates: [
      "S2"
    ]
  }

input.automaton =  {
    states: [
      "S2",
      "S1"
    ],
    alphabet: [
      "a",
      "b"
    ],
    position: {
      S1: {
        x: 432,
        y: 199
      },
      S2: {
        x: 598,
        y: 235
      }
    },
    transitions: [
      {
        symbols: [
          "a"
        ],
        toState: "S2",
        fromState: "S1"
      },
      {
        symbols: [
          "b"
        ],
        toState: "S2",
        fromState: "S2"
      }
    ],
    initialStates: [
      "S1"
    ],
    acceptingStates: [
      "S2"
    ]
  }

grader==
grade = 0
feedback = {}
feedback.type = "error"
feedback.content = "Mauvaise réponse"
if (input.automaton === inputSolution.automaton) {
  grade = 100
  feedback.type = "success"
  feedback.content = "Bonne réponse"
}
==

title==
Automaton editor
==

statement ==
Test Implementation
==

form==
{{input}}
==

solution==
{{inputSolution}}
==
mciissee commented 1 year ago
Capture d’écran 2023-06-07 à 22 08 15
mciissee commented 1 year ago

Edit : Les variables de la sandbox node sont sauvegardés uniquement si c'est des variables globales (pas de mot clé let/const)