В недавнем эпизоде QI первые 5 кратных 142857 были описаны как анаграммы исходного числа. Конечно, любой, кто знает это число более чем мимоходом, будет знать, что эти числа на самом деле циклические, а не только анаграммы. Но это заставило меня задуматься.
Пожалуйста, напишите программу или функцию, которая выводит все числа из шести или менее цифр, которые имеют соответствующий коэффициент, который является анаграммой сам по себе. Список должен начинаться со следующих цифр:
3105 (divisible by 1035)
7128 (divisible by 1782)
7425 (divisible by 2475)
8316 (divisible by 1386)
8712 (divisible by 2178)
9513 (divisible by 1359)
9801 (divisible by 1089)
Если вы предпочитаете, вы можете найти числа, у которых есть анаграмма, которая является надлежащим фактором числа, но постарайтесь исключить ведущие нули из ваших анаграмм.
Это кодовый гольф, поэтому выигрывает самый короткий код в байтах, который не нарушает стандартные лазейки.
Ответы:
Mathematica (среда REPL),
7574 байтаСпасибо ngenisis за то, что подтянули это на байт!
Sort/@IntegerDigits@Divisors@#
создает отсортированный список цифр для каждого делителя своего аргумента; входной номер сам по себе является делителем, поэтому его отсортированный список цифр является последним.Most@#~MemberQ~Last
определяет, отображается ли последний отсортированный список цифр в списке перед последним элементом. ИSelect[Range[10!],...]
сохраняет только те целые числа до 3628800, которые проходят этот тест (эта граница выбрана, потому что она на один байт короче 10 6 ). Он запускается на моем компьютере примерно за 5 минут, в результате получается список из 494 номеров, самое большое из которых - 3427191; Есть 362 номера до 10 6 , наибольшая из которых составляет 989 901.источник
IntegerDigits@Divisors@#
.Желе , 12 байт
Попробуйте онлайн! (использует пять или меньше цифр из-за ограничения по времени TIO)
Verfication
Как это устроено
источник
ÆḌṢ€ċṢµȷ#
течение 10. Потребовалось ~ 27 минут для запуска на ядре i7 (не на unix, не приятноtime
); самый большой результат был6671928
.Брахилог , 12 байт
Попробуйте онлайн!
Однако это может привести к истечению времени ожидания до печати чего-либо (а если этого не произойдет, он получит только печать 3105).
объяснение
Это печатает эти числа на неопределенный срок, так как автор сказал, что было приемлемо, что программа будет печатать числа больше 6 цифр.
Это слишком медленно; Вы можете использовать эту программу (и изменить ее
8300
на любуюN
), чтобы начать печатать с цифр, значительно превышающихN
.Как указал @ ais523, нам нужен разрез, чтобы избежать многократной печати числа, если некоторые из его факторов являются его перестановками.
источник
JavaScript (ES6),
103…9694 байтаАнонимная функция, которая возвращает массив совпадающих целых чисел.
Отформатировано и прокомментировано
Статистика делителей
Для 6-разрядных целых чисел, каждое соотношение от
2
до9
между согласующим целым числомn
и его анаграммой встречается по крайней мере один раз. Но некоторые из них появляются всего несколько раз:Тестовое задание
Тест, приведенный ниже, ограничен диапазоном,
[1 ... 39999]
поэтому для его завершения не требуется слишком много времени.Показать фрагмент кода
источник
_=>[...Array(1e6).keys()].filter(n=>n&&![...Array(9)].every(_=>n%++i||(F=i=>[...i+''].sort()+'')(n/i)!=F(n),i=1))
.2
to9
требуются (8
используются только дважды для911736
и931176
).Пайк, 14 байт
Попробуй это здесь!
Должны выводить все числа, как это, но время ожидания истекло.
Проверьте алгоритм здесь!
источник
Perl 6 , 59 байт
Ужасно медленное решение для перебора.
Он возвращает ленивую последовательность, поэтому я мог проверить первые несколько результатов, но он не достигнет всех результатов в разумные сроки. (Должен ли я отметить его как не конкурирующий?)
источник
Pure Bash ,
128126122121120 байтПопробуйте онлайн!
(Эта программа довольно быстрая - всего 6 минут на моем MacBook потребовалось всего 14 минут. К сожалению, время ожидания TIO истекло, поскольку для нее установлен лимит времени работы в 1 минуту, что достаточно только для прохождения. 5-значные числа или около того.)
Утилиты Bash + Unix, 117 байт
Это короче, чем версия для чистого bash, но немного медленнее, вероятно, в значительной степени из-за происходящего разветвления.
источник
05AB1E , 15 байтов
Объяснение:
Попробуйте онлайн! (это не будет работать, это будет время ожидания)
источник
Japt , 23 байта
Попробуйте онлайн! Обратите внимание, что связанный код рассчитывает только до 1e4, потому что 1e6 время ожидания на TIO.
источник
Python 2, 98 байт
источник
10**6
?x%i==0
может быть простоx%i<1
.05AB1E ,
1210 байтТайм-аут на TIO из-за бесконечного цикла.
Сохранено 2 байта, поскольку мы можем вывести более 6-значных чисел в соответствии с комментариями ОП.
Попробуйте онлайн!
объяснение
источник
Пакетный, 263 байта
Медленный. Как и в, занимает более одного дня, чтобы закончить на моем компьютере. Объяснение:
c
подпрограмма делит свои первые два аргумента. Если остаток равен нулю, он вычисляет хеш результата, вычисляя сумму n-х степеней 8 для каждой цифры. Эта хэш-функция, украденная из ответа bash, сталкивается только с анаграммами. (Это будет работать для семизначных чисел, но у меня не будет всех двух недель.) Третий аргумент вычитается, и подпрограмма завершается с достоверным результатом, если это ноль.n
Подпрограмма вызываетc
подпрограмму один раз , чтобы вычислить хэш, затем еще восемь раз , чтобы сравнить хэш; если он обнаруживает столкновение, он печатаетn
и выходит из подпрограммы заранее.источник