A representer interfésze


Az Exercism webhelyével való minden interakció automatikusan történik. A representereknek egyetlen feladata van: átvesznek egy megoldást, és visszaadják annak reprezentációját. További információért lásd a bevezetőt.

Végrehajtás

  • A representernek biztosítania kell egy futtatható szkriptet. További információkat a docker.md fájlban találsz.
  • A szkript három paramétert kap:
    • A feladat slugját (pl. two-fer).
    • Egy könyvtár elérési útját, amely a beküldött fájlt vagy fájlokat tartalmazza (záró perjellel).
    • Egy kimeneti könyvtár elérési útját (záró perjellel). Ez a könyvtár írható.
  • A szkriptnek létre kell hoznia egy representation.txt fájlt a kimeneti könyvtárban.
  • A szkriptnek létre kell hoznia egy representation.json fájlt a kimeneti könyvtárban.
  • A szkriptnek létre kell hoznia egy mapping.json fájlt a kimeneti könyvtárban.

Rendelkezésre álló futási idő

A representer megoldásonként egy 20 másodperces időablakra a gép erőforrásainak 100%-át kapja. 20 másodperc után a folyamat leáll, és időtúllépést jelez.

Note

Nagyon ajánljuk, hogy kövesd a teljesítményre vonatkozó bevált gyakorlatokról szóló dokumentumunkat, hogy csökkentsd az időtúllépések esélyét.

Kimeneti formátum

representation.txt

A representation.txt fájl valamilyen kanonikus reprezentációt tartalmaz. Ez a reprezentáció sokféle formát ölthet, de általában egy 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))))

A reprezentáció lehet egyszerűen (normalizált) forráskód is:

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

A mapping.json fájl a helyőrzőket rendeli hozzá az eredeti értékeikhez:

{
  "PLACEHOLDER_1": "TwoFer",
  "PLACEHOLDER_2": "two_fer",
  "PLACEHOLDER_3": "foo",
  "PLACEHOLDER_4": "bar"
}

Fontos megjegyezni, hogy minden azonos nevet ugyanazzal a helyőrzővel kell helyettesíteni, tekintet nélkül a scope-ra.

representation.json

A representation.json fájl metaadatokat tartalmaz:

  • version: a representer verziószáma (alapértelmezésben 1)

Példa:

{ "version": 2 }