Фон
Послідовність 1-2-3-трибобочки
Уявіть собі на секунду, що ви можете скласти послідовність вирівнювання, замінивши стандартну формулу ітерації на таке:
По суті, замість того, щоб підсумовувати останні два, щоб отримати наступне, ви підсумовуєте останні три. Це основа для послідовності 1-2-3-Трибонаші.
Критерій Брауна
Критерій Брауна стверджує, що ви можете представляти будь-яке ціле значення у вигляді суми членів послідовності за умови, що:
Для всіх,
n
більших за 1,
Що це означає для виклику
Ви можете описати будь-яке додатне ціле число як суму членів послідовності 1-2-3-Трибоначчі, утворених такими початковими умовами:
Це відомо, як для кожного значення в цій послідовності співвідношення між термінами ніколи не перевищує 2 (коефіцієнт в середньому становить приблизно 1,839).
Як записати в цю числову систему подання
Скажімо, ви використовуєте малоповажне представлення. Розташуйте членів послідовності так:
1 2 3 6 11 20 37 68
Потім ви берете своє число для представлення (для наших тестів, скажімо, це 63
) і знаходите значення заданих 1-2-3-трибочніків, які дорівнюють 63 (спочатку використовуючи найбільші значення!) . Якщо число є частиною суми, покладіть під ним 1, 0 якщо ні.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Ви можете зробити це для будь-якого цілого числа - просто переконайтеся, що спочатку ви використовуєте найбільші значення нижче вказаного вводу!
Визначення (нарешті)
Напишіть програму або функцію, яка буде виконати наступне, задавши введення додатного цілого числа n
(записане в будь-якій стандартній базі) між 1 і максимальним значенням вашої мови:
- Перетворіть значення у визначене числове представлення 1-2-3-Трибоначчі.
- Використовуючи це бінарне подання, і читайте його так, ніби двійкове. Це означає, що цифри залишаються однаковими, але те, що вони означають, змінюється.
- Візьміть це двійкове число і перетворіть його в основу вихідного числа.
- Виведіть або поверніть це нове число.
Однак, поки результат дійсний, вам не потрібно виконувати ці кроки. Якщо ви магічно знайдете формулу, яка є коротшою (і математично еквівалентною), сміливо використовуйте її.
Приклади
Нехай функція f
- це функція, описана визначенням, і нехай []
представляє кроки, зроблені (як маленькі ендіани, хоча це не має значення) (вам не потрібно слідувати за цим процесом, це лише описаний процес):
>>> f(1)
[1]
[1]
[1]
1
>>> f(5)
[5]
[0, 1, 1]
[6]
6
>>> f(63)
[63]
[0, 0, 0, 1, 0, 1, 1]
[104]
104