Für immer laden… Windows-Stil


36

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 , 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.

1
Können wir vor jeder Ausgabe beispielsweise zwanzig Zeilenumbrüche ausgeben, um den Bildschirm zu löschen?
Ok,

2
@Okx Ja, wenn Ihre Sprache keine andere Möglichkeit zum Löschen des Bildschirms bietet.
Matthew Roh

Wie viel Fehler kann die Verzögerung sein? (
ZB

1
Kann ich vorschlagen, die festgelegte Zeitverzögerung bei zukünftigen Herausforderungen nicht zu berücksichtigen? Ich stelle fest, dass es bei vielen neuen Herausforderungen aufgetaucht ist und jedes Mal, wenn ich das gleiche unrühmliche Boilerplate schreibe, muss das System n Millesekunden warten.
12.

2
Ist die Verwendung von \rerlaubt, anstatt den Bildschirm buchstäblich zu löschen?
Phyrfox

Antworten:


19

V, 17 16 15 Bytes

i[´.¶ ]<esc>ògó$X|p

<esc>ist 0x1b.

Und der Hexdump:

00000000: 695b b42e b620 5d1b f267 f324 587c 70    i[... ]..g.$X|p

Erläuterung

i                       " Insert
[                       " a [
´.                      " 4 .s
¶<space>                " 6 spaces
]<esc>                  " and a ]. Then return to normal mode
ò                       " Recursively do:
 gó                     "  Sleep for 100 milliseconds
 $                      "  Go to the ]
 X                      "  Delete the character to the left of the ]
 |                      "  Go to the [
 p                      "  And paste the deleted character right after the [
                        " Implicit ending ò

gif


Wie teste ich in Vim?
Pavel

@Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@qsollte funktionieren ( <esc>ist offensichtlich die Escape-Taste und <CR>ein Zeilenvorschub) (es gibt 6 Leerzeichen nach den 4 Punkten)
Kritixi Lithos

3
Froh zu sehen, dass die Funktion nützlich ist. Schöne Antwort BTW :)
DJMcMayhem

19

CSS / HTML, 202 190 186 + 45 = 247 235 231 Bytes

pre{position:relative}x{position:absolute;display:inline-block;width:10ch;height:1em;overflow:hidden}x>x{width:14ch;left:-10ch;animation:1s steps(10,end)infinite l}@keyframes l{to{left:0
<pre>[<x><x>....      ....</x></x>          ]

Bearbeiten: 12 14 Bytes dank @Luke gespeichert.


Können Sie nicht 6 Bytes sparen, indem Sie die Animation in so etwas wie umbenennen b?
Luke

@ Luke Ich kann nicht glauben, dass ich vergessen habe, das zu tun ...
Neil

Sie können 2 weitere Bytes sparen, indem Sie das cham Ende löschen. 0braucht keine Einheit.
Luke,

2
Wie wäre es mit einem Wechsel <x>zu <span>(und auch im CSS: xwird spanund x>xwird span>*)? Das spart zwar display:inline-block;, kostet aber nur 15 Bytes. Es werden also insgesamt 6B eingespart.
Luke

1
@Luke Das Display interessiert mich nicht, aber ich möchte vermeiden, das zu wiederholen position:absolute;.
Neil

12

PowerShell, 67 66 Bytes

for($s='.'*4+' '*6;$s=-join($s[,9+0..8])){cls;"[$s]";sleep -m 100}

-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.

Bildbeschreibung hier eingeben


1
+1 für den forLoop-Trick und das erneute Lesen von about_Join .
Beatcracker

1
PS Sie können ein weiteres Byte mit Golf spielen $s='.'*4+' '*6.
Beatcracker

@beatcracker danke dafür - aktualisiert :)
colsw

Das Skript beginnt nicht mit [.... ]. Sie können es ohne Strafe beheben:for($s='.'*4+' '*6){cls;"[$s]";$s=-join($s[,9+0..8]);sleep -m 100}
mazzy

10

Python 3 , 99 93 85 83 + 2 ( -u Flag ) Bytes

-12 bytes dank ovs
-2 bytes dank totalhuman

import time
s=4*'.'+6*' '
while 1:print(end='\r[%s]'%s);time.sleep(.1);s=s[9]+s[:9]

Probieren Sie es online!


Warum haben Sie flush=True? Es funktioniert ohne für mich
L3viathan

3
@ L3viathan, weil mein (Ubuntu) Terminal nicht gespült hat. Dieses Spülverhalten ist OS-abhängig = /
Rod

1
Speichern Sie einige Bytes mitprint(end='\r[%s]'%s,flush=1)
ovs

2
Sie können Flush mithilfe des -uBefehlszeilenflags vollständig entfernen . Verwandte SO Frage
ovs

1
Sie können auch einige Bytes mit speichern s[9]+s[:9].
totalhuman

10

Windows Batch, 201 181 Bytes

Es stellt sich heraus, dass mit der Old-School-Methode tatsächlich Bytes gespart werden!

@for %%p in ("....      " " ....     " "  ....    " "   ....   " "    ....  " "     .... " "      ...." ".      ..." "..      .." "...      .")do @echo [%%~p]&timeout 0 >nul&cls
@%0

Hinweis:

get-screenrecorder.level
- low grade

get-gpu.level
- horrible

if get-screenrecorder.level == low grade || get-gpu.level == horrible {
     say("GIF may not be accurate");
}

GIF!

Bitte beachten Sie, dass mein GIF-Recorder einige Frames übersprungen hat, wodurch die Ladeleiste springt :(


1
Anstatt die Anzahl der Punkte zu berechnen, könnten Sie diese wahrscheinlich auf 100 Byte reduzieren, wenn Sie nur eine Variable mit den Punkten und Leerzeichen behalten und eine Zeichenfolgenmanipulation durchführen.
Neil

Ich würde versuchen, daran zu arbeiten, danke für deine Tipps :)!
Stevefestl

timeout / t 0> nul anstelle von ping 1.1 -n 1 -w 100> nul liegt innerhalb der Zeitvorgabe von 100 ms +/- 250 ms (sollte normalerweise zwischen 25 und 100 ms liegen), sodass dort einige Bytes gespart werden können ( ss64.com/ zt / timeout.html )
Liam Daly

1
Auch das Entfernen @echo offund Ersetzen der do mit do @(echo %%~p&timeout/t 0 >nul&cls)wird auch funktionieren und sollte 11 Zeichen (200 Bytes auf meinem Computer) speichern
Liam Daly

8

Mathematica, 67 77 Bytes

+10 Bytes, da ich die eckigen Klammern vergessen habe.

Animate["["<>"....      "~StringRotateRight~n<>"]",{n,1,10,1},RefreshRate->10]

1
Wirklich, Mathematica hat eine eingebaute Animate? : |
Mr. Xcoder

Ja, es wird so gut wie alles über eine bestimmte Variable animiert. :)
Ian Miller

Dies scheint nicht die eckigen Klammern zu enthalten, die die meisten anderen Antworten haben.
Mark S.

Oh Ratten, sah nicht genau genug aus. Ok behoben.
Ian Miller

8

C (GCC) , 126 125 124 123 122 121 119 118 117 114 115 Bytes

Dieser 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.

m=30;f(i){usleep(3<<15);system("clear");for(i=1;i<1920;i*=2)putchar(i^1?i&m?46:32:91);m+=m&512?m+1:m;f(puts("]"));}

Probieren Sie es online!

Bildbeschreibung hier eingeben


48
WARUM ist Ihre Eingabeaufforderung Schrift Comic Sans MS?!?!?!
MD XF


6

JavaScript (ES6) + HTML, 104 85 83 Byte

f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`)
<input id=o
  • 2 Bytes gespart dank Johans Vorschlag, inputanstelle von a ein zu verwenden pre.

Versuch es

Erfordert ein Schließen >des inputTags, um in einem Snippet zu funktionieren.

(f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`))()
<input id=o>


1
Sollte es nicht 10 Zeichen zwischen den []s geben?
Neil

Du hast recht, @Neil; Es gibt 6 Felder - wenn ich Dinge mit dem Auge zählen will, kann ich nur meine Brille tragen!
Shaggy

1
Kannst du nicht ein <input>anstelle von <pre>und dann valueanstelle von verwenden innerText?
Johan Karlsson

Guter Anruf, @JohanKarlsson; das spart 2 bytes.
Shaggy

Hallo! Dies ist die gleiche Byteanzahl: s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=oVielleicht kann jemand sie verbessern (Anführungszeichen durch `ersetzen)
Thomas W

5

Nudel , 16 15 14 13 Bytes

[CỤ'Ụ ~ ððÐ] ʠḷẸḍt

] ʠ [Ð. × 4¤ × 6⁺ḷẸḍt

] ʠ⁶¤ʠ⁶.ȧ [ėÐḷẸḍt

Versuch es:)


Wie es funktioniert

]ʠ⁶¤⁴.ȧ[ėÐḷẸḍt

]ʠ⁶¤⁴.ȧ[ėÐ     # Set up for the animation.
]              # Pushes the literal string "]" onto the stack.
 ʠ             # Move the top of the stack down by one such that the "]" will remain on top.
  ⁶¤           # Pushes the string "¤" six times onto the stack where "¤" represents a space.
    ⁴.         # Pushes the string "." four times onto the stack.
      ȧ        # Take everything on the stack and create an array.
       [       # Pushes on the string literal "[".
        ė      # Take what is on the top of the stack and place it at the bottom (moves the "[" to the bottom).
         Ð     # Pushes the stack to the screen which in Noodel means by reference.

          ḷẸḍt # The main animation loop.
          ḷ    # Loop endlessly the following code.
           Ẹ   # Take the last character of the array and move it to the front.
            ḍt # Delay for a tenth of a second.
               # Implicit end of loop.

Aktualisieren

[Ð]ıʠ⁶¤⁴.ḷėḍt

Versuch es:)

Ich weiß nicht, warum ich eine Weile gebraucht habe, um darüber nachzudenken. Auf jeden Fall sind es 13 Bytes .

[Ð]ıʠ⁶¤⁴.ḷėḍt

[Ð]ıʠ⁶¤⁴.     # Sets up the animation.
[             # Push on the character "["
 Ð            # Push the stack as an array (which is by reference) to the screen.
  ]           # Push on the character "]"
   ı          # Jump into a new stack placing the "[" on top.
    ʠ         # Move the top of the stack down one.
     ⁶¤       # Push on six spaces.
       ⁴.     # Push on four dots.

         ḷėḍt # The main loop that does the animation.
         ḷ    # Loop the following code endlessly.
          ė   # Take the top of the stack and put it at the bottom.
           ḍt # Delay for a tenth of a second.

<div id="noodel" code="[Ð]ıʠ⁶¤⁴.ḷėḍt" input="" cols="12" rows="2"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


2
Noch nie von Noodel gehört, aber es scheint das richtige Werkzeug für den richtigen Job zu sein! +1
Kevin Cruijssen

1
@ KevinCruijssen, ETHProductions hat eine gute Liste mit Sprachen für Code Golf :)
Tkellehe

6
Gerade als ich dachte, ich hätte Sie übervorteilt, habe ich festgestellt, dass Sie Ihre Lösung bereits zweimal
getestet haben

@KritixiLithos, ich hatte Angst, dass du mich schlagen würdest, also habe ich ewig versucht, auf 14 Bytes zu kommen . Aber jetzt bist du wieder in der Nähe !! Mist !!
tkellehe

1
@ nitro2k01 Noodel verwendet eine eigene Codepage mit 256 Zeichen , die alle als einzelnes Byte in einer eigenen Codierung gespeichert werden. Ähnlich wie einige andere Golfsprachen , wie Jelly oder 05AB1E . Wenn Sie diese Zeichen als Standard-UTF-8-Codierung speichern, sind sie zwar 2 oder 3 Byte lang, in ihrer eigenen Codierung jedoch jeweils 1 Byte.
Kevin Cruijssen

4

PHP, 67 Bytes

for($s="...      .";$s=substr($s.$s,9,10);usleep(1e5))echo"\r[$s]";

kein Kommentar


4

C #, 162 , 157 Bytes

()=>{for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);System.Console.Write(o);System.Threading.Thread.Sleep(100);System.Console.Clear();}};

oder als ganzes Programm für 177 Bytes

namespace System{class P{static void Main(){for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);Console.Write(o);Threading.Thread.Sleep(100);Console.Clear();}}}}

+1 Etwas zum Golfen: for(string o="[.... ]";;)Kann zum Golfen verwendet werden var 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();}};
Kevin Cruijssen

Würde die String-Interpolation nicht mehr abgeschnitten? So etwas wie$"[{o}]\n"
Marie

1
Wenn Sie ersetzen System.Console.Write(o)mit System.Console.Write(o+"\r")Ihnen können entfernen Sie dieSystem.Console.Clear();
grabthefish


4

MATL , 24 Bytes

`1&Xx'['897B@YS46*93hhDT

Probieren Sie es bei MATL Online! Oder sehen Sie sich ein GIF vom Offline-Compiler an:

Bildbeschreibung hier eingeben

Erläuterung

`        % Do...while
  1&Xx   %   Pause for 0.1 s and clear screen
  '['    %   Push this character
  897B   %   Push [1 1 1 0 0 0 0 0 0 1]
  @      %   Push current iteration index, 1-based
  YS     %   Circularly shift the array by that amount
  46*    %   Multiply by 46 (code point of '.')
  93     %   Push 93 (code point of ']')
  hh     %   Concatenate horizontally twice. Numbers are interpreted as chars
         %   with the corresponding code points
  D      %   Display
  T      %   Push true. Used as loop condition. Results in an infinite loop
         % End (implicit)

Ihr Link stürzt ab, was bedeutet, dass ich ihn nicht töten kann.
Undichte Nonne

1
@LeakyNun Was meinst du genau damit, dass es abstürzt? Es funktioniert für mich und ich kann es töten. Manchmal gibt es Zeitüberschreitungsprobleme. Wenn es nicht startet, aktualisieren Sie die Seite
Luis Mendo

4

Jelly , 28 27 Bytes

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß
897ṃ⁾. Ç

Beispiellauf

Wie?

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß - Link 1, the infinite loop: list of characters s
ṙ                  - rotate s left by:
  -                -   -1 (e.g. "...      ." -> "....      ")
 ©                 -   copy to the register and yield
     ⁾[]           - literal ['[',']']
   j@              - join with reversed @rguments
         Ӯ        - literal '\r'
        ṭ          - tack (append the display text to the '\r')
           Ȯ       - print with no newline ending
              .1   - literal 0.1
            œS     - sleep for 0.1 seconds then yield the printed text (unused)
                ®  - recall the value from the register
                 ß - call this link (1) again with the same arity

897ṃ⁾. Ç - Main link: no arguments
897      - literal 897
    ⁾.   - literal ['.',' ']
   ṃ     - base decompression: convert 897 to base ['.',' '] = "...      ."

4

C (gcc), 202 198 196 189 96 99 88 86 79 77 75 74 73 Bytes

7 8 Bytes dank Digital Trauma gespart .

f(i){usleep(dprintf(2,"\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Oder, wenn Ihr System stdoutnicht nach jedem Schreiben ohne Zeilenvorschub geleert werden muss:

C (gcc), 70 Bytes

f(i){usleep(printf("\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Wie es funktioniert

  • usleep( schläft für den nächsten Rückgabewert in Mikrosekunden.
  • dprintf(2,druckt auf Dateideskriptor 2 oder stderr. Dies ist erforderlich, da while stdoutzeilenweise gepuffert ist (dh die Ausgabe wird erst angezeigt, wenn eine neue Zeile gedruckt wird) und zeichenweise stderrgepuffert ist (die gesamte Ausgabe wird sofort angezeigt).
  • "\r druckt einen Wagenrücklauf (löscht die aktuelle Zeile).
  • [%-10.10s]"ist der printfFormatbezeichner 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%10Offsets der Ladebalken durch den aktuellen Index Modulo 10. Wenn zum Beispiel i == 3, i % 10gleich 3 ist die Ladebalken von 3 macht es gleich zu Saldierung ". ....".
  • Wenn die versetzte Zeichenfolge an den printfFormatbezeichner ü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 [. ...].

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}sollte arbeiten.
Christoph

1
Tolles Golfen! Speichern Sie 1 weiteres Byte mitf(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Digital Trauma

@DigitalTrauma Die Leerzeichen in Ihrem Code wurden nicht richtig gerendert . Ich verstehe jedoch, was Sie meinten, und danke für die Hilfe!
MD XF

3

Java 7, 139 124 Bytes

String s="....      ";void c()throws Exception{System.out.print("["+s+"]\r");s=(s+s).substring(9,19);Thread.sleep(100);c();}
  • Erwähnung des \rDankes an @Phoenix .

Der Wagenrücklauf \rsetzt 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:

String s="....      ";            // Starting String "....      " on class level
void c()                          // Method without parameter nor return-type
 throws Exception{                // throws-clause/try-catch is mandatory for Thread.sleep
  System.out.print("["+s+"]\r");  //  Print the String between square-brackets,
                                  //  and reset the 'cursor' to the start of the line
  s=(s+s).substring(9,19);        //  Set `s` to the next String in line
  Thread.sleep(100);              //  Wait 100 ms
  c();                            //  Recursive call to same method
}                                 // End of method

Ausgangsgif:

Bildbeschreibung hier eingeben


Sie können die Linie klar durch Ersetzen printlnmit printund einen Wagenrücklauf ausgibt. Funktioniert möglicherweise nicht auf dem IDE-Terminal, aber auf jedem anderen vernünftigen.
Pavel

@Phoenix Mit Wagenrücklauf meinst du \r\n? Wie System.out.print(someString+"\r\n);löscht man die Konsole? Es ist dasselbe wie bei der Verwendung von System.out.println(someString);. Es wird einfach in die nächste Zeile
gewechselt

4
Nein, ich meine \r, ohne \n. Dadurch wird der "Cursor" an den Zeilenanfang gesetzt, sodass beim Drucken diese Zeile überschrieben wird.
Pavel

@Phoenix Ah natürlich. Vielen Dank. Änderte meine Antwort und fügte ein GIF hinzu, um das Ergebnis anzuzeigen. Schade, dass weder Online-Compiler noch die Eclipse-IDE dies unterstützen ..>.>
Kevin Cruijssen

3

Python 2 , 81 78 Bytes

-1 Byte (ich habe bemerkt, dass ich die Verwendung verpasst habe, %sals Rod gleichzeitig eine fast identische Python 3-Version eingereicht hat !)
-2 Byte (unter Verwendung der Idee von totallyhuman - Ersetzen s[-1]+s[:-1]durch s[9]+s[:9])

import time
s='.'*4+' '*6
while s:print'\r[%s]'%s,;s=s[9]+s[:9];time.sleep(.1)

Beispiellauf


Wie wird die Ausgabe gespült? Dies ist der Grund, warum ich python3 für meine Antwort verwende (es würde mehr Bytes benötigen, um auf python2 zu schreiben)
Rod

@Rod the \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.
Jonathan Allan

1
Ja, das ist, was ich tat, aber die Ausgabe wurde nicht in Echtzeit gedruckt (musste verwendet werden sys.stdout.flush())
Rod

1
Fand den Täter: mein Ubuntu-Terminal: c
Rod

3

Go , 150 145 132 129 124 Bytes

-5 Bytes dank sudee.

Ich habe das Gefühl, ich sehe nicht genug Hierher gehen ... Aber meine Antwort ist, C zu übertreffen.

package main
import(."fmt"
."time")
func main(){s:="....      ";for{Print("\r["+s+"]");Sleep(Duration(1e8));s=(s+s)[9:19];}}

Probieren Sie es online!


1
Nicht vertraut mit, aber ich würde davon ausgehen , können Sie konvertieren 100000000zu 10^85 Byte zu speichern.
Grant Miller

@goatmeal Ich habe das versucht, aber es ist anscheinend bitweise Negation. Ich habe auch versucht, 10**8was auch einen Fehler gibt.
Totalhuman

3
Sie können wissenschaftliche Schreibweise verwenden: 1e8.
Sonntag,

1
@sudee Aha, das wäre der Weg, große Zahlen zu verwenden. Vielen Dank!
Totalhuman

2
@MDXF Ich habe das anders formuliert, bedeuten , dass ich meine Antwort wird out-golfed von C.
totallyhuman

3

VBA 32-Bit, 159 157 143 141 134 Bytes

In 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)

Declare Sub Sleep Lib"kernel32"(ByVal M&)

64-Bit-Deklarationsanweisung (49 Byte)

Declare PtrSafe Sub Sleep Lib"kernel32"(ByVal M&)

Darüber hinaus müssen wir ein DoEventsFlag 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- A1Sofortfensterfunktion , die keine Ein- und Ausgaben in den Bereich auf dem ActiveSheet übernimmt

s="...      ....      .":Do:DoEvents:Sleep 100:[A1]="["&Mid(s,10-i,10)&"]":i=(i+1)Mod 10:Loop

Alte Version, 109 Bytes

Sofortfensterfunktion, die keine Ein- und Ausgaben für das VBE-Sofortfenster vornimmt.

s="...      ....      .":i=0:Do:DoEvents:Sleep 100:Debug.?"["&Mid(s,10-i,10)&"]":i=(i+1) Mod 10:Loop

Ungolfted und formatiert

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal M&)
Sub a()
    Dim i As Integer, s As String
    s = "...      ....      ."
    i = 0
    Do
        Debug.Print [REPT(CHAR(10),99]; "["; Mid(s, 10 - i, 10); "]"
        DoEvents
        Sleep 100
        i = (i + 1) Mod 10
    Loop
End Sub

-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.

VBA wird geladen Gif


Was ist das aam oberen Rand der Ausgabe?
MD XF

@MDXF ist der Aufruf zum Ausführen der Subroutine awie oben aufgeführt. Dies ist funktional äquivalent zu der ausführlicheren call a().
Taylor Scott

Ah, mein Schlimmes. Ich suche nur nach schlechten Einsendungen. Deine ist also nicht +1
MD XF

2

05AB1E , 23 Bytes

'.4×ð6×J[D…[ÿ],Á¶т×,т.W

Probieren Sie es online!

Erläuterung

'.4×ð6×J                  # push the string "....      "
        [                 # forever do:
         D                # duplicate
          …[ÿ],           # interpolate the copy between brackets and print
               Á          # rotate the remaining copy right
                ¶т×,      # print 100 newlines
                    т.W   # wait 100ms

2

Batch, 99 98 Bytes

Dank SteveFest 1 Byte gespart!

(Ich könnte es \raus dem Code entfernen , aber im Geiste des Batch-Golfens werde ich es nicht tun.)

@SET s=....      
:g
@CLS
@ECHO [%s%]
@SET s=%s:~-1%%s:~,-1%
@ping 0 -n 1 -w 100>nul
@GOTO g

Aufgenommen mit LICEcap

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.


Oh ... ich habe danach gesucht ...
stevefestl

1
Golf 1 Byte: Der 0in der Variable befindliche Teilstring kann entfernt werden
stevefestl

Sie benutzen cmder. Gute Arbeit.
MD XF

1
@SteveFest Huh, bis. Vielen Dank!
Conor O'Brien

1
@MDXF Es ist der einzige Grund, warum ich immer noch gesund bin: P
Conor O'Brien

2

Ruby, 57 56 Bytes

s=?.*4+' '*6;loop{$><<"[%s]\r"%s=s[-1]+s.chop;sleep 0.1}

Stark 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.


Wie funktioniert es? Geht das davon aus, dass die Eingabe in gespeichert ist s?
12.

@Riker Er definiert szu Beginn des Programms als 4 .s und einige Leerzeichen
Conor O'Brien

s[0..8]s.chop
manatwork

2

Perl, 69 Bytes

-3 Bytes dank @Dom Hastings .

$_="....".$"x6;{print"\ec[$_]
";select$a,$a,!s/(.*)(.)/$2$1/,.1;redo}

Das select undef,undef,undef,.1ist 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:

@F=((".")x4,($")x6);{print"\ec[",@F,"]\n";@F=@F[9,0..8];select$a,$a,$a,.1;redo}

Abend gelang dies ein wenig nach unten , um mehr 69 (oder 68 mit einer wörtlichen ESC): gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992 ich wie die versuchte Nutzung fühlen , !printaber Sie müssen Pars , so dass es die gleiche Länge endet: /
Dom Hastings

@DomHastings Schön, danke! Sie wissen immer noch, wie man Golf spielt: D
Dada

2

Bash, 93 90 96 Bytes

s="...      ....      ."
for((;;)){ for i in {0..9};do printf "\r[${s:10-i:10}]";sleep .1;done;}

hier ansehen

konnte nicht für die Syntax verschachtelt werden


Ich wollte eine ganz ähnliche Lösung posten, ist aber jetzt sinnlos. Aber kann eine gewisse Inspiration geben Ihre zu verbessern: pastebin.com/Ld6rryNX
Manatwork

viel besser! Ich klaue nicht von dir, ich wusste, dass ich diesen herausfinden musste ...
März,

editiert, printf padding kann beim kürzen von s nicht helfen. Das Umwickeln des Strings als @DigitalTrauma sieht besser aus.
März

1

Groovy, 72 Bytes

s="*"*4+" "*6
for(;;){print("["+s+"]"+"\n"*20);s=s[9]+s[0..8];sleep 100}

Erklärung

s="*"*4+" "*6 //creates the string "****      "
for(;;){ //classic infinite loop
    print("["+s+"]"+"\n"*20) //prints the string with [ at the beginning and ] at the end. After that some newlines
    s=s[9]+s[0..8] //appends the final char of the string to beginning, creating a cycling illusion
    sleep 100 //100 ms delay
}

Ich kannte keinen richtigen Weg, um die Konsole in Groovy / Java zu löschen. Wenn jemand eine Möglichkeit dazu hat, sagen Sie mir bitte
staticmethod

1
Mit können Sie \rden 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.
Phyrfox

1

Haskell (Windows), 159 Byte

import System.Process
import Control.Concurrent
main=mapM id[do system"cls";putStrLn('[':["....      "!!mod(i-n)10|i<-[0..9]]++"]");threadDelay(10^5)|n<-[0..]]

Erläuterung

mapM id             sequentially perform each IO action in the following list
[                   start a list comprehension where each element is...
  do                  an IO operation where
    system "cls";       we clear the screen by calling the windows builtin "cls"
    putStrLn(           then display the string...
      '[':                with '[' appended to
      [                   a list comprehension where each character is...
        "....      "!!       the character in literal string "....      " at the index
        mod(i-n)10          (i - n) % 10
      |i<-[0..9]]         where i goes from 0 to 9
      ++"]"             and that ends with ']'
    );
    threadDelay(10^5)   then sleep for 100,000 microseconds (100 ms)
|n<-[0..]]          where n starts at 0 and increments without bound

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.


1

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.

s=[?.]*4+[' ']*6
loop{print ?[,*s,"]\r";s.rotate!9;sleep 0.1}

1

GNU sed (mit exec-Erweiterung), 64

Punktzahl beinhaltet +1 für -rFlagge.

s/^/[....      ]/
:
esleep .1
s/[^. ]*(.+)(.)].*/\c[c[\2\1]/p
b

1

c, 100

char *s="....      ....     ";main(i){for(i=0;;i=(i+9)%10)dprintf(2,"[%.10s]\r",s+i),usleep(3<<15);}

Warum drucken zu stderrverwenden dprintfund nicht nur zu benutzen printf?
MD XF

@MDXF Da standardmäßig stderrZeichen gepuffert sind, während stdoutZeilen gepuffert sind. Da ich Sie nicht drucken möchten \n, dann mit printf()ich explizit haben würde fflush(stdout)sowie#include <stdio.h>
Digital -

Guter Punkt, aber eigentlich müssten Sie #include <stdio.h>STDOUT nicht spülen. fflush(0)Leert alle Puffer.
MD XF

1
Sparen Sie drei Bytes durch Umbenennen mainin f, das zählt.
MD XF
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.