La interfaz del representador


Todas las interacciones con el sitio web de Exercism se gestionan de forma automática. Los representadores tienen la única responsabilidad de tomar una solución y devolver una representación de ella. Consulta la introducción para obtener más información.

Ejecución

  • Un representador debe proporcionar un script ejecutable. Puedes encontrar más información en el archivo docker.md.
  • El script recibirá tres parámetros:
    • El slug del ejercicio (por ejemplo, two-fer).
    • Una ruta a un directorio que contiene los archivos enviados (con una barra diagonal final).
    • Una ruta a un directorio de salida (con una barra diagonal final). Este directorio es escribible.
  • El script debe escribir un archivo representation.txt en el directorio de salida.
  • El script debe escribir un archivo representation.json en el directorio de salida.
  • El script debe escribir un archivo mapping.json en el directorio de salida.

Tiempo de ejecución permitido

El representador obtiene el 100 % de los recursos de la máquina durante una ventana de 20 segundos por solución. Después de 20 segundos, el proceso se detiene y reporta un timeout.

Note

Te recomendamos seguir nuestro documento de buenas prácticas de rendimiento para reducir la probabilidad de timeouts.

Formato de salida

representation.txt

El archivo representation.txt contiene algún tipo de representación canónica. Esta representación puede tomar muchas formas, pero por lo general es 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 representación también podría ser simplemente código fuente (normalizado):

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

El archivo mapping.json asigna los marcadores de posición a sus valores originales:

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

Es importante tener en cuenta que todos los nombres idénticos deben reemplazarse por el mismo marcador de posición, sin importar el ámbito.

representation.json

El archivo representation.json contiene metadatos:

  • version: el número de versión del representador (por defecto es 1)

Ejemplo:

{ "version": 2 }