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.