숫자 나선은 왼쪽 위 사각형에 숫자 1이있는 무한 그리드입니다. 다음은 나선의 처음 5 개 레이어입니다.
당신의 임무는 행 y와 열 x의 숫자를 찾는 것입니다.
예:
Input: 2 3
Out : 8
Input: 1 1
Out : 1
Input: 4 2
Out : 15
노트 :
- 모든 프로그래밍 언어가 허용됩니다.
- 이것은 코드 골프 도전이므로 가장 짧은 코드가 승리합니다.
- 행운을 빌어 요!
답변
C (gcc), 44 43 바이트
f(x,y,z){z=x>y?x:y;z=z*z-~(z%2?y-x:x-y)-z;}
나선에는 몇 가지 “무기”가 있습니다.
12345
22345
33345
44445
55555
위치 는 arm (변수에 할당 됨 ). 그런 다음, 팔 에서 가장 큰 숫자 는 이며, 이는 팔의 왼쪽 아래 위치와 오른쪽 위 위치 사이에서 번갈아 나타납니다. 에서 를 빼면 arm 따라 이동 하는 시퀀스를 므로 다음을 기반으로 적절한 부호를 선택합니다 의 패리티는 0부터 시작하는 시퀀스를 얻기 위해 로 조정하고 에서이 값을 뺍니다 .
z
바이트를 저장해 준 Mr. Xcoder 에게 감사합니다 .
답변
파이썬, 54 50 49 바이트
def f(a,b):M=max(a,b);return(a-b)*(-1)**M+M*M-M+1
@ChasBrown 덕분에 -4 바이트
@Shaggy 덕분에 -1 바이트
처음으로 골프! 나는 이것이 최적이 아니라는 것을 알고 있습니다.
본질적으로 @Doorknob C 코드와 동일한 원칙으로 실행됩니다.
답변
MATL , 15 바이트
X>ttq*QwoEqGd*+
방법?
편집 : @Doorknob의 답변과 동일한 기술로 방금 도착했습니다.
나선의 대각선 요소의 차이는 산술 시퀀스 입니다. 이것의 항의 합 은 (일반적인 AP 공식에 의해). 이 합계는 1 씩 증가하여 위치 대각선 요소를 제공합니다 .
주어지면 이 두 가지의 최대 값을 찾게되는데,이 점은이 점이 속한 나선의 “계층”입니다. 그런 다음 해당 레이어의 대각선 값을 로 찾습니다 . 짝수 레이어의 경우 홀수 레이어 의 값 은 입니다.
X> % Get the maximum of the input coordinates, say n
ttq* % Duplicate that and multiply by n-1
Q % Add 1 to that. This is the diagonal value v at layer n
wo % Bring the original n on top and check if it's odd (1 or 0)
Eq % Change 1 or 0 to 1 or -1
Gd % Push input (x, y) again, get y - x
* % Multiply by 1 or -1
% For odd layers, no change. For even layers, y-x becomes x-y
+ % Add that to the diagonal value v
% Implicit output
대체 21 바이트 솔루션 :
Pdt|Gs+ttqq*4/QJb^b*+
온라인으로 사용해보십시오!
행렬로 수집 및 인쇄
위의 내용을 통해 원하는 기능이
여기서 입니다.
일부 기본 계산은 최대 두 숫자에 대한 하나의 표현식이
다른에 하나를 연결해, 우리는 발견 을위한 하나의 대체 양식을 것입니다 :
여기서 입니다.
솔루션이 구현하는 기능입니다.
답변
Japt , 16 바이트
몇 가지 맥주에 대한 Doorknob 솔루션에서 채택되었습니다.
wV
nU²ÒNr"n-"gUv
설명
:Implicit input of integers U=x and V=y
wV :Maximum of U & V
\n :Reassign to U
U² :U squared
Ò :-~
"n-" :Literal string
Uv :Is U divisible by 2? Return 0 or 1
g :Get the character in the string at that index
Nr :Reduce the array of inputs by that, where n is inverse subtraction (XnY = Y-X)
n :Subtract U from the result of the above
답변
Pyth, 20 바이트
A~Qh.MZQh-+*-GH^_1Q*
Rushabh Mehta 의 답변을 거의 문자 그대로 번역했습니다 .
설명:
A~Qh.MZQh-+*-GH^_1Q* | Full code
A~Qh.MZQh-+*-GH^_1Q*QQQ | Code with implicit variables filled
| Assign Q as the evaluated input (implicit)
A | Assign [G,H] as
~Q | Q, then assign Q as
h.MZQ | Q's maximal value.
| Print (implicit)
h-+*-GH^_1Q*QQQ | (G-H)*(-1)^Q+Q*Q-Q+1