Ist es eine zyklische Zahl?


20

Eine zyklische Zahl besteht aus einer Anzahl von "n" Ziffern, die bei Multiplikation mit 1, 2, 3, ... n die gleichen Ziffern ergeben, jedoch in einer anderen Reihenfolge.

Beispielsweise ist die Zahl 142.857 eine zyklische Zahl, da 142.857 × 2 = 285.714, 142.857 × 3 = 428.571, 142.857 × 4 = 571.428 und so weiter. Bestimmen Sie bei einer Ganzzahleingabe, ob es sich um eine zyklische Zahl handelt, indem Sie einen Wahrheitswert ausgeben, wenn dies der Fall ist, und einen falschen Wert, wenn dies nicht der Fall ist.

Der Eingang kann auch führende Nullen enthalten, z. B. 0344827586206896551724137931

Dies liegt daran, dass 142857 die einzige zyklische Dezimalzahl ist, wenn führende Nullen für Ziffern nicht zulässig sind.

Da es sich um Code-Golf handelt, gewinnt die kürzeste Antwort in Bytes!


1
Hallo und willkommen bei PPCG. Dies ist keine schlechte Frage, aber wenn Sie sich einige der kürzlich gestellten Fragen ansehen, werden Sie feststellen, dass es besser sein könnte. Insbesondere wäre es für die Community sehr vorteilhaft, wenn Sie mehr Testfälle zur Verfügung stellen würden, mit denen Sie arbeiten könnten. Wenn Sie zukünftige Herausforderungen veröffentlichen, sollten Sie die Sandbox in Betracht ziehen .
FryAmTheEggman

Antworten:


3

05AB1E , 9 6 Bytes

Danke an Emigna für das Speichern von 3 Bytes!

ā*€{ïË

Erläuterung:

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

Verwendet die 05AB1E- Codierung. Probieren Sie es online!


1
Was ist der Grund dafür ¦‚˜?
kalsowerus

1
@kalsowerus Wenn der Eingang eine führende Null hat, wird er durch Multiplizieren mit 1 ausgeblendet, was dazu führt, dass er nicht funktioniert 0588235294117647.
Adnan

2
@tfbninja Oh okay, ist das Hinzufügen von führenden Nullen nach der Multiplikation auch zu berücksichtigen? Dies sind die einzelnen sortierten Ergebnisse, die ich nach der Multiplikation erhalte, mit einigen fehlenden führenden Nullen, die wahrscheinlich das Problem hier anzeigen würden.
Adnan

1
Betrachten Sie die Zahl 0212765957446808510638297872340425531914893617wie in den Kommentaren einer anderen Antwort erwähnt. Wenn ich die sortierten Zahlen betrachte, würde ich annehmen, dass sie falsch sind, aber wenn Nullen entfernt werden, wird sie wahr.
Emigna

2
@tfbninja Ist die Ausgabe für Emignas Testfall wahr oder falsch?
Adnan

4

Eigentlich 18 Bytes

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

Probieren Sie es online! (Erwartet zitierte Eingabe)

Erläuterung:

;;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 Ich habe dies vor dem Bit über führende Nullen gepostet. Ich habe eine weitere 15-Byte-Lösung, die mit führenden Nullen arbeitet, die ich bald bearbeiten werde.
Mego

1
Mit welcher Zeichenkodierung erreichen Sie 18 Bytes? Ich habe UTF-8 ausprobiert und es wog 32 Bytes. EDIT: Oh, ich verstehe, es ist Codepage 437.
Pseudonym

3

Python, 86 Bytes

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

Probieren Sie es online!

Zahlen als Zeichenketten eingeben.


1
@tfbninja sollte auf jeder Python (2 und 3) funktionieren
Uriel

1
warum scheitert es bei 0212765957446808510638297872340425531914893617?
J42161217

@Jenny_mathy tut es jetzt nicht.
Uriel


2

Haskell, 36 33 32 45 Bytes

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

Anwendungsbeispiel:

*Main> c "142857"
True

Ich glaube nicht, dass dieser Algorithmus einer Erklärung bedarf.

TOL

Vielen Dank für Vorschläge: Generischer Anzeigename, Laikoni.

Danke für die Korrektur: Antony Hatchkins.

EDIT Nope, scheitert an "33".


1
funktioniert es bei 052631578947368421?
J42161217

Ja, in diesem Fall wird True zurückgegeben.
Pseudonym

2
Sparen Sie einige Bytes, indem Sie ns durch n ersetzen
Generischer Anzeigename

1
Können Sie <1anstelle von verwenden ==0? Auch hier ist ein TIO-Link: Probieren Sie es online!
Laikoni

Wie wäre es mit 111111?
Antony Hatchkins

2

Gleichstrom, 24 25 Bytes

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

Gibt "0" aus, wenn die Nummer nicht zyklisch ist, andernfalls "1". Erfordert die Eingabe der Nummer als Zeichenfolge.

Anwendungsbeispiel:

$ 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

Erläuterung: Der gleiche Algorithmus wie bei meiner Haskell-Übermittlung.

EDIT Nope, scheitert an "33".


1

Mathematica, 81 Bytes

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

Probieren Sie es online!

Eingabezeichenfolge

Eingang

"010309278350515463917525773195876288659793814432989690721649484536082474226804123711340206185567"

Ausgabe

Wahr


FromDigitsist kürzer alsToExpression
JungHwan Min

1
denn in dieser Herausforderung müssen Sie mit Eingaben wie 034324 arbeiten ...
J42161217
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.