Фон
Последовательность 1-2-3-Трибоначи
Представьте себе на секунду, что вы можете создать последовательность Фибоначчи, заменив стандартную формулу итерации следующим:
По сути, вместо суммирования двух последних, чтобы получить следующее, вы суммируете последние три. Это основа для последовательности 1-2-3-Tribonacci.
Критерий Брауна
Критерий Брауна гласит, что вы можете представлять любое целочисленное значение в виде суммы членов последовательности при условии, что:
Для всех
n
больше 1,
Что это значит для вызова
Вы можете описать любое положительное целое число как сумму членов последовательности 1-2-3-Tribonacci, образованной следующими начальными условиями:
Это известно как, для каждого значения в этой последовательности, соотношение между терминами никогда не бывает больше 2 (отношение в среднем составляет около 1,839).
Как написать в этой системе численного представления
Допустим, вы используете представление с прямым порядком байтов. Выстроить членов последовательности так:
1 2 3 6 11 20 37 68
Затем вы берете свое число, которое будет представлено (для наших тестов, скажем, оно 63
) и находите значения заданных 1-2-3-Tribonacci, которые в сумме составляют 63 (используя сначала самые большие значения!) . Если число является частью суммы, поставьте 1 под ним, 0, если нет.
1 2 3 6 11 20 37 68
0 0 0 1 0 1 1 0
Вы можете сделать это для любого заданного целого числа - просто убедитесь, что вы сначала используете самые большие значения ниже заданного вами значения!
Определение (наконец)
Напишите программу или функцию, которая будет выполнять следующие действия при условии положительного целочисленного ввода n
(записанного в любой стандартной базе) между 1 и максимальным значением вашего языка:
- Преобразуйте значение в определенное числовое представление 1-2-3-Tribonacci.
- Используя это двоичное представление, и читайте его, как если бы оно было двоичным. Это означает, что цифры остаются прежними, но их значение меняется.
- Возьмите это двоичное число и конвертируйте его в основание исходного числа.
- Выведите или верните этот новый номер.
Однако до тех пор, пока вывод действителен, вам не нужно выполнять следующие шаги. Если вы волшебным образом найдете некую формулу, которая короче (и математически эквивалентна), не стесняйтесь ее использовать.
Примеры
Позвольте функции f
быть функцией, описанной определением, и позвольте []
представлять шаги, предпринятые (как little-endian, хотя это не должно иметь значения) (вам не нужно следовать этому процессу, это просто процесс, описанный):
>>> 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