?({{&2'2':{):!/)'*/
온라인으로 사용해보십시오.
설명
이것은 여전히 CJam 및 Labyrinth 답변에서 사용한 것과 동일한 계산이지만 Hexagony의 특수 메모리 모델로 인해 계산을 19 바이트로 짜는 것이 약간 까다 롭습니다. 옆길이 3 육각형).
내 미로 답변과 마찬가지로 이것은 0으로 나누기 오류로 종료됩니다.
펼쳐진 코드는 다음과 같습니다.
내가 말했듯이 코드는 완전히 선형입니다. 실행 된 경로를 회색-보라색-녹색-빨강-파랑 순서로 함께 조각 할 수 있습니다. 경로는 실제로 :
왼쪽에 닿을 때까지 조금 더 계속 됩니다. /
(제어 흐름 만 리디렉션)을 제거하면 전체 프로그램이 선형으로 풀립니다.
?({2':{)'*){&2':!:&?':
문제는 어떻게 작동 하는가입니다. Hexagony의 메모리는 16 진 그리드의 선 그래프이며, 그리드의 각 가장자리에는 정수 값 (초기 0)이 포함됩니다. 메모리 포인터 (MP)는 항상 한쪽 가장자리에 있으며 해당 가장자리를 따라 특정 방향을 가리 킵니다. 산술 연산은 일반적으로 두 에지 지적에 적용 시 및 MP가 켜져 가장자리에 저장된다.
이 프로그램에서는 A , B 라는 세 개의 모서리를 사용합니다. , C 하고 MP는 다음과 같이 시작합니다.
이것이 작동하는 방법은 다음과 같습니다.
? Read an integer N from STDIN into edge A.
( Decrement to get N-1.
{ Move the MP forwards onto edge B.
2 Set the edge to 2.
' Move the MP backwards onto edge C.
: Divide edge A by edge B (rounding down) to compute (N-1)/2.
{ Move the MP forwards onto edge A.
) Increment to restore value of N.
' Move the MP backwards onto edge B.
* Multiply edges A and C to compute N*(N-1)/2.
) Increment to compute N*(N-1)/2 + 1.
{ Move the MP forwards onto edge C.
& This actually a copy operation, but we use it to reset the edge to zero.
2 Set the edge to 2.
' Move the MP backwards onto edge A.
: Divide edge B by edge C to compute (N*(N-1)/2 + 1)/2.
! Output the result as an integer. We're basically done now.
: no-op (we already have this value)
& Copy either B or C into A (doesn't matter).
? Read a zero (EOF) into A.
' Move the MP backwards onto an unused cell.
: Divide some unused cell by A (which is zero), terminating with an error.