Befunge 는 2 차원 비전 프로그래밍 언어입니다. 기본 아이디어는 (1 문자) 명령이 2 차원 그리드에 배치된다는 것입니다. 제어 흐름은 그리드를 가로 질러지나 가면서 명령을 실행하고 화살표 ( >^<v
)에 도달하면 방향을 변경 합니다. 명령은 스택 기반입니다. 이 목록을 참조하십시오 . http://esolangs.org/wiki/Befunge 도 참조하십시오 .
Befunge-98의 사양을 사용할 수 있습니다.
문제
Befunge 프로그램을보다 간결한 표현으로 변환하는 프로그램을 작성하십시오. 예를 들어, 다음 프로그램이 인쇄됩니다 0
.
> 0 v
> @ .
^ <
이 경우 공백 행을 제거하여 프로그램의 동작을 변경하지 않고도 압축 할 수 있습니다.
>0v
>@.
^ <
보다 복잡한 변환은 명령 시퀀스를 회전 또는 미러링하고 프로그램을 압축하기 위해 불필요한 제어 흐름 명령을 제거 할 수 있습니다. 예를 들어,이 프로그램으로 :
>12345v
6
v....7<
.
.
.
@
프로그램 끝을 구멍에 넣을 수 있습니다.
>12345v
>...@ 6
^....7<
첫 번째 예에서 가능한 가장 간단한 프로그램은
>0.@
출력 프로그램이 동일한 결과를 제공하는 한 모든 변환을 사용할 수 있습니다.
입력 프로그램
입력 프로그램은 유효한 Befunge-98 프로그램입니다.
입력 프로그램이 결정적이라고 가정 할 수 있습니다. 즉, 외부 상태를 읽는 명령, 즉 사용자 입력 명령 &
및 ~
임의 화기 ?
및 자체 수정 코드 명령 p
및을 사용하지 않습니다 g
.
입력 프로그램이 종료되었다고 가정 할 수 있습니다.
채점
이것은 코드 골프가 아니라 코드 골프를 수행하는 프로그램을 작성하는 데 문제가 있습니다.
입력은 일련의 테스트 사례입니다 (위의 입력 제한을 만족하는 Befunge 프로그램). 총점은 테스트 사례에 대한 점수의 합계입니다.
각 테스트 사례에 대한 점수
점수는 출력 프로그램에서 비어 있지 않은 셀의 볼록 껍질 영역입니다. 여기서 각 셀은 직교 평면에서 격자 점이 4 개의 모서리 인 정사각형으로 처리됩니다. 예를 들어,
> v
@ <
9.5 점을 얻습니다.
프로그램이 특정 입력에서 적당한 시간과 메모리에서 종료되지 않으면 점수는 입력 프로그램의 점수입니다. 프로그램이 제 시간에 종료되지 않으면 입력 프로그램을 변경하지 않고 출력하는 시간 제한 래퍼를 간단하게 추가 할 수 있기 때문입니다.
프로그램으로 처리 한 후 테스트 케이스 프로그램의 결과가 다르거 나 종료되지 않으면 점수는 입력 프로그램의 점수에 100 점의 벌점을 더한 것입니다.
.
는 출력 정수를 의미하지만 왼쪽 상단에서 시작하면 스택에 출력 할 정수가 없습니다.
.
정수를 출력합니다. 그러나 스택에 매개 변수가 충분하지 않으면 대신 충분한 양의 0이 있다고 가정합니다. 따라서 두 번째 예제는 출력 000
합니다.
g
및 p
허용되지 않습니다 (죄송합니다, 그 잊었다; 편집).