N-te Ngonale Zahlen


8

Die meisten von uns kennen wahrscheinlich das Konzept der Dreiecks- und Quadratzahlen. Es gibt jedoch auch fünfeckige Zahlen, hexagonale Zahlen, septagonale Zahlen, achteckige Zahlen usw. Die N-te Nagonale Zahl ist definiert als die N-te Zahl der Sequenz, die mit einem Polygon von N Seiten gebildet wird. Offensichtlich ist N> = 3, da es keine 2- oder 1-seitigen geschlossenen Formen gibt. Die ersten paar N-ten Ngon-Zahlen sind 0, 1, 2, 6, 16, 35, 66, 112, 176, 261, 370, 506, 672, 871 .... Dies ist die Sequenz A060354 in der OEIS.

Deine Aufgabe:

Schreiben Sie ein Programm oder eine Funktion, die bei Angabe einer Ganzzahl n als Eingabe die N-te Nagonalzahl ausgibt / zurückgibt.

Eingang:

Eine ganze Zahl N zwischen 3 und 10 ^ 6.

Ausgabe:

Die N-te Nagonale Zahl, wobei N die Eingabe ist.

Testfall:

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

Wertung:

Dies ist , niedrigste Punktzahl in Bytes gewinnt!



Es würde nicht schaden, eine direkte genaue Definition hinzuzufügen.
Wlod AA

Antworten:


11

Neim , 1 Byte

¯ \ _ (ツ) _ / ¯

Probieren Sie es online aus!


1
Ein eingebautes dafür? "Ja wirklich?" Offensichtlich weniger dunkel als ich gedacht hatte.
Gryphon

1
@ Grephon Es gibt es schon seit Ewigkeiten.
Okx

2
@ Grey Ja. Es existiert seit Mai.
Okx

1
@ Grephon Zu diesem Zeitpunkt gab es viele Herausforderungen für polygonale Zahlen, also habe ich Neim: P
Okx

3
Dies scheint eine integrierte Funktion zur Berechnung der ath- bGonalenzahl zu sein, bei der beide Parameter automatisch mit dem einzigen angegebenen Argument ausgefüllt werden.
Lynn

6

05AB1E , 7 6 Bytes

1 Byte dank Neil gespeichert

<ÐP+>;

Probieren Sie es online aus!

Erläuterung

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

<Dn*+>;funktioniert auch für 7 Bytes.
Neil

@Neil: Danke! Eine modifizierte Version davon hat mir ein Byte gespart :)
Emigna

Kannst du nicht <3mstatt <ÐP?
Erik der Outgolfer

@EriktheOutgolfer: Sicher, aber es ist die gleiche Anzahl von Bytes.
Emigna

@ Emigna Ich habe nur darum gebeten, sicher zu sein.
Erik der Outgolfer


4

Japt , 9 8 Bytes

´U+³ z Ä

Versuch es

  • 1 Byte dank ETH gespart

Erläuterung

Dekrementieren ( ´) Sie die Eingabe ( U), addieren Sie die Eingabe cubed ( ³) dazu, teilen Sie den Boden durch 2 ( z) und addieren Sie 1 ( Ä).


Es gibt ungefähr eine Unmenge Möglichkeiten, dies in 9 Bytes umzuschreiben, aber es ist schwierig, eine 8-Byte-Lösung zu finden ... Oh, hier ist eine, von der ich denke, dass sie funktionieren sollte:´U+³ z Ä
ETHproductions

Schön, @ETHproductions; wurde von der Arbeit abgelenkt, als sie versuchte, sie zu zerkleinern.
Shaggy

@ETHproductions Schön, das ist schwierig ... ein anderes wäre ´U+³+2 z.
Erik der Outgolfer

@EriktheOutgolfer: oder ÄÄstatt +2.
Shaggy

1
7 Bytes: à3 *3+Uoder U+3*Uà3(das Guthaben geht teilweise an Lynn) ... Ganz sicher, dass es neu angeordnet werden kann, um mehr Bytes zu sparen.
Mr. Xcoder




3

MATL , 7 Bytes

t3Xn3*+

Luis Mendos Vorschlag, der etwas klarer ist.

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

Probieren Sie es online aus!

t:3XNn+

Probieren Sie es online aus!

Beide Lösungen portieren den Algorithmus von 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)

Vielleicht etwas einfacher:t3Xn3*+
Luis Mendo

Ich schwöre, ich habe gesucht Xnund es nicht gesehen. Ich bin nicht überzeugt, dass ich weiß, wie man Dokumentation liest ...
Giuseppe

Die Dokumentation könnte klarer sein :-) Es wird davon ausgegangen, dass Sie die entsprechenden Matlab-Funktionen mehr oder weniger kennen. In diesem Fall, wenn Sie nach Kombinationen von nchoosekin Suevers Server suchen, gibt es beide Funktionen als Ergebnisse
Luis Mendo


2

JavaScript (ES6), 38 Byte

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

Rekursion FTW (oder vielleicht nur zum siebten ...)


Oder Sie könnten die geschlossene Form Lösung für 17 Bytes portieren ...
Neil






1

Gleichstrom, 13 Bytes

dd2-2^*r2^+2/

Eine ziemlich einfache Implementierung der ersten Formel, die auf der OEIS-Seite aufgeführt ist .

# 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 Bytes

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

Probieren Sie es hier aus.

Der von den meisten anderen Antworten verwendete Ansatz ist der kürzeste in Java. Zum Spaß habe ich auch zwei andere Antworten portiert:

Port von Mr. Xcoders Python 2-Antwort ( 29 Bytes ):

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

Probieren Sie es hier aus.

Port of Lynn's Jelly Antwort (mit manueller Berechnung von a choose b) ( 76 Bytes ):

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);}

Probieren Sie es hier aus.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.