Положительное целое число может быть представлено в целочисленной базе 1 <= b < inf
.
При преобразовании в эту базу он имеет некоторое количество различных цифр.
Любое положительное целое число в базе 1
имеет 1
четкую цифру.
Большинство положительных целых чисел в базе 2
имеют 2
разные цифры, за исключением тех 2^n - 1
, которые имеют только форму 1
.
Таким образом, первое положительное целое число, которое может быть представлено в целочисленной базе с 1
уникальной цифрой, 1
и первое, которое может быть представлено с 2
разными цифрами, это 2
.
Можно сказать, что 1
это первое целое число с цифровым разнесением 1
и 2
первое целое число с цифровым разнесением 2
.
Вызов:
Если задано положительное целое число, n
верните первое положительное целое число (в базовой десятке *) с цифровым разнесением n
.
* если ваш язык поддерживает только определенную базу (например, унарную или двоичную), вы можете выводить эту базу.
Ваш алгоритм должен работать теоретически для любого положительного целочисленного ввода: он может потерпеть неудачу, потому что точность целого числа вашего языка слишком мала для вывода; но может не потерпеть неудачу, потому что базовое преобразование определяется только до некоторого предела.
Контрольные примеры
input output
1 1
2 2
3 11
4 75
5 694
6 8345
7 123717
17 49030176097150555672
20 5271200265927977839335179
35 31553934355853606735562426636407089783813301667210139
63 3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
257 87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232
Это код-гольф , выигрывает самое короткое решение в байтах.
OEIS: A049363 - также наименьшее число пандигиталов в базе n.
источник
Python, 40 байт
Проверьте это на Ideone .
Как это устроено
Число с n различными цифрами должно быть четко выражено в базе b ≥ n . Поскольку наша цель - минимизировать число, b также должно быть как можно меньше, поэтому b = n логический выбор - .
Это оставляет нам возможность расположить цифры 0,…, n-1, чтобы создать как можно меньшее число, а это означает, что наиболее значимые цифры должны быть как можно меньше. Поскольку первая цифра не может быть 0 в каноническом представлении, наименьшее число равно
(1) (0) (2) ... (n-2) (n-1) n = n n-1 + 2n n-3 +… + (N-2) n + (n-1) , который f вычисляет рекурсивно.
источник
Python 2,
5446 байтЭто очень очень очень очень ! быстрое итеративное решение.
Попробуйте онлайн
Там нет рекурсии, поэтому он работает для большого ввода. Вот результат
n = 17000
(занимает 1-2 секунды):http://pastebin.com/UZjgvUSW
источник
lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
JavaScript (ES6), 29 байт
источник
J, 9 байт
На основе @Dennis' метода .
использование
объяснение
Существует альтернативное решение, основанное на использовании индекса перестановки. Для заданного ввода n создайте список цифр
[0, 1, ..., n]
и найдите перестановку, используя индекс n !, И преобразуйте ее в список из базовых n цифр. Соответствующее решение в J для 12 байтовисточник
[1,0,2,3,...,n-1]
?Рубин,
373534 байтаОтвет для данного
n
принимает форму10234...(n-1)
в базеn
. Используяn=10
в качестве примера:Начните с
n
:10
Умножьте на
n
и добавьте 2:102
Mutliply
n
и добавить 3:1023
И так далее.
РЕДАКТИРОВАТЬ: короче использовать карту, кажется.
РЕДАКТИРОВАТЬ 2: Спасибо за совет, м-хзан!
источник
(2...n)
будет на байт короче.CJam , 9 байт
Попробуйте онлайн!
объяснение
источник
CJam (9 байт)
Онлайн демо
рассечение
Очевидно, что наименьшее число с цифровым разнесением
n
определяется путем преобразования[1 0 2 3 ... n-1]
базы в базуn
. Однако обратите внимание, что встроенная базовая конверсия не требует, чтобы цифры находились в диапазоне0 .. n-1
.Обратите внимание, что в особом случае
n = 1
мы получаем1 [0] 1 1 tb
пожертвования,1 [0 1] b
которые есть1
.источник
Haskell, 31 байт
Преобразует список
[n,2,3,...,n-1]
в базу,n
используя метод Хорнера через свертывание. Менее гольф-версия этого дана на странице OEIS .Спасибо Ними за 3 байта!
источник
f
?), Чтобы она была правильным решением для игры в гольф? (это простоf
не упоминается позже в коде)\n->fold1...
это то же самое , что и имя. Вы можете написать бессмысленную функцию, в которой входная переменная не названа, путем объединения подфункций, но здесь было бы ужасно с тремя ссылками наn
.foldl
и начать сn
:f n=foldl((+).(*n))n[2..n-1]
05AB1E , 9 байт
Попробуйте онлайн!
объяснение
n = 4
используется например.источник
С ++ -
18155Собирался опубликовать это действительно крутое решение, используя
<numeric>
:и тогда я понял, что это намного проще:
источник
Perl 6 ,
34 3130 байтПеревод с примера на Haskell на странице OEIS .
[&(…)]
витки…
в инфиксный оператор на месте[…]
Показано выше превращает инфиксную оп в складки (влево или вправо в зависимости от оператора ассоциативности)Expanded:
Использование:
источник
Брейн-Флак ,
8476 байтСпасибо Wheat Wizard за игру в гольф 8 байтов
Попробуйте онлайн!
объяснение
Программа раздвигает значение от
0
доn-1
в стеке заменяет вершину0
и1
с1
и0
. Затем он умножает вершину стека наn
и добавляет значение под ним, пока в стеке не останется только одно значение.По сути, он находит цифры для наименьшего числа в базе,
n
которое содержитn
разные цифры (дляn
> 1 оно всегда имеет форму1023...(n-1)
). Затем он рассчитывает число с учетом цифр и базы.Аннотированный код
источник
{}{}(()(<()>))([][()])
на,(<{}{}>)([(())][])
чтобы сохранить четыре байта(<{}{}>)((()))
на еще четыре байтаЮлия, 26 байт
Попробуйте онлайн!
источник
ShapeScript , 25 байт
Ввод в унарной форме, вывод в десятичной форме. Попробуйте онлайн!
источник
PHP, 78 байт
Онлайн версия
60 байт работает только до n = 16 с точностью в тестовых случаях
Для n = 144 INF
n = 145 NAN
источник
к, 12 байт
Основано на ответе Денниса .
источник
JavaScript (ES6), 39 байт
Не использует
=>
источник