3545 : Brainfuck 시뮬레이터
- 제한시간
- 1000 ms
- 메모리제한
- 32 MB
- 해결횟수
- 3 회
- 시도횟수
- 12 회
문제
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 |