Інтерфейс репрезентера


Усі взаємодії із сайтом Exercism відбуваються автоматично. У Representer є лише один обовʼязок: узяти рішення й повернути його представлення. Докладніше про це йдеться у вступі.

Виконання

  • Representer має надавати виконуваний скрипт. Докладніше можна знайти у файлі docker.md.
  • Скрипт отримуватиме три параметри:
    • Слаг вправи (наприклад, two-fer).
    • Шлях до каталогу із надісланими файлами (із завершальним слешем).
    • Шлях до каталогу вихідних даних (із завершальним слешем). Цей каталог доступний для запису.
  • Скрипт повинен записати файл representation.txt у каталог вихідних даних.
  • Скрипт повинен записати файл representation.json у каталог вихідних даних.
  • Скрипт повинен записати файл mapping.json у каталог вихідних даних.

Дозволений час виконання

На кожне рішення Representer отримує 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: номер версії Representer (типове значення: 1)

Приклад:

{ "version": 2 }