Số đa giác


12

Số đa giác là số chấm trong một đa giác kkích thước n.

Bạn sẽ được cung cấp nk, và nhiệm vụ của bạn là viết một chương trình / hàm xuất / in số tương ứng.

Chấm điểm

Đây là . Giải pháp ngắn nhất trong byte thắng.

Thí dụ

Số lục giác thứ 3

Số 3lục giác thứ (( k=6, n=3) là 28do có 28các dấu chấm ở trên.

Tủ thử

Có thể được tạo ra từ bộ thử nghiệm Pyth này .

Cách sử dụng: hai dòng trên mỗi testcase, ntrên, kdưới.

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

Thêm thông tin


1
Không phải đó là số lục giác thứ 4 trong hình sao?
Neil

@Neil Chúng tôi đếm từ số không.
Leaky Nun

2
Bạn thực sự đang có một câu hỏi gửi bài, phải không?
R. Kap

Ví dụ có thể được tắt. Nếu bạn đặt n=3k=6vào bộ thử nghiệm của bạn, bạn nhận được 15. Nếu bạn đặt vào n=4k=6, bạn nhận được 28.
Phi tuyến

Câu trả lời:


9

Thạch , 7 byte

’;’;PH+

Điều này sử dụng công thức

công thức

để tính số thứ tự s thứ n .

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

’;’;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

Lục giác , 25 byte

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

Mở ra:

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

Đọc kđầu tiên và nthứ hai (sử dụng bất kỳ dấu phân cách).

Hãy thử trực tuyến!

Giải trình

Chương trình này hoàn toàn tuyến tính, nhưng như thường lệ trong Hexagony, thứ tự thực hiện ở khắp mọi nơi:

nhập mô tả hình ảnh ở đây

Các đường dẫn được thực hiện theo thứ tự xám , xanh đậm , đỏ , xanh nhạt , xanh đậm , hồng . Như bạn có thể thấy, ba /chỉ hành động để chuyển hướng dòng chảy. Ngoài ra, .không có ops. Tước tất cả sự huyền ảo của hình lục giác, chương trình tuyến tính thu được là:

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

Điều này tính toán công thức tiêu chuẩn

công thức

Giống như hầu hết các câu trả lời khác. Nó làm như vậy bằng cách sử dụng năm cạnh bộ nhớ sau, với con trỏ bộ nhớ (MP) bắt đầu như được hiển thị màu đỏ:

nhập mô tả hình ảnh ở đây

Đây là cách thực hiện:

?    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.

Một công thức đơn giản như vậy ... đòi hỏi 25 byte?!
Leaky Nun

4
@KennyLau Đây Hexagony sau tất cả ...
Martin Ender

Câu hỏi meta hexagony
downrep_nation

3

05AB1E , 8 byte

Mã số:

D<LOIÍ*+

Giải trình:

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

Sử dụng mã hóa CP-1252 . Hãy thử trực tuyến! .


3

Mê cung , 13 byte

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

Hãy thử trực tuyến!

Giải trình

Do các lệnh một ký tự (chỉ đơn thuần là sự cần thiết của tính chất 2D của ngôn ngữ), Labyrinth có thể gây ngạc nhiên cho các chương trình tuyến tính.

Điều này sử dụng cùng một công thức như một số câu trả lời khác:

công thức

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.                      []

Tại thời điểm này, con trỏ lệnh chạm vào ngõ cụt và quay lại. Bây giờ +được thực hiện lại, đó là một no-op (vì đáy của ngăn xếp được lấp đầy với một số lượng vô hạn), và sau đó /thử một phép chia bằng 0, kết thúc chương trình có lỗi.


2

JavaScript (ES6), 24 22 byte

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

Giải thích: Mỗi n-gon có thể được coi là n điểm dọc theo một cạnh cộng với tam giác k-2 có kích thước n-1, tức là n + n (n-1) (k-2) / 2.


k--*n--+2-nchưa được thử nghiệm
Leaky Nun

@KennyLau Xin lỗi, nhưng (k,n)=>n*(--k*--n-n+2)/2vẫn là 24 byte.
Neil

@KennyLau Trong thực tế tôi đã bỏ qua việc sử dụng rõ ràng --ncho (n-1). Ôi!
Neil

@NeiI Vâng, tốt đẹp.
Leaky Nun

Bạn có thể tiết kiệm tạm biệt với cà ri:k=>n=>n+n*--n*(k-2)/2
Dennis


2

APL (Dyalog Extended) , 11 byte SBCS

Cảm ơn Adám đã giúp đỡ vì đã gợi ý phiên bản thay thế này.

⊢+-∘2⍤⊣×2!⊢

Hãy thử trực tuyến!

Giải trình

⊢+-∘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 byte SBCS

Cảm ơn Adám vì sự giúp đỡ của anh ấy trong việc chơi golf này.

Chỉnh sửa: -1 byte từ ngn.

⊢+{⍺-22!⊢

Hãy thử trực tuyến!

Ungolfing

⊢+{⍺-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

Trên thực tế, 12 byte

3@n(¬@D3╟π½+

Hãy thử trực tuyến!

Giải trình:

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 byte

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

Hãy thử trực tuyến!

Giải trình

Điều này sử dụng công thức sau (lưu ý rằng T n = n*(n-1)/2):

Số đa giác

                # 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

Aceto , 18 15 byte

Câu trả lời dc của cảng Bruce Forte :

riddD*2/ri2-*+p

Đã lưu 3 byte bằng cách nhận ra rằng bất kỳ chương trình Aceto "thuần túy" (không có lệnh kết hợp) nào cũng có thể được viết tuyến tính.


1

MathGolf , 8 byte

_┐*½?⌡*+

Hãy thử trực tuyến!

Giải thích (với 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]

Một 8 -terter thay thế là ┼┐*½\⌡*+, lấy đầu vào theo thứ tự đảo ngược.



0

Toán học, 17 byte

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

Ứng dụng thẳng về phía trước của công thức.

Sử dụng

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

0

J, 14 byte

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

Dựa trên công thức.

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

Sử dụng

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

Giải trình

]++/@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

Sẽ mất bao lâu, sử dụng phương pháp của tôi?
Leaky Nun


0

Ngôn ngữ GameMaker, 44 byte

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

Là không gian cần thiết?
Leaky Nun

0

Python 3, 31 30 28 byte

Phương trình thẳng lên từ bài viết wiki này

lambda s,n:(s-2)*(n-1)*n/2+n

Cảm ơn @Mego đã lưu một byte!


Bạn có thể loại bỏ khoảng trắng giữa dấu hai chấm và dấu ngoặc đơn.
Mego

0

Fourier, 18 byte

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

Hãy thử nó trên FourIDE!

Lấy k làm đầu vào đầu tiên và n là đầu vào thứ hai. Sử dụng công thức:

Mã giả giải thích:

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

0

Excel, 22 byte

Tính số A1thứ tự B1chéo.

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

0

Java 8, 21 byte

Tất cả các câu trả lời riêng lẻ có độ dài byte bằng nhau:

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

Giải trình:

Hãy thử nó ở đây.

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

Husk , 9 byte

S+~*-2(Σ←

Hãy thử trực tuyến!

Giải trình

Sử dụng công thức tương tự như trong dccâu trả lời của tôi :

Polygonal numbers

            -- 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 char, 32 byte

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

Nó dựa trên thực tế là dường như phép thử 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.