Préface
Dans le célèbre chant des douze jours de Noël , le narrateur reçoit chaque jour plusieurs cadeaux. La chanson est cumulative - dans chaque verset, un nouveau cadeau est ajouté, avec une quantité supérieure au cadeau précédent. Une perdrix, deux tourterelles, trois poules françaises, etc.
À n'importe quel verset donné, N , nous pouvons calculer la somme cumulée des présents jusqu'à présent dans la chanson en trouvant le N ème nombre tétraédrique , qui donne les résultats:
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
Par exemple, après le verset 4, nous avons eu 4 * (1 perdrix) , 3 * (2 tourterelles) , 2 * (3 poules françaises) et 1 * (4 oiseaux chanteurs) . En les résumant, nous obtenons 4(1) + 3(2) + 2(3) + 1(4) = 20
.
Le défi
Votre tâche consiste à écrire un programme ou une fonction qui, étant donné un entier positif représentant le nombre de cadeaux 364 ≥ p ≥ 1 , détermine de quel jour (verset) de Noël il s'agit.
Par exemple, si p = 286 , nous sommes le 11e jour de Noël. Cependant, si p = 287 , alors la prochaine charge de cadeaux a commencé, ce qui signifie que c'est le 12ème jour.
Mathématiquement, cela consiste à trouver le nombre tétraédrique suivant et à retourner sa position dans toute la séquence des nombres tétraédriques.
Règles:
- Il s'agit de code-golf , donc la solution la plus courte (en octets) l'emporte.
- Des échappatoires de golf standard s'appliquent.
- En ce qui concerne les jours, votre programme doit être indexé 1.
- Votre soumission doit être un programme complet ou une fonction - mais pas un extrait.
Cas de test
1 -> 1
5 -> 3
75 -> 7
100 -> 8
220 -> 10
221 -> 11
364 -> 12
x=>{while(x>p)p+=r+=++i;return i}
je suis sûr qu'il peut être raccourci dans un langage comme JavaScript.