다각형 수


12

다각형 수는 ksize-gon 크기 의 도트 수입니다 n.

당신은 n과를 받게 될 것이며 k, 당신의 임무는 해당 번호를 출력 / 인쇄하는 프로그램 / 기능을 작성하는 것입니다.

채점

이것은 입니다. 바이트 단위의 최단 솔루션이 승리합니다.

세 번째 육각 번호

3번째 육각형 숫자 ( k=6, n=3)는 위의 점이 28있기 때문 28입니다.

테스트 케이스

이 Pyth 테스트 스위트 에서 생성 할 수 있습니다 .

사용법 : n위, k아래의 테스트 케이스 당 두 줄 .

n    k  output
10   3  55
10   5  145
100  3  5050
1000 24 10990000

추가 정보


1
그림에서 네 번째 육각형 숫자 아닌가요?
Neil

@Neil 우리는 0부터 계산합니다.
Leaky Nun

2
당신은 정말로 질문 게시 행위를합니까?
R. Kap

예제가 꺼져있을 수 있습니다. 당신이 넣으면 n=3k=6테스트 스위트로, 당신은 얻을 15. n=4과 를 넣으면 k=6얻을 수 28있습니다.
NonlinearFruit

답변:


9

젤리 , 7 바이트

’;’;PH+

이것은 공식을 사용합니다

공식

컴퓨팅하는 N 개의 S -gonal 참조.

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

작동 원리

’;’;PH+  Main link. Arguments: s, n

’        Decrement; yield s - 1.
 ;       Concatenate; yield [s - 1, n].
  ’      Decrement; yield [s - 2, n - 1].
   ;     Concatenate; yield [s - 2, n - 1, n].
    P    Product; yield (s - 2)(n - 1)n.
     H   Halve; yield (s - 2)(n - 1)n ÷ 2.
      +  Add; yield (s - 2)(n - 1)n ÷ 2 + n.

4

헥사 고니 , 25 바이트

?(({"+!@/"*'+{/?('*})/2':

펼쳐진 :

   ? ( ( {
  " + ! @ /
 " * ' + { /
? ( ' * } ) /
 2 ' : . . .
  . . . . .
   . . . .

구분 기호를 사용하여 k첫 번째와 n두 번째를 읽습니다 .

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

설명

이 프로그램은 완전히 선형 적이지만 Hexagony에서 평소와 같이 실행 순서는 모든 곳에 있습니다.

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

경로는 회색 , 진한 파란색 , 빨간색 , 연한 파란색 , 진한 녹색 , 분홍색 순서로 실행됩니다 . 보시다시피 세 개 /는 흐름을 리디렉션하는 역할 만합니다. 또한, .아니 놈입니다. 모든 육각형 공상을 제거하면 결과 선형 프로그램은 다음과 같습니다.

?(({?('*})"*'+{2':"+!@

이것은 표준 공식을 계산합니다

공식

다른 답변의 대부분과 마찬가지로. 다음과 같이 5 개의 메모리 에지를 사용하며 메모리 포인터 (MP)는 빨간색으로 표시된대로 시작됩니다.

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

이를 수행하는 방법은 다음과 같습니다.

?    Read integer input s into edge A.
((   Decrement twice to get (s-2).
{    Move the MP forwards onto edge B.
?    Read integer input n into edge B.
(    Decrement to get (n-1).
'    Move the MP backwards onto edge C.
*    Multiply edges A and B to store the result (s-2)(n-1) in edge C.
}    Move the MP forwards onto edge B.
)    Increment to restore the value n.
"    Move the MP backwards onto edge A.
*    Multiply edge B and C to store the result (s-2)(n-1)n in edge A.
'    Move the MP backwards onto edge D.
+    Add edges E (initially 0) and A to copy (s-2)(n-1)n into edge D.
{    Move the MP forwards onto edge E.
2    Set the memory edge to value 2.
'    Move the MP backwards onto edge A.
:    Divide edge D by edge E to store (s-2)(n-1)n/2 in edge A.
"    Move the MP backwards onto edge C.
+    Add edges A and B to store (s-2)(n-1)n/2+n in edge C.
!    Print as integer.
@    Terminate the program.

그런 간단한 공식 ... 25 바이트가 필요합니까?!
Leaky Nun

4
@KennyLau이 있습니다 결국 Hexagony ...
마틴 청산

Hexagony 메타 질문
downrep_nation

3

05AB1E , 8 바이트

암호:

D<LOIÍ*+

설명:

D         # Duplicate the input
 <LO      # Compute n × (n - 1) / 2
    IÍ    # Compute k - 2
      *   # Multiply, resulting into (k - 2)(n - 1)(n) / 2
       +  # Add, resulting into n + (k - 2)(n - 1)(n) / 2

CP-1252 인코딩을 사용합니다 . 온라인으로 사용해보십시오! .


3

미로 , 13 바이트

?::(*?((*#/+!

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

설명

Labyrinth는 단일 문자 명령 (언어의 2D- 필요성 일 뿐임)으로 인해 선형 프로그램에서 놀랍도록 골치 거리가 될 수 있습니다.

이것은 다른 여러 답변과 동일한 수식을 사용합니다.

공식

Op  Explanation                 Stack
?   Read n.                     [n]
::  Make two copies.            [n n n]
(   Decrement.                  [n n (n-1)]
*   Multiply.                   [n (n*(n-1))]
?   Read s.                     [n (n*(n-1)) s]
((  Decrement twice.            [n (n*(n-1)) (s-2)]
*   Multiply.                   [n (n*(n-1)*(s-2))]
#   Push stack depth, 2.        [n (n*(n-1)*(s-2)) 2]
/   Divide.                     [n (n*(n-1)*(s-2))/2]
+   Add.                        [(n+(n*(n-1)*(s-2))/2)]
!   Print.                      []

이 시점에서 명령 포인터가 막 다른 골목에 닿아 돌아갑니다. 이제 +스택이 맨 아래에 무한한 양의 0으로 채워지기 때문에 no-op 인 다시 실행 된 다음 0 /으로 나누기 를 시도하여 오류가있는 프로그램을 종료합니다.


2

자바 스크립트 (ES6), 24 22 바이트

(k,n)=>n+n*--n*(k-2)/2

설명 : 각 n-gon은 한면을 따라 n 개의 점에 n-1 크기의 k-2 삼각형, 즉 n + n (n-1) (k-2) / 2를 따르는 것으로 간주 할 수 있습니다.


k--*n--+2-n아직 테스트하지 않았습니다
Leaky Nun

@KennyLau 죄송하지만 (k,n)=>n*(--k*--n-n+2)/2여전히 24 바이트입니다.
Neil

@KennyLau에서 사실 나는의 명백한 사용 간과 --n를 들어 (n-1). 도!
Neil

@NeiI 글쎄요.
Leaky Nun

카레로 안녕을 구할 수 있습니다.k=>n=>n+n*--n*(k-2)/2
Dennis


2

APL (Dyalog Extended) , 11 바이트 SBCS

이 대체 버전을 제안하는 데 도움을 준 Adám에게 감사합니다.

⊢+-∘2⍤⊣×2!⊢

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

설명

⊢+-∘2⍤⊣×2!⊢  Right argument (⊢) is n. Left argument (⊣) is s.

        2!⊢  Binomial(n, 2) == n*(n-1)/2.
  -∘2⍤⊣×     Multiply (×) with by getLeftArgument (⊢) with (⍤) minus 2 (-∘2) called on it.
             In short, multiply binomial(n,2) with (s-2).
⊢+           Add n.

APL (Dyalog Unicode) , 12 11 바이트 SBCS

골프를 치는 데 도움을 준 Adám에게 감사합니다.

편집 : ngn에서 -1 바이트.

⊢+{⍺-22!⊢

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

언 골핑

⊢+{⍺-22!⊢  Right argument (⊢) is n. Left argument (⊣) is s.

        2!⊢  Binomial(n, 2) == n*(n-1)/2.
  {⍺-2     Multiply it by s-2.
⊢+           Add n.

1

실제로 12 바이트

3@n(¬@D3╟π½+

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

설명:

3@n(¬@D3╟π½+
3@n           push 3 copies of n (stack: [n, n, n, k])
   (¬         bring k to front and subtract 2 ([k-2, n, n, n])
     @D       bring an n to front and subtract 1 ([n-1, k-2, n, n])
       3╟π    product of top 3 elements ([n*(n-1)*(k-2), n])
          ½   divide by 2 ([n*(n-1)*(k-2)/2, n])
           +  add ([n*(n-1)*(k-2)/2 + n])

1

dc , 14 바이트

?dd1-*2/?2-*+p

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

설명

이것은 다음 공식을 사용합니다 ( T n = n*(n-1)/2).

다각형 수

                # inputs              | N S                  | 10 5
?dd             # push N three times  | N, N, N              | 10, 10, 10
   1-           # subtract 1          | (N-1), N, N          | 9, 10, 10
     *          # multiply            | (N-1)*N, N           | 90, 10
      2/        # divide by two       | (N-1)*N/2, N         | 45, 10
        ?       # push S              | S, (N-1)*N/2, N      | 5, 45, 10
         2-     # subtract 2          | (S-2), (N-1)*N/2, N  | 3, 45, 10
           *    # multiply            | (S-2)*(N-1)*N/2, N   | 135, 10
            +   # add                 | (S-2)*(N-1)*N/2 + N  | 145
             p  # print to stdout


1

MathGolf , 8 바이트

_┐*½?⌡*+

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

n=10,k=5

_          duplicate first implicit input, stack is [10, 10]
 ┐         push TOS-1 without popping, stack is [10, 10, 9]
  *        multiply, stack is [10, 90]
   ½       halve TOS, stack is [10, 45]
    ?      rotate top 3 stack elements, popping k to the top: [10, 45, 5]
     ⌡     decrement TOS twice: [10, 45, 3]
      *    multiply: [10, 135]
       +   add: [145]

다른 8 바이트는 ┼┐*½\⌡*+입력을 역순으로 가져옵니다.



0

매스 매 티카, 17 바이트

(#2-2)#(#-1)/2+#&

공식의 간단한 적용.

용법

  f = (#2-2)#(#-1)/2+#&
  f[10, 3]
55
  f[10, 5]
145
  f[100, 3]
5050
  f[1000, 24]
10990000

0

J, 14 바이트

]++/@i.@]*[-2:

공식을 기반으로합니다.

P(k, n) = (k - 2) * T(n - 1) + n where T(n) = n * (n + 1) / 2
        = (k - 2) * n * (n - 1) / 2 + n

용법

   f =: ]++/@i.@]*[-2:
   3 f 10
55
   5 f 10
145
   3 f 100
5050
   24 f 1000
10990000

설명

]++/@i.@]*[-2:
            2:  The constant function 2
          [     Get k
           -    Subtract to get k-2
        ]       Get n
     i.@        Make a range from 0 to n-1
  +/@           Sum the range to get the (n-1) Triangle number = n*(n-1)/2
                The nth Triangle number is also the sum of the first n numbers
         *      Multiply n*(n-1)/2 with (k-2)
]               Get n
 +              Add n to (k-2)*n*(n-1)/2

내 접근 방식을 사용하면 얼마나 걸립니까?
Leaky Nun

0

TI 기본, 20 바이트

Prompt K,N:(K-2)N(N-1)/2+N

0

GameMaker 언어, 44 바이트

n=argument1;return (argument0-2)*n*(n-1)/2+n

필요한 공간이 있습니까?
Leaky Nun


0

푸리에, 18 바이트

I-2~SI~Nv*N/2*S+No

FourIDE에서 사용해보십시오!

k를 첫 번째 입력으로 사용하고 n을 두 번째 입력으로 사용합니다. 다음 공식을 사용합니다.

의사 코드 :

S = Input - 2
N = Input
Print (N - 1) * N / 2 *S + N

0

엑셀, 22 바이트

A1th- B1gonal 수를 계산합니다 .

=(B1-2)*A1*(A1-1)/2+A1

0

자바 8, 21 바이트

동일한 바이트 길이의 모든 개별 답변 :

k->n->n+n*~-n*(k-2)/2
k->n->n+n*--n*(k-2)/2
k->n->n+n*~-n*~-~-k/2
k->n->n+n*--n*~-~-k/2

설명:

여기에서 시도하십시오.

k->n->            // Method with two integer parameters and integer return-type
  n+              //  Return `n` plus
    n*            //   `n` multiplied by
      ~-n         //   `n-1`
         *(k-2)   //   Multiplied by `k-2`
               /2 //   Divided by 2
                  // End of method (implicit / single-line return-statement)


0

껍질 , 9 바이트

S+~*-2(Σ←

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

설명

dc대답 과 동일한 수식을 사용합니다 .

다각형 수

            -- implicit inputs S, N                     | 5, 10
S+          -- compute N + the result of the following  | 10 + 
  ~*        --   multiply these two together            |      (   ) * 
    -2      --     S-2                                  |       S-2
      (Σ←)  --     triangle number of (N-1)             |              tri(N-1)

0

APL (NARS), 16 자, 32 바이트

{⍵+(⍺-2)×+/⍳⍵-1}

그것은 n × (n-1) / 2 = sum (1..n-1) 테스트 인 것 같습니다 :

  f←{⍵+(⍺-2)×+/⍳⍵-1}
  10 f 3
27
  3 f 10
55
  5 f 19
532
  3 f 10
55
  5 f 10
145
  3 f 100
5050
  24 f 1000
10990000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.