Передмова
У добре відомій колядці «Дванадцять днів Різдва» оповідачеві подають кілька подарунків щодня. Пісня є кумулятивною - у кожному вірші додається новий подарунок, на кількість на один більший, ніж подарунок перед ним. Один Партрідж, Два Голуби-черепахи, Три французькі кури тощо.
У будь-якому даному вірші, 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 , визначає, який день (вірш) Різдва це.
Наприклад, якщо p = 286 , ми на 11 день Різдва. Однак якщо p = 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.