태그 보관물: math

math

숫자 나선 문제 나선은 왼쪽 위 사각형에 숫자 1이있는

숫자 나선은 왼쪽 위 사각형에 숫자 1이있는 무한 그리드입니다. 다음은 나선의 처음 5 개 레이어입니다.

여기에 이미지 설명을 입력하십시오

당신의 임무는 행 y와 열 x의 숫자를 찾는 것입니다.


예:

Input: 2 3
Out  : 8
Input: 1 1
Out  : 1
Input: 4 2
Out  : 15

노트 :

  1. 모든 프로그래밍 언어가 허용됩니다.
  2. 이것은 도전이므로 가장 짧은 코드가 승리합니다.
  3. 행운을 빌어 요!

출처 : https://cses.fi/problemset/task/1071



답변

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부터 시작하는 시퀀스를 얻기 위해 로 조정하고 에서이 값을 뺍니다 .

(x,y)

max(x,y)

z

n

n2

x

y

n+1,n+2,,1,0,1,,n1,n2

n

n

n1

n2

바이트를 저장해 준 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 씩 증가하여 위치 대각선 요소를 제공합니다 .

0,2,4,6,8,

n

n(n1)

(n,n)

주어지면 이 두 가지의 최대 값을 찾게되는데,이 점은이 점이 속한 나선의 “계층”입니다. 그런 다음 해당 레이어의 대각선 값을 로 찾습니다 . 짝수 레이어의 경우 홀수 레이어 의 값 은 입니다.

(x,y)

v=n(n1)+1

(x,y)

v+xy

vx+y

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*+

온라인으로 사용해보십시오!
행렬로 수집 및 인쇄
위의 내용을 통해 원하는 기능이

f=m(m1)+1+(1)m(xy)

여기서 입니다.

m=max(x,y)

일부 기본 계산은 최대 두 숫자에 대한 하나의 표현식이

m=max(x,y)=x+y+abs(xy)2

다른에 하나를 연결해, 우리는 발견 을위한 하나의 대체 양식을 것입니다 :

f

f=(xy)ik+14((k2)k)+1

여기서 입니다.

k=abs(xy)+x+y

솔루션이 구현하는 기능입니다.


답변

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


답변

젤리 , 13 바이트

»Ḃ-*×_‘+»×’$¥

온라인으로 사용해보십시오!

Doorknob의 방법을 사용합니다 . 너무 길어요


답변

젤리 , 13 12 바이트

ṀḂḤ’×I+²_’ṀƲ

온라인으로 사용해보십시오!

으로 대각선 용어를 계산하고을 사용하여 ²_’Ṁ올바른 색인 값에 더하거나 뺍니다 ṀḂḤ’×I.