ICPC 2005 Greater New York Programming Contest E번- Brainfuck 시뮬레이터 > 문제은행 : 정보올림피아드&알고리즘




3545 : Brainfuck 시뮬레이터

제한시간
1000 ms   
메모리제한
32 MB   
해결횟수
14 회   
시도횟수
40 회   

문제

Brainfuck은 Urban Müller가 1993년에 만든 프로그래밍 언어이다. Urban Müller는 역사상 가장 작은 튜링 완전 언어를 만들기 위해 이 언어를 만들었으며, 프로그래머에게 도전적이고 즐거운 언어가 될 수 있도록 디자인되었다. 

 

이 언어는 크기가 32768인 바이트 배열과, 배열의 값 하나를 가리키고 있는 포인터를 가지고 있다. 프로그램을 실행하기 전에는 배열의 값은 0으로 초기화 되어 있고, 포인터는 배열의 첫 원소를 가리키고 있다.

 

이 언어로 쓰인 프로그램은 7개의 글자로 이루어져 있으며, 각 글자는 하나의 명령을 의미한다. 글자 7개와 이에 대응되는 명령은 다음과 같다. (원래 8가지 명령어를 가지고 있지만, 문제를 위해 하나를 지웠다)

 

‘>’: 포인터를 한 칸 오른쪽으로 이동시킨다. 만약 포인터가 배열의 끝을 가리키고 있다면, 대신 처음으로 이동한다.

‘<’: 포인터의 한 칸 왼쪽으로 이동시킨다. 만약 포인터가 배열의 처음을 가리키고 있다면, 대신 끝으로 이동한다.

‘+’: 포인터가 가리키는 배열의 값을 증가시킨다. 만약 배열의 값이 255였다면 대신 0이 된다.

‘-’: 포인터가 가리키는 배열의 값을 감소시킨다. 만약 배열의 값이 0이었다면 대신 255가 된다.

‘.’: 포인터가 가리키는 값을 ASCII문자로 출력한다.

‘[‘: 포인터가 가리키는 값이 0이면, 짝이 되는 뒤쪽의 ‘]’로 이동하여 그 이후를 실행한다.

‘]’: 포인터가 가리키는 값이 0이 아니면, 짝이 되는 앞쪽의 ‘[‘로 이동하여 그 이후를 실행한다.

 

프로그램에서 ‘[‘와 ‘]’만 남겼을 때 올바른 괄호 문자열이 아닌 경우 “컴파일 에러”이다.

Brainfuck 프로그램이 주어졌을 때, 이 프로그램의 출력을 출력하는 프로그램을 작성하시오.

 


입력형식

첫째 줄부터 Brainfuck 언어로 작성된 프로그램이 주어진다. 프로그램은 한줄 또는 그 이상으로 구성되어 있다. 프로그램에 올바르지 않은 문자 (<>+-.[]를 제외한 모든 문자)가 있다면, 이는 무시하고 넘어가야 한다. %는 주석을 의미하며, %가 나온 뒤에 나오는 해당 줄의 문자는 모두 무시한다. 프로그램의 최대 명령어 개수는 128000개이다.


출력형식

프로그램의 실행 결과를 출력한다. 만약 [나 ]가 짝이 맞지 않을 대는 COMPILE ERROR를 출력하면 된다.


입력 예

++++++++[>+++++++++ % hello-world.
<-]>.<+++++[>++++++<-]>-.+++++++..
+++.<++++++++[>>++++<<-]>>.<<++++[>
------<-]>.<++++[>++++++<-]>.+++.
------.--------.>+.

출력 예

Hello World!

입력 예

+++[>+++++++[.

출력 예

COMPILE ERROR

입력 예

+ + + + + +++++++++++++++++++++>
++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
+< [ >.+<- ]

출력 예

ABCDEFGHIJKLMNOPQRSTUVWXYZ


경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호

TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com

Copyrightⓒ 2010 jungol. All right reserved.

TOP