Diese Herausforderung ist von diesem fantastischen animierten Diagramm inspiriert (danke an flawr für die Veröffentlichung im Chat).
n
Zeichnen Sie bei einer Eingabe alle Primfaktoren wie angegeben als verschachtelte Punktpolygone.
Angenommen 357 = 17x7x3
, Sie ordnen 3 Punkte in einem Dreieck, 7 Versionen dieser Dreiecke in einem Siebeneck und 17 Versionen dieser Siebenecke in einem Siebeneck an. Kurz gesagt, verschachtelte Polygone vom größten Primfaktor außen zum kleinsten im Inneren. Für 357
Ihre Antwort ein wenig so aussehen sollte (mit oder ohne Farbe):
Jedes Polygon eines jeden Strichs >= 3
sollte nicht um das Diagramm gedreht werden.
Die einzige Ausnahme ist die Primzahl 2
, speziell für ungerade Potenzen von 2
. Wie Sie im folgenden Beispiel sehen können 376 = 47x2x2x2
, 8
drehen sich die s und sind keine einzelnen Zeilen von 2
s, sondern vertikale Stapel für 4
s in einem Quadrat. Auch Potenzen von 2
, in Quadraten angeordnet, müssen auf diese Weise nicht gedreht werden.
In der Tat 448 = 7x2x2x2x2x2x2
hat ein Diagramm, das wie ein Siebeneck von 64
s aussieht , und 64
ist in ein Quadrat von Quadraten von Quadraten angeordnet, aber ohne Drehung.
Zwei weitere Beispiele sind 440 = 11x5x2x2x2
und 432 = 3x3x3x2x2x2x2
. Wir sehen, dass 440
mit einer ungeraden Potenz von 2 8
s gedreht hat , aber 432
mit einer geraden Potenz von 2
nicht seine 16
s dreht .
Und schließlich ist hier ein minimales Beispiel 10 = 5x2
ohne Farbe, das ich mit Python und seinem turtle
Modul nachgebildet habe.
Die Herausforderung
- Ein Eingang gegeben ,
n
wo der1 <= n <= 10000
Ausgang ein Bild von seinem verschachtelten Faktor Polygonen. - Regeln sind:
- Das Bild besteht aus verschachtelten Punktpolygonen, von einem Polygon mit (dem größten Primfaktor) Seiten an der Außenseite bis zum kleinsten Primfaktor an der Innenseite.
- Für den Faktor 2 sollten die Potenzen von 2 als Linie, dann als Quadrate, dann als Quadratlinie usw. gestapelt werden. Selbst Zweierpotenzen sollten nicht gedreht werden. Ungerade Potenzen von 2 sollten um ihre jeweiligen Polygone gedreht und vor der Drehung vertikal gestapelt werden.
- Sie können das Bild so ausrichten, wie Sie es möchten (ich bevorzuge es nach oben), aber jedes verschachtelte Polygon sollte in dieselbe Richtung weisen wie jedes andere Polygon, mit Ausnahme von ungeraden Potenzen von 2.
- Sie haben zwei Optionen für die Bildgröße und die Punktgröße:
- Die Bildgröße ist statisch und die Punktgröße nimmt mit
n
zunehmender Größe ab (wie in der Animation). - Die Punktgröße ist statisch und die Bildgröße wächst mit
n
zunehmender Größe .
- Die Bildgröße ist statisch und die Punktgröße nimmt mit
- Die ersten drei Ebenen von Polygonen sollten von benachbarten Polygonen unterscheidbar sein (dh sie berühren sich nicht). Angesichts der Größe der Bilder in und um
n=10000
diese herum ist es jedoch in Ordnung, wenn die Ebenen nach dem Berühren beginnen. Ich würde es vorziehen, wenn dies nicht der Fall wäre, aber es könnte unvermeidlich sein, auf ein Image zu passen, das auf Stack Exchange hochgeladen werden kann. - Farbe ist optional.
- Die Form der Punkte liegt bei Ihnen. Wenn Quadrate für Ihre Sprache besser sind, verwenden Sie diese.
- Keine Boni, aber ich möchte jemanden animieren und die Diagramme wie im ursprünglichen Beitrag ausmalen sehen.
Wir danken Conor O'Brien, EasterlyIrk, Martin Ender, Kritixi Lithos, Mego, DJ McMayhem und El'endia Starman für ihre Hilfe beim Schreiben dieser Frage.
Dieser Code Golf, so dass der kürzeste Code gewinnt. Viel Glück und gutes Golfen!
quelle
n = n //= i
sein solln//= i
?n = n // i
. Ich werde das Problem beheben und die Erklärung ergänzen, während ich dabei bin.