Raffaele Cecco ist ein Programmierer, der Ende der achtziger Jahre einige der besten Videospiele für den ZX Spectrum- Computer produzierte. Unter anderem entwickelte er das hochgelobte Cybernoid und Exolon .
Raffaele wird am 10. Mai 2017 50 Jahre alt . Diese Herausforderung ist eine kleine Hommage an ihn, für die glücklichen Stunden, die viele von uns mit diesen großartigen Spielen verbracht haben, und für die Motivation, die sie mitgebracht haben.
Die Herausforderung
Der Zweck besteht darin, ein rechteckiges Auswahlrechteck zu erstellen, das von dem in Cybernoids Hauptmenübildschirm , jedoch in ASCII- Grafik, inspiriert ist .
Insbesondere wird die Zeichenfolge "Happy birthday Raffaele Cecco "
(beachten Sie das letzte Leerzeichen) an den Rändern eines 12 × 5-Rechtecks mit einer konstanten Pausenzeit zwischen den Schnappschüssen rotierend angezeigt.
Angenommen, der Text wird im Uhrzeigersinn angezeigt und gegen den Uhrzeigersinn gedreht (siehe Optionen unten), sind hier drei aufeinander folgende Schnappschüsse des rechteckigen Auswahlrahmens:
Happy birthd
a
o y
c
ceC eleaffaR
dann
appy birthda
H y
o R
cceC eleaffa
dann
ppy birthday
a
H R
a
occeC eleaff
und so weiter.
Regeln
Es werden keine Eingaben gemacht. Die Ausgabe erfolgt über STDOUT oder eine entsprechende Option oder in einem grafischen Fenster.
Die Ausgabe sollte tatsächlich den rotierenden Text darstellen. Das heißt, jeder neue Schnappschuss sollte den vorherigen überschreiben , um den Eindruck einer Bewegung zu erwecken. Dies kann beispielsweise durch Schreiben der entsprechenden Anzahl von Zeilenumbrüchen geschehen, um den Bildschirm effektiv zu löschen. Es ist akzeptabel, wenn dies nur für eine bestimmte Bildschirmgröße gilt. Gib es einfach in der Antwort an.
Folgende Optionen werden akzeptiert:
- Text kann im Uhrzeigersinn oder gegen den Uhrzeigersinn angezeigt und im Uhrzeigersinn oder gegen den Uhrzeigersinn gedreht werden (in den obigen Beispielschnappschüssen wird das Anzeigen im Uhrzeigersinn und das Drehen gegen den Uhrzeigersinn vorausgesetzt).
- Die Drehung sollte zyklisch in einer Endlosschleife erfolgen (bis das Programm gestoppt wird) und kann in jeder Phase beginnen.
- Die Pausenzeit zwischen Schnappschüssen sollte ungefähr konstant sein, kann jedoch zwischen 0,1 und 1 s frei gewählt werden. Eine anfängliche Pause vor dem Anzeigen des ersten Schnappschusses ist akzeptabel.
- Buchstaben können Groß-, Klein- oder Mischbuchstaben sein (wie im obigen Beispiel).
- Führende oder nachfolgende Leerzeichen sind zulässig.
Programme oder Funktionen sind in jeder Programmiersprache zulässig . Standardlücken sind verboten.
Geben Sie nach Möglichkeit eine GIF-Datei mit der Ausgabe oder einen Link zum Testen des Programms an.
Kürzester Code in Bytes gewinnt.
Antworten:
Jelly ,
7465 BytesWindows-Version, die in einer 6 Zeilen hohen cp-65001-Konsole ausgeführt wird.
Zwischen den Iterationen liegt eine Pause von einer halben Sekunde (plus Auswertung):
Wie?
quelle
HTML + ES6, 200 Bytes
quelle
ZX Spectrum BASIC, 187 Byte
Ärgerlich, dass Philip mich ein paar Minuten geschlagen hat :-) Zahlen wie
\{15}
sind nicht druckbare Kontrollcodes - kompilieren Sie mit zmakebas, wenn Sie basteln wollen. Beachten Sie, dass das gesamte Rechteck nicht sofort gedruckt wird, sondern nach den ersten Frames einrastet.Probieren Sie es hier aus (Online-JS-emulierte Version, drücken Sie die Eingabetaste, um zu starten) ... http://jsspeccy.zxdemo.org/cecco/
Sie können auch vier Bytes sparen, indem Sie den Bildschirm zwischen den Frames leeren, anstatt ein PRINT AT auszuführen, aber es ist zu flimmernd, um es wert zu sein ...
quelle
V,
757170 Bytes4 Bytes gespart dank @DJMcMayhem
Hier ist ein TIO-Link, aber beachten Sie, dass dies auf TIO nicht funktioniert, da das Programm eine Endlosschleife ausführt. Probieren Sie es online!
Da dieser Code nicht druckbare Dateien enthält, handelt es sich um einen Hexdump.
Die Ruhezeit beträgt 500 Millisekunden.
quelle
H|
->{
.<C-v>êx
->dê
und5L
->}
±± a
,o° y
undc±±<space>
5L
=>}
.ZX Spectrum BASIC, 274 Byte
Nun, jemand musste es tun. Pedanten können dies disqualifizieren, weil sie zu langsam sind und keine Pause zwischen den Animationen machen, aber ich behaupte hier einen Sonderfall :-)
Auch nicht sehr golfen. 274 Bytes ist die Anzahl der Bytes, die das Spektrum beim Speichern dieses Programms auf Band speichert.
quelle
SGN PI
for zu verwenden1
(spart 5 Bytes), aber Sie habenNOT PI
für0
undVAL
für die anderen Konstanten vergessen ...NOT PI
Ich habe es einfach verpasst. Absichtlich nicht getan,VAL
weil es langsam genug war, wie es war, undVAL
schrecklich langsam ist.SVG (HTML5), 267 Bytes
Nun, es ist rechteckig, und es ist ein Festzelt, und es ist ASCII-Text ...
quelle
PHP, 184 Bytes
druckt 39 Zeilenumbrüche, um den Bildschirm zu löschen; renn mit
-nr
.Die tatsächliche Pause beträgt 1 Sekunde. aber ich habe das GIF beschleunigt.
ungolfed
quelle
Python 2,
230184 BytesProbieren Sie es bei repl.it
quelle
Python 3 , 160 Bytes
Probieren Sie es online! (Keine Animation)
quelle
Python 2,
218200190181176 Bytes-18 Bytes durch Entfernen der
str
Formatierung-10 Bytes dank @Uriel und @ElPedro-Vorschlägen
-9 Bytes durch Entfernen der negativen Indizierung
-5 Bytes durch Speichern umgekehrt
f
alsv
undwhile
Bedingungrepl.it
quelle
while 1:
und abschneidenprint
und den nächsten;
durch einen (tatsächlichen) Zeilenumbruch ersetzen. Auchf='H..
.f[:1]
Ist auch aktuellf[0]
.time.sleep(1)
unter 200?Ruby + GNU Core Utils, 136 Byte
quelle
Python 2,
182179173160 BytesProbieren Sie es bei repl.it
Funktioniert nicht mit TIO, daher mein erster Versuch, repl.it zu verwenden
Bearbeiten Die Verwendung einer "zeitraubenden" Schleife zum Zählen bis 1000000 führt zu einer konstanten Verzögerung zwischen 0,1 und 1 s auf meinem Computer und auf repl.it und spart das Importieren
time
. Ich denke, wenn Sie es auf einem alten 286-Computer mit 64 MB RAM laufen lassen, kann es über die 1 Sekunde gehen, aber ich bin mir ziemlich sicher, dass das nicht passieren wird. Wenn doch, dann reduziere einfach die 1000000 und spare mir ein paar Bytes :-)Bearbeiten Sie 2 -6, um sich daran zu erinnern, dass Listenverständnisse in Python 2 den letzten Wert von
s
"" verlieren, damit ich ihn später verwenden kann. Bugs oder Features? Ist mir egal Es hat mich 6 Bytes gerettet :-)Bearbeiten 3 Weitere 13 durch die Drehung ehrend und durch eine Liste Verständnis für die mittleren Reihen mit im Inneren der Verbindung und Wechsel
3000000
zu40**4
. Vielen Dank an @FelixDombek für den letzten. Musste allerdings meinen Listenkenntnistrick verlieren.quelle
999999
statt1000000
für ein Byte: VZX81 Z80 Maschinencode,
158130 BytesOkay, es hat eine Menge Bytes, bis es zusammengesetzt ist, aber dann fällt es auf 130 Bytes. Nicht sicher, ob das gegen Regeln verstößt? Es ist mein erster Beitrag und nur als Gast.
Das Programm verwendet 'Brute Force', um die Nachricht anzuzeigen, anstatt eine clevere Funktion zu verwenden, wie aus der Art und Weise ersichtlich ist, in der es separate Codeabschnitte für die obere Zeile, die rechte vertikale, die untere Zeile und die linke vertikale enthält. Die Animation wird erreicht, indem der Inhalt der Nachricht gedreht und nur nach einer kurzen Verzögerung angezeigt wird, die ziemlich genau 0,2 Sekunden betragen sollte, da auf 10 Frames mit einer Rate von 50 gewartet wird (für die britische Spezifikation Zeddys sowieso).
Ich muss kmurta das Konzept der Rotation der Nachricht zuschreiben, um die Animation zu erhalten - das sparte 28 Bytes !!!
Es tut mir leid, aber ich kann keinen Link dazu posten, der ausgeführt wird, da es sich um ein kompiliertes Programm im P-Format für EightyOne (oder andere Emulatoren) oder einen tatsächlichen Zeddy handelt, wenn Sie einen ZXPand oder ähnliches zum Laden haben.
Die .P kann unter http://www.sinclairzxworld.com/viewtopic.php?f=11&t=2376&p=24988#p24988 heruntergeladen werden
quelle