Devirli bir sayı mı?


20

Döngüsel bir sayı, 1, 2, 3, ... n ile çarpıldığında aynı basamaklarla ancak farklı bir sıra ile sonuçlanan bir dizi "n" basamağıdır.

Örneğin, 142.857 sayısı, 142.857 x 2 = 285.714, 142.857 x 3 = 428.571, 142.857 x 4 = 571.428 vb. Bir tamsayı girdisi verildiğinde, eğer doğruluk değeri varsa, döngüsel bir sayı olup olmadığını saptayın.

Ayrıca, net olmak gerekirse, girdi önde gelen 0'ları içerebilir: örneğin 0344827586206896551724137931

Bunun nedeni, sayılarda baştaki sıfırlara izin verilmiyorsa, 142857 ondalık sayıdaki tek döngüsel sayıdır.

Kod golf olduğu için baytlarda en kısa cevap kazanır!


1
Merhaba ve PPCG'ye hoş geldiniz. Bu kötü bir soru değil, ancak yakın zamanda gönderilen soruların bazılarına bakarsanız, bunun daha iyi olabileceğini göreceğinizi düşünüyorum. Özellikle, çalışmak için daha fazla test vakası sağladıysanız topluluk için çok faydalı olacaktır. Gelecekteki zorlukları gönderirken lütfen korumalı alanı kullanmayı düşünün .
FryAmTheEggman

Yanıtlar:


3

05AB1E , 9 6 bayt

3 bayt kaydettiği için Emigna'ya teşekkürler !

ā*€{ïË

Açıklama:

ā        # 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 kodlamasını kullanır . Çevrimiçi deneyin!


1
Sebebi nedir ¦‚˜?
kalsowerus

1
@kalsowerus Girdinin önünde sıfır varsa, 1 ile çarpmak kaybolmasını sağlar ve bu da çalışmamasını sağlar 0588235294117647.
Adnan

2
@tfbninja Oh tamam, çarpmadan sonra baştaki sıfırları da hesaba katmak mı gerekiyor? Bunlar, çarpma işleminden sonra elde ettiğim sıralı sonuçlardır ve bazı eksik sıfırlar vardır, bu da muhtemelen sorunu gösterecektir.
Adnan

1
0212765957446808510638297872340425531914893617Başka bir cevabın yorumlarında belirtildiği gibi sayıyı düşünün . Sıralanan sayılara baktığımda yanlış döndürdüğünü varsayıyorum, ancak sıfırları kaldırırken doğru olur.
Emigna

2
@tfbninja Emigna'nın test senaryosunun çıktısı doğru mu, yanlış mı?
Adnan

4

Aslında 18 bayt

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

Çevrimiçi deneyin! (alıntılanan girişi bekler)

Açıklama:

;;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 Bunu sıfırdan önce biraz önce yayınladım. Yakında düzenleyeceğim baştaki sıfırlarla çalışacak 15 baytlık bir çözüm daha var.
Mego

1
18 bayt elde etmek için hangi karakter kodlamasını kullanıyorsunuz? UTF-8'i denedim ve 32 bayt ağırlığındaydı. DÜZENLEME: Oh, anladım, kod sayfası 437.
Takma isim

3

Python, 86 bayt

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

Çevrimiçi deneyin!

Sayıları dize olarak girin.


1
@tfbninja herhangi bir python (2 ve 3) üzerinde çalışmalıdır
Uriel

1
neden 0212765957446808510638297872340425531914893617 ile başarısız oluyor?
J42161217

@Jenny_mathy şimdi değil.
Uriel


2

Haskell, 36 33 32 45 bayt

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

Örnek kullanım:

*Main> c "142857"
True

Bu algoritmanın herhangi bir açıklamaya ihtiyacı olduğunu düşünmüyorum.

TOL

Önerileriniz için teşekkürler: Genel Görünen Ad, Laikoni.

Düzeltme için teşekkürler: Antony Hatchkins.

DÜZENLE Hayır, "33" başarısız.


1
052631578947368421 için çalışıyor mu?
J42161217

Evet, bu durumda True değerini döndürür.
Takma isim

2
Ns ile n'yi değiştirerek bazı baytları kaydedin
Genel Görünen Ad

1
<1Bunun yerine kullanabilir misin ==0? Ayrıca bir TIO bağlantısı: Çevrimiçi deneyin!
Laikoni

111111 ne dersiniz?
Antony Hatchkins

2

dc, 24 25 bayt

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

Sayı döngüsel değilse "0", aksi takdirde "1" yazdırır. Dize olarak sayı girilmesini gerektirir.

Örnek kullanım:

$ 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

Açıklama: Haskell sunumumla aynı algoritma.

DÜZENLE Hayır, "33" başarısız.


1

Mathematica, 81 bayt

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

Çevrimiçi deneyin!

giriş dizesi

Giriş

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Çıktı

Doğru


FromDigitsdaha kısadırToExpression
JungHwan Min

1
çünkü bu meydan okumada 034324 gibi girişlerle çalışmanız gerekir ...
J42161217
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.