순환 번호입니까?


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

숫자에 선행 0이 허용되지 않으면 142857은 10 진수의 유일한 순환 숫자이기 때문입니다.

코드 골프이므로 바이트 단위의 최단 답변이 이깁니다!


1
PPCG에 오신 것을 환영합니다. 이것은 나쁜 질문은 아니지만 최근에 게시 한 질문 중 일부를 살펴보면 더 나을 수 있다고 생각합니다. 특히, 더 많은 테스트 사례를 제공하면 커뮤니티에 큰 도움이됩니다. 향후 과제를 게시 할 때는 샌드 박스 사용을 고려하십시오 .
FryAmTheEggman

답변:


3

05AB1E , 9 6 바이트

3 바이트를 절약 한 Emigna 에게 감사드립니다 !

ā*€{ïË

설명:

ā        # 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 입력에 선행 0이 있으면 1을 곱하면 입력이 사라져 작동하지 않습니다 0588235294117647.
Adnan

2
@tfbninja 아, 곱셈 후에도 고려해야 할 점이 있습니까? 이것은 곱셈 후 얻은 개별 정렬 결과 이며 앞에 0이 누락되어 문제가 있음을 나타냅니다.
Adnan

1
0212765957446808510638297872340425531914893617다른 답변의 의견에 언급 된 숫자 를 고려하십시오 . 정렬 된 숫자를 보면 false를 반환한다고 가정하지만 0을 제거하면 true가됩니다.
Emigna

2
@tfbninja Emigna의 테스트 사례에 대한 결과가 진실인가 거짓인가?
Adnan

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 나는 선행 0에 대해 조금 전에 이것을 게시했습니다. 나는 곧 편집 할 선행 0과 함께 작동하는 또 다른 15 바이트 솔루션을 가지고 있습니다.
Mego

1
18 바이트를 달성하기 위해 어떤 문자 인코딩을 사용합니까? UTF-8을 시도했지만 무게는 32 바이트입니다. 편집 : 아, 알다시피, 그것은 코드 페이지 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는 그렇지 않습니다.
Uriel


2

하스켈, 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.

정정 주셔서 감사합니다 : Antony Hatchkins.

편집 아니오, "33"에서 실패합니다.


1
052631578947368421에서 작동합니까?
J42161217

예,이 경우 True를 반환합니다.
가명

2
N으로 NS를 교체하여 일부 바이트 저장
일반 디스플레이 이름

1
<1대신 사용할 수 있습니까 ==0? TIO 링크도 있습니다 : 온라인으로 사용해보십시오!
Laikoni

111111은 어떻습니까?
안토니 해치 킨

2

dc, 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
정환 민

1
이 도전에 당신이 034324 같이 입력 작업해야하기 때문에 ...
J42161217
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.