واجهة الممثّل


تتم كل التفاعلات مع موقع Exercism تلقائيًا. تقع على المُمثِّل مسؤولية واحدة: أن يأخذ حلًّا ويُرجع تمثيلًا له. راجع المقدمة لمزيد من المعلومات.

التنفيذ

  • ينبغي أن يوفّر المُمثِّل ملفًا نصيًا قابلًا للتنفيذ. تجد مزيدًا من المعلومات في ملف docker.md.
  • يتلقّى الملف النصي ثلاث معاملات:
    • المُعرّف النصي للتمرين (مثل two-fer).
    • مسار إلى مجلد يحتوي على الملف أو الملفات المُرسَلة (مع شرطة مائلة في آخره).
    • مسار إلى مجلد الإخراج (مع شرطة مائلة في آخره). هذا المجلد قابل للكتابة.
  • يجب أن يكتب الملف النصي ملف representation.txt في مجلد الإخراج.
  • يجب أن يكتب الملف النصي ملف representation.json في مجلد الإخراج.
  • يجب أن يكتب الملف النصي ملف mapping.json في مجلد الإخراج.

زمن التشغيل المسموح

يحصل المُمثِّل على 100% من موارد الجهاز خلال نافذة مدتها 20 ثانية لكل حل. بعد مرور 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: رقم إصدار المُمثِّل (القيمة الافتراضية 1)

مثال:

{ "version": 2 }