রিপ্রেজেন্টার ইন্টারফেস


Exercism ওয়েবসাইটের সাথে সব ইন্টারঅ্যাকশন স্বয়ংক্রিয়ভাবে পরিচালিত হয়। রিপ্রেজেন্টারদের একটিই দায়িত্ব: একটি সলিউশন নিয়ে সেটির একটি রিপ্রেজেন্টেশন রিটার্ন করা। আরও তথ্যের জন্য ভূমিকা দেখুন।

এক্সিকিউশন

  • একটি রিপ্রেজেন্টারের একটি এক্সিকিউটেবল স্ক্রিপ্ট দেওয়া উচিত। আরও তথ্য docker.md ফাইলে পাবেন।
  • স্ক্রিপ্টটি তিনটি প্যারামিটার পাবে:
    • অনুশীলনীর স্লাগ (যেমন two-fer)।
    • জমা দেওয়া ফাইলটি বা ফাইলগুলো ধারণ করা একটি ডিরেক্টরির পাথ (শেষে একটি স্ল্যাশ সহ)।
    • একটি আউটপুট ডিরেক্টরির পাথ (শেষে একটি স্ল্যাশ সহ)। এই ডিরেক্টরিতে লেখা যায়।
  • স্ক্রিপ্টটিকে আউটপুট ডিরেক্টরিতে একটি representation.txt ফাইল লিখতে হবে।
  • স্ক্রিপ্টটিকে আউটপুট ডিরেক্টরিতে একটি representation.json ফাইল লিখতে হবে।
  • স্ক্রিপ্টটিকে আউটপুট ডিরেক্টরিতে একটি mapping.json ফাইল লিখতে হবে।

অনুমোদিত রান টাইম

প্রতিটি সলিউশনের জন্য ২০ সেকেন্ডের একটি উইন্ডোতে রিপ্রেজেন্টার ১০০% মেশিন রিসোর্স পায়। ২০ সেকেন্ড পর প্রসেসটি থামিয়ে দেওয়া হয় এবং একটি টাইম-আউট রিপোর্ট করে।

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 }