Cargando para siempre ... estilo Windows


36

Haga una barra de carga de estilo Windows siguiendo las siguientes instrucciones.

(tenga en cuenta que esto es diferente a Cargando ... para siempre )

Su salida debe comenzar por [.... ].

Cada tic, debe esperar 100 ms, luego mover cada punto un carácter a la derecha. Si el punto está en el décimo carácter, muévalo al primero. Tenga en cuenta que debe borrar la pantalla antes de volver a mostrar. La salida se ordena de la siguiente manera:

[....      ]
[ ....     ]
[  ....    ]
[   ....   ]
[    ....  ]
[     .... ]
[      ....]
[.      ...]
[..      ..]
[...      .]

.. Luego se repite para siempre.

Reglas

  • Este es el , por lo que gana la respuesta más corta . Dudo que incluso acepte una respuesta ganadora aunque
  • Proporcione un archivo gif de la barra de carga en acción si es posible.

1
¿Podemos generar, digamos, veinte líneas nuevas antes de cada salida para 'borrar' la pantalla?
Okx

2
@Okx Sí, si su idioma no tiene otra forma de borrar la pantalla.
Matthew Roh

¿Cuánto error puede ser el retraso? (Por ejemplo, + - 0.5 segundos) Sugeriría un error de 250 milisegundos ...
stevefestl

1
¿Puedo sugerir que no se incluya el retraso de tiempo fijo en futuros desafíos? Encuentro que apareció en muchos desafíos recientes, y cada vez que escribo la misma plantilla irrefrenable para hacer que el sistema espere en milésimas de segundo.
xnor

2
¿Se \rpermite el uso de , en lugar de borrar literalmente la pantalla?
phyrfox

Respuestas:


19

V, 17 16 15 bytes

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

<esc>es 0x1b.

Y el hexdump:

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

Explicación

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


¿Cómo probar en Vim?
Pavel

@ Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@qdebería funcionar ( <esc>obviamente es la tecla de escape y <CR>es un salto de línea) (hay 6 espacios después de los 4 puntos)
Kritixi Lithos

3
Me alegra ver que la función es útil. Buena respuesta por cierto :)
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>          ]

Editar: Guardado 12 14 bytes gracias a @Luke.


¿No puede guardar 6 bytes cambiando el nombre de la animación a algo así b?
Lucas

@Luke No puedo creer que olvidé hacer eso ...
Neil

Puede guardar 2 bytes más soltando el chal final; 0No necesita una unidad.
Lucas

2
¿Qué tal cambiar <x>a <span>(y en el CSS también: se xconvierte spany se x>xconvierte span>*)? Eso ahorra display:inline-block;, pero cuesta solo 15 bytes. Entonces se guardan un total de 6B.
Lucas

1
@Luke No me importa la pantalla, pero quiero evitar repetirla position:absolute;.
Neil

12

PowerShell, 67 66 bytes

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

-1 mediante el uso de constructor acortado gracias a Beatcracker

reemplaza la cadena con una copia de la cadena donde se coloca el último carácter delante de los caracteres restantes, borra la pantalla, la imprime y luego duerme durante 100 ms.

ahorró muchos bytes usando el constructor del bucle for en lugar de envolver la lógica dentro de la cadena.

ingrese la descripción de la imagen aquí


1
+1 para el fortruco del bucle y hacerme volver a leer about_Join .
beatcracker

1
PD: Puedes jugar golf un byte más usando $s='.'*4+' '*6.
beatcracker

@beatcracker gracias por eso - actualizado :)
colsw

The script does not start by [.... ]. You can fix it without penalty: 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 thanks to ovs
-2 bytes thanks to totallyhuman

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

Try it online!


Why do you have flush=True? It works without for me
L3viathan

3
@L3viathan because my (ubuntu) terminal wasn't flushing. This flushing behaviour is OS dependent =/
Rod

1
Save some bytes with print(end='\r[%s]'%s,flush=1)
ovs

2
You can remove flush entirely by using the -u command line flag. Related SO question
ovs

1
You can also save some bytes with s[9]+s[:9].
totallyhuman

10

Windows batch , 201 181 bytes

Turns out using the old-school method actually saves bytes!

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

Note:

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!

Please note that my GIF recorder skipped a few frames, making the loading bar jumps :(


1
Rather than calculating the number of dots, if you just kept a variable with the dots and spaces and performed string manipulation on it you could probably get this down to 100 bytes.
Neil

I would try work on this, thanks for your tips :)!
stevefestl

timeout/t 0 >nul instead of ping 1.1 -n 1 -w 100>nul will be within the 100ms +/- 250ms timing requirement (should be around 25 - 100ms normally) so can save a few bytes there (ss64.com/nt/timeout.html)
Liam Daly

1
Also removing the @echo off and replacing the do with do @(echo %%~p&timeout/t 0 >nul&cls) will also work and should save 11 characters (200 bytes on my computer)
Liam Daly

8

Mathematica, 67 77 Bytes

+10 Bytes as I forgot the square brackets.

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

1
Really, Mathematica has a built-in Animate? :|
Mr. Xcoder

Yup, it will animate just about anything over a given variable. :)
Ian Miller

This doesn't seem to include the rectangular brackets that most other answers do.
Mark S.

Oh rats, didn't look closely enough. Ok fixed.
Ian Miller

8

C (gcc), 126 125 124 123 122 121 119 118 117 114 115 bytes

This one uses a bitmask to keep track of where the dots are.

I had to add another byte as I was only outputting 5 spaces before.

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("]"));}

Try it online!

enter image description here


48
WHY is your command prompt font Comic Sans MS?!?!?!
MD XF


6

JavaScript (ES6) + HTML, 104 85 83 bytes

f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`)
<input id=o
  • Saved 2 bytes thanks to Johan's suggestion that I use an input instead of a pre.

Try It

Requires a closing > on the input tag in order to function in a Snippet.

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


1
Shouldn't there be 10 characters between the []s?
Neil

You're right, @Neil; there are 6 spaces - if I'm going to count things by eye, the least I could do is wear my glasses!
Shaggy

1
Can't you use an <input> instead of <pre>and then value instead of innerText?
Johan Karlsson

Good call, @JohanKarlsson; that saves 2 bytes.
Shaggy

Hey! This is the same byte count: s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=o, maybe someone can improve it (replace quotation mark with `)
Thomas W

5

Noodel, 16 15 14 13 bytes

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

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

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

Try it:)


How it works

]ʠ⁶¤⁴.ȧ[ėÐḷẸḍ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.

Update

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

Try it:)

Don’t know why this took me a while to think of. Anyways, this places it at 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
Never heard of Noodel before, but it seems to be the right tool for the right job! +1
Kevin Cruijssen

1
@KevinCruijssen, ETHProductions has a good list with languages for code golfing:)
tkellehe

6
Just when I thought I outgolfed you, I notice you have already golfed your solution twice
Kritixi Lithos

@KritixiLithos, I was scared you were going to beat me so I spent forever trying to get to 14 bytes. But, now you are close again!! Dang!!
tkellehe

1
@nitro2k01 Noodel uses its own code-page with 256 characters, which are all saved as a single byte in their own encoding. Similar as some other golfing languages do, like Jelly or 05AB1E. If you would save these characters as default UTF-8 encoding, they will indeed be 2 or 3 bytes instead, but in their own encoding they are 1 byte each.
Kevin Cruijssen

4

PHP, 67 bytes

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

no comment


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();}};

o como programa completo para 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 Algo para jugar al golf: for(string o="[.... ]";;)se puede jugar al golf var o="[.... ]";for(;;). O puede que nos de un puerto de mi Java 7 respuesta al golf del total algo más de:()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};
Kevin Cruijssen

¿La interpolación de cuerdas se recortaría más? Algo así como$"[{o}]\n"
Marie

1
Si reemplaza System.Console.Write(o)con System.Console.Write(o+"\r")puede quitar elSystem.Console.Clear();
grabthefish


4

MATL , 24 bytes

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

¡Pruébalo en MATL Online! O vea un gif del compilador fuera de línea:

enter image description here

Explicación

`        % 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)

Tu enlace falla, lo que significa que no puedo matarlo.
Leaky Nun

1
@LeakyNun ¿Qué quiere decir exactamente que se bloquea? Funciona para mí y puedo matarlo. A veces hay problemas de tiempo de espera. Si no comienza, intente actualizar la página
Luis Mendo

4

Jalea , 28 27 bytes

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

Example run

¿Cómo?

ṙ©-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

Guardado 7 8 bytes gracias a Digital Trauma .

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

O, si su sistema es stdout no necesita ser vaciado después de cada escritura sin una nueva línea:

C (gcc), 70 bytes

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

Cómo funciona

  • usleep( duerme para el próximo valor de retorno en microsegundos.
  • dprintf(2,imprime en el descriptor de archivo 2, o stderr. Esto es necesario porque mientras stdoutestá almacenado en línea (lo que significa que la salida no se mostrará hasta que imprima una nueva línea),stderr está almacenada en caracteres (toda la salida se muestra inmediatamente).
  • "\r imprime un retorno de carro (borra la línea actual).
  • [%-10.10s]" es el printf especificador de formato para una cadena con una longitud exacta de 10 (sin importar qué cadena siempre que la salida sea siempre una cadena con una longitud de 10), rellenada con espacios a la derecha si es necesario. Esto se incluirá entre paréntesis.
  • ".... ...." es la barra de carga
  • +i%10compensa la barra de carga por el módulo de índice actual 10. Por ejemplo, si i == 3,i % 10 es igual a 3. La compensación de la barra de carga por 3 hace que sea igual a ". ....".
  • Cuando la cadena desplazada se pasa al printfespecificador de formato, se limita a una longitud de 10 si es necesario y agrega espacios al final si es necesario. Por lo tanto, la barra de carga siempre estará entre [.... ]y [. ...].

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

1
Gran golf! Ahorre 1 byte más conf(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Digital Trauma

@DigitalTrauma Los espacios en su código no se representaron correctamente. Sin embargo, veo lo que querías decir, ¡y gracias por la ayuda!
MD XF

3

Java 7, 139124 bytes

String s="....      ";void c()throws Exception{System.out.print("["+s+"]\r");s=(s+s).substring(9,19);Thread.sleep(100);c();}
  • Mención de \ragradecimiento a @ Phoenix .

El retorno del carro \r restablece el 'cursor' al comienzo de la línea, que luego se puede sobrescribir. Desafortunadamente, los compiladores en línea ni el IDE de Eclipse no admiten esto, por lo que agregué un gif al final de esta respuesta para mostrarlo desde el símbolo del sistema de Windows.

Pruébalo aquí(Ligeramente modificado para que no tenga que esperar el tiempo de espera antes de ver el resultado. Además, el TIO no admite retornos de carro, por lo que cada línea se imprime sin sobrescribir la línea anterior).

Explicación:

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

Salida gif:

ingrese la descripción de la imagen aquí


Puede borrar la línea reemplazando printlncon printy dar salida a un retorno de carro. Puede que no funcione en la terminal de su IDE, pero funcionaría en cualquier otra cuerdo.
Pavel

@ Phoenix ¿Por el retorno de carro quieres decir \r\n? Cómo System.out.print(someString+"\r\n);borra la consola ... Es lo mismo que usar System.out.println(someString);... Simplemente va a la siguiente línea, pero no elimina ninguna línea anterior impresa ...: S
Kevin Cruijssen

44
No, quiero decir \r, sin \n. Eso restablece el "cursor" al comienzo de la línea, por lo que imprimir cualquier cosa sobrescribirá esa línea.
Pavel

@ Phoenix Ah, por supuesto. Gracias. Modifiqué mi respuesta y agregué un gif para mostrar el resultado. Lástima que los compiladores en línea ni el IDE de Eclipse no
admitan

3

Python 2 , 81 78 bytes

-1 byte (notando que perdí el uso de %s cuando Rod presentó una versión de Python 3 casi idéntica al mismo tiempo)
-2 bytes (usando la idea totalmente humana - reemplazar s[-1]+s[:-1]con s[9]+s[:9])

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

Ejecución de ejemplo


¿Cómo está vaciando la salida? esta es la razón por la que estoy usando python3 en mi respuesta (se necesitarían más bytes para vaciar en python2)
Rod

@ Rod \rsobrescribe la línea y la ,hace imprimir una tupla en lugar de una cadena; lo vi hace un tiempo en algún lugar y también lo he usado antes.
Jonathan Allan

1
Sí, esto es lo que estaba haciendo, pero la salida no se imprimía en tiempo real (tenía que usar sys.stdout.flush())
Rod

1
Encontré al culpable: mi terminal de ubuntu: c
Rod

3

Ir , 150 145 132 129 124 bytes

-5 bytes gracias a sudee.

Siento que no veo lo suficiente Vaya aquí ... Pero mi respuesta está superando a C así que ... por favor, ¿halp golf?

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

Pruébalo en línea!


1
No está familiarizado con Go, pero yo supongo que puede convertir 100000000a 10^8ahorrar 5 bytes.
Grant Miller

@goatmeal Intenté eso pero aparentemente es una negación bit a bit. También probé, lo 10**8que también da un error.
Totalmente humano

3
Se puede utilizar la notación científica: 1e8.
sudee

1
@sudee Aha, esa sería la forma de usar grandes números. ¡Gracias!
totalmente humano

2
@MDXF Debería haber dicho eso de manera diferente, quise decir que mi respuesta está siendo superada por C.
totalmente humano

3

VBA de 32 bits, 159 157 143 141 134 Bytes

VBA no tiene una función integrada que permita esperar períodos de tiempo inferiores a un segundo, por lo que debemos declarar una función desde kernel32.dll

Declaración de declaración de 32 bits (41 bytes)

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

Declaración de declaración de 64 bits (49 bytes)

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

Además, debemos incluir un DoEvents bandera para evitar que el bucle infinito haga que Excel parezca no responder. La función final es entonces una subrutina que no lleva entradas y salidas a la ventana inmediata de VBE.

Función de ventana inmediata, 93 bytes

Función de ventana inmediata anónima de VBE que no lleva entradas y salidas al rango A1de ActiveSheet

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

Versión antigua, 109 bytes

Función de ventana inmediata que no lleva entradas y salidas a la ventana inmediata de VBE.

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

No golfted y formateado

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 para eliminar espacios en blanco

-30 bytes para contar correctamente

-14 Bytes para convertir a la función de ventana inmediata

Salida

El siguiente gif usa la versión de subrutina completa porque era demasiado vago para volver a grabar esto con la función de ventana inmediata.

VBA cargando Gif


¿Qué es eso aen la parte superior de la salida?
MD XF

@MDXF que es la llamada para ejecutar la subrutina acomo se indica arriba; esto es funcionalmente equivalente al más detallado call a().
Taylor Scott,

Ah, mi mal. Solo busco malas presentaciones. La tuya no es, entonces, entonces +1
MD XF

2

05AB1E , 23 bytes

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

Pruébalo en línea!

Explicación

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

Lote, 99 98 bytes

¡Guardado 1 byte gracias a SteveFest!

(Podría eliminarlo \rdel código, pero en el espíritu del golf por lotes, no lo haré).

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

Grabado con LICEcap

Hay cuatro espacios después de la primera línea.

La lógica principal es modificar la cadena. %s:~-1%es el último carácter de %s%y %s:~0,-1%es todo menos el último carácter de %s%. Por lo tanto, estamos moviendo el último carácter al frente de la cadena, que gira la cadena.


Aw ... He estado buscando esto ...
stevefestl

1
Golf 1 byte: 0se puede eliminar la subcadena variable
stevefestl

Utiliza cmder. Buen trabajo.
MD XF

1
@SteveFest Huh, TIL. ¡Gracias!
Conor O'Brien

1
@MDXF Es la única razón por la que todavía estoy cuerdo: P
Conor O'Brien

2

Ruby, 57 56 bytes

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

Muy influenciado por otras respuestas aquí.

Salvó un byte gracias a @manatwork. También, aparentemente, tengo problemas para contar caracteres: uso ST3 y aparentemente incluirá nuevas líneas en el recuento de caracteres en la línea si no está atento.


¿Como funciona? ¿Asume esto que la entrada está almacenada s?
Rɪᴋᴇʀ

@Riker Él define sal comienzo del programa como 4 .sy algunos espacios
Conor O'Brien

s[0..8]s.chop
manatwork

2

Perl, 69 bytes

-3 bytes gracias a @Dom Hastings .

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

Esa select undef,undef,undef,.1es la forma más corta de dormir menos de 1 segundo en Perl, y requiere muchos bytes ...


Un poco más largo (79 bytes), hay:

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

Por la noche, logré bajar esto un poco más 69 (o 68 con un ESC literal): gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992 Siento que intenté usarlo !printpero necesitas parens para que termine en la misma longitud: /
Dom Hastings

@DomHastings Niza, gracias! Todavía sabes jugar golf: D
Dada

2

Golpetazo, 93 90 96 bytes

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

ver aquí

no se pudo anidar {} en sintaxis


Tenía la intención de publicar una solución bastante similar, pero ahora no tiene sentido. Pero puede dar algo de inspiración para mejorar su: pastebin.com/Ld6rryNX
manatwork

¡mucho mejor! no te estoy robando, sabía que tenía que resolver esto ...
marcosm

editado, el relleno de printf no puede ayudar a acortar s. envolviendo la cadena como @DigitalTrauma se ve mejor.
marcosm

1

Groovy, 72 bytes

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

Explicación

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
}

No conocía una forma adecuada de borrar la consola en Groovy / Java. Si alguien tiene una forma de hacerlo, dígame
método estático

1
Puede usar \rpara regresar el cursor al inicio de la línea. Parece que al menos varias respuestas están haciendo esto. Desde allí, puede eliminar el * 20, ahorrando 3 bytes.
phyrfox

1

Haskell (Windows), 159 bytes

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

Explicación

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

La pureza de Haskell hizo que la generación del patrón de puntos de ciclismo fuera algo compleja. Terminé creando una comprensión de lista anidada que generó una lista infinita de cadenas en el orden en que deberían salir, luego volví a agregar las operaciones de E / S apropiadas.


1

Ruby, 61 bytes

Si la especificación fuera que los puntos se desplazaran hacia la izquierda en lugar de hacia la derecha, ahorraría 1 byte porque rotate!sin argumentos desplaza la matriz una vez hacia la izquierda.

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

1

GNU sed (con extensión exec), 64

La puntuación incluye +1 para la -rbandera.

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);}

¿Por qué imprimir para stderrusar dprintfy no solo usar printf?
MD XF

@MDXF Porque de manera predeterminada stderrestá almacenado en búfer de caracteres, mientras que stdoutestá almacenado en línea. Como no quiero imprimir ninguna \n, entonces printf()tendría que hacerlo explícitamente fflush(stdout), así como#include <stdio.h>
Digital Trauma

Buen punto, pero en realidad, no tendrías que #include <stdio.h>limpiar STDOUT. fflush(0)Enjuaga todos los tampones.
MD XF

1
Ahorre tres bytes cambiando el nombre maina f, eso cuenta.
MD XF
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.