Nomor Ngonal ke-N

8

Sebagian besar dari kita mungkin akrab dengan konsep bilangan segitiga dan kuadrat. Namun, ada juga bilangan pentagonal, bilangan heksagonal, bilangan septagonal, bilangan segi delapan, dll. Bilangan Nagonal didefinisikan sebagai bilangan N urutan yang dibentuk dengan poligon sisi N. Jelas, N> = 3, karena tidak ada bentuk tertutup 2 atau 1 sisi. Beberapa bilangan Ngonal Nth pertama adalah 0, 1, 2, 6, 16, 35, 66, 112, 176, 261, 370, 506, 672, 871 .... Ini adalah urutan A060354 dalam OEIS.

Tugas Anda:

Tulis sebuah program atau fungsi yang, ketika diberi bilangan bulat n sebagai input, mengeluarkan / mengembalikan angka Nagonal Nth.

Memasukkan:

Integer N antara 3 dan 10 ^ 6.

Keluaran:

Nth Nagonal angka di mana N adalah input.

Kasus cobaan:

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

Mencetak:

Ini adalah , skor terendah dalam byte menang!

Gryphon
sumber
Terkait
Digital Trauma
Tidak ada ruginya menambahkan definisi tepat langsung.
Wlod AA

Jawaban:

11

Neim , 1 byte

¯ \ _ (ツ) _ / ¯

Cobalah online!

Okx
sumber
1
Built-in untuk ini? Betulkah? Jelas kurang jelas dari yang saya kira.
Gryphon
1
@Gryphon Sudah ada sejak lama.
Okx
2
@Gryphon Ya. Itu sudah ada sejak Mei.
Okx
1
@Gryphon Pada titik itu, ada banyak tantangan untuk bilangan poligon, jadi saya hanya menambahkan banyak ke Neim: P
Okx
3
Ini tampaknya menjadi built-in untuk menghitung angka ath- bgonal, yang membuat kedua parameternya terisi otomatis dengan satu-satunya argumen yang diberikan.
Lynn
6

05AB1E , 7 6 byte

Disimpan 1 byte berkat Neil

<ÐP+>;

Cobalah online!

Penjelasan

<        # push input-1
 Ð       # triplicate
  P      # product of stack
   +     # add input
    >    # increment
     ;   # divide by 2
Emigna
sumber
<Dn*+>;juga bekerja selama 7 byte.
Neil
@Neil: Terima kasih! Versi modifikasi dari itu menyelamatkan saya satu byte :)
Emigna
Tidak bisa Anda lakukan <3mbukan <ÐP?
Erik the Outgolfer
@EriktheOutgolfer: Tentu, tetapi jumlah byte yang sama.
Emigna
@ Emigna Hanya meminta untuk memastikan.
Erik the Outgolfer
4

Pyke , 6 byte

t3^+he

Coba di sini!

t      - Decrement.
 3^    - Raise to the power of 3.
   +   - Add the input.
    h  - Increment.
     e - Floor Halve.
Tuan Xcoder
sumber
4

Japt , 9 8 byte

´U+³ z Ä

Cobalah

  • 1 byte disimpan berkat ETH

Penjelasan

Decrement ( ´) input ( U), tambahkan input cubed ( ³) ke itu, pisahkan dengan 2 ( z) dan tambahkan 1 ( Ä).

Shaggy
sumber
Ada sekitar bazillion cara untuk menulis ulang ini dalam 9 byte, tetapi sulit untuk menemukan solusi 8-byte ... oh, inilah yang saya pikir harus bekerja:´U+³ z Ä
ETHproduksi
Bagus, @ ETHproductions; terganggu oleh pekerjaan saat mencoba untuk menggerusnya.
Shaggy
@ ETHproductions Bagus, itu rumit ... yang lain akan ´U+³+2 z.
Erik the Outgolfer
@EriktheOutgolfer: atau ÄÄbukannya +2.
Shaggy
1
7 byte: à3 *3+Uatau U+3*Uà3(sebagian kredit masuk ke Lynn) ... Cukup yakin itu dapat diatur ulang untuk menghemat lebih banyak byte.
Tn. Xcoder
3

PowerShell , 34 28 byte

param($n)$n*($n*$n-3*$n+4)/2

Cobalah online!

Solusi bentuk tertutup golf dari halaman OEIS. Digunakan FOIL untuk penghematan 6 byte lainnya.

AdmBorkBork
sumber
3

MATL , 7 byte

t3Xn3*+

Saran Luis Mendo, yang sedikit lebih jelas.

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

Cobalah online!

t:3XNn+

Cobalah online!

Kedua solusi tersebut memuat algoritma 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)
Giuseppe
sumber
Mungkin sedikit lebih sederhana:t3Xn3*+
Luis Mendo
ya, aku bersumpah aku mencari Xndan tidak melihatnya. Saya tidak yakin saya tahu cara membaca dokumentasi ...
Giuseppe
Dokumentasi bisa lebih jelas :-) Ini mengasumsikan Anda lebih atau kurang mengetahui fungsi Matlab yang setara. Dalam hal ini, jika Anda mencari kombinasi dari nchoosekdalam server yang Suever ini memberikan kedua fungsi sebagai hasil
Luis Mendo
2

JavaScript (ES6), 38 byte

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

Rekursi FTW (atau mungkin hanya untuk ketujuh ...)

Produksi ETH
sumber
Atau Anda bisa port solusi bentuk tertutup selama 17 byte ...
Neil
2

Mathematica, 14 byte

lebih pendek dari built-in !!!

(#^2-3#+4)#/2&

Cobalah online!

dan 3 byte lebih pendek dengan bantuan Martin Ender

J42161217
sumber
2

Cubix , 20 17 byte

Disimpan 3 byte porting jawaban Emigna .

Iu(:^\:**p+u@O,2)

Cobalah online!

    I u
    ( :
^ \ : * * p + u
@ O , 2 ) . . .
    . .
    . .

jawaban asli:

Iu-2^\:*p*qu@O,2+p*:

Cobalah online!

Perluas ke kubus

    I u
    - 2
^ \ : * p * q u
@ O , 2 + p * :
    . .
    . .

yang mengimplementasikan (n*(n-2)^2+n^2)/2pendekatan tersebut.

Giuseppe
sumber
1

Python 2 , 25 24 byte

  • Disimpan satu byte berkat Neil ; bermain golf >>1untuk /2.
lambda n:n*(n*n-3*n+4)/2

Cobalah online!

Jonathan Frech
sumber
Bisakah Anda tidak menggunakan /2bukan >>1?
Neil
@ Neil Benar, benar.
Jonathan Frech
@Neil Itu adalah artefak dari belakang ketika ada jumlah yang membutuhkan pembagian.
Jonathan Frech
1

dc, 13 byte

dd2-2^*r2^+2/

Implementasi yang cukup mudah dari formula pertama yang tercantum pada halaman 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
Joe
sumber
1

Japt , 7 byte

à3 *3+U

Coba di sini!

Pertama, itu adalah komentar atas jawaban Shaggy, tetapi mereka mengatakan saya harus mempostingnya sendiri.

Tuan Xcoder
sumber
Hanya perhatikan ini sekarang - +1.
Shaggy
1

05AB1E , 2 byte

ÅU

Cobalah online!

Bagaimana?

¯ \ _ (ツ) _ / ¯

Mr. Xcoder
sumber
0

Mathematica, 20 byte

#~PolygonalNumber~#&
Jonathan Frech
sumber
0

Jelly , 6 byte

’*3+‘H

Cobalah online!

Menggunakan algoritma Emigna yang terinspirasi oleh Neil.

Erik the Outgolfer
sumber
Saya pikir Anda akan menemukan bahwa <Dn*+>;komentar itu milik saya ...
Neil
Saya menggunakan modifikasinya, tetapi saya juga akan menambahkan Anda.
Erik the Outgolfer
0

Java 8, 18 byte

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

Coba di sini.

Pendekatan yang digunakan oleh sebagian besar jawaban lain adalah yang terpendek di Jawa. Untuk funsies saya juga porting dua jawaban lain:

Port of Python 2 jawaban Mr. Xcoder ( 29 byte ):

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

Coba di sini.

Jawaban Port of Lynn's Jelly (dengan perhitungan manual 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);}

Coba di sini.

Kevin Cruijssen
sumber