Representer 인터페이스


Exercism 웹사이트와의 모든 상호작용은 자동으로 처리돼요. Representer는 솔루션을 받아 그 표현을 반환하는 단 하나의 책임만 가져요. 더 자세한 내용은 소개를 참고해요.

실행

  • Representer는 실행 가능한 스크립트를 제공해야 해요. 자세한 내용은 docker.md 파일에서 확인할 수 있어요.
  • 스크립트는 세 개의 매개변수를 받아요:
    • 연습 문제의 슬러그예요 (예: two-fer).
    • 제출한 파일이 들어 있는 디렉터리의 경로예요 (끝에 슬래시가 붙어요).
    • 출력 디렉터리의 경로예요 (끝에 슬래시가 붙어요). 이 디렉터리에는 쓸 수 있어요.
  • 스크립트는 출력 디렉터리에 representation.txt 파일을 써야 해요.
  • 스크립트는 출력 디렉터리에 representation.json 파일을 써야 해요.
  • 스크립트는 출력 디렉터리에 mapping.json 파일을 써야 해요.

허용 실행 시간

Representer는 솔루션마다 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: Representer의 버전 번호예요 (기본값은 1)

예:

{ "version": 2 }