Introdução
Um número pentagonal ( A000326 ) é gerado pela fórmula P n = 0,5 × (3n 2 -n) . Ou você pode apenas contar a quantidade de pontos usados:
Você pode usar a fórmula ou o gif acima para encontrar os primeiros números pentagonais:
1, 5, 12, 22, 35, 51, 70, 92, 117, 145, 176, 210, 247, 287, 330, 376, 425, 477, etc...
Em seguida, precisamos calcular a soma de x números consecutivos.
Por exemplo, se x = 4 , precisamos olhar para P n + P n + 1 + P n + 2 + P n + 3 (que consiste em 4 termos). Se a soma dos números pentagonais também for um número pentagonal, chamaremos isso de número pentagonal pentagonal .
Para x = 4 , o menor número de pentágono pentagonal é 330
, composto de 4 números pentagonais consecutivos: 51, 70, 92, 117
. Portanto, quando a entrada é 4
, seu programa de função deve ser exibido 330
.
Tarefa
- Quando é fornecido um número inteiro maior que 1, imprima o menor número de pentágono pentagonal.
- Você pode fornecer uma função ou um programa.
- Nota: Não há soluções para, por exemplo, x = 3 . Isso significa que, se não for possível criar um número a partir dos primeiros 10000 números pentagonais, você deverá parar de calcular e enviar o que for melhor para você.
- Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Casos de teste:
Input: 2
Output: 1926 (which comes from 925, 1001)
Input: 3
Output: ?
Input: 4
Output: 330 (which comes from 51, 70, 92, 117)
Input: 5
Output: 44290 (which comes from 8400, 8626, 8855, 9087, 9322)
Input: 6
Output: 651 (which comes from 51, 70, 92, 117, 145, 176)
Input: 7
Output: 287 (which comes from 5, 12, 22, 35, 51, 70, 92)
Input: 8
Output: ?
Input: 9
Output: 12105 (which comes from 1001, 1080, 1162, 1247, 1335, 1426, 1520, 1617, 1717)
Input: 10
Output: ?
Também números maiores podem ser dados:
Input: 37
Output: 32782
Input: 55
Output: 71349465
Input: 71
Output: 24565290
10001-x
x = 3
que não tem soluções?9919
->496458299155
Respostas:
CJam, 29 bytes
Experimente online.
Demora alguns segundos para executar.
Explicação
Primeiro, precisamos verificar quantos números pentagonais precisamos considerar como somas potenciais. A soma dos primeiros 10.000 números pentagonais é
500050000000
. O primeiro número pentagonal maior que esse é o 577.380º.Usei um programa ligeiramente modificado para encontrar as maiores entradas que produzem uma solução não vazia. Estas são todas as soluções para insumos superiores a 9.000:
fonte
Lua, 142 bytes
Ungolfed
Yay para inverter tabelas!
Atualização 142 bytes: salvou 10 bytes removendo a chamada de função supérflua 'tonumber'.
fonte
Haskell, 109 bytes
Retorna
0
se não houver um número pentagonal do pentágono.Exemplo de uso (leva algum tempo para terminar):
map (#take(10^4)p) [1..10]
->[1,1926,0,330,44290,651,287,0,12105,0]
.É mais ou menos uma implementação direta da definição: se a soma dos primeiros
x
elementos estiver na lista, produza-a; tente novamente com o final da lista. Comece com os primeiros 10.000 números pentagonais, pare e retorne0
se a lista tiver menos dex
elementos.fonte
PARI / GP, 71 bytes
Eu gosto da
ispolygonal
função no PARI / GP.fonte
Python 3, 144 bytes
Isso inverte a definição de um número pentagonal; se P (n) = (3n ^ 2-n) / 2, então um dado P será um número pentagonal iff (1 + sqrt (24 * P + 1)) / 6 é um número inteiro. (Tecnicamente, ele também deve considerar (1 sqrt (24 * P + 1)) / 6, mas isso sempre deve ser negativo.) Também usa espaços e tabulações como dois níveis diferentes de indentação, conforme sugerido aqui . Isso não produz nada se não conseguir encontrar um número pentagonal pentagonal; Eu acredito que tudo bem?
Acredito firmemente que alguém mais esperto do que eu possa encontrar uma maneira de encurtar ainda mais isso, provavelmente em torno do loop for.
fonte
LabVIEW, 39 Primitivas do LabVIEW
Nenhum gif dele sendo executado desta vez.
O nó matemático no loop cria uma matriz de todos os números. Pegue Sub-array, adicione elementos, pesquise esse número, se encontrado, pegue index e stop loop.
Uma entrada inválida coloca o maior número pentagonal.
fonte
R,
114100 bytesungolfed (meio)
fonte
Gelatina , 30 bytes
Este código funciona com esta versão do Jelly e é equivalente ao seguinte código binário:
É de longe a abrandar e memória com fome para o intérprete on-line, uma vez que verifica a primeira 150.000.000 para pentagonality (149995000 passa a ser a 10.000 th número pentagonal).
Ao encurtar o alcance para algo mais sensato, você pode experimentar on-line! para entradas pequenas o suficiente.
Idéia
Um resultado conhecido sobre números pentagonais é que x é pentagonal se e somente se sqrt (24x + 1) - 1 é divisível por 6 .
Em vez de calcular os primeiros 10.000 números pentagonais, definimos um link auxiliar que remove números não pentagonais de uma determinada matriz. Por quê? Como a versão mais recente do Jelly que antecede esse desafio não tem uma maneira sensata de cruzar listas ...
Código
Gelatina, 21 bytes (não concorrente)
A versão mais recente do Jelly possui dois novos recursos (sobreposição de fatias e filtro / interseção de lista) e uma correção de bug, que permite uma contagem de bytes muito menor.
Esse código funciona bem no meu computador desktop, mas é um pouco lento o tempo limite do TIO. Para experimentá-lo online! (para entradas suficientemente pequenas), precisamos reduzir o intervalo inicial mais uma vez.
Como funciona
fonte
Mathematica 85 bytes
realiza uma pesquisa rápida até P 10 4 .
fonte
Axioma, 157 bytes
ungolfed e resultados
explicação: Podemos encontrar n usando o resultado "a", veja abaixo
[use 1 + sqrt (...) porque n> 0]
Isso acima significa que se existe um n0 tal que
do que
Depois disso, temos que provar que p (n0) = a para ter certeza (porque nem sempre é assim)
Mas o principal truque seria fazer a soma
apenas no início e encontre a próxima soma de x elementos simplesmente usando
e assim por diante para as outras somas (usando acima na instrução a: = a + p (j + x) -p (j)). Isso significa que não é necessário somar um número x elemento dentro do loop ... ..
fonte
Python 2 ,
128124 bytesExperimente online!
fonte
Javascript 93 bytes
fonte