Das coole Zeug
Die folgende Rosette kann bei der Berechnung von Modulo-7-Zahlen hilfreich sein.
Dazu müssen Sie bei 0 beginnen und einige Schritte im Uhrzeigersinn drehen, die von der ersten Ziffer vorgegeben werden. Folgen Sie dann für jede nachfolgende Ziffer dem Pfeil und drehen Sie die durch diese Ziffer angegebene Anzahl von Schritten im Uhrzeigersinn.
So gehen Sie für die Nummer 294 vor:
- Sie beginnen bei Kreis 0.
- Sie drehen die durch die erste Ziffer angegebene Anzahl von Schritten im Uhrzeigersinn (das ist eine 2, Sie landen bei 2).
- Sie folgen dort dem Pfeil (Sie landen bei 6).
- Sie drehen die durch die zweite Ziffer angegebene Anzahl von Schritten im Uhrzeigersinn (das ist eine 9, Sie landen bei 1).
- Sie folgen dort dem Pfeil (Sie landen bei 3).
- Sie drehen die durch die dritte Zahl gegebene Anzahl von Schritten im Uhrzeigersinn (das ist 4, Sie landen bei 0).
- 294 mod 7 = 0 (was bedeutet, dass 294 ein Vielfaches von 7 ist).
( Video Erklärung, wenn Sie es immer noch nicht verstanden haben )
Das Ziel
Finde heraus, wie das funktioniert (ich weiß, aber ich werde es dir nicht sagen).
Erstellen Sie ein Programm, das eine Zahl n
als Parameter annimmt und für das eine Rosette generiert wird mod n
.
Die Rosette kann mit beliebigen Mitteln angezeigt werden (ASCII, PNG generieren, SVG generieren, ...), solange sie von einem 8-jährigen Kind verwendet werden kann ( also keine Liste von Regeln, ich möchte ein Bild )!
Sie können Zwangslinien verwenden, auch wenn diese etwas weniger klar sind als das, was ich für das Beispiel gemacht habe, aber Sie müssen die Zahlen, die auf sich selbst verweisen, mit einer Art Schwanzbeißpfeil deutlich anzeigen.
Testfälle
(Ich gebe nur die Verknüpfungen zwischen den Zahlen an. Sie können meine Frage jederzeit bearbeiten, sobald Ihr Programm sie erfolgreich generiert hat.)
mod 2:
0 -> 0
1 -> 0
mod 3:
0 -> 0
1 -> 1
2 -> 2
mod 4:
0 -> 0
1 -> 2
2 -> 0
3 -> 2
mod 5:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
mod 6:
0 -> 0
1 -> 4
2 -> 2
3 -> 0
4 -> 4
5 -> 2
mod 7:
0 -> 0
1 -> 3
2 -> 6
3 -> 2
4 -> 5
5 -> 1
6 -> 4
mod 8:
0 -> 0
1 -> 2
2 -> 4
3 -> 6
4 -> 0
5 -> 2
6 -> 4
7 -> 6
mod 9:
0 -> 0
1 -> 1
2 -> 2
3 -> 3
4 -> 4
5 -> 5
6 -> 6
7 -> 7
8 -> 8
mod 10:
0 -> 0
1 -> 0
2 -> 0
3 -> 0
4 -> 0
5 -> 0
6 -> 0
7 -> 0
8 -> 0
9 -> 0
Regeln
Dies ist Code-Golf , der kürzeste Code in Bytes gewinnt.
Lücken und Cheats sind wie immer verboten.
quelle
Antworten:
Mathematica, 192 Bytes
Für diese Art von Herausforderung (nicht-triviale mathematische Berechnung zusammen mit Grafikausgabe auf hohem Niveau) ist Mathematica gemacht!
Erweitert und erklärt:
Die Zeilen 1 und 8 begrenzen eine unbenannte Funktion eines Arguments. Die Zeilen 3 und 7 begrenzen mehrere Befehle, die Grafiken ausgeben.
Zeile 2 speichert die Eingabe als
d
; definiert eine Binärfunktion,t
die die Koordinaten eines Punktesn/d
des Weges um den Radiuskreisr
im Uhrzeigersinn von oben angibt (im Geiste dieser Site habe ich ein Byte durch Runden von 2π auf6.3
! gespeichert ); und definiert eine unäre Funktion,m
die das Ziel des Pfeils berechnet, beginnend an seinem Argument.Zeile 4 macht die Zahlen
0
and–1
gleich beabstandeten um den Kreis mit dem Radius 9 (der genauen Radius unwichtig, gewählt Ästhetik unterliegen Einpassen in einem Byte zu maximieren).In Linie 5 werden die geraden Pfeile im Uhrzeigersinn um den Umfang des Kreises gerendert. Das
1/7
und6/7
lassen genug Platz, um die Zahlen zu lesen.Die Linie 6 rendert die gekrümmten Pfeile von jeder Zahl bis (10-mal die Zahl Modulo
d
). ZeichnetBezierCurve
automatisch eine Bézier-Kurve unter Verwendung der angegebenen Kontrollpunkte. Glücklicherweise führt die Verwendung des Ursprungs als einzelner Innenkontrollpunkt zu einer angemessenen Ausgabe.Beispielausgabe (beachten Sie, dass die Fälle 9, 10 und 11 auf unterschiedliche Weise trivial sind):
d = 7
d = 8
d = 9
d = 10
d = 11
d = 12
d = 13
d = 37
Diese letzte Eingabe wurde gewählt, weil 37 10 ^ 3–1 dividiert und die inneren Pfeile (ohne den obligatorischen Selbstpfeil von 0 bis 0) viele Dreieckszyklen bilden.
quelle
Python 2, 294 Bytes
Druckt das Diagramm in diesem Format:
Ich weiß nicht, ob dieses Format in Ordnung ist, daher lasse ich diese Antwort vorerst als ungültig.Ja, es ist gültig!Probieren Sie es auf repl.it!
quelle
n
-stelligen Zahlen funktioniert. Ich bin mir nicht sicher, ob die Herausforderung es erfordert, dass Sie esn>9
trotzdem tun .PHP + SVG, 500 Bytes
kleiner Pfeil für Verbindungen zwischen gleichen Werten
um die pfeile zu den gleichen werten zu sehen benutze ich diesen farbwert
rgba(255,0,0,0.3)
. es ist eine Möglichkeit, es kurzzuschließen.erweitert
Ausgabe für n = 45
320 Bytes arbeiten mit Rect
erweitert
Ausgabe für n = 72
quelle
Python 2,
540464431 BytesEinige Golfer mögen es, kürzere Variablennamen zu verwenden, Variablen zu ersetzen, Listen zu verstehen und alles in Weiß zu ändern (außer dem Text). Die größte Einsparung war das dynamische Ändern der vorberechneten Positionen (siehe
L
).L
Berechnet die Positionen der Kreise nach dem Abstand zum Ursprung für die großen Kreise mit den Zahlen und die äußeren kleinen Kreise, die auf Selbstzeigen hinweisen.Die erste Schleife zeichnet die Verbindungen: Die erste Linie ist der Kreis und die zweite Linie befindet sich im Inneren. Ein kleiner Kreis wird hinzugefügt, um die Richtung oder die Selbstausrichtung anzuzeigen.
Zweite Schleife setzt großen Kreis und Zahl.
Es ist offensichtlich nicht so schön, wie die Mathematica antwortet, aber alles von Grund auf neu gemacht.
quelle
Mathematica,
124121 BytesErzeugt eine Figur als Diagramm mit gerichteten Kanten. Die Grafikausgabe folgt jetzt demselben Muster, außer gegen den Uhrzeigersinn. Ich bevorzuge Greg Martins Lösung viel mehr, da die Ausgabe viel ästhetischer ist.
Mit kann für 82 Bytes ein weniger ansprechender Graph erzeugt werden
Für d = 8
quelle
Graph
, hatte aber die gleiche negative Reaktion. Außerdem ist es für den Algorithmus wichtig, zwischen den Flanken "im Uhrzeigersinn" und den Flanken "mal 10" zu unterscheiden. Ich bin mir sicher, dass es Optionen fürGraph
dieses Handle gibt - aber dann kommen noch mehr Bytes ...Graph
Funktionen und Tricks gefunden, wie man->
anstelle von verwendetDirectedEdge
. Ich habe diese anfängliche 100-Byte-Version auf 82 Byte verkürzt, aber dann durch Korrigieren im richtigen Format weitere 42 Byte hinzugefügt.CircularEmbedding
, aber es hat die Eckpunkte nicht im Uhrzeigersinn angeordnetn=7
(ich gebe zu, ich habe keine anderen Eingaben versucht). Funktioniert es bei dir mitn=7
?Join
undTranspose
damit die Außenkanten zuerst vor den Innenkanten aufgeführt würden. Die Scheitelpunkte sind entlang einer Kreisbahn korrekt angeordnet, aber da die Kanten lieber gerade sind, ähnelt dies einem n- Eck.Python 2 + Grafik, 147 Bytes
Zeichnet nicht immer einen Kreis, gibt eine aufgerufene PDF-Datei aus
o
quelle
Haskell, 350 Bytes
Inspiriert von @Loovjo verwende ich auch ASCII-Kunst. Dies funktioniert für Nummern unter 100000 (oder so ähnlich).
Grundsätzlich zeigen Sie von x auf (x * 10)% n.
Sie können dies versuchen hier . Da das Codepad keine Eingabe unterstützt, ändern Sie q in den gewünschten Wert von n und reichen Sie ihn erneut ein. (Beachten Sie, dass das Gabeln nicht funktioniert. Kopieren Sie die Daten von der Hauptseite und reichen Sie sie erneut ein.) Der dort übermittelte Code ist etwas anders, da die obige Version Eingaben von der Konsole entgegennimmt.
Ich hoffe die Ausgabe ist intuitiv. Komprimierungsvorschläge sind willkommen (besonders wenn das schlägt 294 ;)).
quelle
foldl (++) ""$map (\...
Batch, 394 Bytes
In Batch zu flüchten ist im besten Fall hässlich. Beispielausgabe für 7:
quelle
>0<
zeigt , dass0
sich abbildet, während>2<<<3<
zeigt , dass die3
Karten zu2
.