Предисловие
В известной песне «Двенадцать дней Рождества» рассказчику ежедневно преподносят несколько подарков. Песня является кумулятивной - в каждом стихе добавляется новый подарок, количество которого на один выше, чем подарок перед ним. Одна куропатка, две горлицы, три французские курицы и так далее.
В любом данном стихе, N , мы можем вычислить кумулятивную сумму подарков на данный момент в песне, найдя N- е тетраэдрическое число , которое дает результаты:
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
Например, после 4-го стиха у нас было 4 * (1 куропатка) , 3 * (2 черепахи) , 2 * (3 французских курицы) и 1 * (4 призывающих птицы) . Суммируя их, мы получаем 4(1) + 3(2) + 2(3) + 1(4) = 20
.
Соревнование
Ваша задача - написать программу или функцию, которая, учитывая положительное целое число, представляющее количество подарков 364 ≥ p ≥ 1 , определяет, какой это день (стих) Рождества.
Например, если р = 286 , мы находимся в 11-й день Рождества. Однако, если р = 287 , то начинается следующая загрузка подарков, то есть это 12-й день.
Математически это нахождение следующего тетраэдрического числа и возвращение его положения во всей последовательности тетраэдрических чисел.
Правила:
- Это код-гольф , поэтому выигрывает самое короткое решение (в байтах).
- Применяются стандартные лазейки для игры в гольф.
- Когда дело доходит до дней, ваша программа должна быть 1-проиндексирована.
- Ваша заявка должна быть полной программой или функцией, но не фрагментом.
Тестовые случаи
1 -> 1
5 -> 3
75 -> 7
100 -> 8
220 -> 10
221 -> 11
364 -> 12
x=>{while(x>p)p+=r+=++i;return i}
я уверен, что это можно сделать короче на таком языке, как JavaScript.