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!



Não faria mal adicionar uma definição precisa direta.
Wlod AA 12/10

Respostas:


11

Neim , 1 byte

¯ \ _ (ツ) _ / ¯

Experimente online!


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

<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

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


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

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)

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


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






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






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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.