У нас много проблем, основанных на базе 10, базе 2, базе 36 или даже базе -10 , но как насчет всех других рациональных баз?
задача
Если задано целое число в базе 10 и рациональная база, вернуть целое число в этой базе (в виде массива, строки и т. Д.).
Процесс
Трудно представить рациональную основу, поэтому давайте представим ее с помощью Exploding Dots :
Рассмотрим эту анимацию, выражающую 17 в базе 3:
Каждая точка представляет единицу, а прямоугольники представляют цифры: крайний правый прямоугольник - это место, средний прямоугольник - это 3 ^ 1, а крайний левый прямоугольник - 3 ^ 2.
Мы можем начать с 17 точек на месте. Тем не менее, это основание 3, поэтому место должно быть меньше 3. Поэтому мы «взрываем» 3 точки и создаем точку на поле слева. Мы повторяем это до тех пор, пока не получим стабильную позицию без разрываемых точек (т.е. 3 точки в одном поле).
Таким образом, 17 в базе 10 - это 122 в базе 3.
Дробная основа аналогична разрыву некоторого количества точек до нескольких точек. База 3/2 будет взорвать 3 точки, чтобы создать 2.
Выражая 17 в базе 3/2:
Таким образом, 17 в базе 10 - это 21012 в базе 3/2.
Отрицательные основы работают аналогично, но мы должны следить за признаками (используя так называемые анти-точки, равные -1; представлены незакрашенным кружком).
Выражая 17 в базе -3:
Обратите внимание, что есть дополнительные взрывы, чтобы сделать знак всех полей одинаковым (игнорируя нули).
Таким образом, 17 в базе 10 - это 212 в базе -3.
Отрицательные рациональные основания работают аналогично в комбинации двух вышеупомянутых случаев.
правила
- Нет стандартных лазеек.
- Знак каждой «цифры» на выходе должен быть одинаковым (или нулем).
- Абсолютное значение всех цифр должно быть меньше абсолютного значения числителя базы.
- Вы можете предположить, что абсолютное значение базы больше 1.
- Вы можете предположить, что рациональная основа находится в самой низкой приведенной форме.
- Вы можете взять числитель и знаменатель базы отдельно во входных данных.
- Если число имеет несколько представлений, вы можете вывести любое из них. (например, 12 в базе 10 может быть
{-2, -8}
и{1, 9, 2}
в базе -10)
Тестовые случаи:
Формат: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
Поскольку некоторые входные данные могут иметь несколько представлений, я рекомендую протестировать выходные данные с использованием этого фрагмента Mathematica на TIO.
Это код-гольф , поэтому выигрыши с кратчайшим количеством байтов на каждом языке!
Для получения дополнительной информации о взрывающихся точках посетите веб-сайт глобального математического проекта ! У них куча классных математических вещей!