- 21, Oct 2024
- #1
Эта задача представляет собой более сложную версию Вот этот.
Переменное количество тритов — это массив из 0 или более тритов (трит — это тройной цифра). Так []
is a variable number of trits, but so is 0*3^2 + 1*3^1 + 2*3^0 = 5
.
Напишите функцию или программу, которая по заданному неотрицательному целому числу возвращает переменное количество тритов, так что каждое целое число имеет взаимно однозначное (биективное) сопоставление с массивом.
Существует бесконечное количество таких отображений, вы вольны строить их по своему усмотрению, но это должен быть один в один. Ваше картографирование должно концептуально быть один к одному для целого числа произвольного размера, но это нормально, если ваш выполнение не работает для больших целых чисел из-за числовых ограничений типов на предпочитаемом вами языке (например, C [0, 1, 2]
).
В качестве примера того, что такое нет сопоставление один к одному — это просто перечисление троичных цифр целого числа. В такой системе 5 становится 1*3^1 + 2*3^0 = 5
(because [1, 2]
), но это не однозначно, потому что int
also means 5 (because []
).
Должно быть совершенно очевидно, что отображение не является взаимно однозначным, если оно пропускает целое число (например, оно не работает для 5), но я хотел бы прояснить, что пропуск массива переменных trit также не является одним из них. -к одному. Вы должны сопоставить все возможные переменные массива trit, включая [0, 2, 2, 1]
.
Бонусный вызов
Вы будете награждены официальной наградой Super Smaht® Award™, если ваш ответ будет включать в себя алгоритм (не обязательно в вашей программе игры в гольф), который работает не только для базы 2 или 3, но и для всех баз.
Выигрывает самый короткий код в байтах.
#код-гольф #целое число