Zuallererst ... Ich möchte allen ein frohes Weihnachtsfest wünschen (sorry, wenn ich einen Tag zu spät für Ihre Zeitzone bin).
Um diesen Anlass zu feiern, werden wir eine Schneeflocke zeichnen. Da das Jahr 201 5 und Weihnachten 2 5 ist (für einen großen Teil der Personen), werden wir eine Penta- Flocke zeichnen . Das Pentaflake ist ein einfaches Fractal, das aus Pentagonen besteht. Hier einige Beispiele (von hier) :
Jeder Pentaflake hat eine Bestellung n. Die Pentaflake der Ordnung 0 ist einfach ein Fünfeck. Für alle anderen Bestellungen n setzt sich eine Pentaflake aus 5 Pentaflakes der vorherigen Bestellung zusammen, die um eine 6. Pentaflake der vorherigen Bestellung angeordnet sind. Zum Beispiel besteht ein Pentaflake der Ordnung 1 aus 5 Fünfecken, die um ein zentrales Fünfeck angeordnet sind.
Eingang
Die Bestellung n
. Dies kann auf jede andere Weise als die einer vordefinierten Variablen angegeben werden.
Ausgabe
Ein Bild von der Bestellung n
Pentaflake. Muss mindestens 100px breit und 100px lang sein. Es kann in einer Datei gespeichert, dem Benutzer angezeigt oder an ausgegeben werden STDOUT
. Jede andere Ausgabeform ist nicht zulässig. Alle Bildformate, die vor dieser Herausforderung existieren, sind zulässig.
Gewinnen
Als Codegolf gewinnt die Person mit der geringsten Anzahl von Bytes.
quelle
n
kann nicht in Ihrem Skript - Datei vordefiniert. Sie könnenn
ausSTDIN
dem Code lesen , ihn vom Benutzer abfragen, ihn als Funktions- / Kommandozeilenargument verwenden ... im Grunde alles, was Sie wollen, außer dass Sie ihn direkt in Ihren Code einbetten.Antworten:
Matlab, 226
Ungolfed:
Fünfte Iteration (das Rendern dauerte bereits eine Weile).
Eine geringfügige Änderung des Codes (leider mehr Bytes) führt zu dieser Schönheit =)
Oh, und noch einer:
quelle
Mathematica, 200 Bytes
Die letzte Zeile ist eine Funktion, die auf eine ganze Zahl angewendet werden kann
n
.Mathematica-Funktionsnamen sind lang. Jemand sollte sie entropiecodieren und daraus eine neue Sprache machen. :)
Bei Anwendung auf
1
:Bei Anwendung auf
2
:quelle
MATLAB,
235233217 BytesUpdate: Eine Reihe von Vorschlägen von @flawr hat mir geholfen, 16 Bytes zu verlieren. Da ich nur auf diese Weise die Lösung von flawr hätte übertreffen können und die Herausforderung ohne die Hilfe von flawr überhaupt nicht gefunden hätte, halten Sie dies für eine gemeinsame Einreichung von uns :)
Dies ist eine weitere MATLAB-Lösung, die auf einer Philosophie iterierter Funktionssysteme basiert. Ich war hauptsächlich daran interessiert, den Algorithmus selbst zu entwickeln, und ich habe mich nicht zu sehr mit der Lösung befasst. Es gibt sicherlich Raum für Verbesserungen. (Ich habe darüber nachgedacht, eine hartcodierte Festkommanäherung für zu verwenden
c
, aber das wäre nicht schön.)Ungolfed-Version:
Ergebnis für
N=5
(mit einem anschließendenaxis equal off
für die Hübschheit, aber ich hoffe, dass das byteweise nicht zählt):quelle
R=[p(:,2),[-p(2,2);p(1,2)]];
(und das vorherige eliminierenR,C,S
), und Sie können verwenden,q=[q R^l*[c-1+t(1,:);t(2,:)]/c]
und ich denkec=1.5+5^.5/2;
q
, ich hatte sogar ein unnötiges Klammerpaar drin ... 3. danke, aber was ist das für eine Magie ??: D 4. Da die Lösung jetzt kürzer ist als Ihr Original, halte ich dies zum Teil auch für Ihre Vorlage.Mathematica, 124 Bytes
Mathematica unterstützt
Table
seit Version 10: eine neue SyntaxTable[expr, n]
, die ein weiteres Byte speichert.Table[expr, n]
ist äquivalent zuTable[expr, {n}]
.Der Kern dieser Funktion besteht darin, komplexe Zahlen zu verwenden, um Transformationen durchzuführen und diese dann in Punkte umzuwandeln
ReIm
.Testfall:
quelle
π
nimmt in UTF-8 zwei Bytes ein, sodass insgesamt 125 Bytes ausgegeben werden.Mathematica,
199196 BytesHier ist eine meiner eigenen Antworten, die Peter Richter um ein Haar verdrängt. Es stützt sich stark auf Grafikfunktionen und weniger auf Mathematik und FP. Die CirclePoints-Funktion ist neu in 10.1 .
Edit: Danke an DumpsterDoofus für GoldenRatio
quelle
((1+Sqrt@5)/2)
mitGoldenRatio
. Auch in der zweiten Zeile finde ich sollte esp@0=Polygon@c[{1,0},5];
stattp@0=Polygon@cp[{1,0},5];
. (BTW ich bin eigentlich Peter, ich habe zwei Profile lol).Mathematica, 130 Bytes
Ich verwende eine ähnliche Technik wie die Antwort von njpipeorgan (tatsächlich habe ich seinen
2Pi I/5 == Pi.4I
Trick gestohlen ), aber als rekursive Funktion implementiert.Beispielverwendung (
%
um auf die anonyme Funktion zuzugreifen, die in der letzten Zeile ausgegeben wurde):quelle