Nth Ngonal Numbers

8

La mayoría de nosotros probablemente estamos familiarizados con el concepto de números triangulares y cuadrados. Sin embargo, también hay números pentagonales, números hexagonales, números septagonales, números octagonales, etc. El enésimo número nagonal se define como el enésimo número de la secuencia formada con un polígono de N lados. Obviamente, N> = 3, ya que no hay formas cerradas de 2 o 1 cara. Los primeros números Nth Ngonal son 0, 1, 2, 6, 16, 35, 66, 112, 176, 261, 370, 506, 672, 871 ... Esta es la secuencia A060354 en el OEIS.

Tu tarea:

Escriba un programa o función que, cuando se le da un número entero n como entrada, genera / devuelve el enésimo número nagonal.

Entrada:

Un entero N entre 3 y 10 ^ 6.

Salida:

El enésimo número Nagonal donde N es la entrada.

Caso de prueba:

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

Puntuación:

Este es el , ¡la puntuación más baja en bytes gana!

Grifo
fuente
Relacionado
Trauma digital
No estaría de más agregar una definición directa y precisa.
Wlod AA

Respuestas:

11

Neim , 1 byte

¯ \ _ (ツ) _ / ¯

Pruébalo en línea!

Okx
fuente
1
¿Un incorporado para esto? De Verdad? Obviamente menos oscuro de lo que pensaba.
Gryphon
1
@Gryphon Ha existido por siglos.
Okx
2
@Gryphon Sí. Existe desde mayo.
Okx
1
@Gryphon En ese momento, había muchos desafíos para los números poligonales, así que agregué un montón a Neim: P
Okx
3
Esto parece ser una función integrada para calcular el número ath- bgonal, que hace que sus dos parámetros se completen automáticamente con el único argumento dado.
Lynn
6

05AB1E , 7 6 bytes

Guardado 1 byte gracias a Neil

<ÐP+>;

Pruébalo en línea!

Explicación

<        # push input-1
 Ð       # triplicate
  P      # product of stack
   +     # add input
    >    # increment
     ;   # divide by 2
Emigna
fuente
<Dn*+>;También funciona para 7 bytes.
Neil
@Neil: ¡Gracias! Una versión modificada de eso me salvó un byte :)
Emigna
¿No puedes hacer en <3mlugar de <ÐP?
Erik the Outgolfer
@EriktheOutgolfer: Claro, pero es la misma cantidad de bytes.
Emigna
@Emigna Solo pedí estar segura.
Erik the Outgolfer
4

Pyke , 6 bytes

t3^+he

Pruébalo aquí!

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

Japt , 9 8 bytes

´U+³ z Ä

Intentalo

  • 1 byte guardado gracias a ETH

Explicación

Disminuya ( ´) la entrada ( U), agregue la entrada en cubos ( ³) a eso, divida el piso por 2 ( z) y agregue 1 ( Ä).

Lanudo
fuente
Hay alrededor de un millón de maneras de reescribir esto en 9 bytes, pero es difícil encontrar una solución de 8 bytes ... oh, aquí hay una que creo que debería funcionar:´U+³ z Ä
ETHproductions
Buena, @ETHproductions; se distrajo con el trabajo al intentar aplastarlo.
Shaggy
@ETHproductions Una buena, eso es complicado ... otra sería ´U+³+2 z.
Erik the Outgolfer
@EriktheOutgolfer: o en ÄÄlugar de +2.
Shaggy
1
7 bytes: à3 *3+Uo U+3*Uà3(el crédito va en parte a Lynn) ... Seguro que se puede reorganizar para guardar más bytes.
Sr. Xcoder
3

PowerShell , 34 28 bytes

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

Pruébalo en línea!

Solución de forma cerrada desarrollada desde la página OEIS. FOIL usado para otros 6 bytes de ahorro.

AdmBorkBork
fuente
3

MATL , 7 bytes

t3Xn3*+

La sugerencia de Luis Mendo, que es un poco más clara.

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

Pruébalo en línea!

t:3XNn+

Pruébalo en línea!

Ambas soluciones portan el algoritmo de 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
fuente
Quizás un poco más simple:t3Xn3*+
Luis Mendo
eh, juro que busqué Xny no lo vi. No estoy convencido de saber leer la documentación ...
Giuseppe
La documentación podría ser más clara :-) Asume que más o menos conoce las funciones equivalentes de Matlab. En este caso, si busca combinaciones de nchooseken el servidor de Suever, le da ambas funciones como resultados
Luis Mendo
2

JavaScript (ES6), 38 bytes

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

Recursion FTW (o tal vez solo para el séptimo ...)

ETHproducciones
fuente
O podría portar la solución de formulario cerrado para 17 bytes ...
Neil
2

Mathematica, 14 bytes

más corto que incorporado !!!

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

Pruébalo en línea!

y 3 bytes más cortos con la ayuda de Martin Ender

J42161217
fuente
1

Python 2 , 25 24 bytes

  • Salvado un byte gracias a Neil ; golf >>1a /2.
lambda n:n*(n*n-3*n+4)/2

Pruébalo en línea!

Jonathan Frech
fuente
¿No puedes usar en /2lugar de >>1?
Neil
@Neil Cierto, cierto.
Jonathan Frech
@Neil Era un artefacto de cuando había una suma que necesitaba división.
Jonathan Frech
1

cc, 13 bytes

dd2-2^*r2^+2/

Una implementación bastante sencilla de la primera fórmula listada en la página 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
fuente
1

Japt , 7 bytes

à3 *3+U

Pruébalo aquí!

Primero, fue un comentario sobre la respuesta de Shaggy, pero me dijeron que debía publicarlo yo mismo.

Sr. Xcoder
fuente
Solo notando esto ahora - +1.
Shaggy
0

Mathematica, 20 bytes

#~PolygonalNumber~#&
Jonathan Frech
fuente
0

Jalea , 6 bytes

’*3+‘H

Pruébalo en línea!

Utiliza el algoritmo de Emigna inspirado en Neil.

Erik el Outgolfer
fuente
Creo que encontrarás que el <Dn*+>;comentario fue mío ...
Neil
Estoy usando su modificación, pero también te agregaré.
Erik the Outgolfer
0

Java 8, 18 bytes

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

Pruébalo aquí

El enfoque utilizado por la mayoría de las otras respuestas es el más corto en Java. Para funsies también porté otras dos respuestas:

Puerto de la respuesta de Python 2 del Sr. Xcoder ( 29 bytes ):

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

Pruébalo aquí

Respuesta de Port of Lynn's Jelly (con cálculo manual de 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);}

Pruébalo aquí

Kevin Cruijssen
fuente