Вдохновленный этим CMC
Если положительное целое число больше 0, выполните с ним следующую операцию:
- Если
1234567890
хотя бы один раз все десять одинарных цифр ( ) находятся в числе, выведите счетчик и выйдите из программы. - В противном случае удвойте число и повторите, увеличив счет.
Счет начинается с 0 и является количеством удвоений ввода. Например, если бы ввод был 617283945, его нужно было бы удвоить один раз, потому что 1234567890 содержит все 10 цифр.
Это код-гольф, поэтому выигрывает самый короткий код. Входные данные могут быть приняты в виде строки, если хотите.
Контрольные примеры
input => output
617283945 => 1
2 => 67
66833 => 44
1234567890 => 0
100 => 51
42 => 55
n
существует нечтоk
такое, чтоnk
является пандигитальным? Я хотел бы увидеть доказательство.Ответы:
Python 3 , 39 байт
Попробуйте онлайн!
Выходы
False
для0
.источник
J ,
2423 байтПопробуйте онлайн!
объяснение
источник
05AB1E ,
1110 байт-1 байт благодаря Скоттинету
Попробуйте онлайн! или как тестовый набор
источник
use x
но это тоже 10 ... Хороший ответ. Мысльx
избавилась бы от этогоD
, но это та же идея.Perl 6 ,
3128 байтов (27 символов)-3 байта благодаря @ Джошуа
Попробуйте онлайн!
Объяснение: Все та же конструкция для рекурсивной генерации списков. Первый элемент заданное число (
$_
), каждый следующий элемент 2 раза больше предыдущего (2×*
- мы используем ×, потому что, хотя 2 байта характер, она по - прежнему один байт дешевле2 * *
), и мы делаем это до конца условие*.comb.unique>9
выполнено т.е. когда в номере более 9 уникальных символов. (Технически, мы разбиваем строку на список символов с.comb
помощью, приводим ее к набору с помощью.Set
(конечно, наборы содержат каждый элемент только один раз) и сравниваем с 9, что переводит набор в числовой контекст, что, в свою очередь, дает его количество элементов.)Наконец, мы вычитаем 1 из этого списка. Опять же, список приводится в числовой контекст, так что мы возвращаем на 1 меньше длины этого списка.
источник
.Set
вместо того,.unique
чтобы сохранить 3 байта.JavaScript (ES6) + big.js ,
84747370 байтСпасибо @ ConorO'Brien за сохранение 10 байтов, предложив big.js вместо bignumber.js.
Спасибо @Rick Hitchcock за -1 байт
Спасибо @Shaggy за -3 байта.
Принимает ввод как строку; поддерживает до 2 69 из-за автоматического преобразования обозначений, происходящих после этой точки.
Тестовый фрагмент
Бесконечный диапазон,
106888784 байтаИспользуя опцию config для эффективного отключения научной нотации при преобразовании чисел в строки, мы можем иметь практически бесконечный диапазон.
Показать фрагмент кода
источник
BigNumber
бит, используя big.js ?new
в этом нет необходимости. Буду обновлять, спасибо!f=n=>[..."0123456789"].every(d=>RegExp(d).test(c=Big(n)))?0:1+f(c.mul(2))
."4"+2**29
: tio.run/##BcGxDkAwEADQb2GQO41LNBZDbX7AKgbhKkSu0jZSX1/…Желе ,
12, 11 байтПопробуйте онлайн!
Объяснение:
источник
Haskell , 46 байтов
Попробуйте онлайн!
источник
J , 43 байта
Попробуйте онлайн!
Определяет анонимную функцию. Собирает результаты довольно неоптимально. Проверьте превосходный ответ миль здесь!
источник
^:a:
:1#@}.+:^:(10>#@~.@":)^:a:
Haskell, 44 байта
источник
Clojure,
1158982 байта-26 байтов, просто используя строку для представления списка символов (duh, в ретроспективе) и переходя от использования рекурсии к
loop
, что позволило мне сделать пару оптимизаций.-7 байт, избавившись от вызова
bigint
. Очевидно, нам нужно обрабатывать только ввод, который не вызовет переполнения.Pregolfed:
источник
every?
вместоempty? (remove …
:#(loop[n % c 0](if(every?(set(str n))"1234567890")c(recur(* 2 n)(inc c)))))
Сетчатка , 85 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Немного оптимизирован для времени выполнения. Объяснение:
Дублируйте введенный номер.
Дублируйте цифры в первом экземпляре.
Если осталось 10 цифр, удалите оба номера, в противном случае просто удалите первую копию. Обратите внимание, что удаление обоих чисел приводит к тому, что оставшаяся часть цикла не работает.
Поместите
#
перед большими цифрами.Удвойте каждую цифру.
Добавьте в керри.
Разобраться с ведущим керри.
Добавляйте
@
и цикл до тех пор, пока не будут найдены все 10 цифр.Распечатайте количество
@
добавленных s.источник
APL (Dyalog Unicode) , 19 + 2 = 21 байт
Попробуйте онлайн!
Это диадический
Dfn
( д Прям ая е unctio п ), с 0 в качестве аргумента левого и целого числа , как справа. Поскольку предполагается, что входными данными являются только целые числа, я добавил 2 байта для аргумента0∘
в счетчик байтов.f←
не включается в число байтов, так как в этом нет необходимости . Это просто облегчает создание тестовых случаев.Как это устроено:
Заголовки: я удалил их из числа байтов после некоторого чата в комнате APL, так как функция делает то, что должна, и результаты неверны только из-за настроек REPL APL по умолчанию.
⎕FR←1287
Устанавливает F loat R epresentation на 128-битное десятичное число (7 - это код десятичного числа в REPL APL).⎕PP←34
Устанавливает разрешение P rint P на 34 цифры. Оба из них необходимы, так как представление по умолчанию для больших чисел в APL преобразует их в научную нотацию (например, 3.14159265359E15), что приводит к путанице в коде.источник
Java 8,
1321108774 байта-57 байт благодаря @ OlivierGrégoire .
Объяснение:
Попробуй это здесь. (Примечание: тестовый случай для
2
отключен, потому что он должен остановиться на 2 68 , но размерlong
ограничен 2 63 -1.)Старые 132 байта отвечают, используя
String
ввод и регулярное выражение:Попробуй это здесь. (Примечание: тестовый случай для
2
отключен, потому что он вызывает исключение StackOverflowException из-за немного слишком большой рекурсии.)Общее регулярное выражение, чтобы проверить, содержит ли строка все 9 цифр, становится
^(?=.*0)(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)(?=.*6)(?=.*7)(?=.*8)(?=.*9).*$
, что использует положительный прогноз для всей строки.источник
2^68
что первое пандигитальное число, но длинные в Java ограничены2^63-1
.reduce
\ O /(?:.*?(\d)(?!.*\1)){10}
Шелуха , 10 байт
Попробуйте онлайн!
объяснение
источник
Mathematica,
5948474638 байт-9 байт благодаря Jenny_mathy.
Попробуйте онлайн с помощью математики!
источник
a
будет работать, но "а" не будет.Print/@f/@{617283945,2,66833,1234567890,100,42}
R , 74 байта
Попробуйте онлайн!Обратите внимание, что R даст неправильный ответ
f(2)
из-за ограничений того, как язык хранит большие целые числа.Объяснение: Для проверки pandigitality ввод приводится к символьному вектору путем соединения с пустой строкой, а затем разбивается на отдельные цифры. Затем мы проверяем, присутствуют ли все 0: 9 в результирующем векторе; если нет, мы увеличиваем счетчик, удваиваем ввод и повторяем.
Счетчик использует F, который инициализируется как ЛОЖЬ. Чтобы убедиться, что он приведен к числовому, мы умножаем его на единицу перед возвратом.
источник
c(x,"")
-el(strsplit(...))
PowerShell ,
70-69 байтПопробуйте онлайн!
(Почти вдвое дольше, чем ответ Python: - \)
Принимает ввод
$args[0]
, преобразует его как[bigint]
, сохраняет его в$n
. Входит вfor
цикл. На каждой итерации мы проверяем, имеет ли значение$n
umber, преобразованное в строку, а затем вchar
-array, когда eGroup-Object
вместе,.count
-l
ess than илиe
qual to9
. Это означает, что единственный способ, которым он равен 10, - это наличие хотя бы одной цифры каждого числа1234567890
. Если да, мы выходим из цикла. Если нет, то мы$n*=2
и продолжим. Каждую итерацию внутри цикла мы просто увеличиваем$i
. Когда мы выходим из цикла, мы просто выводим$i
.Обратите внимание, что для ввода, подобного тому,
1234567890
где каждая цифра уже учтена, это ничего не выдаст, что является ошибочным значением в PowerShell и эквивалентно тому,0
когда он приводится как[int]
. Если это не так, мы можем просто поставить+
перед выводом,$i
чтобы явно привести его как целое число.Спас байт благодаря Роланду Хиту.
источник
Pyth , 11 байт
Тестирование .
Первый натуральный номер,
T
гдеinput << T
соответствует требованию.источник
Perl 5 , 52 + 1 (-p) = 53 байта
Попробуйте онлайн!
источник
Perl, 43 + 1 байт
Используя
-p
флаг. Это основано на решении, предоставленном Xcali выше.источник
Swift 4 , 111 байт
Примечание: не будет работать для х = 2 из-за переполнения.
Пояснение - Ввод x сначала вводится в строку. Затем Set () удаляет повторяющиеся символы. Затем он сортируется в соответствии с результатом. Если он не совпадает, x удваивается и счетчик увеличивается.
источник
Рубин,
46453938 байтПопробуйте онлайн!
Обновления:
def f n;
вместоdef f(n);
.…[9]
вместо….size==10
источник
Japt , 15 байт
Попытайся
объяснение
Неявный ввод целого числа
U
.Создайте массив целых чисел от и
0
до99
каждого из них через функцию, гдеX
находится текущий элемент.U
умноженный на 2, возведенный в степеньX
.Получить индекс первого элемента, который возвращает true при передаче через следующую функцию.
Разбить на массив цифр и удалить дубликаты.
Получите длину массива и проверьте равенство с
10
.Альтернатива, 15 байт
Попытайся
объяснение
Неявный ввод целого числа
U
.Начиная с
0
, верните первое число, которое возвращает true, когда передано через следующую функцию, сX
текущим числом.Как и выше, умножьте
U
на 2 до степениX
.Разбить на массив цифр, удалить дубликаты и воссоединиться с целым числом.
Преобразовать в строку, получить длину и преобразовать обратно в целое число.
Проверьте на равенство с
10
.источник
QBIC , 48 байтов, nc
Это должно работать, в теории. Однако на практике это терпит неудачу, потому что QBasic преобразует десятизначные числа (по крайней мере, необходимые для получения всех цифр) в научную запись ... Я пометил его как неконкурентный из-за этого.
объяснение
источник
GNU dc, 61 байт
Ввод копируется с вершины стека (который в противном случае должен быть пустым); вывод помещается на вершину стека.
объяснение
Мы используем переменную массива
a
, сохраняя 1 вa[d]
случае, еслиd
присутствует цифра , в противном случае возвращаемся к 0. Мы используем расширение GNU,~
чтобы получить частное и остаток в одной команде.В качестве бонуса, это будет работать в произвольных числовых базах (не только десятичных): просто установите входной радиус как требуется (константа
11
в определенииf
будет считываться с использованием этой числовой базы, поэтому она автоматически корректна).Тестовое задание
источник
REXX, 57 байт
источник
q / kdb + , 33 байта
Решение:
Примеры:
Объяснение:
Все байты находятся в равенстве, возможно, удастся немного ускорить этот процесс. Использует
scan
наречие q :Примечания:
Если мы перейдем к
k
приглашению, у нас будет 25-байтовое решение. Преобразует число в список символов:источник