Prefácio
Na canção bem conhecida, Os Doze Dias de Natal , o narrador recebe vários presentes por dia. A música é cumulativa - em cada verso, um novo presente é adicionado, com uma quantidade um maior que o presente anterior. Uma perdiz, duas pombas, três galinhas francesas e assim por diante.
Em qualquer verso N , podemos calcular a soma acumulada de presentes até o momento na música, encontrando o N- ésimo número tetraédrico , que fornece os resultados:
Verse 1: 1
Verse 2: 4
Verse 3: 10
Verse 4: 20
Verse 5: 35
Verse 6: 56
Verse 7: 84
Verse 8: 120
Verse 9: 165
Verse 10: 220
Verse 11: 286
Verse 12: 364
Por exemplo, após o versículo 4, tivemos 4 * (1 perdiz) , 3 * (2 pombas) , 2 * (3 galinhas francesas) e 1 * (4 pássaros cantando) . Ao somar estes, obtemos 4(1) + 3(2) + 2(3) + 1(4) = 20
.
O desafio
Sua tarefa é escrever um programa ou função que, dado um número inteiro positivo representando o número de presentes 364 ≥ p ≥ 1 , determine em que dia (verso) do Natal é.
Por exemplo, se p = 286 , estamos no 11º dia de Natal. No entanto, se p = 287 , a próxima carga de presentes começou, ou seja, é o 12º dia.
Matematicamente, isso é encontrar o próximo número tetraédrico e retornar sua posição em toda a sequência de números tetraédricos.
Regras:
- Isso é código-golfe , então a solução mais curta (em bytes) vence.
- Aplicam-se lacunas de golfe padrão.
- Quando se trata de dias, seu programa deve ser indexado 1.
- Seu envio deve ser um programa ou uma função completa - mas não um trecho.
Casos de teste
1 -> 1
5 -> 3
75 -> 7
100 -> 8
220 -> 10
221 -> 11
364 -> 12
x=>{while(x>p)p+=r+=++i;return i}
:, tenho certeza de que pode ser reduzido em uma linguagem como JavaScript.