Erstellen Sie eine Ladeleiste im Windows-Stil, indem Sie die folgenden Anweisungen befolgen.
(Beachten Sie, dass dies anders ist als Loading ... Forever )
Ihre Ausgabe sollte beginnen mit [.... ]
.
Bei jedem Tick sollten Sie 100 ms warten und dann jeden Punkt um ein Zeichen nach rechts verschieben. Wenn sich der Punkt auf dem zehnten Zeichen befindet, verschieben Sie ihn auf das erste Zeichen. Beachten Sie, dass Sie den Bildschirm löschen sollten, bevor Sie erneut ausgeben. Die Ausgabe ist wie folgt sortiert:
[.... ]
[ .... ]
[ .... ]
[ .... ]
[ .... ]
[ .... ]
[ ....]
[. ...]
[.. ..]
[... .]
..Dann wird es für immer geschleift.
Regeln
- Das ist Code-Golf , also gewinnt die kürzeste Antwort.
Ich bezweifle, dass ich sogar eine gewinnende Antwort akzeptieren würde - Bitte geben Sie nach Möglichkeit eine GIF-Datei des Ladebalkens in Aktion an.
code-golf
ascii-art
kolmogorov-complexity
animation
Matthew Roh
quelle
quelle
\r
erlaubt, anstatt den Bildschirm buchstäblich zu löschen?Antworten:
V,
171615 Bytes<esc>
ist0x1b
.Und der Hexdump:
Erläuterung
quelle
i.... <esc>qq:sl 100m<CR>$X|P@qq@q
sollte funktionieren (<esc>
ist offensichtlich die Escape-Taste und<CR>
ein Zeilenvorschub) (es gibt 6 Leerzeichen nach den 4 Punkten)gó
Funktion nützlich ist. Schöne Antwort BTW :)CSS / HTML,
202190186 + 45 =247235231 BytesBearbeiten:
1214 Bytes dank @Luke gespeichert.quelle
b
?ch
am Ende löschen.0
braucht keine Einheit.<x>
zu<span>
(und auch im CSS:x
wirdspan
undx>x
wirdspan>*
)? Das spart zwardisplay:inline-block;
, kostet aber nur 15 Bytes. Es werden also insgesamt 6B eingespart.position:absolute;
.PowerShell,
6766 Bytes-1 durch Verwendung eines verkürzten Konstruktors dank Beatcracker
Ersetzt die Zeichenfolge durch eine Kopie der Zeichenfolge, in der das letzte Zeichen vor die verbleibenden Zeichen gesetzt wird, löscht den Bildschirm, druckt ihn aus und wartet dann 100 ms.
Mit dem for-Schleifen-Konstruktor konnten viele Bytes gespart werden, anstatt die Logik in die Zeichenfolge einzufügen.
quelle
for
Loop-Trick und das erneute Lesen von about_Join .$s='.'*4+' '*6
.[.... ]
. Sie können es ohne Strafe beheben:for($s='.'*4+' '*6){cls;"[$s]";$s=-join($s[,9+0..8]);sleep -m 100}
Python 3 ,
99938583 + 2 ( -u Flag ) Bytes-12 bytes dank ovs
-2 bytes dank totalhuman
Probieren Sie es online!
quelle
flush=True
? Es funktioniert ohne für michprint(end='\r[%s]'%s,flush=1)
-u
Befehlszeilenflags vollständig entfernen . Verwandte SO Frages[9]+s[:9]
.Windows Batch,
201181 BytesEs stellt sich heraus, dass mit der Old-School-Methode tatsächlich Bytes gespart werden!
Hinweis:
Bitte beachten Sie, dass mein GIF-Recorder einige Frames übersprungen hat, wodurch die Ladeleiste springt
:(
quelle
@echo off
und Ersetzen der do mitdo @(echo %%~p&timeout/t 0 >nul&cls)
wird auch funktionieren und sollte 11 Zeichen (200 Bytes auf meinem Computer) speichernMathematica,
6777 Bytes+10 Bytes, da ich die eckigen Klammern vergessen habe.
quelle
Animate
? : |C (GCC) ,
126125124123122121119118117114115 BytesDieser verwendet eine Bitmaske, um zu verfolgen, wo sich die Punkte befinden.
Ich musste ein weiteres Byte hinzufügen, da ich vorher nur 5 Leerzeichen ausgegeben habe.
Probieren Sie es online!
quelle
Javascript (ES6), 86 Byte
quelle
with
. Immer +1 fürwith
!JavaScript (ES6) + HTML,
1048583 Byteinput
anstelle von a ein zu verwendenpre
.Versuch es
Erfordert ein Schließen
>
desinput
Tags, um in einem Snippet zu funktionieren.quelle
[]
s geben?<input>
anstelle von<pre>
und dannvalue
anstelle von verwendeninnerText
?s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=o
Vielleicht kann jemand sie verbessern (Anführungszeichen durch `ersetzen)Nudel ,
16151413 Bytes[CỤ'Ụ ~ ððÐ] ʠḷẸḍt] ʠ [Ð. × 4¤ × 6⁺ḷẸḍt] ʠ⁶¤ʠ⁶.ȧ [ėÐḷẸḍtVersuch es:)
Wie es funktioniert
Aktualisieren
Versuch es:)
Ich weiß nicht, warum ich eine Weile gebraucht habe, um darüber nachzudenken. Auf jeden Fall sind es 13 Bytes .
quelle
PHP, 67 Bytes
kein Kommentar
quelle
C #,
162, 157 Bytesoder als ganzes Programm für 177 Bytes
quelle
for(string o="[.... ]";;)
Kann zum Golfen verwendet werdenvar o="[.... ]";for(;;)
. Oder Sie können uns einen Port von meinem Java 7 beantworten, um insgesamt etwas mehr Golf zu spielen:()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};
$"[{o}]\n"
System.Console.Write(o)
mitSystem.Console.Write(o+"\r")
Ihnen können entfernen Sie dieSystem.Console.Clear();
Pure Bash, 68
quelle
MATL , 24 Bytes
Probieren Sie es bei MATL Online! Oder sehen Sie sich ein GIF vom Offline-Compiler an:
Erläuterung
quelle
Jelly ,
2827 BytesWie?
quelle
C (gcc),
202198196189969988867977757473 Bytes78 Bytes dank Digital Trauma gespart .Oder, wenn Ihr System
stdout
nicht nach jedem Schreiben ohne Zeilenvorschub geleert werden muss:C (gcc), 70 Bytes
Wie es funktioniert
usleep(
schläft für den nächsten Rückgabewert in Mikrosekunden.dprintf(2,
druckt auf Dateideskriptor 2 oderstderr
. Dies ist erforderlich, da whilestdout
zeilenweise gepuffert ist (dh die Ausgabe wird erst angezeigt, wenn eine neue Zeile gedruckt wird) und zeichenweisestderr
gepuffert ist (die gesamte Ausgabe wird sofort angezeigt)."\r
druckt einen Wagenrücklauf (löscht die aktuelle Zeile).[%-10.10s]"
ist derprintf
Formatbezeichner für eine Zeichenfolge mit der genauen Länge 10 (unabhängig davon, welche Zeichenfolge ausgegeben wird, handelt es sich immer um eine Zeichenfolge mit der Länge 10), die bei Bedarf mit Leerzeichen nach rechts aufgefüllt wird. Dies wird in eckigen Klammern angegeben.".... ...."
ist die Ladeleiste.+i%10
Offsets der Ladebalken durch den aktuellen Index Modulo 10. Wenn zum Beispieli == 3
,i % 10
gleich 3 ist die Ladebalken von 3 macht es gleich zu Saldierung". ...."
.printf
Formatbezeichner übergeben wird, wird sie bei Bedarf auf eine Länge von 10 begrenzt und bei Bedarf mit Leerzeichen am Ende versehen. Daher befindet sich der Ladebalken immer zwischen[.... ]
und[. ...]
.quelle
i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}
sollte arbeiten.f(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Java 7,
139124 Bytes\r
Dankes an @Phoenix .Der Wagenrücklauf
\r
setzt den 'Cursor' an den Zeilenanfang zurück, der dann überschrieben werden kann. Leider wird dies von Online-Compilern oder der Eclipse-IDE nicht unterstützt. Daher habe ich am Ende dieser Antwort ein GIF hinzugefügt, um es über die Windows-Eingabeaufforderung anzuzeigen.Probieren Sie es hier aus. (Leicht modifiziert, sodass Sie nicht auf das Timeout warten müssen, bevor Sie das Ergebnis anzeigen. Außerdem unterstützt der TIO keine Zeilenumbrüche, sodass jede Zeile gedruckt wird, ohne die vorherige Zeile zu überschreiben.)
Erläuterung:
Ausgangsgif:
quelle
println
mitprint
und einen Wagenrücklauf ausgibt. Funktioniert möglicherweise nicht auf dem IDE-Terminal, aber auf jedem anderen vernünftigen.\r\n
? WieSystem.out.print(someString+"\r\n);
löscht man die Konsole? Es ist dasselbe wie bei der Verwendung vonSystem.out.println(someString);
. Es wird einfach in die nächste Zeile\r
, ohne\n
. Dadurch wird der "Cursor" an den Zeilenanfang gesetzt, sodass beim Drucken diese Zeile überschrieben wird.Python 2 ,
8178 Bytes-1 Byte (ich habe bemerkt, dass ich die Verwendung verpasst habe,
%s
als Rod gleichzeitig eine fast identische Python 3-Version eingereicht hat !)-2 Byte (unter Verwendung der Idee von totallyhuman - Ersetzen
s[-1]+s[:-1]
durchs[9]+s[:9]
)quelle
\r
überschreibt die Zeile und,
bringt es dazu, ein Tupel anstatt eines Strings zu drucken - ich habe es vor einiger Zeit irgendwo gesehen und habe es auch schon benutzt.sys.stdout.flush()
)Go ,
150145132129124 Bytes-5 Bytes dank sudee.
Ich habe das Gefühl, ich sehe nicht genug Hierher gehen ... Aber meine Antwort ist, C zu übertreffen.
Probieren Sie es online!
quelle
100000000
zu10^8
5 Byte zu speichern.10**8
was auch einen Fehler gibt.1e8
.VBA 32-Bit,
159157143141134 BytesIn VBA ist keine Funktion integriert, mit der auf Zeiträume von weniger als einer Sekunde gewartet werden kann. Daher müssen wir eine Funktion von deklarieren
kernel32.dll
32-Bit-Deklarationsanweisung (41 Byte)
64-Bit-Deklarationsanweisung (49 Byte)
Darüber hinaus müssen wir ein
DoEvents
Flag einfügen, um zu verhindern, dass Excel in der Endlosschleife als nicht reagierend angezeigt wird. Die letzte Funktion ist dann eine Subroutine, die keine Ein- und Ausgaben in das VBE-Direktfenster übernimmt.Sofortfensterfunktion, 93 Bytes
Anonyme VBE-
A1
Sofortfensterfunktion , die keine Ein- und Ausgaben in den Bereich auf dem ActiveSheet übernimmtAlte Version, 109 Bytes
Sofortfensterfunktion, die keine Ein- und Ausgaben für das VBE-Sofortfenster vornimmt.
Ungolfted und formatiert
-2 Bytes zum Entfernen von Leerzeichen
-30 Bytes zum korrekten Zählen
-14 Bytes für die Konvertierung in die Sofortfensterfunktion
Ausgabe
Das folgende GIF verwendet die Vollversion des Unterprogramms, da ich zu faul war, dies mit der Direktfensterfunktion neu aufzuzeichnen.
quelle
a
am oberen Rand der Ausgabe?a
wie oben aufgeführt. Dies ist funktional äquivalent zu der ausführlicherencall a()
.05AB1E , 23 Bytes
Probieren Sie es online!
Erläuterung
quelle
Batch,
9998 BytesDank SteveFest 1 Byte gespart!
(Ich könnte es
\r
aus dem Code entfernen , aber im Geiste des Batch-Golfens werde ich es nicht tun.)Nach der ersten Zeile stehen vier Leerzeichen.
Die Hauptlogik ist das Ändern der Zeichenfolge.
%s:~-1%
ist das letzte Zeichen von%s%
und%s:~0,-1%
ist alles andere als das letzte Zeichen von%s%
. Daher verschieben wir das letzte Zeichen an den Anfang der Zeichenfolge, wodurch die Zeichenfolge gedreht wird.quelle
0
in der Variable befindliche Teilstring kann entfernt werdencmder
. Gute Arbeit.Ruby,
5756 BytesStark beeinflusst von anderen Antworten hier.
Dank @manatwork ein Byte gespeichert. Außerdem habe ich anscheinend Probleme beim Zählen von Zeichen - ich verwende ST3 und anscheinend werden Zeilenumbrüche in die Anzahl der Zeichen in der Zeile aufgenommen, wenn Sie nicht aufmerksam sind.
quelle
s
?s
zu Beginn des Programms als 4.
s und einige Leerzeichens[0..8]
→s.chop
Perl, 69 Bytes
-3 Bytes dank @Dom Hastings .
Das
select undef,undef,undef,.1
ist der kürzeste Weg, um in Perl weniger als 1 Sekunde zu schlafen, und es dauert eine Menge Bytes ...Etwas länger (79 Bytes) gibt es:
quelle
!print
aber Sie müssen Pars , so dass es die gleiche Länge endet: /Bash,
939096 Byteshier ansehen
konnte nicht für die Syntax verschachtelt werden
quelle
Groovy, 72 Bytes
Erklärung
quelle
\r
den Cursor an den Zeilenanfang zurücksetzen. Es scheint, dass dies mindestens mehrere Antworten sind. Von dort aus können Sie die * 20 löschen und 3 Bytes einsparen.Haskell (Windows), 159 Byte
Erläuterung
Haskells Reinheit machte die Erzeugung des zyklischen Punktmusters etwas komplex. Am Ende habe ich ein verschachteltes Listenverständnis erstellt, das eine unendliche Liste von Zeichenfolgen in der Reihenfolge generiert, in der sie ausgegeben werden sollen. Anschließend wurden die entsprechenden E / A-Operationen hinzugefügt.
quelle
Ruby, 61 Bytes
Wenn in der Spezifikation für die Punkte ein Bildlauf nach links statt nach rechts durchgeführt würde, würde 1 Byte gespart, da
rotate!
das Array ohne Argumente einmal nach links verschoben wird.quelle
GNU sed (mit exec-Erweiterung), 64
Punktzahl beinhaltet +1 für
-r
Flagge.quelle
c, 100
quelle
stderr
verwendendprintf
und nicht nur zu benutzenprintf
?stderr
Zeichen gepuffert sind, währendstdout
Zeilen gepuffert sind. Da ich Sie nicht drucken möchten\n
, dann mitprintf()
ich explizit haben würdefflush(stdout)
sowie#include <stdio.h>
#include <stdio.h>
STDOUT nicht spülen.fflush(0)
Leert alle Puffer.main
inf
, das zählt.