Số thứ n


8

Hầu hết chúng ta có lẽ đã quen thuộc với khái niệm số tam giác và số vuông. Tuy nhiên, cũng có các số ngũ giác, số lục giác, số tự hoại, số bát giác, v.v ... Số thứ Non Nagonal được định nghĩa là số thứ N của dãy được hình thành với một đa giác của N cạnh. Rõ ràng, N> = 3, vì không có hình dạng đóng 2 hoặc 1 mặt. Một số Ngonal thứ N đầu tiên là 0, 1, 2, 6, 16, 35, 66, 112, 176, 261, 370, 506, 672, 871 .... Đây là dãy A060354 trong OEIS.

Nhiệm vụ của bạn:

Viết chương trình hoặc hàm, khi được cho một số nguyên n làm đầu vào, sẽ xuất / trả về số Nagonal thứ N.

Đầu vào:

Một số nguyên N nằm trong khoảng từ 3 đến 10 ^ 6.

Đầu ra:

Số Nagonal thứ N trong đó N là đầu vào.

Trường hợp thử nghiệm:

25 -> 6925
35 -> 19670
40 -> 29680

Ghi điểm:

Đây là , điểm số thấp nhất tính bằng byte!



Sẽ không hại gì khi thêm một định nghĩa chính xác trực tiếp.
Wlod AA

Câu trả lời:


11

Neim , 1 byte

¯ \ _ (ツ) _ /

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


1
Một tích hợp cho việc này? Có thật không? Rõ ràng là ít tối nghĩa hơn tôi nghĩ.
Gryphon

1
@Gryphon Nó tồn tại lâu đời.
Okx

2
@Gryphon Vâng. Nó đã tồn tại từ tháng Năm.
Okx

1
@Gryphon Vào thời điểm đó, có rất nhiều thách thức đối với các số đa giác, vì vậy tôi chỉ cần thêm một bó vào Neim: P
Okx

3
Đây dường như là một tính năng tích hợp để tính số athứ tự bchéo, giúp cả hai tham số của nó được tự động điền với đối số duy nhất được đưa ra.
Lynn

6

05AB1E , 7 6 byte

Đã lưu 1 byte nhờ Neil

<ÐP+>;

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

Giải trình

<        # push input-1
 Ð       # triplicate
  P      # product of stack
   +     # add input
    >    # increment
     ;   # divide by 2

<Dn*+>;cũng hoạt động với 7 byte.
Neil

@Neil: Cảm ơn! Một phiên bản sửa đổi đã tiết kiệm cho tôi một byte :)
Emigna

Bạn không thể làm <3mthay vì <ÐP?
Erik the Outgolfer

@EriktheOutgolfer: Chắc chắn, nhưng đó là cùng một lượng byte.
Emigna

@Emigna Chỉ cần hỏi để chắc chắn.
Erik the Outgolfer


4

Japt , 9 8 byte

´U+³ z Ä

Thử nó

  • Lưu 1 byte nhờ ETH

Giải trình

Giảm ( ´) đầu vào ( U), thêm đầu vào được lập phương ( ³) vào đó, chia sàn cho 2 ( z) và thêm 1 ( Ä).


Có khoảng một triệu cách để viết lại điều này trong 9 byte, nhưng thật khó để tìm ra giải pháp 8 byte ... ồ, đây là một cách tôi nghĩ nên hoạt động:´U+³ z Ä
ETHproductions

Đẹp một, @ETHproductions; đã bị phân tâm bởi công việc trong khi cố gắng hạ nó xuống.
Xù xì

@ETHproductions Một cái hay, thật khó ... một cái khác sẽ là ´U+³+2 z.
Erik the Outgolfer

@EriktheOutgolfer: hoặc ÄÄthay vì +2.
Xù xì

1
7 byte: à3 *3+Uhoặc U+3*Uà3(tín dụng một phần cho Lynn) ... Khá chắc chắn rằng nó có thể được sắp xếp lại để tiết kiệm nhiều byte hơn.
Ông Xcoder




3

MATL , 7 byte

t3Xn3*+

Đề nghị của Luis Mendo, rõ ràng hơn một chút.

    (implicit input)
t                         duplicate
 3Xn                      n choose 3
    3*                    multiply by 3
      +                   add
(implicit output)

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

t:3XNn+

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

Cả hai giải pháp đều là thuật toán của Lynn

(implicit input)
t                         duplicate
 :                        range (1...n)
  3XN                     push 3, compute all 3-combinations of the range
     n                    number ( equal to 3*choose(n,3) )
      +                   add
(implicit output)

Có lẽ đơn giản hơn một chút:t3Xn3*+
Luis Mendo

huh, tôi thề tôi đã tìm kiếm Xnvà đã không nhìn thấy nó. Tôi không bị thuyết phục Tôi biết cách đọc tài liệu ...
Giuseppe

Tài liệu có thể rõ ràng hơn :-) Nó giả sử bạn ít nhiều biết các hàm Matlab tương đương. Trong trường hợp này, nếu bạn tìm kiếm sự kết hợp của nchoosektrong máy chủ Suever của nó mang lại cho cả hai chức năng như kết quả
Luis Mendo


2

JavaScript (ES6), 38 byte

f=(n,k=n)=>k<2|n<3?k:f(n-1,k)+f(3,k-1)

Đệ quy FTW (hoặc có thể chỉ cho thứ bảy ...)


Hoặc bạn có thể chuyển giải pháp biểu mẫu đóng cho 17 byte ...
Neil






1

dc, 13 byte

dd2-2^*r2^+2/

Việc triển khai công thức đầu tiên khá đơn giản được liệt kê trên trang OEIS .

# Commands           # Stack Tracker (tm)
# Begin with input   # n
d                    # n n
d                    # n n n
2-                   # n-2 n n
2^                   # (n-2)^2 n n
*                    # n*(n-2)^2 n
r                    # n n*(n-2)^2
2^                   # n^2 n*(n-2)^2
+                    # n*(n-2)^2+n^2
2/                   # (n*(n-2)^2+n^2)/2 # matches first formula
# End with output on stack






0

Java 8, 18 byte

n->n*(n*n-3*n+4)/2

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

Cách tiếp cận được sử dụng bởi hầu hết các câu trả lời khác là ngắn nhất trong Java. Để giải trí, tôi cũng đã đưa ra hai câu trả lời khác:

Câu trả lời Python 2 của ông Xcoder's ( 29 byte ):

n->(int)Math.pow(n-1,3)-~n>>1

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

Câu trả lời của Cổng Lynn (với tính toán thủ công a choose b) ( 76 byte ):

n->c(n,3)*3+nint c(int t,int c){return t<c?0:c==t|c==0?1:c(--t,c-1)+c(t,c);}

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

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.