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!

Greif
quelle
Verwandte
Digitales Trauma
Es würde nicht schaden, eine direkte genaue Definition hinzuzufügen.
Wlod AA

Antworten:

11

Neim , 1 Byte

¯ \ _ (ツ) _ / ¯

Probieren Sie es online aus!

Okx
quelle
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
Emigna
quelle
<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 ( Ä).

Zottelig
quelle
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)
Giuseppe
quelle
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 ...)

ETH-Produktionen
quelle
Oder Sie könnten die geschlossene Form Lösung für 17 Bytes portieren ...
Neil
1

Python 2 , 25 24 Bytes

  • Dank Neil ein Byte gespeichert ; golfed >>1zu /2.
lambda n:n*(n*n-3*n+4)/2

Probieren Sie es online aus!

Jonathan Frech
quelle
Kannst du nicht /2anstelle von verwenden >>1?
Neil
@Neil Richtig, richtig.
Jonathan Frech
@Neil Es war ein Artefakt von damals, als es eine Summe gab, die geteilt werden musste.
Jonathan Frech
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
Joe
quelle
1

Japt , 7 Bytes

à3 *3+U

Probieren Sie es hier aus!

Zuerst war es ein Kommentar zu Shaggys Antwort, aber sie sagten mir, ich sollte ihn selbst posten.

Mr. Xcoder
quelle
Das merke ich erst jetzt - +1.
Shaggy
0

Mathematica, 20 Bytes

#~PolygonalNumber~#&
Jonathan Frech
quelle
0

Gelee , 6 Bytes

’*3+‘H

Probieren Sie es online aus!

Verwendet den von Neil inspirierten Emigna-Algorithmus.

Erik der Outgolfer
quelle
Ich denke, Sie werden feststellen, dass der <Dn*+>;Kommentar mir gehörte ...
Neil
Ich benutze seine Modifikation, aber ich werde dich auch hinzufügen.
Erik der Outgolfer
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.

Kevin Cruijssen
quelle