La interfaz del representador


Todas las interacciones con el sitio web de Exercism se gestionan automáticamente. 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 fichero docker.md.
  • El script recibirá tres parámetros:
    • El slug del ejercicio (p. ej. two-fer).
    • Una ruta a un directorio que contiene el/los fichero(s) enviado(s) (con una barra al final).
    • Una ruta a un directorio de salida (con una barra al final). Se puede escribir en este directorio.
  • El script debe escribir un fichero representation.txt en el directorio de salida.
  • El script debe escribir un fichero representation.json en el directorio de salida.
  • El script debe escribir un fichero mapping.json en el directorio de salida.

Tiempo de ejecución permitido

El representador dispone del 100 % de los recursos de la máquina durante una ventana de 20 segundos por solución. Transcurridos 20 segundos, el proceso se detiene y notifica que se ha agotado el tiempo.

Note

Te recomendamos encarecidamente que sigas nuestro documento de buenas prácticas de rendimiento para reducir la probabilidad de que se agote el tiempo.

Formato de salida

representation.txt

El fichero representation.txt contiene algún tipo de representación canónica. Esta representación puede adoptar muchas formas, pero normalmente es un árbol de sintaxis abstracta:

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 puede 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 fichero mapping.json asigna a los marcadores de posición 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 sustituirse por el mismo marcador de posición, independientemente del scope.

representation.json

El fichero representation.json contiene metadatos:

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

Ejemplo:

{ "version": 2 }