Introdução
Em matemática, um número poligonal é um número representado como pontos ou seixos dispostos na forma de um polígono regular. Os pontos são vistos como alfas (unidades). Estes são um tipo de números figurados bidimensionais.
O número 10, por exemplo, pode ser organizado como um triângulo:
* ** *** ****
Mas 10 não pode ser organizado como um quadrado. O número 9, por outro lado, pode ser:
*** *** ***
Alguns números, como 36, podem ser organizados como um quadrado e como um triângulo:
****** * ****** ** ****** *** ****** **** ****** ***** ****** ******
Por convenção, 1 é o primeiro número poligonal para qualquer número de lados. A regra para ampliar o polígono para o próximo tamanho é estender dois braços adjacentes em um ponto e, em seguida, adicionar os lados extras necessários entre esses pontos. Nos diagramas a seguir, cada camada extra é mostrada em vermelho.
Números triangulares:
Números quadrados:
Polígonos com maior número de lados, como pentágonos e hexágonos, também podem ser construídos de acordo com esta regra, embora os pontos não formem mais uma estrutura perfeitamente regular, como acima.
Números pentagonais:
Números hexagonais:
Fonte: Wikipedia
Sua tarefa
Dado um número inteiro positivo N (1 <= N <= 1000), imprima todo tipo de número poligonal N começando de números triangulares até e incluindo números icosagonais (20-gon).
Por exemplo, o número 10 é um número triangular e um número decagonal; portanto, a saída deve ser algo como (você pode escolher seu próprio formato de saída, mas deve se parecer com isso):
3 10
Casos de teste
1 -> 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
2 -> (None)
3 -> 3
6 -> 3 6
36 -> 3 4 13
Para referência, o n
número k
-th -gonal é:
Crédito: xnor
Lembre-se, isso é código-golfe , então o código com o menor número de bytes vence.
fonte
n
th k-gonal é(k-2)*n*(n-1)/2 + n
.Respostas:
Python 3, 68 bytes
Para cada número potencial de lados
s+2
, resolve a fórmula quadráticaR=s*n*(n-1)/2 + n
den
para ver se o resultado é um número inteiro.Comparar (73 bytes):
Uma abordagem alternativa de solução para
s
fornece 62 bytes no Python 3, mas falhaR=1
.fonte
JavaScript (ES6), 90 bytes
Resolve a equação quadrática. 73 bytes em versões suficientemente novas do Firefox:
fonte
> <>, 62 + 3 = 65 bytes
Espera a entrada na parte superior da pilha, portanto, +3 bytes para o
-v
sinalizador.Esta é minha primeira vez programando em> <>, portanto, posso estar perdendo alguns truques óbvios para reduzir o código.
Explicação:
Inicialização
Move N para o registrador, empurra o contador para a pilha (começando em
1
, que corresponde a números triangulares) e inicia a sequência com os valores0
e1
.Loop principal
Compara a parte superior da pilha com o registro. Se for igual, vá para a rotina de impressão. Se for maior, vá para a rotina de redefinição. Caso contrário, faça a diferença entre os dois principais itens da pilha, adicione o contador e adicione ao item anterior da pilha superior. Isso calcula o próximo número poligonal.
Impressão
Imprime o contador + 2, seguido por uma nova linha, e depois passa para a rotina de redefinição.
Redefinir
Remove os dois principais itens da pilha e incrementa o contador. Encerra o programa se o contador for maior que 18, caso contrário, envia os números iniciais
0
e1
para a pilha e retorna ao loop principal.fonte
Gelatina , 22 bytes
Experimente online!
Explicação
fonte
Axioma 203 bytes
aqui é menos jogado e rotineiro que mostra números
fonte
AWK , 67 bytes
Experimente online!
Tentei resolver o quadrático, mas verificar cada valor para ver se funciona é mais curto (e menos propenso a erros)
fonte
R,
68bytesLê
N
de stdin. Calcula os primeirosN
números k-gonal e obtémk
onde eles são iguaisN
, usando a fórmula de xnor; no entanto, salva bytes entre parênteses usando em1:18
vez de3:20
e adicionando2
no final.expand.grid
por padrão, nomeia as colunasVar1
,Var2
..., se um nome não for fornecido.$
índices por correspondência parcial, portantom$V
corresponde àm$Var2,
segunda coluna.versão antiga:
Experimente online!
fonte
Pari / GP , 34 bytes
Pari / GP tem um built-in para testar se um número é um número poligonal.
Experimente online!
fonte
Gelatina , 20 bytes
Eu apenas comecei a escrever um truque eficaz desse desafio (embora abranja todos os k> 1 e não apenas [1,20]) ... então, em vez disso, eu vou responder!
Um programa completo que imprime uma representação da lista Jelly dos resultados *
Experimente online!
* Nenhum resultado imprime nada;
um único resultado imprime exatamente esse número;
vários resultados imprime uma lista separada
[]
e,
separada de númerosQuão?
fonte