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