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


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 является единственным циклическим числом в десятичной дроби.

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


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

1
@tfbninja Я уже писал об этом в начале о нулях. У меня есть другое 15-байтовое решение, которое будет работать с ведущими нулями, которое я скоро отредактирую.
Мего

1
Какую кодировку символов вы используете для достижения 18 байтов? Я попробовал UTF-8, и он весил 32 байта. РЕДАКТИРОВАТЬ: О, я вижу, это кодовая страница 437.
Псевдоним



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"

Выход

Правда


FromDigitsкорочеToExpression
JungHwan Мин

1
потому что в этом задании вам нужно работать с такими входами, как 034324 ...
J42161217
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.