Schreiben Sie ein Programm, das eine sich bewegende ASCII-Kugel *
in einem Rechteck anzeigt (20 x 10 Zeichen einschließlich Rand). Der Ball darf das Rechteck nicht überqueren, z. B. beim Auftreffen auf die Wand abprallen. Die Szene muss alle 0,1 Sekunden gelöscht und neu gezeichnet werden, und der Ball muss in jedem Bild 1 Zeichen in x- und y-Richtung bewegen. Das kürzeste Programm, das in einer Sprache geschrieben wurde, gewinnt.
Beispielausgabe (Bild 1)
+------------------+
|* |
| |
| |
| |
| |
| |
| |
| |
+------------------+
Beispielausgabe (Bild 2)
+------------------+
| |
| * |
| |
| |
| |
| |
| |
| |
+------------------+
Beispielausgabe (Bild 8)
+------------------+
| |
| |
| |
| |
| |
| |
| |
| * |
+------------------+
Beispielausgabe (Bild 9)
+------------------+
| |
| |
| |
| |
| |
| |
| * |
| |
+------------------+
1080x1920
Auflösung :)Antworten:
Ruby 1.9, 115 Zeichen
Die Bewegung Logik ist ganz ähnlich wie Danko ‚s Antwort .
Diese Version wurde nur unter Linux getestet.
quelle
puts"\e[2J"
nur←[2J
(und eine neue Zeile) auf dem Bildschirm gedruckt.cls
funktioniert bei mir nicht, funktioniert abersystem ("cls")
.Powershell, 144 Zeichen
Basierend auf Joeys hervorragender Antwort unter Verwendung der Tatsache, dass die Ballkoordinaten eine Funktion des Rahmenindex (i) sind. Wenn Sie also so etwas haben
x=n-abs(n-(i mod (2*n)))
, geht x von 0 auf n, zurück auf 0 und so weiter ...quelle
if(-1,18-eq$x){$a*=-1;$x+=2*$a}if(-1,8-eq$y){$b*=-1;$y+=2*$b}
die vierif
s früher ersetzt hat ;-). Ich war mir jedoch sicher, dass es eine Formel geben musste.Python 2, 234
Ich bin mir sicher, dass dies mehr Golf gespielt werden kann, aber ich muss gehen, also hier ist, was ich bisher habe. werde später mehr daran arbeiten
Hinweis: Funktioniert auf der Windows-Befehlskonsole. Andere Betriebssysteme verwenden möglicherweise einen anderen Befehl als
cls
zum Löschen des Bildschirms, zclear
quelle
print "\e[H\e[2J"
unter Windows?Ruby (
179174147)EDIT hat einige weitere Zeichen entfernt:
EDIT rasierte einige Zeichen ab, jetzt 174:
Ungolfed:
quelle
sleep .1
funktionieren?SyntaxError: (irb):1: no .<digit> floating literal anymore; put 0 before dot
. Aber ich werde darauf zurückkommen, wenn ich es in Zukunft brauche, danke!?*
anstelle von'*'
usw.←[2J←[f+------------------+
die erste Zeile enthalten.$> << "\e[2J\e[f"+f
zu'cls';$><<f
(verwenden Sie Backticks fürcls
)JavaScript (275
283)Demo: http://jsfiddle.net/eKcfu/2/
Ich habe das ziemlich schnell geschrieben, daher bin ich mir sicher, dass es noch viel Raum für Verbesserungen gibt. Vorschläge sind willkommen :)
Bearbeiten 1 : Unnötigen separaten Funktionsaufruf entfernen, direkt einbetten
setInterval
.quelle
Haskell, 212 Zeichen
Verwendet einen funktionaleren Ansatz zur Berechnung der Koordinaten, indem die unendliche Sequenz für jede Koordinate separat erstellt und dann zusammen gezippt wird (Zeilen 2 und 3). Der Rest ist Zeichnungscode.
quelle
PowerShell, 184
185215Nur halb Golf, da mein Gehirn nicht richtig funktioniert, wenn ich krank bin ...
Ein paar nette Tricks.
[Bearbeiten]: Das Schleifen über das Feld ist viel kürzer.
quelle
QBasic (QB64),
178173 Bytes-5 Bytes dank DLosc
quelle
DO ... LOOP
anstelle vonWHILE 1 ... WEND
5 Bytes verwenden und diese speichern.Perl 5, 141 Zeichen
Beginnt nicht in der oberen linken Ecke wie die Beispielausgabe, dies wird jedoch nicht als Voraussetzung angegeben.
quelle
Ruby 1.9, 162 Zeichen
35 Zeichen scheuen @ Venteros Antwort, aber ich war beeindruckt, dass ich es so weit schaffen konnte, während ich immer noch einen relativ einfachen Ansatz für die eigentliche Logik verwendete. Das ^ [ist ein wörtlicher ESC (1 Zeichen).
quelle
R, 233 Zeichen
quelle
Ein weiterer Bash-Eintrag -
213204 ZeichenNicht wirklich ein Preisträger, aber es hat trotzdem Spaß gemacht. Für die Zeichnung werden vt100-Zeichenfolgen verwendet. (Der hier angegebene Code verwendet 215 Zeichen zur besseren Lesbarkeit. 2 Zeichen können durch Escapezeichen entfernt werden, z. B. '*' -> \ *
quelle
Powershell, 139 Bytes
Inspiriert von Danko Durbićs Antwort .
Dieses Skript verwendet den
-replace
Operator, um*
innerhalb des Rechtecks zu zeichnen .Weniger Golfskript, um zu erklären, wie es funktioniert:
quelle
Bash 278
300, 296Das \ e in der Zeile
echo -e "\e[$2;$1H$3"
kann von erzeugt werdenum es zu ersetzen. Als binäres 0x1b ist es 3 Zeichen kürzer; Ich zähle nur 1 für "\ e", weil mich nur die Layout-Software zur Verwendung zwingt
\e
.quelle
$
Symbole innen((...))
und ersetzenx=$(($x+$p))
mit((x+=p))
und in ähnlicher Weise in der folgenden Zeile. (Sie schlugen auch vor,\e
für das Escape-Zeichen zu verwenden).\*
als Ersatz für funktionieren könnte"*"
.1,337
muss dauerhaft an Ort und Stelle gesperrt sein: PTI Basic,
169167 BytesSchrecklich langsam, aber es funktioniert.
quelle
(X=20)→S
kann sein(X=20→S
, und Sie können Ans nutzen, um ein paar Bytes in der letzten For (Schleife zu speichern. Ich bin sicher, dass die Zeilen 8 und 9 gespielt werden können, aber ich bin mir nicht sicher, wie im Moment."| \ Output(O,1,Ans \ Output(O,20,Ans
sollte arbeiten.Ans
ist ein Ein-Byte-Token , mit dem getippt wird2nd
(-)
. Dadurch wird ein Byte eingespart, da das|
Token zwei Bytes im Taschenrechner enthält.PHP,
196 186148 BytesIch habe entfernt, um einen Ganzzahlüberlauf zu vermeiden, um 6 Bytes zu sparen. Es wird 29 Milliarden Jahre laufen, bevor es überläuft. noch 6,8 Jahre auf einem 32-Bit-System. Ich würde sagen, das ist akzeptabel.
Durch die Berechnung der Position anstelle der Anpassung wurde viel gespart, und die vollständige Vorlage wurde sofort für ein weiteres Los vorbereitet.
Laufen Sie mit
-nr
. Benötigt PHP 7.1.Aufschlüsselung :
quelle