Einträge für diese Herausforderung zeigen eine animierte rotierende Lissajous-Figur . Das Auftreten einer 3D-Drehung tritt auf, wenn der x-Parameter in jedem Frame nacheinander phasenverschoben wird.
Eingang:
Die a
und b
-Parameter (gemäß dem Wikipedia-Artikel ) werden in der Befehlszeile angegeben oder von stdin gelesen.
Ausgabe:
Dies ist keine Selbstverständlichkeit , daher wird die Ausgabe in einem Terminal-Emulator-Fenster oder einem ähnlichen Fenster angezeigt. Die Ausgabegröße kann hartcodiert sein, aber die Lissajous-Zahl muss mindestens groß genug sein, um ein 80 x 24-Fenster auszufüllen.
Die Framerate der Animation beträgt ca. 50 fps. Das Einschlafen für 20 ms zwischen den einzelnen Bildern ist in Ordnung, solange die Zeit zur Berechnung der einzelnen Bilder im Vergleich zur festgelegten Einschlafzeit gering ist. Wenn Ihre Sprachauswahl auf der von Ihnen gewählten Plattform nicht schnell genug berechnet werden kann, müssen Sie die Zeit bis zum Einschlafen dynamisch berechnen.
Jeder Frame wird erst angezeigt, wenn alle Berechnungen für diesen Frame abgeschlossen sind. Zwischen den einzelnen Bildern muss kein Bildschirm gelöscht werden.
Die Figur macht 2*Pi
ungefähr alle 4 Sekunden eine volle Umdrehung.
Für jeden Frame muss eine vollständig geschlossene Kurve generiert werden. Entlang der Kurve müssen mindestens 1000 Punkte berechnet werden. Ein Strichzeichnen zwischen Punkten ist nicht erforderlich.
Punkte der Kurve werden als #
Zeichen gezeichnet . Der Rest des Anzeigebereichs ist leer / Leerzeichen.
Dies ist Code-Golf , daher wird die kürzeste Antwort in Bytes (von mir als akzeptabel erachtet) eine Woche nach dieser Veröffentlichung als Gewinner akzeptiert.
Ungolfed Referenzantwort .
Antworten:
Perl - 177
Die Koeffizienten werden über Argumente übergeben. Das obige Gif ist hergestellt aus
perl % 2 3
quelle
C (Referenzantwort - nicht golfen)
Ausgabe mit
./lissajous 2 3
:C 257 Bytes
Ok, nun, ich konnte nicht widerstehen, selbst ein bisschen Golf zu spielen. Ich denke, es gibt noch viel mehr zu tun:
quelle
usleep
für 20000ms sind, warum nicht nursleep
für 20s?usleep(2e4);
?Python 3 - 280
Du hast leider kein animiertes GIF von dieser Art. Die Windows-Konsole druckt langsam: P
Ich bin mir nicht sicher, ob dies die 50fps-Anforderung erfüllt, obwohl ich nicht sicher bin, ob es mit Python wirklich möglich ist. Sie können die 1000 in der zweiten Zeile für die Anzahl der zu berechnenden Punkte anpassen (die Liste besteht aus Ausgabebreite, Ausgabehöhe, zu findenden Punkten, Fortschritt pro Frame (pi * 2 / n) und Startpunkt). Sie können sie auch entfernen und in der Eingabe angeben.
WICHTIGER BEARBEITEN: Eingabe über stdin, durch Leerzeichen getrennt, Zeilenumbruch beendet. Wartet auf Ihre Eingabe.
BEARBEITEN: Screenshot. Die Höhe wurde für diesen auf 40 geändert.
quelle
lissajous.py
, dannpython3 lissajous.py 2 3
sollte Ausführen ausreichen, oder?stdin
, nicht von den Argumenten (das konnte nicht angegeben werden ... oops). Raum getrennt.input()
und erraten sollen. Funktioniert jetzt gut für mich mit 3.2.3. +1C # -
360352 (plattformübergreifend - 332 nur für Windows)Bearbeitet nach Micro-Golfing und Rounding Bugfix + Vorschlag von Ypnypn
Nicht gerade ein Konkurrent in dieser Länge - und es ist so ziemlich eine wörtliche Kopie der Referenz - aber na ja. :)
Memory Hog, das bei jeder Aktualisierung ein neues Array erstellt - ursprünglich (erneut) einen StringBuilder verwendet, ihn aber aus Gründen der Kürze geopfert. Aber zumindest dauert die Aktualisierung auf meinem alten Core2 weniger als 1 ms.
Nachdem ich einiges - inzwischen langwieriges - altes Golfspiel entfernt und es dadurch um 8 Zeichen reduziert hatte, versuchte ich, es wieder auf das "poetische" 360 zurückzubringen, indem ich zu Double anstatt Int-Parsing zurückkehrte und statt 1920 zu 80 * 24 zurückkehrte. Das sind aber immer noch nur 359 - und keine andere, mir einprägsame Einzelzeichenaddition verleiht dem Code wirklich einen Mehrwert. Also bleiben wir einfach bei 352. :-)
Abgerollt (Vorgolfcode verloren):
Die Windows-Konsole akzeptiert die Ausgabe vieler Null-Zeichen, was zu einer Ausgabe führt, die (grafisch) mit der Verwendung eines tatsächlichen Leerzeichens identisch ist. Dadurch können wenige Zeichen weniger das Zeichenarray initialisieren.
quelle
using C = Console
wirklich alle Zeichen speichern?Python 2.7 - 214
Ich glaube, ich werde mir das noch einmal ansehen. Ich habe das Gefühl, dass dies noch weiter gesenkt werden kann, aber es wird schwierig sein, die Perl-Byteanzahl zu erreichen. Die Mathematik scheint hier meine größte Einschränkung zu sein.
Warnung: Möglicherweise stürzt das von Ihnen verwendete Terminal ab. Ich habe dies an der Windows-Eingabeaufforderung mit getestet
lissajous.py 2 3
. Erwarten Sie aufgrund des schnellen Schreibens in die Eingabeaufforderung, dass die Frames ein wenig springen. Dies kann meistens (auf Kosten der Geschwindigkeit) gelöst werden, indem ein größeress
inrange(s)
und verwendet wirdt=2*pi*i
.Ich benutze
\r
oder\b
hier absichtlich nicht, weil ich es unter Windows laufen lasse und es zusätzliche Zeichen kosten würde.quelle