Это циклическое число?

20

Циклическое число - это число «n» цифр, которое при умножении на 1, 2, 3, ... n приводит к тем же цифрам, но в другом порядке.

Например, число 142 857 является циклическим числом, поскольку 142 857 x 2 = 285 714, 142 857 x 3 = 428 571, 142 857 x 4 = 571 428 и т. Д. Для заданного целочисленного ввода определите, является ли оно циклическим числом, путем вывода истинного значения, если оно есть, и ложного значения, если нет.

Кроме того, для ясности, ввод может содержать начальные 0: например, 0344827586206896551724137931

Это связано с тем, что если начальные нули не разрешены для чисел, то 142857 является единственным циклическим числом в десятичной дроби.

Поскольку это код-гольф, самый короткий ответ в байтах выигрывает!

FantaC
источник
1
Привет и добро пожаловать в PPCG. Это не плохой вопрос, но если вы посмотрите на некоторые недавно опубликованные вопросы, я думаю, вы увидите, что это может быть лучше. В частности, для сообщества было бы очень полезно, если бы вы предоставили больше контрольных примеров для работы. При публикации будущих проблем, пожалуйста, подумайте об использовании песочницы .
FryAmTheEggman

Ответы:

3

05AB1E , 9 6 байтов

Спасибо Emigna за сохранение 3 байта!

ā*€{ïË

Объяснение:

ā        # Push range(1, len(input) + 1)
 *       # Multiply by the input
  €{     # Sort each element
    ï    # Convert to int to remove leading zeros
     Ë   # Check if all elements are equal

Использует кодировку 05AB1E . Попробуйте онлайн!

Аднан
источник
1
В чем причина ¦‚˜?
kalsowerus
1
@kalsowerus Если вход имеет начальный ноль, умножение на 1 приведет к его исчезновению, что не сработает 0588235294117647.
Аднан
2
@tfbninja О, хорошо, добавление лидирующих нулей после умножения также что-то, чтобы принять во внимание? Это отдельные отсортированные результаты, которые я получаю после умножения, с некоторыми отсутствующими ведущими нулями, что, вероятно, указывало бы на проблему здесь.
Аднан
1
Рассмотрим число, 0212765957446808510638297872340425531914893617указанное в комментариях к другому ответу. Глядя на отсортированные числа, я бы предположил, что он возвращает false, но при удалении нулей он становится истинным.
Эминья
2
@tfbninja Являются ли результаты теста Эмигны правдивыми или ложными?
Аднан
4

На самом деле , 18 байт

;;ru@≈*♂$♂S♂≈╔@S≈=

Попробуйте онлайн! (ожидает цитируемого ввода)

Объяснение:

;;ru@≈*♂$♂S♂≈╔@S≈=
;;                  duplicate input twice
  ru                range(1, len(input)+1)
    @≈              convert input to an integer
      *             multiply input by each element in range
       ♂$♂S♂≈       convert each product to a string, sort the digits, and convert back to int
             ╔      uniquify: remove duplicate elements
              @S≈   sort input and convert to int
                 =  compare equality
Mego
источник
1
@tfbninja Я уже писал об этом в начале о нулях. У меня есть другое 15-байтовое решение, которое будет работать с ведущими нулями, которое я скоро отредактирую.
Мего
1
Какую кодировку символов вы используете для достижения 18 байтов? Я попробовал UTF-8, и он весил 32 байта. РЕДАКТИРОВАТЬ: О, я вижу, это кодовая страница 437.
Псевдоним
3

Python, 86 байт

lambda n:all(sorted(n)==sorted(str(int(n)*i).zfill(len(n)))for i in range(2,len(n)+1))

Попробуйте онлайн!

Введите числа в виде строк.

Уриэль
источник
1
@tfbninja должен работать на любом питоне (2 и 3)
Уриэль
1
почему это не с 0212765957446808510638297872340425531914893617?
J42161217
@ Jenny_mathy теперь это не так.
Уриэль
2

Haskell, 36 33 32 45 байт

c n=let l=length n in(10^l-1)`div`read n==l+1

Пример использования:

*Main> c "142857"
True

Я не думаю, что этот алгоритм нуждается в объяснении.

TOL

Спасибо за предложения: общее отображаемое имя, Laikoni.

Спасибо за исправление: Энтони Хэтчкинс.

РЕДАКТИРОВАТЬ Нет, не на «33».

Псевдоним
источник
1
это работает для 052631578947368421?
J42161217
Да, в этом случае возвращается True.
Псевдоним
2
Сохраните несколько байтов, заменив ns на n
Общее отображаемое имя
1
Вы можете использовать <1вместо ==0? Также здесь есть ссылка TIO: попробуйте онлайн!
Лайкони
Как насчет 111111?
Энтони Хэтчкинс
2

постоянный ток, 24 25 байт

[1]sa0?dZd10r^1-r1+/rx=ap

Печатает «0», если число не является циклическим, в противном случае «1». Требуется ввести номер в виде строки.

Пример использования:

$ echo "[052631578947368421]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
1
$ echo "[052631578947368422]" | dc -e '[1]sa0?dZd10r^1-r1+/rx=ap'
0

TOL

Объяснение: Тот же алгоритм, что и в моем представлении на Haskell.

РЕДАКТИРОВАТЬ Нет, не на «33».

Псевдоним
источник
1

Mathematica, 81 байт

Length@Union@PadLeft[Sort/@IntegerDigits[ToExpression@#*Range@StringLength@#]]<2&

Попробуйте онлайн!

строка ввода

вход

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Выход

Правда

J42161217
источник
FromDigitsкорочеToExpression
JungHwan Мин
1
потому что в этом задании вам нужно работать с такими входами, как 034324 ...
J42161217