마법의 BF 3
시간 제한1초메모리 제한1024 MB
N×N 격자에 BF 코드를 채워, 행 순서와 열 순서로 읽을 때 모두 가장 왼쪽 0인 셀의 번호를 M0에 쓰는 프로그램을 만듭니다.
문제
시간 제한: 1000 ms. 메모리 제한: 1024 MB.
존은 학교에서 많은 동아시아 언어가 왼쪽에서 오른쪽으로 쓰일 뿐만 아니라 위에서 아래로도 쓰일 수 있다는 것을 배웠다. 그는 양방향 모두에서 올바르게 읽히는 글을 쓸 수 있는지 궁금해했다. 프로그래밍 수업 중에도 이 문제를 계속 생각했고, 이제 행 단위로 읽었을 때(위에서 아래, 왼쪽에서 오른쪽)와 열 단위로 읽었을 때(왼쪽에서 오른쪽, 위에서 아래) 모두에서 과제를 푸는 코드를 작성하려고 한다. 실험에는 BF라는 언어를 골랐다.
BF 프로그램의 메모리는 왼쪽에서 오른쪽으로 번호가 매겨진 무한한 배열 (, , ...)이다. 각 셀에는 임의로 커질 수 있는 음이 아닌 정수가 들어 있다. 실행을 시작할 때 데이터 포인터는 가장 왼쪽 셀()을 가리킨다.
실행은 프로그램의 첫 명령부터 시작하며, 각 명령을 실행한 뒤에는 순서상 다음 명령으로 넘어간다. 이 언어에는 한 글자로 표시되는 명령이 여섯 개 있다.
아래 다섯 과제를 푸는 마법의 BF 프로그램을 작성하도록 존을 도와라.
각 과제의 풀이로 격자 형태의 BF 코드를 제출한다. 여기서 이다. 행 단위로 읽을 때와 열 단위로 읽을 때 코드가 같을 필요는 없지만, 두 경우 모두 과제를 올바르게 풀어야 한다. 풀이에는 >, <, +, -, [, ] 문자만 들어갈 수 있으며, 격자를 빈틈없이 채워야 한다. 허용되는 모든 입력에 대해 코드는 명령을 1000만 개보다 많이 실행해서는 안 된다.
과제: 0이 들어 있는 가장 왼쪽 셀의 번호를 구하여 그 번호를 셀 에 기록하라. 실행이 끝났을 때 이외의 셀에는 어떤 정수가 들어 있어도 된다. 답은 100을 넘지 않으며, 실행 시작 시점에 어떤 셀도 50보다 큰 값을 갖지 않는다고 가정해도 된다.