Согласно странице Википедии под номером 69 , следует отметить, что 69 2 = 4,761 и 69 3 = 328 509 вместе используют все десятичные цифры. Число 69 на самом деле является самым низким числом, которое удовлетворяет этому свойству.
По аналогичной причине 32 043 примечательно: 32 043 2 = 1 026 753 849 использует все десятичные цифры.
Если мы будем продолжать говорить о числах, которые так интересны, нам понадобятся некоторые обозначения.
Для большинства целых чисел n степени n 2 ,…, n k будут использовать все десять десятичных цифр (не считая начальных нулей) хотя бы один раз для достаточно больших значений k . Если она существует, мы назовем низшую такую k как CUDDLE ( кумулятивные десятичные цифры, наименьший показатель степени ) из n .
задача
Напишите программу или функцию, которая принимает одно неотрицательное целое число n в качестве входных данных, вычисляет и возвращает свою CUDDLE .
Если n не имеет CUDDLE , вы можете вернуть что угодно, кроме положительного целого числа, включая ошибку или пустую строку, если ваш код в конечном итоге останавливается.
Контрольные примеры
Левый столбец вводится, правый столбец выводится.
0
1
2 15
3 10
4 10
5 11
6 12
7 7
8 5
9 6
10
11 7
12 6
13 6
14 7
15 9
16 5
17 7
18 4
19 5
20 15
26 8
60 12
69 3
128 3
150 9
200 15
32043 2
1234567890 3
Дополнительные правила
Ваш код должен работать для всех входов до 255 .
Обратите внимание, что это связано с довольно большими числами. 20 15 уже больше 2 64 .
Если вы распечатываете результат, за ним может следовать перевод строки.
Применяются стандартные правила игры в гольф .
26->8
потому что это самый маленький пример, в котором включениеn^1
дает неправильный ответ (of6
), ошибку, которую я допустил в своем коде.Ответы:
Pyth, 16 байт
Попробуйте онлайн: демонстрация или тестовый набор
Как и другие решения, я использую 15 в качестве верхнего предела. Я считаю, что это также максимальная обниматься . Я проверил все числа до 10.000.000, и нет номера с обниматься больше 15.
Числа с обниматься > = 10 уже довольно редки. Единственные числа с обниматься из 15 являются числами
2*10^k
. Там нет номеров с CUDDLE 14 или 13, CUDDLE 12 появляется только для чисел6*10^k
, CUDDLE 11 только для5*10^k
.Поэтому я думаю, что этот код отлично работает для любого натурального числа.
Распечатывает сообщение об ошибке, если нет решения.
Объяснение:
источник
Python 2, 56
Рекурсивное решение. Подсчитывает показатели,
i
начиная с,2
и накапливает цифры степенейn**i
в строкеs
. Когдаs
имеет все десять цифр, возвращаетTrue
, что равно1
, а в противном случае рекурсивно и добавляет1
. Это оказалось короче, чем возвращениеi
.Вызов функции на номер без CUDDLE завершается с
Internal error: RangeError: Maximum call stack size exceeded
. Для чисел,255
которые выводятся, никогда не требуется более 15 итераций.Из-за досадной привычки Python 2 добавлять
L
к большим числам, мы фактически инициализируем строку цифрL
и проверяем, равен ли размер набора хотя бы 11. Python 3 экономит 2 символа, не нуждаясь в этом, но теряет 3 символа при использованииstr
над обратными галочками. Python 3.5 сохраняет еще 2 символа с распаковкой набора, сохраняя в целом символ над Python 2:источник
Рубин,
6765 символовРаботает практически мгновенно для всех тестовых случаев, даже для> 255.
Ошибки для номеров без обниматься.
Объяснение:
источник
CJam, 28 байтов
Попробуйте онлайн
Это основано на том факте, что CUDDLE (если он существует) никогда не превышает 15 для входного диапазона, как впервые наблюдал @xnor.
Вероятно, есть лучший способ произвести вывод для случая, когда нет решения. Я буду обновлять, если я что-нибудь думаю.
Объяснение:
источник
Mathematica, 103 байта
Похоже, что только 10 степеней в конечном итоге не будут иметь объятий, поэтому они пропускаются. Функция хранит список увиденных цифр и останавливается, когда в ней больше нет нулей.
Выход:
источник
log_10(n)
это иррационально, при наличии любого положительного целого числаk
существуетm
такое, что десятичное представлениеn^m
начинается сk
. Это означает, что пропуск 10 (и 0) сил - это нормально :)JavaScript (ES6) 188
Неплохо для языка, который ограничен 53-битными целыми числами.
Протестируйте приведенный ниже фрагмент кода в браузере, который реализует EcmaScripts 6, включая функции стрелок и оператор распространения (AFAIK Firefox)
источник
PowerShell, 94 байта
Ничего слишком умного в этом нет, но конвейерная связь с ним
sort -U[nique]
- это отличный способ улучшитьset()
функциональность Python для такого использования, без явного добавления элементов в хеш-таблицу.например
источник
gawk 4, 73 + 5 для флагов = 78 байт
Для каждой цифры
0
бис9
он встречает в силах входа, оно устанавливает бит , представляющий2^digit
вa
, пока первые 10 цифр не найдены (a == 1023 == 2^10-1
) или там были более 15 итераций.Должен вызываться с разделителем пустых полей и флагом -M для больших чисел.
Поигравшись с этим, я обнаружил следующие последовательности для разных объятий:
источник