Cargando ... para siempre


106

Su desafío es hacer una pantalla de carga infinita, que se vea así:

ingrese la descripción de la imagen aquí


O, para ser más específicos:

  • No tomes ninguna entrada.
  • Salida Loading..., con un espacio final, pero sin nueva línea final.
  • Ciclo infinitamente a través de los caracteres |, /, -y \: cada 0,25 segundos, sobrescribir el último con la siguiente en la secuencia. Puede sobrescribir solo el último carácter, o eliminar y reescribir toda la línea, siempre que Loading...permanezca sin cambios.

Reglas

  • El texto de salida debe verse exactamente como se especifica. Las líneas / espacios finales son aceptables.
  • Usted debe no espere 0,25 segundos antes de mostrar inicialmente de salida - el primer cuadro se debe imprimir en cuanto el programa se ejecuta.
  • Su programa debería poder ejecutarse indefinidamente. Por ejemplo, si usa un contador para marcos, el contador nunca debe causar un error al exceder el máximo en su idioma.
  • Aunque el período de espera entre cada "cuadro" debe ser de 0.25 segundos, obviamente esto nunca será exacto: se permite un margen de error del 10% más o menos.
  • Puede enviar una función, pero debe imprimirla stdout.
  • Puede enviar una respuesta en un entorno que no sea de consola (pero basado en texto), siempre que sea capaz de producir la animación de carga.
  • Este es el , por lo que gana la solución más corta (en bytes). Se aplican las lagunas de código estándar de golf.
  • Si es posible, proporcione un gif de su pantalla de carga en acción.

Ejemplo

Aquí está el código C ++ que utilicé para crear el ejemplo (sin golf):

#include <iostream>
#include <string>
#include <thread>

using namespace std;

int main() {
    string cycle = "|/-\\";
    int i = 0;

    cout << "Loading... ";

    while (true) {
        // Print current character
        cout << cycle[i];

        // Sleep for 0.25 seconds
        this_thread::sleep_for(chrono::milliseconds(250));

        // Delete last character, then increase counter.
        cout << "\b";
        i = ++i % 4;
    }
}

¡Que gane el mejor golfista!


3
¿Pueden los envíos esperar 0.25 segundos antes de mostrar inicialmente la salida?
ETHproductions

2
No, pero gracias por mencionar eso, lo agregaré a las reglas @ETHproductions
FlipTack el

¿Es aceptable una nueva línea final (después del símbolo de animación)?
Cobre

Por supuesto :) @Copper
FlipTack

1
@TheBitByte significa que, teóricamente, nada dentro de su programa provocará un error, como un contador que se desborda o alcanza la máxima profundidad de recursión.
FlipTack

Respuestas:


76

HTML / CSS, 183 180 163 161 160 147 143 bytes

a{display:inline-flex;overflow:hidden;width:1ch}c{animation:c 1s steps(4)infinite}@keyframes c{to{margin:0-4ch
<pre>Loading... <a><c>|/-\</pre>

Editar: Guardado 3 bytes gracias a @betseg. Guardado 17 bytes gracias a @manatwork. Guardado 1 byte gracias a @Daniel. Guardado 13 bytes gracias a @Ismael Miguel. Guardado 4 bytes gracias a @Fez Vrasta.


44
Según el meta, CSS + HTML está bien para responder preguntas. Además, permití esto en la descripción del desafío. Así que esta respuesta es perfectamente válida :)
FlipTack

55
HTML + CSS es TC, por lo que no veo por qué podría no ser competitivo
TuxCrafting

1
@ TùxCräftîñg CSS definitivamente no se está completando, ya que puedes resolver el problema de detención (si no hay animación infinita, se detiene). Creo que lo mismo se aplica para HTML (si no incluye JS).
Artyer

44
@Artyer stackoverflow.com/a/5239256/3273184 es algo que vale la pena considerar.
Mama Fun Roll

44
@MamaFunRoll Un comentario en esa publicación menciona que eso realmente no prueba TC porque no puede repetirse sin la intervención del usuario. Sin embargo, puede resolver este desafío en particular, por lo que no veo ningún problema con esta respuesta.
ETHproductions

57

Vim, 43 , 41 bytes

qqSLoading... |<esc>:sl250m
r/@:r-@:r\@:@qq@q

¡Dos bytes guardados gracias a @Udioica!

¡Aquí hay una animación (ligeramente desactualizada) de que sucede en tiempo real!

ingrese la descripción de la imagen aquí

Y aquí hay una explicación:

qq                              " Start recording into register 'q'
  SLoading... |<esc>            " Replace all of the text in the buffer with 'Loading... |'
                    :sl250m     " Sleep for 250 ms
r/                              " Replace the bar with a slash
  @:                            " Re-run the last ex command (sleeping)
    r-                          " Replace the slash with a dash
      @:                        " Re-run the last ex command (sleeping)
        r\                      " Replace the dash with a backslash
          @:                    " Re-run the last ex command (sleeping)
            @q                  " Run macro 'q' (the one we're recording)
              q                 " Stop recording
               @q               " Call macro 'q', which will run forever because it's recursive

1
solo curiosidades: ¿viola "Su programa debería poder ejecutarse indefinidamente"? ¿puede eventualmente alcanzar un desbordamiento de pila? :)
Dan Oak

44
@dahnoak Bueno, obviamente no puedo probarlo infinitamente, pero no asigna memoria adicional, por lo que no veo ninguna razón por la que no funcione indefinidamente.
DJMcMayhem

1
Si se cambia ia Sy moverlo dentro de la macro, puede omitir r|.
udioica

2
@dahnoak No hay ninguna razón por la cual el motor vi no pudo notar la recursión de la cola. Y algunas implementaciones de recursión lo harían naturalmente (imagínese si hay un vector de comandos para ser ejecutados y una ubicación de ejecución actual. Luego @qinsertaría en la ubicación actual el contenido del script de registro q. No se necesita pila, y no memoria asignada a menos que haya comandos para ejecutar después de @q dentro q).
Yakk

Casi cada vez que publicas una respuesta a un desafío, aprendo algo nuevo (en este caso, @:y :sl), así que gracias y sigo viniendo :)
Christian Rondeau

37

HTML + JS (ES6), 20 + 51 50 = 70 bytes

setInterval(_=>a.innerHTML='|/-\\'[i=-~i%4],i=250)
Loading... <a id=a>-

-1 byte (Zachary T)

Echa un vistazo a mi respuesta de 132 bytes HTML / CSS también.


¿Podría desbordarse i?
Zacharý

Sí, eventualmente lo haría. ¡Arreglado eso!
darrylyeo

1
¿Podría sustituir i++,i%=4con i=-~i%4un byte?
Zacharý

2
@Xufox El <pre>único se aseguró de que se utilizara una fuente monoespaciada para que las chunidades funcionaran. Las reglas no mencionan nada sobre la familia de fuentes utilizada. ;)
darrylyeo

1
Si no me equivoco, el primer carácter impreso por JS será el último en la cadena; por lo que debe iniciar con en -lugar de /. O iniciar con |y recorrer '-\\|/'. Buen incremento sin embargo.
Titus

21

Windows Batch 121 114 84 80 79 78 bytes

Solo tirar esto por diversión.

for %%b in (/ - \ ^|)do (cls
@echo Loading... %%b
ping 1.1 -n 1 -w 250>nul)
%0

No pude asignar pipe ( |) a la matriz, así que tuve que agregarlo manualmente con otra asignación.El retraso se realiza con PING, lo que podría no ser exacto .

Salida:

ingrese la descripción de la imagen aquí

Editar:

  • ¡Gracias a Roman Gräf por guardar 7 bytes!
  • ¡Gracias a Neil por guardar 30 bytes! También lo he destrozado un poco más para guardar bytes en las nuevas líneas.
  • ¡Gracias a phyrfox por guardar 4 bytes!
  • ¡Gracias a YourDeathIsComing por guardar 2 bytes!

3
Puede quitar @echo offy poner un @frente de cada comando setoecho
Roman Gräf

1
No necesitas la matriz, in (/ - \ ^|)funciona. Además,% 0 es una forma más corta de bucle que goto.
Neil

2
Debería poder usar la dirección IP "1.1" (-4 bytes), porque la mayoría de las plataformas la expandirán automáticamente a 1.0.0.1 por usted.
phyrfox

1
Puede guardar 1 byte eliminando el espacio delante de >nul.
YourDeathIsComing

1
Me refería al espacio anterior, no después.
YourDeathIsComing

20

Nodo, 72 70 bytes

f=i=>console.log('\x1BcLoading... '+'|/-\\'[setTimeout(f,250,i=-~i%4),i])

Reemplace \x1Bcon el carácter de escape literal para obtener el recuento de bytes correcto. Llame f()para comenzar la animación. Así es como se ve en el emulador de terminal ConEmu en mi computadora:

ingrese la descripción de la imagen aquí


Intente usar \033c(reemplace \033con su representación de caracteres real). No se ve tan bien, pero le ahorra algunos bytes.
Mama Fun Roll

¿No se idesbordará?
Zacharý

12
@ZacharyT Lo hará después de 71 millones de años, pero puedo arreglarlo si es necesario
ETHproductions

3
"Su programa debería poder ejecutarse indefinidamente. Por ejemplo, si usa un contador para marcos, el contador nunca debería causar un error al exceder el máximo en su idioma", sí, es necesario.
Zacharý

3
@Florent Pero entonces no funcionaría en Node ;-)
ETHproductions

14

Kotlin, 67 66 bytes

while(1>0)"|/-\\".map{print("\rLoading... $it");Thread.sleep(250)}

ingrese la descripción de la imagen aquí

Bastante autoexplicativo, usando \rpara despejar la línea y aprovechando la impresionante interpolación de cuerdas de Kotlin.

EDITAR: guardado 1 byte gracias a @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu al cambiar while(true)awhile(1>0)


1
Puede guardar un byte usando while(1>0) lugar de while(true)(-1) y probablemente debería incluir la sintaxis de la función real en su respuesta ( fun a(){<code>}, +9). Si quieres ser un poco engañoso, puedes usar almacenar una función como variable ( val a={<code>}, +8).
F. George

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu ¿No es aceptable el modo 'programa completo'? Esto se puede ejecutar como un script Kotlin .ktssin definiciones de clase o función. Además, gran llamada con while(1>0)!
Tyler MacDonell

3
Pero, ¿qué pasa si, un día, 0 se vuelve mayor que 1 ???? : P
FlipTack

Gran idea de usar el script Kotlin. @ Flp.Tkc Su comentario me recordó esto: codegolf.stackexchange.com/a/101131/62024 . Todavía temblando de que esto es posible.
F. George

@TylerMacDonell ¿En serio? No sabía que podría ejecutar kotlin directamente como un script. Gracias por la info.
TheNumberOne

14

Vim, 35 bytes

iLoading... \-/|<Esc>qqdb:sl250m<CR>p@qq@q

La versión aburrida. Aquí hay una solución que no cumple que es mejor:

Vim (suspensión de 1 segundo), 27 bytes

idbgsp@@<C-U>Loading... \-/|<Esc>@.

Usar gsno solo es mucho más corto, sino que no tiene que presionar Enter. Eso significa que la macro encaja en línea, y puedo guardar bytes cambiando a @.. (Dado que nada después de la llamada recursiva puede ejecutarse, puedo escribir lo que quiera).


Gracias por esta respuesta! ¡Aprendí gs, @.y el @@interior @.todavía me duele la cabeza!
Christian Rondeau

14

Pyth, 31 bytes

Wm,p+"\rLoading... "d.d.25"|/-\

Intérprete aquí .

Cargando GIF

Explicación

Wm,p+"\rLoading... "d.d.25"|/-\
    +"\rLoading... "d              Concatenate the string "\rLoading... " and the variable d
   p                               Print the result without a newline
                     .d.25         Sleep for 0.25 seconds
  ,                                Form a two-element list with the results of the two statements above. This is only needed to execute both statements in a single lambda function.
 m                        "|/-\    Map the above statement over the characters in the string "|/-\", setting the variable d to the character for each iteration
W                                  While the result of the map statement is true, do nothing

13

Powershell (v4), 57 56 54 53 58 57 Bytes

¡De vuelta en el Bytecount con el que empecé!

for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}

El CLI en PowerShell fallará ligeramente en algunas computadoras, por lo que no se ve perfecto, pero es tan bueno como puedo conseguir.

Se movió $ a ++ al bucle for para guardar un byte (no ;)

Luego lo movió al indexador de matriz, para guardar otros 2 bytes, gracias a Roman por señalarlo.

También guardé 1 byte más ( ;) moviendo la parte Borrar pantalla ( cls) al bucle for.

El problema y la solución señalados por TimmyD para el aspecto infinito de la pregunta, solo se requieren +5 bytes, cambiados $a++%4a($a=++$a%4) lo que nunca pasará por encima de 3.

¡Ahorré otro byte dejando el bucle for totalmente en blanco, gracias a 'lo que sea' por señalar que esto es realmente posible en Powershell Versión 4!

Nuevo gif actualizado para la versión (¿final?) De esta respuesta.

Cargando GIF

for(;;cls){"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}

for(;;cls){"Loading... "+"|/-\"[$a++%4];sleep -m 250}

for(;;){"Loading... "+"|/-\"[$a++%4];sleep -m 250;cls}

for(;;$a++){"Loading... "+"|/-\"[$a%4];sleep -m 250;cls}

for(;;){$a++;"Loading... "+"|/-\"[$a%4];sleep -m 250;cls}


2
for(;;){"Loading... "+"|/-\"[$a++%4];sleep -m 250;cls}(mover $a++al último uso de $a)
Roman Gräf

siempre olvidando algo, ¡gracias por eso!
colsw

2
No soy muy experto en Powershell, pero cuando vi la entrada de Windows Batch, pensé "¿Podría Powershell superar esto?". ¡Y aquí está!
Jakub Jankowski

1
Al menos en ps v4, debería poder jugar otro byte manteniendo la condición for totalmente vacía:for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
lo que sea el

1
De nada. En realidad, parece funcionar para la Versión 2+, era demasiado flojo para verificar antes;)
lo que sea el

11

Pyth - 36 35 bytes

#+"\033cLoading... "@"\|/-"~hZ.d.25

No funciona en línea, obviamente.


¿Tienes un gif de esto en acción? Además, ¿hay algún contador que pueda desbordarse?
FlipTack

@ Flp.Tkc, el único contador es Zun entero de Python, que no se desborda. Estaba tratando de hacer un gif pero no pude hacerlo funcionar. Si sabe cómo hacer uno, puede ejecutarlo con el intérprete de pyth
Maltysen

44
Si el número entero no se desborda, entonces probablemente crecerá hasta llenar toda la memoria, lo que hará que falle al menos después de 10 años en la mayoría de los sistemas de 32 bits. Sin duda, la muerte térmica del universo va a pasar en primer lugar, pero aún así ...
jjrv

11

Matlab, 78 75 bytes

a='\|/-';while 1;clc;disp(['Loading... ',a(1)]);a=a([2:4,1]);pause(1/4);end

ingrese la descripción de la imagen aquí


11

HTML / CSS, 23 + 109 = 132 bytes

Mejorado con la respuesta de Neil .

pre{display:flex}a{overflow:hidden;animation:a 1s steps(4)infinite;width:1ch}@keyframes a{to{text-indent:-4ch
<pre>Loading... <a>|/-\


9

Mathematica, 74 67 Bytes

ListAnimate["Loading... "<>#&/@{"|","/","-","\\"},AnimationRate->4]

La increíble cantidad de 7 bytes gracias a @dahnoak


ListAnimate["Loading... "<>#&/@Characters@"|/-\\",AnimationRate->4]
Dan Oak

1
@dahnoak saludos! No me di cuenta de que ListAnimate era una cosa. ¡Es una lástima que <>sea ​​plana, no listable, de lo contrario se podrían eliminar 4 bytes más!
Un Simmons

Solo por diversión:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
shrx

9

C #, 170 133 Bytes

void X(){Console.Write("Loading...  ");for(;;){foreach(var c in "|/-\\"){Console.Write("\b"+c);System.Threading.Thread.Sleep(250);}}}

Muchas gracias a Roman Gräf y raznagul, que me ahorraron 37 bytes. (Especialmente raznagul, quien señaló, que mi solución original era inválida de todos modos. Me perdí algo, pero ahora está solucionado y debería cumplir con los requisitos :)

bastante similar a la respuesta C # existente de Pete Arden pero con algunas mejoras

por ejemplo, "for (;;)" en lugar de "while (true)", char en lugar de string

Hubiera comentado mis sugerencias sobre su respuesta, pero en realidad no tengo suficiente reputación para hacerlo.

Sin golf:

static void X()
{
    Console.Write("Loading...  ");
    for (;;)
    {
        foreach (var c in "|/-\\")
        {
            Console.Write("\b" + c);
            System.Threading.Thread.Sleep(250);
        }
    }
}

2
¿Por qué no eliminar el primero Console.Write("\b");y cambiar el segundo a Console.Write("\b"+a);?
Roman Gräf

Definir una acción es innecesario y usar mucho tiempo un ciclo como foreach(var a in"|/-\\")y agregar el código que tiene actualmente en la acción ya que el cuerpo le ahorrará ~ 20 Bytes.
raznagul

Además, la tarea es crear exactamente la salida requerida. Que actualmente no es el caso.
raznagul

Debería ser el caso ahora, olvidé '|' y el espacio final después de "Cargando ...".
Snowfire

En su versión sin golf (ya que no coincide con la versión golfizada), puede eliminar la primera Console.Write()y usar solo una en Console.Write($"Loading... {c}\r")lugar de la segunda.
leche

9

Adelante, 7273 bytes

EDITAR :

  • Se agregó la versión exclusiva de Gforth, 69 bytes (¡Gracias @ninjalj!)
  • Se agregaron espacios en blanco faltantes después de "Cargando ..." (¡Thx @Roman Gräf!), +1 byte
  • Actualizado para que coincida con las reglas con mayor precisión (en el mismo recuento de bytes)

Golfed

: L '| '/ '- '\ begin .\" \rLoading... " 3 roll dup emit 250 ms again ; L

Versión Gforth

La versión exclusiva de GNU Forth se puede reducir a 69 bytes de esta manera:

'| '/ '- '\ [begin] .\" \rLoading... " 3 roll dup emit 250 ms [again]

Screencast

ingrese la descripción de la imagen aquí

Pruébalo en línea!


1
Dado que está utilizando gforth, si no le importa la portabilidad a otros Forth's, puede usar [begin]y [again]fuera de una definición de palabra.
ninjalj

9

Python 2, 81 79 78 77 bytes

import time
i=1
while 1:print'\rLoading...','\|/-'[i%4],;i+=1;time.sleep(.25)

Una solución bastante simple que duerme usando time.

Uso \r(Un retorno de carro) para volver al inicio de la línea y luego imprimo el mensaje sobrescribiendo la línea.

Comienzo i=1para evitar el doble escape de \(Es en '\|/-'lugar de '|/-\\').

En el pasado, solía -~isignificar i + 1evitar los paréntesis. (¡Gracias a @ Flp.Tkc por estos -2 bytes!) (Fue i=(i+1)%4vs.i=-~i%4 )

Ahora, solo estoy dejando que el contador suba para siempre, ya que técnicamente Python intno puede desbordarse. ¡Gracias a @Zachary T por señalarlo y guardar un byte!
Solo se detiene en una máquina porque la máquina se queda sin memoria, pero esto requiere 9.7 generaciones con 4GB de memoria para esa int.

Gracias a @Kade por el byte -1 donde las print a,bimpresiones ay el bespacio se separaron, por lo que no necesito mi propio espacio.

Aquí hay un gif que funciona en Windows:

Cargando

También lo probé en una máquina virtual Linux. No pude probarlo en una Mac.


1
Si no recuerdo mal, puedes usar i=-~i%4para guardar los bytes para los padres :)
FlipTack

2
¿No se reemplazará [i],;i=-~i%4con [i%4],;i+=1guardar un byte ya que no excede el máximo para Python, solo la memoria máxima?
Zacharý

99
Debería rechazarte por iniciar sesión como Administrator...
Neil

55
@Neil Para ser sincero, acabo de poner el archivo Python en Administrador y lo ejecuté desde allí porque los otros nombres de cuenta son nombres reales (PC personal).
Artyer

2
Permitiría la sugerencia de @ZacharyT ya que técnicamente los enteros de Python pueden ser infinitamente grandes, siempre y cuando la computadora tenga memoria para mantenerlos
FlipTack

7

MATL , 36 bytes

1 byte eliminado usando la idea de @ flawr de cambiar circularmente la cadena

'\-/|'`Xx1YS'Loading... 'y1)hD.25Y.T

Aquí hay una grabación gif del compilador fuera de línea:

ingrese la descripción de la imagen aquí

¡O pruébalo en MATL Online!Si no se ejecuta inicialmente, actualice la página y presione "Ejecutar" nuevamente.

Cómo funciona

'\-/|'           % Push this string
`                % Do...while
  Xx             %   Clear screen
  1YS            %   Circularly shift thr string 1 step to the right
  'Loading... '  %   Push this string
  y              %   Duplicate the string of shifting symbols
  1)             %   Get the first character
  hD             %   Concatenate the two strings and display
  .25Y.          %   Pause for 0.25 seconds
  T              %   Push "true". This is used as loop condition, to it
                 %   generates an infinite loop
                 % End loop implicitly

Hola luis bien hecho con MATL como siempre. Aquí hay una ligera variación de la lista circular. y mostrar. ¿Crees que podrías traducir eso en una solución aún más corta:a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
Hoki

@Hoki Gracias por la idea. En realidad, inicialmente tuve un contador de módulo 4 en aumento, pero fue un poco más largo (luego gané un byte debido al requisito de no hacer una pausa inicial). Además, creo que la pantalla clara y la visualización normal son más cortas que fprintfcon espacios de fondo
Luis Mendo

7

Dyalog APL, 50 bytes

Esto solo funciona en la versión de Windows, ya que de lo contrario la ⎕SMventana no se mostrará a menos que ⎕SRse llame.

{⎕SM←1 1,⍨⊂⊃⍵⌽'Loading... '∘,¨'|/-\'⋄∇4|⍵+⌈⎕DL÷4}1

Explicación:

  • {... }1: ejecuta la función comenzando con⍵=1
  • Loading... '∘,¨'|/-\': genera las cuatro salidas posibles
  • ⊂⊃⍵⌽: Gire la lista para poner el elemento first primero, tome el primer elemento y enciérrelo
  • ⎕SM←1 1,⍨: coloca la cadena en la esquina superior izquierda de la ⎕SMventana.
  • ⎕DL÷4: espera 1/4 de segundo
  • 4|⍵+⌈: redondea el valor resultante (segundos de espera, por lo que siempre es 1), agrégalo a (incrementándolo) y toma el mod-4 (para evitar que se desborde).
  • : vuelva a ejecutar la función con el nuevo .

Animación


De alguna manera, sabía que alguien enviaría una respuesta para este desafío para Dyalog (/ APL) :)
YoYoYonnY

7

C #, 187 bytes

Golfizado:

void L(){Console.Write("Loading...");Action<string>l=(a)=>{Console.SetCursorPosition(11,0);System.Threading.Thread.Sleep(250);Console.Write(a);};while(true){l("|");l("/");l("-");l("\\");}

Sin golf:

public void L()
{
  Console.Write("Loading...");
  Action<string> l = (a) =>
  {
    Console.SetCursorPosition(11, 0);
    System.Threading.Thread.Sleep(250);
    Console.Write(a);
  };
  while (true)
  {
    l("|");
    l("/");
    l("-");
    l("\\");
  }
}

Todavía estoy esperando que se cargue ...

ingrese la descripción de la imagen aquí


Todavía
estoy

@manatwork Oh, mierda, copia perezosa y pegar. Lo arreglaré cuando regrese a mi escritorio en breve :)
Pete Arden

Lamento ver que su solución se alargue debido a mi comentario. ¿No puedes usar en 1>0lugar de truevolver a 186?
manatwork

@ErikGolfer エ リ ッ ク ゴ ル フ ァ ー, no tengo idea acerca de C #, pero basado en el hecho de que el lenguaje es una copia de Java y aparentemente confirmado por Can't cast int to bool , pensé que eso no funcionaría. (Por cierto, si eso funciona, ¿quizás l()también funcione la primera llamada de como condición?)
manatwork

2
@manatwork Bueno, parece que C # es irrevocable.
Erik the Outgolfer


6

reticular, no competitivo, 40 bytes

:i=@C"Loading... "o"|/-\\".iHo14%w.i1+4,

ingrese la descripción de la imagen aquí

Olvidé cometer un montón de cosas, incluso w. Oh bien.

Explicación

:i=@C"Loading... "o"|/-\\".iHo14%w.i1+4,
:i=                                       set `i` to the TOS
   @C                                     clear the screen
     "Loading... "o                       output that string
                   "|/-\\"                push that string
                          .i              get `i`
                            H             get the `i`th character of that string
                             o            and output it
                              14%         push 0.25 (1/4)
                                 w        wait that long
                                  .i      get `i`
                                    1+    increment
                                      4,  mod 4
                                          this wraps around the beginning of the program,
                                          setting i to the said value

6

Bash, 98 69 bytes

while s='\|/-';do
printf "\rLoading... ${s:i=++i%4:1}"
sleep .25
done

¡Gracias a muchas personas por los muchos bytes que jugaron!


También usted no tiene que escapar de la barra invertida si utiliza comillas simples y los argumentos a favor echo -e -nse pueden combinar paraecho -en
Evan Chen

Puede guardar 2 líneas y 13 bytes reemplazando la línea de eco a:echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; haga la asignación a la whilecondición.
manatwork

printf utilizar como manatwork dijo, simplificar la subcadena, y ponerlo directamente en la whilecondición: while printf "\rLoading... ${s:i++%4:1}";do. 67 bytes
Dominik R

Eso no funcionará Dominik R, eventualmente se desbordaría.
Zacharý

6

Perl 6 , 72 61 bytes

Supply.interval(1/4).tap: {print "\rLoading... ",<| / - \ >[$/++];$/%=4}
loop {print "\rLoading... ",<| / - \ >[$/++];$/%=4;sleep 1/4}

6

> <> , 55 + 4 = 59 bytes

"...gnidaoL"v
l?!voc1. ^:<>
<v<>'\|/-'>^v
^<^<<<8{<<^o<

Debe ejecutarse pasando -t .01 como argumento adicional al intérprete, ese es el +4 en el recuento de bytes.

Lo que esto hace es poner los cuatro caracteres que se imprimirán en la pila, imprimir el superior sin quitarlo y cambiar la pila en una posición. Luego imprime \b(retroceso, carácter x08) y reinicia el bucle.

La sincronización se logra mediante el argumento pasado al intérprete, que obliga a esperar 0.01 segundos antes de ejecutar cada instrucción. Hay 23 instrucciones entre una salida y la siguiente (la mayoría de ellas simplemente mueve el puntero de instrucciones a la siguiente celda), por lo que esto esperará 0.23 segundos más el tiempo necesario para ejecutar las instrucciones, que se ajusta sin problemas en los 0.25s solicitados con 10% de error.

Puede probarlo en línea , pero ese intérprete no reconoce el carácter de retroceso, por lo que la salida será un poco extraña allí.


Normalmente, las marcas como -nse puntúan como 1 byte, por lo que creo que puede puntuar el argumento como t, .01que es de 4 bytes. Buen uso de la regla del 10% por cierto :)
FlipTack

@ Flp.Tkc ¡Gracias! No estaba seguro de cómo contar bytes para el argumento, me gusta de esta manera :)
Leo

@Leo - ¿Hay alguna razón para usar 0.01 y no una marca más grande con menos instrucciones? He agregado mi versión que usa un bucle de 8 instrucciones y el recuento de tics de 0.03; # "... gnidaoL" l?! vob0. "\ | / -": o} 8o51. > #
Teal pelican

@Tealpelican Hay una razón, pero no es muy buena: las reglas establecen que "No debe esperar 0.25 segundos antes de mostrar inicialmente la salida: el primer fotograma debe imprimirse tan pronto como se ejecute el programa", así que no lo hice. No quiero hacer que el temporizador sea demasiado largo, mientras que, por otro lado, este es el código de golf, por lo que no quería hacerlo demasiado corto. Al final decidí un ciclo de 25 instrucciones que tomara 0.01s cada una para lograr el tiempo exacto de 0.25s solicitado; Sin embargo, cuando lo implementé, me di cuenta de que no tenía suficiente espacio para el ciclo completo, así que tuve que recurrir al uso de la regla del 10%.
Leo

Debo haber leído mal las reglas. Esa es una razón perfectamente buena para el momento :)
Teal pelican

6

Archivo .COM de MS-DOS, 56 bytes

Aquí el contenido del archivo en hexadecimal:

b4 09 ba 2c 01 cd 21 b2 2f e8 11 00 b2 2d e8 0c
00 b2 5c e8 07 00 b2 7c e8 02 00 eb ea b4 02 cd
21 b2 08 cd 21 b9 05 00 f4 e2 fd c3 4c 6f 61 64
69 6e 67 2e 2e 2e 20 24

El código del ensamblador correspondiente se ve así:

    mov ah, 9      ; Print "Loading... "
    mov dx, text
    int 21h
theloop:
    mov dl, '/'    ; Call "chrout" for "/", "-", "\" and "|"
    call chrout
    mov dl, '-'
    call chrout
    mov dl, '\'
    call chrout
    mov dl, '|'
    call chrout
    jmp theloop    ; Endless loop

chrout:            ; Sub-Function "chrout"
    mov ah, 2      ; Output the character
    int 21h
    mov dl, 8      ; Output backspace
    int 21h
    mov cx,5       ; Call "HLT" 5 times
timeloop:
    hlt            ; Normally HLT will wait ~55 milliseconds
                   ; (Assuming no keyboard key is pressed)
    loop timeloop
    ret            ; End of the function

text:
    ASCII "Loading... ",'$'

1
Mantener presionada una tecla acelera la rueda giratoria, que se puede solucionar enmascarando interrupciones que no sean la interrupción del temporizador, por ejemplo:mov al, 0xfe / out 0x21,al
ninjalj

El comentario para HLT es incorrecto, probablemente quisiste decir que HLT se despierta a ~ 18,2 Hz (o, más precisamente, en el reloj NTSC / 12/65536 Hz).
ninjalj

@ninjalj Gracias. Cambié el comentario ...
Martin Rosenau

6

NASM x86_64 - 349283 bytes

Esto debería ejecutarse en sistemas Linux de 64 bits

construido usando:

nasm loading_golfed.asm -felf64 && ld loading_golfed.o

%use altreg
global _start
section .data
o:db"Loading...  "
s:db"|/-\\"
b:db`\bx`
q:dq 0,250000000
_start:mov r0,1
mov r7,1
mov r6,o
mov r2,12
syscall
mov r2,2
l:mov r7,1
mov al,[s+r8]
mov [b+1],al
mov r0,1
mov r6,b
syscall
mov r0,35
lea r7,[q]
mov r6,0
syscall
inc r8
and r8,3
jmp l

animación:

ahorró 65 bytes - gracias user254948

ingrese la descripción de la imagen aquí



^ Flp. Gracias por confirmar, había una línea con un espacio al final
Samuel

@Samuel, ¿son necesarias las líneas 13-17? Parece funcionar bastante bien sin esas líneas. Por lo que puedo decir (no es tan bueno en el montaje, me temo) imprime el Cargando ..., luego el | carácter, luego elimine ese carácter, luego ingrese un bucle donde repita la impresión del | por primera vez.
user254948

@Samuel además xor r8, r8 -> mov r8,0 (ahorra 1 personaje), algunos MOV tienen un espacio extra (mov r7, 1 -> mov r7,1). Además, las instrucciones cmp r8,4, jl l, xor r8, r8, se pueden reemplazar por AND r8,3 (ahorrando 15 caracteres). ¡Deberías reducir a 285 bytes en lugar de 349! (en combinación con las líneas mencionadas anteriormente)
user254948

5

R, 85 89 bytes

repeat{if(T>4)T=1;cat("\fLoading...",c("|","/","-","\\")[T],sep="");T=T+1;Sys.sleep(.25)}

Editar: se corrigió la respuesta de modo que Tno se desborde restableciendo el contador si es mayor que 4.

El único aspecto interesante de esta respuesta es el uso de R's TRUTHYincorporado T. Es efectivamente un conjunto de variables predefinido, lo 1/TRUEque significa que no tenemos que inicializar el contador, pero podemos comenzar a incrementarlo T.


Sería Teventualmente desbordar?
FlipTack

@ Flp.Tkc No se desbordaría, pero se trataría como un pasado infinito, 1e+308en cuyo caso NAse devuelve, así que supongo que esta respuesta no es válida en ese momento (no lo noté en las reglas). Se actualizará pronto
Billywob

1
En realidad, puede obtener 2 bytes más cortos si no utiliza el incorporado T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}es 87 bytes.
plannapus

Hmm ... ¿R solo opera en vectores? ¿Por qué no hay módulos o operadores bit a bit para los átomos? es Tun vector? Funciona T=(T+1)%%4? Ahorraría otros 5 bytes.
Titus

2
... o T=T%%4+1: incluso 2 bytes más cortos.
Titus

5

Haskell (GHC), 103 91 bytes

import GHC.Conc
mapM((>>threadDelay 250000).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\"

¡Gracias @nimi por guardar 12 bytes!


No es necesario un programa completo. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

Se pueden guardar dos bytes utilizando el 10% de tolerancia y el reemplazo 250000y el espacio anterior (4^9).
Christian Sievers

5

C (en sistemas tipo UNIX) 88 bytes

main(_){for(;;){_%=4;printf("\rLoading... %c","\\-/|"[_++]);fflush(0);usleep(250000);}}

Comienza con el personaje equivocado, pero creo que se ve mejor. Puede cambiar fácilmente el orden de los caracteres modificando "\ - / |" cuerda.


Podría jugar más golf moviendo las declaraciones a for, por ejemplo ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}, luego podría jugar golf más aún asumiendo un envoltorio para el desbordamiento de enteros:main(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
ninjalj

¿ Necesitas el fflush () allí?
John U

En la mayoría de los sistemas, necesita el fflush, muchos de ellos almacenados en búfer basados ​​en nuevas líneas. Sin embargo, es posible que no sea necesario en algunos sistemas.
LambdaBeta

En su fprintf(stderr,...lugar, podría usarlo , ya que esa no es una línea de búfer como stdout. La f...stderr,toma de ocho caracteres, mientras que la fflush(0);toma de diez, así que es una ganancia neta de dos caracteres.
cmaster

5

Perl, 71 63 61 bytes

s//\rLoading... |/;select$\,$\,$\,y'-|\/'\/|-'/4while$|=print

Versión previa:

$_="\rLoading... |";{$|=print;y#|/\-\\#/\-\\|#;select$\,$\,$\,.25;redo}

Gracias a @primo por 10 bytes.


2
Buen truco para usar el selecttiempo de espera en lugar de Time::HiRes. Puede guardar algunos bytes utilizando ... while$|=printy moviendo los guiones en la transliteración al frente y al final. s//\r Loading... |/También guarda un byte sobre la asignación.
primo

2
Y también, si utiliza comillas simples para el delimitador de transliteración, no hay necesidad de escapar de la barra invertida o bien: y'-\|/'\|/-'.
primo

Parece que tienes un espacio extra antes de tu código.
Erik the Outgolfer

1
Puede guardar otro byte utilizando un literal \r.
ninjalj

1
Use y'-|\/'\/|-'/4en lugar de .25por 2 más.
primo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.