Задний план
Биективна базовые б нумерация , где Ь представляет собой положительное целое число, взаимно однозначное позиционное обозначение , что делает использование б символов с соответствующими значениями 1 до б .
В отличие от его небиективного аналога, ни один символ не имеет значения 0 . Таким образом, каждое неотрицательное целое число n имеет уникальное представление в биективной базе b .
Популярные биективные нумерации включают в себя унарное, биективное основание 2 (используется в кодировке длин серий bzip2 ) и биективное основание 26 (используется для нумерации столбцов в электронных таблицах).
Определение
В этой задаче мы определяем множество символов M как
123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz<=>
и функцию i от M до натурального числа, такую что i ('1') = 1,…, i ('>') = 64 .
Учитывая, что основание b находится в диапазоне от 1 до 64 (оба включительно), мы определяем, что каждому неотрицательному целому числу n соответствует строка a k … a 0 , состоящая из символов M , такая, что n = b k i (a k ) + … + B 0 i (a 0 ) .
Это соответствие четко определено и биективно. Поскольку пустая сумма определена как 0 , целое число 0 может быть закодировано как пустая строка.
задача
Примите три строки в качестве ввода:
Входная база b от 1 до 64 , закодированная как биективная строка base 64 .
Неотрицательное целое число n , закодированное как биективная базовая строка b .
Выходная база B между 1 и 64 , закодированная как строка биективного основания 64 .
Учитывая эти три входа, закодируйте n как биективную базовую строку B.
Контрольные примеры
Все тестовые задания ввода в порядке б , п , В .
Input: "4" "" "8"
Output: ""
Input: "A" "16" "2"
Output: "1112"
Input: "2" "122" "A"
Output: "A"
Input: "3" "31" "1"
Output: "1111111111"
Input: ">" "Fe" "a"
Output: "RS"
правила
Вы можете читать три строки в любом удобном порядке, как таковой, массив строк, их строковое представление, объединенные или разделенные разделителями из одного символа на ваш выбор.
Если вы решите распечатать вывод в STDOUT, вы можете распечатать только символы и (необязательно) завершающий перевод строки.
Разрешены встроенные средства преобразования базы.
Применяются стандартные правила игры в гольф .
источник
Пип,
848078 байтGitHub хранилище для Pip
Алгоритмы адаптированы из статьи в Википедии. Вот объяснение для слегка не одураченной более ранней версии:
Образец прогона:
источник
Октава, 166 байт
Многострочная версия:
Вместо того чтобы создавать карту для преобразования символа в значение индекса, я просто создал таблицу обратного просмотра
N
значений ascii1..'z'
и заполнил ее индексами с соответствующими значениями.polyval
оценивает уравнениеиспользуя преобразованное в десятичное значение входное значение в качестве вектора коэффициентов
c
и исходную базу в качествеx
. (К сожалению, Octavebase2dec()
отклоняет символы вне нормального диапазона.)Как только мы получим входное значение в базе 10, вычисление значения в новой базе будет простым.
Тестовый водитель:
Полученные результаты:
источник
Perl,
261248229 байтмногострочный, в то время как циклы разглажены:
t
является функцией для анализа числа из строки bijective-base данной базы.r
является функцией для генерации строки биективного основания данного основания из числа. 3 разделенных запятыми параметра разбираются со стандартного ввода и функции вызываются по мере необходимости.Преобразование положительного числа в биективную базовую строку аналогично обычному основанию. Однако, где бы вы сделали что-то подобное для нормальной базы:
вы настраиваете мод, чтобы задать диапазон от 1 до базы вместо 0 до базы - 1:
источник
Python 2, ...
317307298311 байтОпределенно гольф. Я действительно ненавижу, что у строк нет назначения элементов, а списки не имеют
find
. Я найду лучший способ, чем мое быстрое решение, которое у меня есть сейчас.Мой метод состоит в том, чтобы преобразовать входные данные в десятичное число, затем в выходную базу, а затем преобразовать ее в биективную базу.
Изменить : обнаружил, что моя программа не работает при преобразовании в унарный. Исправлено 13 байтов
e=F(o)<2
и т. Д.Попробуй здесь
источник
.index()
метод. Почему бы не использовать его вместо поиска? Кроме того, вместо сохраненияF(b)
иF(o)
в переменные вы используете их только один раз, поэтому просто добавляйте их в случае необходимости. Наконец,'n'[2::5]
короче''.join(n)
(заменить апострофы на кавычки).Python 2, 167 байт
Никаких особых уловок здесь нет, за исключением
[2::5]
нарезки, чтобы получить кодировку с меньшим количеством байтов.тесты:
источник
CJam,
737069555148 байтовВ последней версии для преобразования из исходной базы используется оператор преобразования базы CJam, о котором я не думал, пока не увидел решение @ aditsu. Он также применяет недавний совет @Dennis для построения «цифровой» строки ( /codegolf//a/54348/32852 ), а также некоторые другие идеи, которыми можно поделиться в чате.
Формат ввода - это значение, за которым следуют исходная и целевая базы, каждая из которых находится на отдельной строке. Для пустой строки оставьте первую строку пустой. Пример ввода:
Попробуйте онлайн
Объяснение:
источник
Желе , 22 байта
Попробуйте онлайн!
источник