Đây có phải là một số chu kỳ?


20

Số tuần hoàn là một số chữ số "n" mà khi nhân với 1, 2, 3, ... n, kết quả là cùng một chữ số nhưng theo một thứ tự khác nhau.

Ví dụ: số 142,857 là một số tuần hoàn kể từ 142,857 x 2 = 285,714, 142,857 x 3 = 428,571, 142,857 x 4 = 571.428, v.v. Đưa ra một đầu vào số nguyên, xác định xem đó có phải là một số tuần hoàn hay không bằng cách xuất ra một giá trị trung thực nếu có và giá trị giả nếu không.

Ngoài ra, để rõ ràng, đầu vào có thể chứa số 0 hàng đầu: ví dụ 0344827586206896551724137931

Điều này là do, nếu các số 0 đứng đầu không được phép trên các số, thì 142857 là số tuần hoàn duy nhất trong số thập phân.

Vì nó là môn đánh gôn, nên câu trả lời ngắn nhất bằng byte sẽ thắng!


1
Xin chào và chào mừng đến với PPCG. Đây không phải là một câu hỏi tồi, nhưng nếu bạn xem một số câu hỏi được đăng gần đây tôi nghĩ rằng bạn sẽ thấy rằng nó có thể tốt hơn. Cụ thể, sẽ rất có lợi cho cộng đồng nếu bạn cung cấp thêm các trường hợp thử nghiệm để làm việc. Khi đăng các thách thức trong tương lai, vui lòng xem xét sử dụng hộp cát .
FryAmTheEggman

Câu trả lời:


3

05AB1E , 9 6 byte

Cảm ơn Emigna vì đã tiết kiệm 3 byte!

ā*€{ïË

Giải trình:

ā        # 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

Sử dụng mã hóa 05AB1E . Hãy thử trực tuyến!


1
Lý do là ¦‚˜gì?
kalsowerus

1
@kalsowerus Nếu đầu vào có số 0 đứng đầu, nhân với 1 sẽ làm cho nó biến mất, điều này làm cho nó không hoạt động 0588235294117647.
Ad Nam

2
@tfbninja Được rồi, việc thêm các số 0 đứng đầu sau khi nhân cũng là điều cần tính đến? Đây là những kết quả được sắp xếp riêng lẻ mà tôi nhận được sau khi nhân, với một số số 0 hàng đầu bị thiếu, có thể chỉ ra vấn đề ở đây.
Ad Nam

1
Hãy xem xét số lượng 0212765957446808510638297872340425531914893617như được đề cập trong các ý kiến ​​của một câu trả lời khác. Nhìn vào các số được sắp xếp tôi sẽ cho rằng nó trả về false, nhưng khi xóa các số 0 thì nó trở thành đúng.
Emigna

2
@tfbninja Đầu ra cho trường hợp thử nghiệm của Emigna là thật hay giả?
Ad Nam

4

Trên thực tế , 18 byte

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

Hãy thử trực tuyến! (dự kiến ​​trích dẫn đầu vào)

Giải trình:

;;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 Tôi đã đăng bài này trước một chút về các số 0 hàng đầu. Tôi có một giải pháp 15 byte khác sẽ hoạt động với các số 0 hàng đầu mà tôi sẽ chỉnh sửa sớm.
Mego

1
Mã hóa ký tự nào bạn sử dụng để đạt được 18 byte? Tôi đã thử UTF-8 và nó nặng tới 32 byte. EDIT: Ồ, tôi hiểu rồi, đó là mã trang 437.
Bút danh

3

Python, 86 byte

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

Hãy thử trực tuyến!

Nhập số dưới dạng chuỗi.


1
@tfbninja nên hoạt động trên bất kỳ con trăn nào (2 và 3)
Uriel

1
Tại sao nó thất bại với 0212765957446808510638297872340425531913613617?
J42161217

@Jenny_mathy bây giờ thì không.
Uriel


2

Haskell, 36 33 32 45 byte

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

Ví dụ sử dụng:

*Main> c "142857"
True

Tôi không nghĩ rằng thuật toán này cần bất kỳ lời giải thích.

TOL

Cảm ơn các đề xuất: Tên hiển thị chung, Laikoni.

Cảm ơn đã sửa: Antony Hatchkins.

EDIT Không, thất bại trên "33".


1
Nó có hoạt động cho 052631578947368421 không?
J42161217

Vâng, nó trả về True trong trường hợp đó.
Bút danh

2
Lưu một số byte bằng cách thay thế ns bằng n
Tên hiển thị chung

1
Bạn có thể sử dụng <1thay vì ==0? Ngoài ra đây là một liên kết TIO: Hãy thử trực tuyến!
Laikoni

111111 thì sao?
Antony Hatchkins

2

dc, 24 25 byte

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

In "0" nếu số không theo chu kỳ, nếu không thì "1". Yêu cầu số được nhập dưới dạng chuỗi.

Ví dụ sử dụng:

$ 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

Giải thích: Thuật toán tương tự như trình Haskell của tôi.

EDIT Không, thất bại trên "33".


1

Toán học, 81 byte

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

Hãy thử trực tuyến!

chuỗi đầu vào

Đầu vào

"01030927835051546463917525773195876288659793814432989690721649484545360824742268041237113113206206185567" "

Đầu ra

Thật


FromDigitsngắn hơnToExpression
JungHwan Min

1
bởi vì trong thử thách này, bạn cần phải làm việc với các đầu vào như 034324 ...
J42161217
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.