همهی تعاملها با وبسایت Exercism بهصورت خودکار انجام میشوند. هر Representer تنها یک وظیفه دارد: یک راهحل را بگیرد و بازنماییای از آن برگرداند. برای اطلاعات بیشتر، مقدمه را ببینید.
two-fer).representation.txt را در پوشهی خروجی بنویسد.representation.json را در پوشهی خروجی بنویسد.mapping.json را در پوشهی خروجی بنویسد.Representer برای هر راهحل، در یک بازهی ۲۰ ثانیهای، به ۱۰۰٪ منابع ماشین دسترسی دارد. پس از ۲۰ ثانیه، فرایند متوقف میشود و اتمام مهلت را گزارش میکند.
اکیداً توصیه میکنیم برای کاهش احتمال اتمام مهلت، سند بهترین شیوههای کارایی را دنبال کنید.
فایل 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 جانگهدارها را به مقادیر اصلیشان نگاشت میکند:
{
"PLACEHOLDER_1": "TwoFer",
"PLACEHOLDER_2": "two_fer",
"PLACEHOLDER_3": "foo",
"PLACEHOLDER_4": "bar"
}
نکتهی مهم این است که همهی اسمهای یکسان، بدون توجه به حوزه، باید با جانگهدار یکسانی جایگزین شوند.
فایل representation.json فراداده را در خود دارد:
version: شمارهی نسخهی Representer (بهطور پیشفرض 1)مثال:
{ "version": 2 }