Репдигиты это натуральное число , которое можно записать только повторяя ту же цифру. Например, 777
это 7
повторная цифра, поскольку она состоит исключительно из цифры, повторенной три раза.
Однако это не ограничивается просто десятичными (базовыми 10) числами:
- Каждое число Мерсенна (в форме M n = 2 n -1 ) является повторным, если оно записано в двоичном виде (база 2).
- Каждое число является тривиальным, если оно написано в унарном формате (база 1).
- Каждое число
n
также может быть тривиально записано как повторная цифра11
в базеn-1
(например,17
когда записано в шестнадцатеричном (основание 16)11
, и3
когда записано в двоичном (основание 2 также11
)).
Задача здесь состоит в том, чтобы найти другие базы, где введенный номер может быть повторным.
вход
Целое положительное число x > 3
в любом удобном формате.
Выход
Положительное целое число b
с , (x-1) > b > 1
где представлением x
в базе b
является репдигитами.
- Если такого не
b
существует, выведите0
или какое-то неверное значение. - Если таких
b
существует несколько , вы можете вывести любое или все из них.
правила
(x-1) > b > 1
Ограничение , чтобы предотвратить тривиальные преобразования в Унарный или «вычитать одну» базу. Выходное число может быть записано в одинарной или любом удобной базе, но сама база не должна быть одной из тривиальных преобразований.- Ввод / вывод может быть любым подходящим способом .
- Стандартные ограничения лазейки применяются.
Примеры
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
источник
источник
b ≤ 36
(встроенные базовые функции преобразования многих языков не идут выше)?b ≤ 36
сильно ограничены, и все существующие ответы правильно обрабатывают большие базы, поэтому я собираюсь сказать нет, вы не можете принять верхнюю границуb
за пределы того, что дано.Ответы:
Желе,
119 байтВозвращает список баз, который пуст (ложно), если его нет. Попробуйте онлайн!
Как это устроено
источник
Pyth,
1110По-видимому, унарный Pyth
q
проверяет список, который имеет все уникальные значения около 10 дней назад. Очевидно, что исследование ошибок Pyth улучшает результаты игры в гольф.Фильтрует список,
[2..input-1)
если уникальный набор цифр ввода в этой базе имеет длину 1.Тестирование
Объяснение:
источник
Рубин,
876963 байтаМне пришлось реализовать конвертацию базы вручную, поскольку встроенные функции Ruby доходят только до 36 базы ...
Возвращает
nil
для не найдено.источник
Python, 71
7278байтНет рекурсии, просто пробует все базы и выводит набор тех, которые работают.
Заманчиво кодировать
b
иd
одним числом, но для их извлечения требуется слишком много выражений в скобках. 77 байт:72 байта:
Выводит первое,
b
что работает, или,0
если никто не делает.Респ-блок
x
изd
цифрc
в базеb
имеет значениеx==c*(b**d-1)/(b-1)
. Эквивалентноx*(b-1)==c*(b**d-1)
.Значение
c
должно бытьx%b
последней цифрой. Хотя я не вижу способаd
арифметического определения , поэтому код пробует все возможности, чтобы увидеть, работает ли какой-либо из них.Сэкономили 5 байтов, скопировав трюк Денниса с выводом фальси при
b
достиженииx-1
, взяв выход по модулюx-1
. Еще один байт, спасенный от Денниса, напомнил мне, что возведение в степень необъяснимо имеет более высокий приоритет, чем~
.Решение равной длины с
in
вместоany
.источник
Рубин, 50 байтов
Я действительно хотел бы удалить это раздражающее пространство, но как новичок в ruby, я все еще совершенно незнаком с его синтаксическими причудами.
источник
b?
это допустимое имя метода, поэтому вы не можете избавиться от пробела.Emojicode , 214 байт
(77 символов):
Печать результатов в базе 9.
Я хотел пару месяцев играть в гольф кода с эмоджикодом, но язык только недавно стал достаточно стабильным, чтобы реально работать с 😉. В качестве бонуса, этот вопрос использует одну функциональность, в которой эмоджикод действительно хорош: представляет целые числа в других базах.
Ungolfed (👴 - это комментарий к строке в Emojicode)
источник
Python 2, 79 байт
Попробуйте это на Ideone .
идея
Любая повторная цифра x базы b> 1 и цифры d <b удовлетворяет следующему.
Поскольку d <b , карта (b, d) ↦ cb + d инъективно.
Кроме того, поскольку b, x> 1 , мы имеем c <x , поэтому cb + d <cb + b = (c + 1) b ≤ xb .
Это означает, что, чтобы найти подходящие значения для c и d для данного основания b , мы можем перебрать все i в [0,…, bx) и проверить, является ли (b - 1) x == (i% b) (b я / б - 1) .
Код
Именованная лямбда- f- проверка, находится ли (b - 1) x в множестве {(i% b) (b i / b - 1) | 0 ≤ i <bx} , начиная со значения b = 2 .
Если тест прошел успешно, мы вернемся b .
В противном случае мы снова вызываем f с теми же x и b, увеличенными на 1 .
Поскольку b может в конечном итоге достичь x - 1 , мы берем окончательный результат по модулю x - 1, чтобы вернуть 0 в этом случае. Обратите внимание, что этого не произойдет, если b = 2 удовлетворяет условию, поскольку оно возвращается без рекурсии. Однако вопрос гарантирует, что в этом случае b = 2 <x - 1 .
источник
Perl 6,
454342 байтаОбъяснил (вроде)
Для справки, переменная
$^x
in{ ... }
- это то же самое, что и-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
выдает обратный список цифр / «цифр» для$n
базы$b
Polymod (для реального): метод polymod почти как более мощная версия функции python
divmod
.$n.polymod(*@args)
делит $ n на каждое значение в * @ args, добавляя remainder ($n mod $x
) в список, который он возвращает, и используя частное для следующего деления. Я чувствую, что объяснил это плохо, поэтому вот несколько примеров (написанных на Perl 6, но достаточно понятных, чтобы понять большинство, я надеюсь):источник
grep
метод вместоfirst
метода.Дьялог АПЛ , 28 байт
{
...⍵
...}
анонимные функции , которые будут применены кx
(представлено⍵
)b←1+⍳⍵-3
целым числам от 2 - ⍵-2 хранятся в видеb
⍵{
...}¨
для каждого элемента в Ь (⍵
), применить функцию{
...}
с й как левый аргументом⍺
⍵⊥⍣¯1⊢⍺
конвертировать й к этой базе1=≢∪
1 равна бирке уникальной цифры?b/⍨
элементы b, где true (что существует только одна уникальная цифра).Примеры случаев
Если базы не существует, выходные данные пусты (что неверно), что можно продемонстрировать с помощью этой программы:
Это печатает «Ложь»
источник
Pyth,
2619 байтовПопробуй это здесь!
Добавлю объяснение после того, как я играю в гольф.Посмотрите на этот ответ для более короткой реализации и объяснения.источник
90
и91
в моих примерах!MATL ,
1514 байтовЭто работает с текущей версией (14.0.0) языка / компилятора.
Если база не существует, вывод пуст (что ложно).
Попробуйте онлайн!
источник
Mathematica, 55 байт
Анонимная функция, не слишком сложная. Просто отфильтровывает базы на основе репдитности.
источник
Python 2, 75 байт
Порт моего рубинового ответа. Печатает все действительные базы, если таковые имеются.
источник
Юлия, 45 байт
Это анонимная функция, которая принимает целое число и возвращает массив целых чисел. Чтобы вызвать его, присвойте его переменной. Он вернет все применимые базы или пустой массив. Нет проблем с большими базами.
Сначала мы генерируем включающий диапазон [2, n - 2], где n - вход. Затем мы
filter
перечисляем только целые числа b, для которых n в базе b имеет менее 2 уникальных цифр. Чтобы сделать это, для каждого целого числа b в диапазоне, мы получаем цифры n в базе b, используя массивdigits
, получаем уникальные элементы, используя∪
, и получаем индекс последнего элемента (то есть длины), используяendof
.источник
Брахилог , 12 байт
Попробуйте онлайн! (как генератор!)
Принимает ввод через входную переменную и выводит базу через выходную переменную в том случае, если это возможно, в противном случае происходит сбой. В то же время он также работает как генератор, который выводит список всех баз, где этот список может быть пустым.
В идеале это может выглядеть примерно так
ḃ↙.=&>>
, возможно, жертвуя функциональностью генератора в такой форме или аналогичной (так как это в конечном итоге попадет в унарный код), но на данный момент 12 байтов - самый короткий, который я знаю, как его получить.источник
Рубин ,
4643 байтаИспользует функцию Integer # digits, представленную в Ruby 2.4, чтобы избежать необходимости деления вручную.
-3 байта благодаря @Jordan.
Попробуйте онлайн!
источник
05AB1E , 7 байтов
Выводит все возможные значения или пустой список как ложное значение (хотя технически допустимые выходные данные также ложны, так как только
1
в 05AB1E верно, а все остальное ложно).Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Perl 5
-Minteger -na
, 63 байтаПопробуйте онлайн!
Выводит все возможные ответы или ничего, если решения не существует.
источник