만드는 중입니다

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

BFed

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

요약
표준 입력에서 '#' 전까지 읽은 브레인퍽 프로그램을 해석한다. 30000칸 바이트 테이프에서 포인터 이동, 증감, 루프, 출력 등 일곱 명령을 처리한다.
난이도

쉬움10점 중 3점

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

문제

이 문제에서는 아주 단순한 프로그래밍 언어의 인터프리터를 작성합니다. 이 언어에는 원래 이름이 있지만, 여러 사정상 여기서는 BF라고 부르겠습니다.

BF 프로그램은 단순한 11차원 메모리 셀 배열 위에서 동작하며, "현재" 셀을 가리키는 포인터가 하나 있습니다. 표준(vanilla) BF에서 이 배열의 크기는 30 00030\,000이고, 각 셀은 88비트 정수입니다. 즉, 셀은 00부터 255255까지의 값을 저장합니다. 값이 255255인 셀을 증가시키면 00으로 순환하고, 값이 00인 셀을 감소시키면 255255로 순환합니다. 모든 셀은 처음에 00으로 초기화되며, 포인터는 처음에 가장 왼쪽 셀을 가리킵니다.

BF 프로그램은 하나의 문자열입니다. 각 문자는 다음 88개의 "명령" 중 하나일 수 있습니다.

명령설명
>포인터를 오른쪽으로 한 칸 옮긴다
<포인터를 왼쪽으로 한 칸 옮긴다
+현재 셀의 값을 11 증가시킨다
-현재 셀의 값을 11 감소시킨다
[현재 셀의 값이 00이면 짝이 맞는 ] 다음으로 건너뛴다
]현재 셀의 값이 00이 아니면 짝이 맞는 [로 되돌아간다
.현재 셀의 값을 문자로 출력한다
,문자 하나를 입력받아 현재 셀에 저장한다

, 명령은 구현하지 않아도 됩니다.

위에 나열된 처음 77개의 명령을 제외한 BF 프로그램의 모든 문자는 무시해야 합니다. 프로그램은 처리할 문자가 더 이상 없을 때 종료됩니다.

흥미롭게도, 이 명령들은 (충분한 메모리와 시간, 그리고 인내심이 있다면) 다른 어떤 프로그래밍 언어로도 할 수 있는 모든 계산을 BF 프로그램으로 수행할 수 있을 만큼 강력합니다.

입력

인터프리터는 표준 입력으로 BF 프로그램을 받습니다. 프로그램은 여러 줄에 걸쳐 있을 수 있습니다. 프로그램은 해시 기호 #로 종료됩니다.

인터프리터에는 유효하지 않은 프로그램, 비정상적으로 오래 실행되는(혹은 무한히 실행되는) 프로그램, 배열의 왼쪽이나 오른쪽 끝을 벗어나 오류를 일으키는 프로그램은 주어지지 않는다고 가정해도 됩니다. 어떤 입력도 10 00010\,000자를 넘지 않습니다.

출력

BF 프로그램을 실행한 결과 출력을 그대로 출력하세요. 프로그램이 만들어 낸 문자 외에는 아무 것도 출력하지 마세요.

예제3

  1. 예제 1

    입력
    ++[>+++++++++++++<-]
    >>>++++++++[<++++++++>-]<+
    <[->.+<]
    ++++++++++.
    #
    
    예상 출력
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    
  2. 예제 2

    입력
    [+[>uh-oh<]+]------outer[+>------inter[+>-----<]<]>>.<++++++++++.#
    
    예상 출력
    L
    
  3. 예제 3

    입력
    >+[>[--------->]---[<]>+++]>>>>>[-]>>>.>>>++.>..>------.[<]<
    ----.>>>>>>---.>>>.+++.<.<-.[<]<+.<<<+.#
    
    예상 출력
    Hello World!