Joe lebt auf den Bahamas. Es ist Winter. Seine Kinder sind enttäuscht, dass es keinen Schnee gibt. Joe muss Schnee für seine Kinder machen. Zum Glück hat er einen 3D-Drucker. Er hat vor, damit Schneeflocken zu machen. Leider hat er keine Ahnung, wie eine Schneeflocke aussehen würde. Tatsächlich hat er noch nie eine Schneeflocke gesehen! Lassen Sie uns ihm helfen, indem wir ein Programm erstellen, das automatisch ein 2D-Bild einer Schneeflocke für ihn erstellt.
Eingang
Der Durchmesser des Bildes (in Pixel), der Prozentsatz des Bildes, bei dem es sich tatsächlich um eine Schneeflocke handelt.
Ausgabe
Ein Bild einer Schneeflocke mit dem erforderlichen Durchmesser. Es kann in einer Datei gespeichert oder dem Benutzer angezeigt werden.
Spezifikationen
Erstellen Sie einen Keil mit einem Winkel von 30 Grad. Erstellen Sie einen Brownschen Baum mit dem ersten Samen an der Stelle des Keils. Reflektieren Sie den Keil 12 Mal um die Bildmitte, um den Rest des Bildes zu erzeugen. Die Schneeflocke hat die Farbe Weiß. Der Hintergrund hat die Farbe Schwarz.
Wertung
Aufgrund der Tatsache, dass es verschiedene Möglichkeiten gibt, einen Brownian Tree zu generieren, beträgt die Punktzahl 10 * Anzahl der Upvotes - Golf-Punkte.
Golf Score ist definiert als die Anzahl der Bytes im Programm mit den folgenden Boni:
-20% Kann die Symmetrie der Schneeflocke beliebig festlegen.
-50% Kann die Form der Schneeflocke angeben. (Indem Sie das Verhältnis der Längen der Seiten des Keils angeben können.)
Höchste Punktzahl gewinnt.
Hier ist ein Bild, wie die Form des Keils bei einem Verhältnis von ungefähr 2 aussehen würde:
Anzeigetafel:
Martin Buttner: 10 * 14 - 409 = -269
Nimi: 10 * 1 - 733 * .5 = -356,5
Optimierer: 10 * 5 - 648 = -598
Der Gewinner ist Martin mit der Punktzahl -269!
quelle
Antworten:
Mathematica, 409 Bytes
Ungolfed:
Dies setzt voraus, dass Sie das Formular eingeben,
{n,p}
bei demn
es sich um die Bildgröße in Pixel undp
den Prozentsatz des Bildes handelt, der von der Schneeflocke bedeckt werden soll.Es dauert ungefähr eine halbe Minute, um eine Schneeflocke mit den angegebenen Parametern zu erzeugen. Sie können es beschleunigen, indem Sie den Wert von
m
von999
bis ändern99
, aber dann sieht das Ergebnis etwas spärlich aus. Ebenso können Sie die Qualität erhöhen, indem Sie größere Zahlen verwenden, aber dann dauert es sehr lange.Ich bilde den Brownschen Baum auf einem ganzzahligen Gitter, platziere neue Partikel an
{999, 0}
und bewege die zufällig nach links und oben oder unten (nicht nach rechts), bis sie auf die vorhandenen Partikel treffen. Ich beschränke auch die Bewegung auf den Keil zwischen 0 und 30 Grad. Schließlich reflektiere ich diesen Keil auf der x-Achse und zeige ihn mit seinen 5 Umdrehungen an.Hier sind einige Ergebnisse (zum Vergrößern anklicken):
Und hier sind zwei Animationen des wachsenden Brownschen Baumes (10 Partikel pro Keil pro Frame):
quelle
JavaScript, ES6,
799 740 695 658648Ich zähle nur die beiden Canvas-Tags und die Funktion
f
aus dem folgenden Snippet als Teil der Byteanzahl. Der Rest des Materials ist für Live-DemoUm es in Aktion zu sehen, führen Sie einfach das folgende Snippet in einem aktuellen Firefox aus und geben Sie die Größe und das Verhältnis über die Eingabefelder an
Beachten Sie, dass Sie das Ergebnis ausblenden müssen, bevor Sie eine Schneeflocke sehen
Hier einige Beispiele für Renderings mit unterschiedlichen Größen und Prozentsätzen. Der beste heißt SkullFlake (erster in der Liste). Klicken Sie auf die Bilder, um sie in voller Auflösung anzuzeigen.
Viel Hilfe und Input von Martin und Githubphagozyten.
quelle
Haskell,
781733 BytesDas Programm bietet die Option „Geben Sie das Verhältnis der Seitenlängen des Keils an“, sodass Sie es mit drei Befehlszeilenargumenten aufrufen müssen:
Argument Nr. 1 ist die Größe des Bildes, Nr. 2 der Prozentsatz der Pixel im Keil und Nr. 3 die Länge (in%) der kürzeren Seite des Keils. Das Bild wird in einer Datei mit dem Namen „o.png“ gespeichert.
150-50-40:
Mein Programm erzeugt Schneeflocken mit abgeschnittenen Spitzen, weil neue Pixel auf der Mittelachse des Keils beginnen (grüner Punkt, siehe unten) und dort bleiben, weil sie sich nach links, oben oder unten gleichermaßen zufällig bewegen. Wenn Pixel außerhalb des Keils verworfen werden, erscheinen gerade Linien an der Grenze des Keils (grüner Pfeil). Ich war zu faul, um andere Pfade für die Pixel auszuprobieren.
150-50-40:
Wenn der Keil groß genug ist (3. Argument 100), können die Stacheln auf der Mittelachse wachsen und dann gibt es 12 von ihnen.
150-40-100:
Nur wenige Pixel ergeben runde Formen (links: 150-5-20; rechts: 150-20-90).
Das Programm:
quelle
*-*-100
Bild reichen beide Seiten bis zum linken Rand des Bildes (siehe das zweite Bild für die Position des Keils). Ungefähr auf der Hälfte der Seiten befinden sich Pixel - die anderen Hälften sind leer.code style
. Ich habe meinen Beitrag bearbeitet und Tabs festgelegt, sie werden jedoch weiterhin als Leerzeichen angezeigt. Weiß jemand, wie man es repariert?#
Link, auf den Sie klicken können. Sie können Ihren Code mit Registerkarten dort einfügen und verknüpfen.code style
durch Einziehen jeder Zeile 4 Leerzeichen erhalten.Verarbeitung 2 - 575 Zeichen
Nimmt eine Datei auf, deren erste Zeile die Bildgröße und die zweite den Flockenradius angibt. Jedes Mal, wenn ein neuer Punkt platziert wird, wird er 12 Mal um die Mitte gedreht. Dies erzeugt einen sehr ähnlichen Effekt wie ein gedrehter Keil, aber nicht genau den gleichen.
Sie können erhalten die Verarbeitung hier
quelle
color(255)
kann werdencolor(-1)
, um ein Byte zu speichern