A interface do representador


Todas as interações com o site do Exercism são tratadas automaticamente. Os Representers têm uma única responsabilidade: receber uma solução e devolver uma representação da mesma. Consulta a introdução para mais informações.

Execução

  • Um Representer deve fornecer um script executável. Encontras mais informações no ficheiro docker.md.
  • O script recebe três parâmetros:
    • O slug do exercício (por exemplo, two-fer).
    • O caminho para um diretório que contém os ficheiros submetidos (com uma barra no final).
    • O caminho para um diretório de saída (com uma barra no final). É possível escrever neste diretório.
  • O script tem de escrever um ficheiro representation.txt no diretório de saída.
  • O script tem de escrever um ficheiro representation.json no diretório de saída.
  • O script tem de escrever um ficheiro mapping.json no diretório de saída.

Tempo de execução permitido

O Representer dispõe de 100% dos recursos da máquina durante 20 segundos por solução. Ao fim de 20 segundos, o processo é interrompido e assinala um timeout.

Note

Recomendamos vivamente que sigas o nosso documento de Boas Práticas de Desempenho para reduzir a probabilidade de timeouts.

Formato da saída

representation.txt

O ficheiro representation.txt contém uma qualquer representação canónica. Esta representação pode assumir várias formas, mas normalmente é uma 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))))

A representação também pode ser simplesmente código-fonte (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

O ficheiro mapping.json associa cada marcador de posição ao respetivo valor original:

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

É importante notar que todos os nomes idênticos têm de ser substituídos pelo mesmo marcador de posição, independentemente do âmbito.

representation.json

O ficheiro representation.json contém metadados:

  • version: o número da versão do Representer (o valor predefinido é 1)

Exemplo:

{ "version": 2 }