रेप्रेज़ेंटर इंटरफेस


Exercism वेबसाइट के साथ होने वाला सारा इंटरैक्शन अपने आप संभाला जाता है। रिप्रेज़ेंटर की एक ही ज़िम्मेदारी है: एक हल लेना और उसका रिप्रेज़ेंटेशन लौटाना। ज़्यादा जानकारी के लिए परिचय देखिए।

चलाना

  • रिप्रेज़ेंटर को एक चलाने योग्य स्क्रिप्ट देनी चाहिए। ज़्यादा जानकारी आपको docker.md फाइल में मिल जाएगी।
  • स्क्रिप्ट को तीन पैरामीटर मिलेंगे:
    • अभ्यास का स्लग (जैसे two-fer)।
    • जमा की गई फाइलों वाली डायरेक्टरी का पाथ (अंत में स्लैश के साथ)।
    • आउटपुट डायरेक्टरी का पाथ (अंत में स्लैश के साथ)। इस डायरेक्टरी में लिखा जा सकता है।
  • स्क्रिप्ट को आउटपुट डायरेक्टरी में representation.txt फाइल लिखनी चाहिए।
  • स्क्रिप्ट को आउटपुट डायरेक्टरी में representation.json फाइल लिखनी चाहिए।
  • स्क्रिप्ट को आउटपुट डायरेक्टरी में mapping.json फाइल लिखनी चाहिए।

चलने के लिए अनुमत समय

हर हल के लिए रिप्रेज़ेंटर को 20 सेकंड की अवधि तक मशीन के 100% संसाधन मिलते हैं। 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 }