Vorwort
In dem bekannten Weihnachtslied The Twelve Days of Christmas werden dem Erzähler täglich mehrere Geschenke überreicht. Das Lied ist kumulativ - in jedem Vers wird ein neues Geschenk hinzugefügt, dessen Menge um eins höher ist als die des vorangegangenen Geschenks. Ein Rebhuhn, zwei Turteltauben, drei französische Hühner und so weiter.
In jedem Vers N können wir die kumulative Summe der bisher im Lied vorhandenen Geschenke berechnen, indem wir die N- te tetraedrische Zahl ermitteln , die die folgenden Ergebnisse liefert:
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
Zum Beispiel hatten wir nach Vers 4 4 * (1 Rebhuhn) , 3 * (2 Turteltauben) , 2 * (3 französische Hühner) und 1 * (4 rufende Vögel) . Wenn wir diese addieren, erhalten wir 4(1) + 3(2) + 2(3) + 1(4) = 20
.
Die Herausforderung
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die bei einer positiven Ganzzahl, die die Anzahl der Geschenke 364 ≥ p ≥ 1 darstellt , bestimmt, welcher Tag (Vers) von Weihnachten es ist.
Wenn zum Beispiel p = 286 ist , sind wir am 11. Weihnachtstag. Wenn jedoch p = 287 ist , dann hat die nächste Ladung Geschenke begonnen, was bedeutet, dass es der 12. Tag ist.
Mathematisch bedeutet dies, die nächste tetraedrische Zahl zu finden und ihre Position in der gesamten Folge der tetraedrischen Zahlen zurückzugeben.
Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes).
- Es gelten Standard-Golflöcher.
- Wenn es um Tage geht, muss Ihr Programm 1-indiziert sein.
- Ihre Einreichung muss ein vollständiges Programm oder eine Funktion sein - aber kein Ausschnitt.
Testfälle
1 -> 1
5 -> 3
75 -> 7
100 -> 8
220 -> 10
221 -> 11
364 -> 12
x=>{while(x>p)p+=r+=++i;return i}
Ich bin sicher, dass es in einer Sprache wie JavaScript kürzer gemacht werden kann.