A interface do representador


Todas as interações com o site do Exercism são tratadas automaticamente. O representer tem a única responsabilidade de receber uma solução e retornar uma representação dela. Veja a introdução para mais informações.

Execução

  • O representer deve fornecer um script executável. Você pode encontrar mais informações no arquivo docker.md.
  • O script receberá três parâmetros:
    • O slug do exercício (por exemplo, two-fer).
    • Um caminho para um diretório contendo o(s) arquivo(s) enviado(s) (com uma barra no final).
    • Um caminho para um diretório de saída (com uma barra no final). Esse diretório tem permissão de escrita.
  • O script deve escrever um arquivo representation.txt no diretório de saída.
  • O script deve escrever um arquivo representation.json no diretório de saída.
  • O script deve escrever um arquivo mapping.json no diretório de saída.

Tempo de execução permitido

O representer recebe 100% dos recursos da máquina por uma janela de 20 segundos por solução. Depois de 20 segundos, o processo é interrompido e reporta um timeout.

Note

Recomendamos fortemente seguir nosso documento de Boas Práticas de Desempenho para reduzir a chance de timeouts.

Formato de saída

representation.txt

O arquivo representation.txt contém algum tipo de representação canônica. Essa representação pode assumir muitas formas, mas geralmente é 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 apenas 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 arquivo mapping.json mapeia placeholders para seus valores originais:

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

É importante notar que todos os nomes idênticos devem ser substituídos pelo mesmo placeholder, independentemente do escopo.

representation.json

O arquivo representation.json contém metadados:

  • version: o número da versão do representer (o padrão é 1)

Exemplo:

{ "version": 2 }