Exercismのウェブサイトとのやり取りは、すべて自動で行われます。 Representerの役割はただ1つ、解答を受け取り、そのrepresentationを返すことだけです。 詳しくははじめにを参照してください。
two-fer)。representation.txtファイルを書き込まなければなりません。representation.jsonファイルを書き込まなければなりません。mapping.jsonファイルを書き込まなければなりません。Representerは、1つの解答につき20秒間、マシンのリソースを100%使うことができます。 20秒を過ぎると、プロセスは停止され、タイムアウトとして報告されます。
タイムアウトになる可能性を減らすために、パフォーマンスのベストプラクティスに従うことを強くおすすめします。
representation.txtファイルには、何らかの標準化されたrepresentationが入ります。このrepresentationはさまざまな形をとりますが、通常は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))))
representationは、(正規化された)ソースコードそのものでもかまいません:
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ファイルは、プレースホルダーを元の値に対応づけます:
{
"PLACEHOLDER_1": "TwoFer",
"PLACEHOLDER_2": "two_fer",
"PLACEHOLDER_3": "foo",
"PLACEHOLDER_4": "bar"
}
重要なのは、スコープに関係なく、同じ名前はすべて同じプレースホルダーに置き換えなければならないという点です。
representation.jsonファイルにはメタデータが入ります:
version:Representerのバージョン番号(デフォルトは1)例:
{ "version": 2 }