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!



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!


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

<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

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


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

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)

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 ...)


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






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






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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.