У нас много проблем, основанных на базе 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.
Это код-гольф , поэтому выигрыши с кратчайшим количеством байтов на каждом языке!
Для получения дополнительной информации о взрывающихся точках посетите веб-сайт глобального математического проекта ! У них куча классных математических вещей!
источник
Ответы:
Python 2 ,
4239 байтПопробуйте онлайн!
Спасибо @xnor за поиск более короткой формы.
Устаревшая версия (42 байта):
Попробуйте онлайн!
Параметры: ввод, числитель (со знаком) и знаменатель.
Возвращает массив, сначала младшая цифра.
Это просто работает, потому что деление и модуль в Python следуют за знаком знаменателя, поэтому нам не нужно заботиться об одних и тех же знаках явно.
Результат теста:
источник
Ахей (эзотоп) , 91 байт
Попробуйте онлайн!
Принимает
integer
,numerator of base
иdenominator of base
.Из-за ограничений интерпретатора TIO каждый ввод должен заканчиваться новой строкой.
Реализация ответа @ Bubbler's Python 2 . К счастью, этот интерпретатор Aheui написан на Python, поэтому мы можем использовать тот же трюк.
источник
05AB1E ,
1110 байтПопробуйте онлайн!
Берет
integer
,numerator of base
иdenominator of base
нравятся все ответы. Поскольку интерпретатор 05AB1E написан на языке Python (?), Трюк с ответом Bubbler's Python 2 можно использовать и в 05AB1E.объяснение
Таким образом, программа работает примерно так же, как этот код Python:
11> 10 Спасибо, Нил
источник
_
вместо0Q
здесь.