Це циклічне число?


20

Циклічне число - це число цифр "n", яке при множенні на 1, 2, 3, ... n призводить до тих самих цифр, але в іншому порядку.

Наприклад, число 142,857 - циклічне число, оскільки 142,857 х 2 = 285,714, 142,857 х 3 = 428,571, 142,857 х 4 = 571,428 тощо. З урахуванням цілого введення, визначте, чи це циклічне число, вивівши значення "truthy", якщо воно є, і помилкове значення, якщо "ні".

Також, щоб бути зрозумілим, вхід може містити провідні 0, наприклад: 0344827586206896551724137931

Це тому, що, якщо провідні нулі не дозволені на числівниках, то 142857 є єдиним циклічним числом у десяткових числах.

Оскільки це код-гольф, найкоротша відповідь у байтах виграє!


1
Привіт і ласкаво просимо до PPCG. Це не поганий питання, але якщо ви подивитесь на деякі нещодавно опубліковані питання, я думаю, що ви побачите, що це може бути і краще. Зокрема, було б дуже корисно для громади, якби ви надали більше тестових випадків для роботи. При розміщенні проблем в майбутньому, будь ласка , розглянути питання про використання пісочниці .
FryAmTheEggman

Відповіді:


3

05AB1E , 9 6 байт

Дякуємо Еміньї за збереження 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як згадується в коментарях іншої відповіді. Дивлячись на відсортовані числа, я вважаю, що вони повертають помилкові, але при видаленні нулів це стає істинним.
Емінья

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 байти. EDIT: О, я бачу, це кодова сторінка 437.
Псевдонім

3

Пітон, 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)
Uriel

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

Дякуємо за пропозиції: Загальне відображуване ім’я, Лайконі.

Дякуємо за виправлення: Антоні Хеткінс.

EDIT Nope, не працює на "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.

EDIT Nope, не працює на "33".


1

Математика, 81 байт

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

Спробуйте в Інтернеті!

вхідний рядок

Вхідні дані

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Вихідні дані

Правда


FromDigitsкоротшеToExpression
JungHwan Min

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