Apakah ini nomor Cyclic?


20

Angka siklik adalah angka "n" yang bila dikalikan dengan 1, 2, 3, ... n, menghasilkan angka yang sama tetapi dalam urutan yang berbeda.

Misalnya, angka 142.857 adalah angka siklik karena 142.857 x 2 = 285.714, 142.857 x 3 = 428.571, 142.857 x 4 = 571.428, dan seterusnya. Diberikan input integer, tentukan apakah itu adalah bilangan siklik dengan mengeluarkan nilai kebenaran jika itu, dan nilai palsu jika tidak.

Selain itu, agar lebih jelas, input dapat berisi awalan 0: misalnya 0344827586206896551724137931

Ini karena, jika nol di depan tidak diizinkan pada angka, maka 142857 adalah satu-satunya angka siklik dalam desimal.

Karena ini kode-golf, jawaban tersingkat dalam byte menang!


1
Hai dan selamat datang di PPCG. Ini bukan pertanyaan yang buruk, tetapi jika Anda melihat beberapa pertanyaan yang baru diposting saya pikir Anda akan melihat bahwa itu bisa lebih baik. Secara khusus, itu akan sangat bermanfaat bagi masyarakat jika Anda memberikan lebih banyak kasus uji untuk bekerja dengannya. Saat memposting tantangan di masa mendatang, harap pertimbangkan untuk menggunakan kotak pasir .
FryAmTheEggman

Jawaban:


3

05AB1E , 9 6 byte

Terima kasih kepada Emigna untuk menghemat 3 byte!

ā*€{ïË

Penjelasan:

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

Menggunakan penyandian 05AB1E . Cobalah online!


1
Apa alasannya ¦‚˜?
kalsowerus

1
@ kalsowerus Jika input memiliki nol di depan, mengalikan dengan 1 akan membuatnya menghilang, yang membuatnya tidak berfungsi 0588235294117647.
Adnan

2
@ tfbninja Oh oke, apakah menambahkan angka nol terkemuka setelah perkalian juga sesuatu untuk diperhitungkan? Ini adalah hasil diurutkan secara individu yang saya dapatkan setelah mengalikan, dengan beberapa nol terkemuka yang hilang, yang mungkin akan menunjukkan masalah di sini.
Adnan

1
Pertimbangkan angkanya 0212765957446808510638297872340425531914893617seperti yang disebutkan dalam komentar jawaban lain. Melihat angka-angka yang diurutkan saya akan menganggapnya mengembalikan false, tetapi ketika menghapus nol itu menjadi benar.
Emigna

2
@ tfbninja Apakah output untuk kasus uji Emigna benar atau salah?
Adnan

4

Sebenarnya , 18 byte

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

Cobalah online! (mengharapkan input yang dikutip)

Penjelasan:

;;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 Saya memposting ini sebelum sedikit tentang memimpin nol. Saya memiliki solusi 15-byte lain yang akan bekerja dengan nol terkemuka yang akan saya edit segera.
Mego

1
Pengodean karakter apa yang Anda gunakan untuk mencapai 18 byte? Saya mencoba UTF-8 dan berbobot 32 byte. EDIT: Oh, begitu, kode halaman 437.
Nama samaran

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))

Cobalah online!

Masukkan angka sebagai string.


1
@ tfbninja harus bekerja pada sembarang python (2 dan 3)
Uriel

1
mengapa gagal dengan 0212765957446808510638297872340425531914893617?
J42161217

@ Jenny_mathy sekarang tidak.
Uriel


2

Haskell, 36 33 32 45 byte

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

Contoh penggunaan:

*Main> c "142857"
True

Saya tidak berpikir algoritma ini membutuhkan penjelasan apa pun.

TOL

Terima kasih atas sarannya: Nama Tampilan Umum, Laikoni.

Terima kasih atas koreksi: Antony Hatchkins.

EDIT Tidak, gagal pada "33".


1
apakah itu berfungsi untuk 052631578947368421?
J42161217

Ya, itu mengembalikan Benar dalam kasus itu.
Nama samaran

2
Simpan beberapa byte dengan mengganti ns dengan n
Generic Display Name

1
Bisakah Anda menggunakan <1bukan ==0? Juga di sini adalah tautan TIO: Coba online!
Laikoni

Bagaimana dengan 111111?
Antony Hatchkins

2

dc, 24 25 byte

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

Mencetak "0" jika nomornya tidak siklik, jika tidak, "1". Membutuhkan nomor yang dimasukkan sebagai string.

Contoh penggunaan:

$ 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

Penjelasan: Algoritma yang sama dengan pengiriman Haskell saya.

EDIT Tidak, gagal pada "33".


1

Mathematica, 81 byte

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

Cobalah online!

input string

Memasukkan

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Keluaran

Benar


FromDigitslebih pendek dariToExpression
JungHwan Min

1
karena dalam tantangan ini Anda perlu bekerja dengan input seperti 034324 ...
J42161217
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.