만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

페블링 오도미터 2

시간 제한1초메모리 제한512 MB

요약
x가 y 이하이면 (0, 0), 아니면 (0, 1) 칸에서 멈추고 두 칸의 조약돌 개수를 그대로 남기는 프로그램을 작성합니다.
난이도

어려움10점 중 8점

유형
시뮬레이션, 구현
정답자
아직 제출이 없습니다

동작 격자

오도미터는 256×256256 \times 256 개의 단위 칸으로 이루어진 가상의 정사각형 격자 위를 움직인다. 각 칸에는 조약돌을 최대 15개까지 놓을 수 있으며, (행, 열) 좌표 쌍으로 구분한다. 각 좌표는 0, ..., 255 범위에 있다. 칸 (i,j)(i, j)에 인접한 칸은 (존재하는 경우) (i−1,j)(i - 1, j), (i+1,j)(i + 1, j), (i,j−1)(i, j - 1), (i,j+1)(i, j + 1)이다. 첫 번째 행이나 마지막 행, 또는 첫 번째 열이나 마지막 열에 있는 칸을 가장자리라고 부른다. 오도미터는 항상 (0,0)(0, 0) 칸(북서쪽 모서리)에서 북쪽을 바라보며 출발한다.

기본 명령

오도미터는 프로그램에 적힌 순서대로 명령을 실행한다. 한 줄에는 명령을 최대 하나만 쓸 수 있다. 빈 줄은 무시한다. # 기호는 주석을 시작하며, 그 뒤부터 줄 끝까지의 글자는 무시한다. 오도미터가 프로그램의 끝에 도달하면 실행이 종료된다.

  • left: 왼쪽으로 90도 회전(반시계 방향)하며, 현재 칸에 그대로 머문다.
  • right: 오른쪽으로 90도 회전(시계 방향)하며, 현재 칸에 그대로 머문다.
  • move: 바라보는 방향으로 한 칸 앞으로 이동한다. 그 방향의 가장자리에 이미 도달했다면 이 명령은 아무 효과가 없다.
  • get: 현재 칸에서 조약돌을 하나 가져간다. 칸에 조약돌이 없으면 아무 효과가 없다.
  • put: 현재 칸에 조약돌을 하나 놓는다. 칸에 이미 15개가 있으면 아무 효과가 없다. 오도미터의 조약돌은 떨어지지 않는다.
  • halt: 실행을 종료한다.

레이블, 가장자리, 조약돌

레이블은 대소문자를 구분하는 문자열이며, 최대 128자까지 a부터 z, A부터 Z, 0부터 9 사이의 기호로 이루어진다. 아래 설명에서 L은 유효한 레이블 아무것이나 가리킨다.

  • L:은 프로그램에서 레이블 L의 위치를 선언한다. 선언된 레이블은 모두 서로 달라야 한다. 선언 자체는 오도미터에 영향을 주지 않는다.
  • jump L은 조건 없이 레이블 L이 있는 줄로 넘어간다.
  • border L은 오도미터가 가장자리에 있으면서 격자 바깥쪽을 향할 때, 즉 move를 해도 효과가 없을 때 레이블 L이 있는 줄로 넘어간다. 그렇지 않으면 실행을 정상적으로 이어 간다.
  • pebble L은 현재 칸에 조약돌이 하나 이상 있으면 레이블 L이 있는 줄로 넘어간다. 그렇지 않으면 실행을 정상적으로 이어 간다.

프로그램 크기와 실행 길이

프로그램의 크기는 그 안에 있는 명령의 개수이다. 레이블 선언, 주석, 빈 줄은 세지 않는다. 실행 길이는 수행된 단계의 수이다. 명령이 실행될 때마다 효과가 있었는지와 관계없이 한 단계로 센다. 레이블 선언, 주석, 빈 줄은 단계로 세지 않는다.

과제

시작할 때 (0,0)(0, 0) 칸에는 xx개, (0,1)(0, 1) 칸에는 yy개의 조약돌이 있다. 나머지 칸은 모두 비어 있다. x≤yx \le y이면 오도미터가 (0,0)(0, 0) 칸에서, 그렇지 않으면 (0,1)(0, 1) 칸에서 끝나는 프로그램을 작성하라. 끝났을 때 (0,0)(0, 0) 칸에는 정확히 xx개, (0,1)(0, 1) 칸에는 정확히 yy개의 조약돌이 있어야 한다. 어떤 칸에도 조약돌이 15개를 넘게 놓일 수 없다는 점에 유의하라.

제한

프로그램 크기는 200 이하여야 한다. 실행 길이는 2000 이하여야 한다.

예제1

  1. 예제 1

    입력
    0 0
    
    예상 출력
    right
    L:
    pebble A
    jump D1
    A:
    move
    pebble B
    jump D2
    B:
    get
    right
    move
    put
    right
    right
    move
    left
    move
    get
    left
    move
    put
    right
    right
    move
    right
    jump L
    D1:
    right
    move
    P1:
    pebble P1a
    jump P1d
    P1a:
    get
    right
    right
    move
    put
    right
    right
    move
    jump P1
    P1d:
    left
    move
    Q1:
    pebble Q1a
    jump Q1d
    Q1a:
    get
    left
    move
    put
    right
    right
    move
    left
    jump Q1
    Q1d:
    left
    move
    left
    move
    halt
    D2:
    left
    left
    move
    left
    move
    P2:
    pebble P2a
    jump P2d
    P2a:
    get
    right
    right
    move
    put
    right
    right
    move
    jump P2
    P2d:
    left
    move
    Q2:
    pebble Q2a
    jump Q2d
    Q2a:
    get
    left
    move
    put
    right
    right
    move
    left
    jump Q2
    Q2d:
    left
    move
    halt