매쓰, 111 (105) 104 바이트
r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&
설명:
r=Floor[(1+Sqrt[(4#-1)/3])/2]&
r
입력을 받는 함수 를 정의하고 #
셀 0까지의 거리 (셀 수)를 계산합니다. 각 거리 / 링의 마지막 셀에있는 패턴을 활용하여이를 수행합니다. 0 = 3 (0 ^ 2 + 0), 6 = 3 (1 ^ 2 + 1), 18 = 3 (2 ^ 2 + 2), 36 = 3 (3 ^ 2 + 3) ...... 해당 패턴의 수식을 반전시킵니다. 셀 0의 경우 실제로 (1/2) + i * (sqrt (3) / 6) 의 바닥을 차지하며 , 구성 요소별로 계산하여 0 + 0 * i = 0 을 얻습니다 .
으로 r
정의 된 r@#
셀에 대한 고리 #
(다른 함수의 정의 내부). #+3r@#-3(r@#)^2&
코드에 정확하게 표시되지 않지만 셀 수를 가져와 다음 내부 링에서 가장 많은 수의 셀을 뺀 다음 "현재 링의 어떤 셀이 무엇입니까?"라는 질문에 대한 답변을 제공합니다. 예를 들어, 셀 9는 링 2의 세 번째 셀이므로 r[9]
2를 #+3r@#-3(r@#)^2&[9]
출력하고 3을 출력합니다.
IS가 찾아 그것을 사용 위에 우리는 기능을 수행 할 수있는 극 각 해당 셀의에서 반 시계 방향으로 각도 "셀에 0, 셀 (17), 전지 (58)"선. 모든 링의 마지막 셀은 항상 Pi / 6 각도에 있으며 Pi / (3 * ring_number) 단위로 링 주위를 돌고 있습니다. 따라서 이론적으로 Pi / 6 + (which_cell_of_the_current_ring) * Pi / (3 * ring_number)와 같은 것을 계산해야합니다. 그러나 그림의 회전은 아무런 영향을 미치지 않으므로 Pi / 6 부분을 버릴 수 있습니다 (6 바이트 절약). 이것을 이전 공식과 결합하고 단순화하면Pi(#/(3r@#)+1-r@#)&
불행히도, 링 번호가 0이므로 셀 0에 대해 정의되지 않았 으므로이 문제를 해결해야합니다. 자연스러운 해결책은 다음과 같습니다 t=If[#==0,0,Pi(#/(3r@#)+1-r@#)]&
. 그러나 우리는 셀 0의 각도에 신경 쓰지 않고 r@#
반복 되기 때문에 실제로 여기에 바이트를 저장할 수 있습니다t=Limit[Pi(#/(3x)+1-x),x->r@#]&
링 번호와 각도가 생겼으므로 셀 (중심)의 위치를 찾아서 인접성을 테스트 할 수 있습니다. 고리가 육각형이기 때문에 실제 위치를 찾는 것은 성가신 일이지만, 고리를 완벽한 원이라고 가정하면 고리 번호를 셀 0의 중심까지의 거리로 취급 할 수 있습니다. 닫기. 복소수 의 극좌표 형식을 사용하여 간단한 평면 함수로 복잡한 평면 에서이 대략적인 위치를 나타낼 수 있습니다 .p = r@#*Exp[I*t@#] &;
복소수 평면에서 두 복소수 사이의 거리는 차이의 절대 값 에 의해 주어진 다음 근사값의 오차를 처리하기 위해 결과를 반올림하고 이것이 1인지 확인합니다. 이 작품은 이름이 없지만입니다 Round@Abs[p@#-p@#2]==1&
.
Wolfram Cloud 샌드 박스 에서 다음과 같은 코드를 붙여 넣고 Gear- > "셀 평가"를 클릭하거나 Shift + Enter 또는 숫자 키패드 Enter를 눌러 온라인으로 시도 할 수 있습니다 .
r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&[24,45]
또는 모든 테스트 사례의 경우 :
r=Floor[(1+Sqrt[(4#-1)/3])/2]&;t=Limit[Pi(#/(3x)+1-x),x->r@#]&;p=r@#*Exp[I*t@#]&;Round@Abs[p@#-p@#2]==1&//MapThread[#,Transpose[{{0,1},{7,18},{8,22},{24,45},{40,64},{64,65},{6,57},{29,90},{21,38},{38,60},{40,63},{41,39},{40,40}}]]&