마법의 BF 1
시간 제한1초메모리 제한1024 MB
M0에 x, M1에 y가 들어 있을 때 M0에 x-y를 남기는 BF 프로그램을 행과 열 양쪽으로 읽어도 동작하도록 작성합니다.
문제
John은 학교에서 많은 동아시아 언어가 글을 왼쪽에서 오른쪽으로도, 위에서 아래로도 쓸 수 있다는 것을 배웠다. 그는 두 방향 모두로 올바르게 읽히는 글을 쓸 수 있는지 궁금해했다. 프로그래밍 수업 시간에도 이 생각이 계속 떠올라서, 이제 행 단위(위에서 아래, 왼쪽에서 오른쪽)로 읽을 때와 열 단위(왼쪽에서 오른쪽, 위에서 아래)로 읽을 때 모두 문제를 푸는 코드를 쓰고 싶어 한다. 실험에 쓸 언어로 BF를 골랐다.
BF 프로그램의 메모리는 왼쪽에서 오른쪽으로 번호가 매겨진 셀들로 이루어진 무한한 배열 이다 (, , \ldots). 각 셀에는 아무리 커질 수 있는 음이 아닌 정수가 들어 있다. 실행을 시작할 때 데이터 포인터는 가장 왼쪽 셀()을 가리킨다.
실행은 첫 번째 명령에서 시작한다. 명령을 하나 실행할 때마다 프로그램은 순서상 다음 명령으로 넘어간다. 명령은 여섯 가지이며, 각각 문자 하나로 표시한다.
John이 아래에 나열된 다섯 가지 과제를 푸는 마법의 BF 프로그램을 작성하도록 도와라.
각 과제의 풀이로 격자 모양의 BF 프로그램 코드를 제출한다 (). 행 단위로 읽을 때와 열 단위로 읽을 때 코드가 같을 필요는 없지만, 두 경우 모두 과제를 올바르게 풀어야 한다. 풀이 텍스트에는 >, <, +, -, [, ] 문자만 쓸 수 있으며, 격자를 빈틈없이 채워야 한다. 허용되는 모든 입력에 대해 코드는 명령을 1000만 개보다 많이 실행해서는 안 된다.
과제: 배열의 셀 과 에는 정수 와 가 들어 있고(), 나머지 모든 셀에는 0이 들어 있다. 셀 에 차이 를 기록하라.
출력에서 중요한 것은 셀 에 와 의 차이가 들어 있다는 점뿐이다(이 경우 ). 다른 셀에는 어떤 수가 들어 있어도 된다(예: , , , \ldots).