아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

마법의 주문

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

요약
변수와 배열, 점프, 연산, 출력을 포함한 최대 200줄 주문 프로그램을 해석해 출력 결과를 재현합니다.
난이도

보통10점 중 5점

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

문제

마법사의 일에 끼어들지 마라. 그들은 속을 알 수 없고 쉽게 노한다.

길도르

간달프는 사우론과 싸우려고 날마다 비술을 다룬다. 룬을 잘못 늘어놓으면 아무도 뜻하지 않은 일이 벌어지므로, 간달프는 제자인 너에게 주문을 외우기 전에 그 결과를 알려 주는 장치를 만들라고 맡겼다.

주문은 한 줄에 하나씩 적힌 명령의 나열이다. 명령은 요정어로 쓰여 있고, 간달프가 아래에 뜻을 적어 두었다.

힘의 단어뜻동작
arth [lbl]지역[lbl]로 이동
pen [var1] [var2] [lbl]더 작음[var1] < [var2]이면 [lbl]로 이동
muindor [var1] [var2] [lbl]형제[var1] == [var2]이면 [lbl]로 이동
sad [lbl]장소[lbl] 레이블
tangado [var]세우다[var]를 정수로 선언하고 0으로 설정
ost [var1] [var2]요새[var1]을 크기 [var2]인 정수 배열로 선언
teithant [string]쓰다[string]과 줄바꿈을 표준 출력에 출력
canad [var]외치다[var]와 줄바꿈을 표준 출력에 출력
anno [var1] [var2]주다var1 := var2
aderthad [var1] [var2]다시 만나다var1 := var1 + var2
adlanna [var1] [var2]기울다var1 := var1 / var2 (정수 나눗셈)
adlegi [var1] [var2]풀어 주다var1 := var1 - var2
athrado [var1] [var2]건너다var1 := var1 * var2
awarthad버리다종료

몇 가지 짚어 둔다.

  • [var]는 다음 세 가지 중 하나다.
    1. 정수 상수. 예를 들어 6이다. 정수 상수에 값을 넣으려 하면 아무 일도 일어나지 않고 다음 명령으로 넘어간다.
    2. tangado로 선언한 변수. 예를 들어 shadowfax다. C나 Java의 int처럼 다룬다.
    3. ost로 선언한 배열의 칸. 예를 들어 moria[4]다. 첨자 자리에도 [var]가 오므로 첨자는 중첩된다.
  • [string]은 큰따옴표로 감싼 문자열 상수다. 안에 큰따옴표와 줄바꿈은 들어가지 않는다.
  • [lbl]은 레이블이다. 레이블 이름은 변수 이름과 같을 수 있지만 둘은 아무 관계가 없다. 레이블은 미리 선언하지 않으므로, 해석하기 전에 주문 전체를 훑어 레이블 위치를 찾아 두면 편하다.
  • arth를 실행하면 짝이 되는 sad 바로 다음 명령부터 이어서 해석한다. arth가 가리키는 sad가 주문의 뒤쪽에 있어도 된다.
  • sad는 변수를 바꾸지 않고 arth, pen, muindor가 뛰어올 자리만 표시한다.
  • ost로 만든 배열은 모든 칸이 0으로 초기화된다.
  • 변수 이름과 레이블 이름은 영문 대소문자로만 이루어진다.
  • 나눗셈은 0 쪽으로 버린다. 7 / 2는 3이고 -7 / 2는 -3이다.
  • 마지막 명령까지 실행하고 뒤에 명령이 없으면 awarthad와 똑같이 주문이 끝난다.

제한:

  • 주문의 명령 줄은 200줄 이하다.
  • 배열의 크기는 1 이상 1000 이하다.
  • 주문은 명령을 100000번 이하 실행하고 끝난다.
  • 주문이 다루는 모든 값은 −231-2^{31} 이상 231−12^{31}-1 이하다.
  • 선언하지 않은 변수를 읽거나, 배열 밖의 칸을 건드리거나, 0으로 나누거나, 없는 레이블로 뛰는 주문은 주어지지 않는다.

입력

주문 하나가 한 줄에 명령 하나씩 주어진다. 마지막 명령 다음 줄에는 END만 적힌 줄이 온다.

출력

주문이 출력하는 내용을 그대로 출력한다. 실행된 teithant와 canad마다 한 줄씩, 실행된 순서대로 출력한다.

예제3

  1. 예제 1

    입력
    tangado x
    anno x 3
    aderthad x 2
    canad x
    adlanna x 2
    canad x
    adlegi x 1
    canad x
    athrado x 3
    canad x
    tangado i
    ost sequence 10
    anno sequence[0] 0
    anno sequence[sequence[0]] 0
    anno sequence[2] 1
    anno sequence[3] 1
    anno sequence[4] 1
    anno sequence[5] 1
    anno sequence[6] 0
    anno sequence[7] 3
    anno sequence[8] 4
    anno sequence[9] 5
    sad loop
    muindor i 10 end
    muindor sequence[i] 0 ttthti
    muindor sequence[i] 1 gar
    muindor sequence[i] 2 ggar
    muindor sequence[i] 3 wdys
    muindor sequence[i] 4 th
    muindor sequence[i] 5 ti
    muindor sequence[i] 6 tmwhg
    muindor sequence[i] 7 abom
    muindor sequence[i] 8 sfh
    muindor sequence[i] 9 lnancb
    sad ttthti
    teithant "They're taking the hobbits to Isengard!"
    arth pool
    sad gar
    teithant "Gard"
    arth pool
    sad ggar
    teithant "Ga-gard"
    arth pool
    sad wdys
    teithant "What did you say?"
    arth pool
    sad th
    teithant "The hobbits"
    arth pool
    sad ti
    teithant "To Isengard!"
    arth pool
    sad tmwhg
    teithant "Tell me, where is Gandalf, for I much desire to speak with him."
    arth pool
    sad abom
    teithant "A balrog of Morgoth"
    arth pool
    sad sfh
    teithant "Stupid fat hobbit!"
    arth pool
    sad lnancb
    teithant "Leave now, and never come back!"
    arth pool
    sad pool
    aderthad i 1
    arth loop
    sad end
    awarthad
    END
    
    예상 출력
    5
    2
    1
    3
    They're taking the hobbits to Isengard!
    They're taking the hobbits to Isengard!
    Gard
    Gard
    Gard
    Gard
    They're taking the hobbits to Isengard!
    What did you say?
    The hobbits
    To Isengard!
    
  2. 예제 2

    입력
    teithant "Hello World"
    awarthad
    END
    
    예상 출력
    Hello World
    
  3. 예제 3

    입력
    tangado shadowfax
    anno shadowfax 4
    aderthad shadowfax 3
    pen shadowfax 6 mordor
    teithant "to Rohan!"
    awarthad
    sad mordor
    teithant "to Mordor!"
    awarthad
    END
    
    예상 출력
    to Rohan!