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!


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!


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

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.


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

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”.


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”.


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


FromDigitsjest krótszy niżToExpression
JungHwan Min

1
ponieważ w tym wyzwaniu musisz pracować z wejściami takimi jak 034324 ...
J42161217
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.