만드는 중입니다

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

마법 BF 2

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

요약
행 단위로 읽든 열 단위로 읽든 M0의 값 x를 7로 나눈 나머지로 바꾸는 N×N 크기의 BF 코드를 작성합니다.
난이도

어려움10점 중 8점

유형
구현, 수학
정답자
아직 제출이 없습니다

문제

John은 학교에서 많은 동아시아 언어가 글을 왼쪽에서 오른쪽으로 쓸 수도 있고 위에서 아래로 쓸 수도 있다고 배웠다. 그는 한 글을 두 방향으로 모두 읽을 수 있게 쓸 수 있는지가 특히 궁금했다. 프로그래밍 수업 시간에도 이 생각이 떠나지 않아서, 이제 행 단위(위에서 아래, 왼쪽에서 오른쪽)로 읽을 때와 열 단위(왼쪽에서 오른쪽, 위에서 아래)로 읽을 때 모두 과제를 푸는 코드를 쓰려고 한다. 그는 실험용 언어로 BF를 골랐다.

BF 프로그램의 메모리는 왼쪽에서 오른쪽으로 번호가 붙은 셀 M0M_0, M1M_1, \ldots 로 이루어진 무한한 배열 MM이다. 각 셀에는 아주 커질 수 있는 음이 아닌 정수가 들어 있다. 실행을 시작할 때 데이터 포인터는 가장 왼쪽 셀 M0M_0을 가리킨다.

프로그램 실행은 첫 번째 명령에서 시작하며, 보통 명령을 실행한 뒤에는 다음 명령으로 넘어간다. 명령어는 모두 여섯 가지이고 각각 한 글자로 표시된다.

명령의미
>데이터 포인터를 오른쪽으로 한 칸 옮긴다.
<데이터 포인터가 가장 왼쪽 셀을 가리키고 있지 않으면 왼쪽으로 한 칸 옮긴다. 그렇지 않으면 아무 일도 하지 않는다.
+데이터 포인터가 가리키는 셀의 값을 1 증가시킨다.
-현재 셀의 값이 양수이면 1 감소시킨다. 그렇지 않으면 아무 일도 하지 않는다.
[데이터 포인터가 가리키는 셀의 값이 0이면 대응하는 ] 기호까지 앞으로 점프한다. 그렇지 않으면 아무 일도 하지 않는다.
]데이터 포인터가 가리키는 셀의 값이 0이 아니면 대응하는 [ 기호로 뒤로 점프한다. 그렇지 않으면 아무 일도 하지 않는다.

과제마다 N×NN \times N 격자 모양의 BF 프로그램 코드를 제출한다. 단, 1≤N≤10001 \le N \le 1000이다. 행으로 읽을 때와 열로 읽을 때 코드가 같을 필요는 없지만, 두 경우 모두 과제를 정확히 풀어야 한다. 해답은 '>', '<', '+', '-', '[', ']' 문자만 포함할 수 있고 격자를 빈틈없이 채워야 한다. 허용되는 모든 입력에 대해 코드는 명령을 1000만 번 넘게 실행하면 안 된다.

과제: 셀 M0M_0에 정수 xx(0≤x≤2000 \le x \le 200)가 들어 있고 다른 모든 셀에는 0이 들어 있다. xx를 7로 나눈 나머지를 셀 M0M_0에 기록하라. 실행이 끝난 뒤 M0M_0 이외의 셀에는 어떤 수가 있어도 된다.

예제1

  1. 예제 1

    입력
    0
    
    예상 출력
    0