Czy to liczba cykliczna?

20

Cykliczna liczba to liczba cyfr „n”, które pomnożone przez 1, 2, 3, ... n, dają te same cyfry, ale w innej kolejności.

Na przykład liczba 142 857 jest liczbą cykliczną, ponieważ 142 857 x 2 = 285,714, 142 857 x 3 = 4228571, 142 857 x 4 = 571,428 i tak dalej. Biorąc pod uwagę liczbę całkowitą, określ, czy jest to liczba cykliczna, wypisując prawdziwą wartość, jeśli tak, i wartość fałsz, jeśli nie.

Ponadto, dla jasności, dane wejściowe mogą zawierać wiodące 0: np. 0344827586206896551724137931

Wynika to z faktu, że jeśli wiodące zera nie są dozwolone w liczbach, wówczas 142857 jest jedyną liczbą cykliczną w systemie dziesiętnym.

Ponieważ jest to golfowy kod, wygrywa najkrótsza odpowiedź w bajtach!

FantaC
źródło
1
Witam i witam w PPCG. To nie jest złe pytanie, ale jeśli spojrzysz na niektóre z ostatnio opublikowanych pytań, myślę, że zobaczysz, że może być lepiej. W szczególności byłoby bardzo korzystne dla społeczności, gdybyś dostarczył więcej przypadków testowych do pracy. Publikując przyszłe wyzwania, rozważ użycie piaskownicy .
FryAmTheEggman

Odpowiedzi:

3

05AB1E , 9 6 bajtów

Dzięki Emigna za oszczędność 3 bajtów!

ā*€{ïË

Wyjaśnienie:

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

Wykorzystuje kodowanie 05AB1E . Wypróbuj online!

Adnan
źródło
1
Jaki jest powód ¦‚˜?
kalsowerus
1
@kalsowerus Jeśli wejście ma wiodące zero, pomnożenie przez 1 spowoduje, że zniknie, co uniemożliwi działanie 0588235294117647.
Adnan
2
@tfbninja No dobrze, czy dodawanie wiodących zer po pomnożeniu również jest czymś, co należy wziąć pod uwagę? Są to poszczególne posortowane wyniki, które otrzymuję po pomnożeniu, z pewnymi brakującymi zerami wiodącymi, co prawdopodobnie wskazywałoby na problem tutaj.
Adnan
1
Rozważ liczbę 0212765957446808510638297872340425531914893617podaną w komentarzach do innej odpowiedzi. Patrząc na posortowane liczby, zakładam, że zwraca false, ale po usunięciu zer staje się to prawdą.
Emigna
2
@tfbninja Czy dane wyjściowe dla przypadku testowego Emigny są prawdziwe czy fałszywe?
Adnan
4

Właściwie 18 bajtów

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

Wypróbuj online! (oczekuje podanych danych)

Wyjaśnienie:

;;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
Mego
źródło
1
@tfbninja Opublikowałem to przed bitem o wiodących zerach. Mam kolejne 15-bajtowe rozwiązanie, które będzie działać z zerami wiodącymi, które wkrótce będę edytować.
Mego
1
Jakiego kodowania znaków używasz do uzyskania 18 bajtów? Próbowałem UTF-8 i ważył 32 bajty. EDYCJA: Rozumiem, to strona kodowa 437.
Pseudonim
3

Python, 86 bajtów

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

Wypróbuj online!

Wprowadź liczby jako ciągi znaków.

Uriel
źródło
1
@tfbninja powinien działać na każdym pythonie (2 i 3)
Uriel
1
dlaczego zawodzi z 0212765957446808510638297872340425531914893617?
J42161217
@Jenny_mathy teraz nie ma.
Uriel
2

PHP, 64 bajty

for(;$i++<9;)$r+=($c=count_chars)($argn)==$c($argn*$i);echo$r>1;

Wersja online

Jörg Hülsermann
źródło
2

Haskell, 36 33 32 45 bajtów

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

Przykładowe użycie:

*Main> c "142857"
True

Nie sądzę, aby ten algorytm wymagał wyjaśnienia.

TOL

Dzięki za sugestie: Ogólna nazwa wyświetlana, Laikoni.

Dzięki za korektę: Antony Hatchkins.

EDYCJA Nie, nie udaje się na „33”.

Pseudonim
źródło
1
czy to działa dla 052631578947368421?
J42161217
Tak, w tym przypadku zwraca wartość True.
pseudonim
2
Zaoszczędź niektóre bajty, zastępując ns n
Ogólna nazwa wyświetlana
1
Czy możesz użyć <1zamiast ==0? Również tutaj jest link TIO: Wypróbuj online!
Laikoni
Co powiesz na 111111?
Antony Hatchkins
2

dc, 24 25 bajtów

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

Wyświetla „0”, jeśli liczba nie jest cykliczna, w przeciwnym razie „1”. Wymaga wprowadzenia liczby jako ciągu.

Przykładowe użycie:

$ 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

Objaśnienie: Ten sam algorytm, co moje przesłanie Haskella.

EDYCJA Nie, nie udaje się na „33”.

Pseudonim
źródło
1

Mathematica, 81 bajtów

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

Wypróbuj online!

ciąg wejściowy

Wejście

„010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567”

Wynik

Prawdziwe

J42161217
źródło
FromDigitsjest krótszy niżToExpression
JungHwan Min
1
ponieważ w tym wyzwaniu musisz pracować z wejściami takimi jak 034324 ...
J42161217