Nº números Ngonais

8

A maioria de nós provavelmente conhece o conceito de números triangulares e quadrados. No entanto, também existem números pentagonais, números hexagonais, números septagonais, números octogonais etc. O N-ésimo número Nagonal é definido como o N-ésimo número da sequência formada com um polígono de N lados. Obviamente, N> = 3, pois não existem formas fechadas de 2 ou 1 face. Os primeiros números N-Ngonais são 0, 1, 2, 6, 16, 35, 66, 112, 176, 261, 370, 506, 672, 871 .... Esta é a sequência A060354 no OEIS.

Sua tarefa:

Escreva um programa ou função que, quando recebe um número inteiro n como entrada, produz / retorna o número Nésimo Nagonal.

Entrada:

Um número inteiro N entre 3 e 10 ^ 6.

Resultado:

O enésimo número nagonal em que N é a entrada.

Caso de teste:

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

Pontuação:

Isso é , a menor pontuação em bytes ganha!

Gryphon
fonte
Related
Digital Trauma
Não faria mal adicionar uma definição precisa direta.
Wlod AA 12/10

Respostas:

11

Neim , 1 byte

¯ \ _ (ツ) _ / ¯

Experimente online!

Okx
fonte
1
Um built-in para isso? Mesmo? Obviamente menos obscuro do que eu pensava.
Gryphon
1
@Gryphon Já existe há séculos.
Okx
2
@Gryphon Yeah. Existe desde maio.
Okx
1
@Gryphon Nesse ponto, houve uma série de desafios para os números poligonais, então eu adicionei um monte de Neim: P
Okx
3
Parece ser um elemento interno para calcular o número ath- bdiagonal, que obtém ambos os parâmetros preenchidos automaticamente com o único argumento fornecido.
Lynn
6

05AB1E , 7 6 bytes

Guardado 1 byte graças a Neil

<ÐP+>;

Experimente online!

Explicação

<        # push input-1
 Ð       # triplicate
  P      # product of stack
   +     # add input
    >    # increment
     ;   # divide by 2
Emigna
fonte
<Dn*+>;também funciona para 7 bytes.
Neil
@ Neil: Obrigado! Uma versão modificada do que me salvou um byte :)
Emigna
Você não pode fazer em <3mvez de <ÐP?
Erik the Outgolfer
@ EriktheOutgolfer: Claro, mas é a mesma quantidade de bytes.
Emigna
@ Emigna Só pedi para ter certeza.
Erik the Outgolfer
4

Pyke , 6 bytes

t3^+he

Experimente aqui!

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

Japonês , 9 8 bytes

´U+³ z Ä

Tente

  • 1 byte economizado graças ao ETH

Explicação

Decremente ( ´) a entrada ( U), adicione a entrada ao cubo ( ³), divida o piso por 2 ( z) e adicione 1 ( Ä).

Shaggy
fonte
Há cerca de um bazillion maneiras de reescrever isso em 9 bytes, mas é difícil encontrar uma solução de 8 bytes ... oh, aqui está uma que eu acho que deve funcionar:´U+³ z Ä
ETHproductions
Bom, @ETHproductions; se distraiu com o trabalho enquanto tentava analisá-lo.
Shaggy
@ETHproductions Nice, que é complicado ... outro seria ´U+³+2 z.
Erik the Outgolfer
@EriktheOutgolfer: ou em ÄÄvez de +2.
Shaggy
1
7 bytes: à3 *3+Uou U+3*Uà3(o crédito vai parcialmente para Lynn) ... Com certeza, pode ser reorganizado para salvar mais bytes.
Mr. Xcoder
3

PowerShell , 34 28 bytes

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

Experimente online!

Solução de formulário fechado disponível na página OEIS. FOIL usado para outras economias de 6 bytes.

AdmBorkBork
fonte
3

MATL , 7 bytes

t3Xn3*+

A sugestão de Luis Mendo, que é um pouco mais clara.

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

Experimente online!

t:3XNn+

Experimente online!

Ambas as soluções portam o 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
fonte
Talvez um pouco mais simples:t3Xn3*+
Luis Mendo
Eu juro que procurei Xne não vi. Eu não estou convencido de que eu sei ler documentação ...
Giuseppe
A documentação pode ser mais clara :-) Pressupõe que você saiba mais ou menos as funções equivalentes do Matlab. Nesse caso, se você procurar combinações de nchoosekno servidor de Suever, ele fornecerá as duas funções 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)

Recursão FTW (ou talvez apenas para a sétima ...)

ETHproductions
fonte
Ou você poderia porta a solução fechado formulário para 17 bytes ...
Neil
2

Mathematica, 14 bytes

mais curto que o embutido !!!

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

Experimente online!

e 3 bytes mais curtos com a ajuda de Martin Ender

J42161217
fonte
2

Cubix , 20 17 bytes

Economizou 3 bytes portando a resposta de Emigna .

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

Experimente online!

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

resposta original:

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

Experimente online!

Expande para o cubo

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

que implementa a (n*(n-2)^2+n^2)/2abordagem.

Giuseppe
fonte
1

Python 2 , 25 24 bytes

  • Economizou um byte graças a Neil ; golfed>>1 para /2.
lambda n:n*(n*n-3*n+4)/2

Experimente online!

Jonathan Frech
fonte
Você não pode usar em /2vez de >>1?
Neil
@ Neil Verdade, verdade.
Jonathan Frech
@ Neil Era um artefato de volta quando havia uma soma que precisava de divisão.
Jonathan Frech
1

dc, 13 bytes

dd2-2^*r2^+2/

Uma implementação bastante direta da primeira fórmula listada na 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
fonte
1

Japonês , 7 bytes

à3 *3+U

Experimente aqui!

Primeiro, foi um comentário sobre a resposta de Shaggy, mas eles me disseram que eu deveria publicá-la.

Mr. Xcoder
fonte
Só percebendo isso agora - +1.
Salsicha
0

Mathematica, 20 bytes

#~PolygonalNumber~#&
Jonathan Frech
fonte
0

Gelatina , 6 bytes

’*3+‘H

Experimente online!

Usa o algoritmo de Emigna inspirado em Neil.

Erik, o Outgolfer
fonte
Acho que você vai achar que o <Dn*+>;comentário era meu ...
Neil
Estou usando a modificação dele, mas vou adicioná-lo também.
Erik the Outgolfer
0

Java 8, 18 bytes

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

Experimente aqui.

A abordagem usada pela maioria das outras respostas é a mais curta em Java. Para os divertidos, eu também trouxe duas outras respostas:

Porta da resposta Python 2 do Sr. Xcoder ( 29 bytes ):

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

Experimente aqui.

Resposta do porto de Jelly Lynn (com 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);}

Experimente aqui.

Kevin Cruijssen
fonte