表示器接口


与 Exercism 网站的所有交互都是自动处理的。 Representer 的唯一职责是接收一份解答,并返回它的表示。 更多信息请参阅简介。

执行

  • Representer 应该提供一个可执行脚本。更多信息请参见 docker.md 文件。
  • 脚本会接收三个参数:
    • 练习的 slug(例如 two-fer)。
    • 指向包含提交文件的目录的路径(末尾带斜杠)。
    • 指向输出目录的路径(末尾带斜杠)。该目录可写。
  • 脚本必须把 representation.txt 文件写入输出目录。
  • 脚本必须把 representation.json 文件写入输出目录。
  • 脚本必须把 mapping.json 文件写入输出目录。

允许的运行时间

每份解答,Representer 都能在 20 秒的时间窗口内获得 100% 的机器资源。 20 秒后,进程会被终止并报告超时。

Note

我们强烈建议遵循我们的性能最佳实践文档,以降低超时的可能性。

输出格式

representation.txt

representation.txt 文件包含某种规范表示。这种表示可以有多种形式,但通常是 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))))

这种表示也可以只是(规范化后的)源代码:

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

mapping.json 文件把占位符映射到它们的原始值:

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

需要注意的是,所有相同的名称都必须替换为同一个占位符,无论它们处于什么作用域。

representation.json

representation.json 文件包含元数据:

  • version:Representer 的版本号(默认为 1)

示例:

{ "version": 2 }