رابط بازنمایی‌گر


همه‌ی تعامل‌ها با وب‌سایت Exercism به‌صورت خودکار انجام می‌شوند. هر Representer تنها یک وظیفه دارد: یک راه‌حل را بگیرد و بازنمایی‌ای از آن برگرداند. برای اطلاعات بیشتر، مقدمه را ببینید.

اجرا

  • هر Representer بهتر است یک اسکریپت اجرایی ارائه دهد. اطلاعات بیشتر را می‌توانید در فایل docker.md پیدا کنید.
  • اسکریپت سه پارامتر دریافت می‌کند:
    • اسلاگ تمرین (مثلاً two-fer).
    • مسیری به پوشه‌ای که فایل(های) ارسال‌شده در آن قرار دارد (با یک اسلش در انتها).
    • مسیری به پوشه‌ی خروجی (با یک اسلش در انتها). این پوشه قابل نوشتن است.
  • اسکریپت باید فایل representation.txt را در پوشه‌ی خروجی بنویسد.
  • اسکریپت باید فایل representation.json را در پوشه‌ی خروجی بنویسد.
  • اسکریپت باید فایل mapping.json را در پوشه‌ی خروجی بنویسد.

زمان اجرای مجاز

Representer برای هر راه‌حل، در یک بازه‌ی ۲۰ ثانیه‌ای، به ۱۰۰٪ منابع ماشین دسترسی دارد. پس از ۲۰ ثانیه، فرایند متوقف می‌شود و اتمام مهلت را گزارش می‌کند.

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 }