Einführung
Erinnerst du dich an die tosenden 80er? Ich meine, wissen Sie, wie vor 30 Jahren? Keine Handys, kein Internet, keine Geldautomaten, fluoreszierende Kleidung (was war das ?!) und Laufschrift ! Nein nein Nein! Nicht die online, sondern echte, mit LED-Leuchten.
Da ich nostalgisch bin, möchte ich, dass Sie einen Laufrahmen erstellen.
Herausforderung
Erstellen Sie ein Programm, in das Sie eine einzeilige Zeichenfolge eingeben können. Ihr Programm muss einen Laufrahmen mit einer Breite von 80 Zeichen erstellen und den Text bei Bedarf wiederholen.
Regeln
- Der Benutzer muss in der Lage sein, eine Zeichenfolge als Eingabe in Ihr Programm einzugeben. Die Zeichenfolge kann ein Befehlszeilenparameter oder eine Zeichenfolge sein, die beim Ausführen des Programms eingegeben wird.
- Ihr Programm muss kontinuierlich eine Zeichenfolge mit genau 80 (sichtbaren) Zeichen drucken.
- Die Zeichenfolge muss alle 0,1 Sekunden aktualisiert werden (mehr oder weniger; ich lege kein Timing fest), wobei die Zeichen bei jeder Iteration um eine Position nach links verschoben werden.
- Die Zeichenfolge "dreht sich". Am Ende der vom Benutzer angegebenen Zeichenfolge muss eine weitere Instanz der Zeichenfolge angezeigt werden.
- Ihr Programm muss die Ausgabe in einer Zeile ohne Zeilenvorschub drucken (verwenden Sie ein '\ r' anstelle eines '\ n')
- Ihr Programm muss unendlich lange ausgeführt werden , bis ein Benutzer die Ausführung unterbricht.
- Dies ist ein Codegolf, also gewinnt der kürzeste Code in Bytes.
- Es gibt einen Bonus von 10% (gerundet bis auf die nächste ganze Zahl) für auf einem schwarzen Hintergrund in Rot gedruckt wird .
- Es gelten Standardlücken.
Referenzimplementierung in Python 2.7
Dieses Programm ist kein Golfspiel, bietet jedoch eine Referenzimplementierung (und damit eine Obergrenze für die Größe).
import time,sys
s=raw_input()*99
while 1:
for i in range(80):
print s[i:i+80]+'\r',
sys.stdout.flush()
time.sleep(0.1)
1 2 3 4 5 6 7 8 9 10 11 ... 300
schneidet nach ca. 56Antworten:
CJam, 31 Bytes
Wartet genau 100 ms.
Dies funktioniert nur mit dem offiziellen Java-Interpreter , da der Online-Interpreter die Ausgabe erst nach dem Beenden des Programms anzeigt.
Roter Text auf schwarzem Hintergrund ist in 40 (oder 39) Bytes bei einer Punktzahl von 36 möglich:
Wie es funktioniert
quelle
;
in der Erklärung ist falsch ausgerichtetPowerShell,
118 113 112 108 102 101 9996 - 10% = 86Code
Mit der Einschränkung, dass jetzt die erste Schleife mit dem zweiten Zeichen beginnt; Die Regeln besagen nicht, dass es von vorne beginnen muss, und die erste ist insgesamt enthalten, also ist das in Ordnung für mich. Ich werde es irgendwie auf 100 Zeichen bringen - edit: danke @ConnorLSW für die Änderungen, um es unter 100 zu bekommen.
Anleitung
Ausgabe
Anmerkungen
Eine besser lesbare Version mit etwas ausgefüllten Variablennamen und Parametern:
-F R
eindeutig genug, um beispielsweise eine rote Vordergrundfarbe festzulegen.-B 0
setzt es jedoch auf den Farbenzählungswert 0, der als "Schwarz" interpretiert wird.Alternative, mehr "richtige" Laufschrift:
Der Referenzcode verarbeitet keine Zeichenfolgen, die länger als 80 Zeichen sind, überspringt alle Nachrichten, die länger als 160 Zeichen sind, und setzt alle 99 * len (Zeichenfolgen) fehlerhaft zurück. Wenn die Zeichenbreite beispielsweise 5 Zeichen beträgt, geschieht Folgendes:
Diese Version indiziert modulo die Textlänge anstelle der Zeichenbreite, sodass die gesamte Zeichenfolge durchlaufen wird. 106-10% = 95 Zeichen.
Alternative: Unterschreiben Sie, welche Zyklen der GIF-Datei in der Frage entsprechen, 118-10% = 106
Weil es besser aussieht.
quelle
Bla
zu0
-Write-Host
werden Zahlen Farben interpretieren.while(1)
,for()
um einige Bytes zu speichern :)for()
, können Sie ein weiteres Byte speichern, indem Sie$s=(Read-Host)*180;for(){
zu "for($s=(Read-Host)*180){
Matlab, 76 Bytes
Was ich hier schön finde, ist, dass Sie Vektoren als Array-Indizes haben können. Dies gibt einen Vektor der entsprechenden Array-Einträge zurück, wodurch es sehr einfach ist, die angegebene Zeichenfolge unabhängig von der Länge anzufügen.
Ergebnis:
quelle
clc
. Sie haben vergessen , hinzuzufügen ,'s'
ininput
a=input('','s')
'
, Zeichenfolgen mit Trennzeichen als Eingabe zu verwenden. Viele Sprachen benötigen einen Zeichenkettenbegrenzer, oder sie interpretieren ein Befehlszeilenargument in Form eines Satzes (Wörter, die durch Leerzeichen getrennt sind) sowieso als mehrere Argumente.QBasic,
116113 Bytes - 10% =105102Hier ist eine formatierte Version mit einigen Kommentaren:
Ein paar Notizen:
PRINT
nach derFOR
Schleife notwendig ist.CLS
sollte den Cursor jedes Mal in die obere linke Ecke zurücksetzen. Aber zumindest bei QB64PRINT
landet das Auswahlrechteck in der zweiten Zeile anstelle der ersten , wenn ich das Extra nicht hinzufüge. Wenn jemand QBasic auf DosBox oder ähnlichem installiert hat, würde ich gerne wissen, ob dort dasselbe passiert oder ob es sich um einen QB64-Fehler handelt.TIMER
die Verzögerung von (Anzahl der Sekunden seit Mitternacht) abhängt. Wenn der Code um Mitternacht ausgeführt wird, bleibt der Auswahlrahmen hängen, da erTIMER
auf0
und immer kleiner alst
danach zurückgesetzt wird.quelle
PRINT
aber mitCLS
--afterCLS
, egal was vorher gedruckt wurde, sollte die folgendePRINT
Aussage bei 1,1 ausgegeben werden; Stattdessen stieß ich auf eine Situation, in der es mit 2,1 ausgegeben wurde.Perl,
9998 Byte (-10% = 89)Übernimmt die Eingabe vom Befehlszeilenparameter.
quelle
pb , ⌈ (216 + 3) * 0,9⌉ = 198
+3 Bytes für Interpreter-Flag
d=1
Eine ziemlich schreckliche Punktzahl, aber wenn man bedenkt, wie schwierig es ist, etwas in dieser Sprache zu tun, könnte es schlimmer sein. Das Verhältnis dieser Antwort von (für roten Text verwendete Bytes) zu (Bonus durch roten Text) ist wirklich gut. Die gesamte Ausgabe wird nur
c
am Anfang rot dargestellt !Die Zeit zwischen den einzelnen Häkchen variiert je nach Länge der Eingabezeichenfolge, beträgt jedoch ungefähr 0,1 Sekunden.
Übrigens sieht die Ausgabe dieses Programms wie totaler Müll aus, weil der Interpreter so schlecht ist. Jede Millisekunde löscht es das Terminal und zeichnet alles neu, so dass es wirklich flimmert.
Mit Kommentaren:
quelle
Perl - 120 Byte (-10% = 108)
quelle
Matlab, 188 × 9 = 170
Dies funktioniert in Matlab Version R2014b oder höher. Das Ergebnis wird in einem Zahlenfenster angezeigt.
Im folgenden Beispiel wird der Text zur besseren Visualisierung fett gedruckt (wird im obigen Code nicht verwendet, da er einige Bytes kostet). Beachten Sie auch, dass die Geschwindigkeit der GIF-Animation nicht der erforderlichen Pause von 0,1 s entspricht, aber das Timing in der tatsächlichen Abbildung, die durch Ausführen des Programms angezeigt wird, korrekt ist.
quelle
SpecBAS, 130 Byte (-10% = 117)
Multipliziert die ursprüngliche Zeichenfolge, um 80 oder mehr Zeichen zu erhalten, und schneidet sie dann auf genau 80 ab.
TEXT
ist ein Befehl in SpecBAS, der wiePRINT
in diesem Beispiel funktioniert, jedoch ein Zeichen speichert.Der
SCALE
Befehl fügt dem Code einige zusätzliche Zeichen hinzu, lässt ihn jedoch markanter aussehen.Das Programm läuft weiter, bis Sie Esc drücken.
quelle
Perl, 63 (70 Zeichen - 10% Bonus)
Keine andere Lösung als die anderen, aber ich habe meine Zeit damit verschwendet und dachte, ich würde es auch posten!
Verlässt sich auf ein Unix-kompatibles Terminal für ANSI-Codes und den Aufruf von coreutils
sleep
. Die beiden oben genannten\x..
Zeichen sind tatsächlich ein Literal-Zeilenvorschub und ein Escape-Zeichen gemäß diesem Hex-Dump:quelle
Ruby,
797675 BytesIch bin immer noch kein Rubinexperte, möglicherweise kann man Golf spielen.
Bei rot & schwarz gleicher Punktzahl:
quelle
Perl, 84 Bytes (- 10% = 76)
Dies erfordert ein Befehlszeilenargument, das der Text im Auswahlrahmen ist.
Erläuterung:
$_
\b
) und ein Leerzeichen () drucken) . Dadurch wird das letzte Zeichen aus dem vorherigen Ausdruck entfernt. Dann drucken Sie den Wagenrücklauf und Farbe.
$p
$p = ($p+1) % length of text
quelle
Bash, 121 Bytes
quelle
Python 3, 96 Bytes
Dies funktioniert nur auf Terminals, die ANSI-Escape-Sequenzen unterstützen. Wenn Sie unter Windows arbeiten, versuchen Sie es mit ansicon .
Hurra für das
flush
Schlüsselwort in Python 3, damit wir keinen teurensys.stdout.flush()
Anruf tätigen müssen .quelle
C
293269 Bytes(Zeilenumbrüche zur besseren Lesbarkeit hinzugefügt)
Dies nimmt Eingaben von Standardeingaben entgegen, die durch EOF beendet werden. Geben Sie am besten eine Zeichenfolge, eine neue Zeile und dann die EOF ein (z. B. Strg ^ D).
Ungolfed:
quelle
SmileBASIC BIG, 79 Bytes
Ich hatte eine schöne grafische Lösung fast fertig, als mir klar wurde, dass immer nur ein Zeichen gleichzeitig gescrollt werden muss.
quelle
Jelly ,
201918 Bytes80
durch⁹
(= 256), da dieser mit mindestens 80 multipliziert werden mussÇß
(vonÇ1¿
).Mit ein paar Tricks von @Dennis 'Antwort hier . Jelly ist neuer als die Herausforderung, aber nicht wirklich speziell darauf zugeschnitten. Verbesserungsvorschläge sind willkommen! Wenn sich Ihre Konsole in utf-8 befindet, führen Sie
export LC_ALL=en_US
oder ähnliches aus, bevor Sie es versuchen.Beispiel
Erläuterung
quelle
LOVE2D Lua, 197-10% = 178 Bytes
Erfordert, dass sich die Eingabe in einer Datei mit dem Namen 'tt' im Stammverzeichnis befindet. Daher wurden der Partitur 3 zusätzliche Bytes hinzugefügt.
Wirklich grundlegend in der Funktionalität, nur in einer for-Schleife mit 80 Iterationen, hängen Sie das Zeichen am Index von i plus der aktuellen Zeit in Sekunden an, die durch die Länge der aktuellen Zeichenfolge moduliert wird, und geben Sie eine wiederholte 80 Zeichen lange Zeichenfolge der Eingabe, die sich nach links verschiebt wie die Zeit vergeht.
Ich habe LOVE2D zum Lachen benutzt.
quelle
Sinclair ZX81 / Timex TS1000 / 1500 BASIC,
110 Bytes182 Bytes (für die Auflistung)Es funktioniert durch Drucken der ersten
3280 Zeichen der ZeichenfolgeA$
an der Bildschirmposition 0,0 in Zeile zwei und dann die Zeichenfolge von Position 2 bis zum Ende der Zeichenfolge in Zeile 3 manipuliert wird (Sinclair ZX81 BASIC indiziert Zeichenfolgen von 1 und nicht Null) ), fügt also das erste Zeichen am Ende hinzu und übergibt es an dieA$
Variable zurück; dann gibt es eine bedingungslose Schleife zurück zu Zeile 2.quelle
Commodore 64, 434 Bytes
Da für die Anzeige 80 Zeichen erforderlich sind und der C64 standardmäßig nur 40 Zeichen enthält, werden 40 Zeichen des Scrollys in der oberen Zeile des Bildschirmbereichs gedruckt, während die anderen 40 Zeichen in der Nähe des unteren Bereichs gedruckt werden.
Um zu verdeutlichen, was die
{HOME}
und andere Symbole als PETSCII übersetzen, ist hier ein Screenshot von meinem Emulator:Ich werde eine Vollgolf-Version machen, wenn ich CBM PRG Studio installiert bekomme (oder wenn ich nicht zum Mittagessen bei der Arbeit bin).
quelle
Ruby,
7977 Zeichenquelle
PHP, 136 Bytes
php -f marquee.php hello\ world
"Hallo Welt" Zeichenfolge Laufschrift.hello worlddddddddddddddddddddddddddddddddddddddd
, aber es werden nur 80 Zeichen durchlaufen - ich hoffe, das zählt immer noch.Es war ein langer Tag, wahrscheinlich kann ich etwas tun, um ihn zu verbessern
quelle
PHP, 85 Bytes
Nimmt Eingaben vom ersten Befehlszeilenargument entgegen; renn mit
-nr
.Beginnt mit dem zweiten Zeichen zu scrollen. Fügen Sie ein Byte hinzu, um mit dem ersten Zeichen zu beginnen:
Ersetzen Sie
=++$i%
mit%=
und;;
mit;;$i++,
.quelle