L'interface du representer


Toutes les interactions avec le site d'Exercism sont gérées automatiquement. Les representers ont une seule responsabilité : prendre une solution et en renvoyer une représentation. Consulte l'introduction pour plus d'informations.

Exécution

  • Un representer doit fournir un script exécutable. Tu trouveras plus d'informations dans le fichier docker.md.
  • Le script reçoit trois paramètres :
    • Le slug de l'exercice (par exemple two-fer).
    • Un chemin vers un répertoire contenant le ou les fichiers soumis (se terminant par une barre oblique).
    • Un chemin vers un répertoire de sortie (se terminant par une barre oblique). Ce répertoire est accessible en écriture.
  • Le script doit écrire un fichier representation.txt dans le répertoire de sortie.
  • Le script doit écrire un fichier representation.json dans le répertoire de sortie.
  • Le script doit écrire un fichier mapping.json dans le répertoire de sortie.

Temps d'exécution autorisé

Le representer dispose de 100 % des ressources de la machine pendant une fenêtre de 20 secondes par solution. Au bout de 20 secondes, le processus est arrêté et signale un dépassement de délai.

Note

On te recommande vivement de suivre notre document sur les bonnes pratiques de performance pour réduire le risque de dépassements de délai.

Format de sortie

representation.txt

Le fichier representation.txt contient une sorte de représentation canonique. Cette représentation peut prendre de nombreuses formes, mais c'est généralement un AST :

s(:class,
  s(:const, nil, :PLACEHOLDER_1), nil,
  s(:begin,
    s(:def, :PLACEHOLDER_2,
      s(:args),
      s(:begin,
        s(:lvasgn, :PLACEHOLDER_3,
          s(:str, "foo")),
        s(:lvasgn, :PLACEHOLDER_4,
          s(:str, "foo")),
        s(:return,
          s(:lvar, :PLACEHOLDER_3)))),
    s(:def, :PLACEHOLDER_3,
      s(:args),
      s(:const, nil, :PLACEHOLDER_1))))

La représentation peut aussi simplement être du code source (normalisé) :

class PLACEHOLDER_1
  def PLACEHOLDER_2
    PLACEHOLDER_3 = "foo"
    PLACEHOLDER_4 = "foo"
    return PLACEHOLDER_3
  end

  def PLACEHOLDER_3
    PLACEHOLDER_1
  end
end

mapping.json

Le fichier mapping.json associe les placeholders à leurs valeurs d'origine :

{
  "PLACEHOLDER_1": "TwoFer",
  "PLACEHOLDER_2": "two_fer",
  "PLACEHOLDER_3": "foo",
  "PLACEHOLDER_4": "bar"
}

Il est important de noter que tous les noms identiques doivent être remplacés par le même placeholder, quelle que soit leur portée.

representation.json

Le fichier representation.json contient des métadonnées :

  • version : le numéro de version du representer (par défaut 1)

Exemple :

{ "version": 2 }