Befunge- 37 x 5 = 185 38 x 3 = 114 자
Befunge에는 부동 소수점 지원이 없으므로 정수로 제한됩니다.
&v /& _ #`&# "-"$# -#< v
>~:0`!#v_:" "`! #v_:","`#^_"*"`#v_&*>
^ ># $ .# @#< >&+
설명
Befunge 의 가장 큰 특징은 대부분의 언어와 같이 선형적인 명령어 세트가 아니라는 점입니다. 제어는 모든 방향으로 흐를 수있는 단일 문자 명령어의 2 차원 격자입니다.
첫 번째는 &단순히 첫 번째 숫자를 입력합니다. v하고 >다음 두 번째 행의 주 경로로 리디렉션 제어.
~:0`!#v_
이것은 문자 ( ~)를 입력하고 그것을 복제 ( :)하고 스택에 0을 푸시 하고 ( ) 0상위 두 요소를 팝하고 두 번째 요소가 첫 번째 요소보다 큰지를 결정합니다 ( ` ````를 사용하여 얻을 수 없다는 것에 놀랐습니다. 코드 역 따옴표. ), 반전 상부 부재 (의 truthiness는 !그 아래, 그렇지 않으면 0 인 경우), 그 다음 바로 진행한다 ( #v_).
기본적으로 입력이 -1더 이상 입력을 나타내지 않는지 확인합니다 .
># $ .# @
입력이 -1복제 된 입력 값을 버린 경우 ( $) 스택의 맨 위가 정수 ( .) 로 출력되고 프로그램이 중지됩니다 ( @).
:" "`! #v_
그렇지 않으면 입력이 공백보다 작거나 같은지 판별하기 위해 유사한 프로세스가 반복됩니다. 공간이 있으면 제어 장치가 내려 가고 그렇지 않으면 제어 장치 헤드가 올바르게 작동합니다.
^ ># $ .# @#<
공백이면 왼쪽 ( <)으로 리디렉션됩니다 . 프로그램 정지 ( @), 출력 ( .) 및 오른쪽 방향 재 지정 ( >)은 모두 다음을 사용하여 건너 뜁니다 #. 그러나 폐기는 스택에서 공간을 제거하기 위해 실행됩니다. 마지막으로 다음 실행을 시작하도록 리디렉션됩니다 ( ^).
:","`#^_
공간이 아닌 경우 동일한 프로세스를 사용하여 각각 오른쪽 또는 위쪽 [+, *]또는 [-, \]위쪽 으로 분할되어 분할됩니다 .
>~ "*"`#v_&*>
^ >&+
왜냐하면 [+, *]그것이 a +인지 또는 a 인지를 결정하기 위해 다시 분할되기 때문입니다 *. 경우 +는 아래로 지시되어 그 다음 번호를 입력 (이다 &) 그들은 (추가 +컨트롤이 다음 주위에 감싸고 다음 문자에 대한 기본 경로까지 재 지정됩니다). 그렇다면 *입력 ( &)과 곱하기 ( *)를 직접 감 쌉니다.
/& _ #`&# "-"$# -#<
들어 [-, \]는 바로 제목을 시작 떠났다. 는 #뒤에 나오는 문자를 건너 뛰므로 초기 경로는 "-"`_단순히 경로 인지 -또는 아닌지를 결정합니다 /. 그렇다면 /계속 입력 ( &) 및 나누기 ( /)로 남겨 둡니다 . 만약 그렇다면 -그것은 자신을 실행하므로 다시 문자를 건너 뛰고 바로 헤드 &"-"$-(숫자가 입력 결과 &)에 -문자가 다음 폐기 스택 (푸시되고 "-"$), 그리고 차분 산출되는 ( -). 그런 다음 컨트롤이 기본 경로로 다시 리디렉션됩니다.