Loading Forever... Windows style

36

5

Make a Windows style Loading bar by the following instructions.

(notice that this is different than Loading... Forever)

Your output should start by [.... ].

Every tick, you should wait 100 ms, then move each dots by one character right. if the dot is on the tenth character, move it to the first. Notice that you should clear the screen before outputting again. The output is ordered as the following:

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

..Then it loops forever.

Rules

  • This is , so the shortest answer wins I doubt I would even accept a winning answer tho
  • Please provide a gif file of the loading bar in action if possible.

Matthew Roh

Posted 2017-05-12T11:10:38.187

Reputation: 5 043

1Can we output, say, twenty newlines before each output to 'clear' the screen? – Okx – 2017-05-12T11:11:59.700

2@Okx Yes, if your language has no other way of clearing the screen. – Matthew Roh – 2017-05-12T11:13:32.260

How much error can the delay be?(e.g. +- 0.5 seconds) I'd suggest 250 milliseconds error.... – stevefestl – 2017-05-12T12:50:12.017

1Can I suggest not including the fixed time delay on future challenges? I find it's appeared on a lot of recent challenges, and each time I write the same ungolfable boilerplate to make the system wait n milleseconds. – xnor – 2017-05-12T20:23:17.960

2Is the use of \r allowed, instead of literally clearing the screen? – phyrfox – 2017-05-12T21:06:25.647

Answers

19

V, 17 16 15 bytes

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

<esc> is 0x1b.

And the hexdump:

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

Explanation

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

user41805

Posted 2017-05-12T11:10:38.187

Reputation: 16 320

How to test in Vim? – Pavel – 2017-05-12T17:58:03.497

@Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@q should work (<esc> is obviously the escape key and <CR> is a linefeed) (there are 6 spaces after the 4 dots) – user41805 – 2017-05-12T18:00:42.257

3Glad to see the function being useful. Nice answer BTW :) – James – 2017-05-12T20:19:02.250

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

Edit: Saved 12 14 bytes thanks to @Luke.

Neil

Posted 2017-05-12T11:10:38.187

Reputation: 95 035

Can't you save 6 bytes by renaming the animation to something like b? – Luke – 2017-05-17T15:38:10.497

@Luke I can't believe I forgot to do that... – Neil – 2017-05-17T15:50:05.757

You can save 2 more bytes by dropping the ch at the end; 0 doesn't need a unit. – Luke – 2017-05-17T17:00:55.563

@Luke Indeed, nor do I need the }s. – Neil – 2017-05-17T17:05:10.470

2How about changing <x> to <span> (and in the CSS as well: x becomes span and x>x becomes span>*)? That saves the display:inline-block;, but costs only 15 bytes. So a total of 6B are saved. – Luke – 2017-05-17T19:58:49.047

1@Luke I don't care about the display but I do want to avoid repeating the position:absolute;. – Neil – 2017-05-17T20:19:14.300

12

PowerShell, 67 66 Bytes

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

-1 by using shortened constructor thanks to Beatcracker

replaces the string with a copy of the string where the last char is put in front of the remaining chars, clears the screen, prints it, and then sleeps for 100 ms.

saved a lot of bytes by using the for loop constructor rather than wrap the logic inside the string.

enter image description here

colsw

Posted 2017-05-12T11:10:38.187

Reputation: 3 195

1

+1 for the for loop trick and making me re-read about_Join.

– beatcracker – 2017-05-13T10:36:13.943

1P.S. You can golf one more byte using $s='.'*4+' '*6. – beatcracker – 2017-05-14T17:10:23.987

@beatcracker thanks for that - updated :) – colsw – 2017-05-14T17:29:52.883

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 – 2018-11-06T12:14:24.707

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!

Rod

Posted 2017-05-12T11:10:38.187

Reputation: 17 588

Why do you have flush=True? It works without for me – L3viathan – 2017-05-12T13:48:20.883

3@L3viathan because my (ubuntu) terminal wasn't flushing. This flushing behaviour is OS dependent =/ – Rod – 2017-05-12T13:51:35.030

1Save some bytes with print(end='\r[%s]'%s,flush=1) – ovs – 2017-05-12T13:57:36.183

2

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

– ovs – 2017-05-12T14:06:40.160

1You can also save some bytes with s[9]+s[:9]. – totallyhuman – 2017-05-13T17:08:35.293

By meta consensus, the -u option is considered a different programming language and hereby doesn't count to more bytes – MilkyWay90 – 2019-02-01T04:35:37.350

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 :(

stevefestl

Posted 2017-05-12T11:10:38.187

Reputation: 539

1Rather 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 – 2017-05-12T15:54:04.173

I would try work on this, thanks for your tips :)! – stevefestl – 2017-05-12T22:56:48.280

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 (https://ss64.com/nt/timeout.html)

– Liam Daly – 2017-05-15T06:35:42.203

1Also 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 – 2017-05-15T06:51:49.077

8

Mathematica, 67 77 Bytes

+10 Bytes as I forgot the square brackets.

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

Ian Miller

Posted 2017-05-12T11:10:38.187

Reputation: 727

1Really, Mathematica has a built-in Animate? :| – Mr. Xcoder – 2017-05-13T10:08:55.763

Yup, it will animate just about anything over a given variable. :) – Ian Miller – 2017-05-13T13:06:38.853

This doesn't seem to include the rectangular brackets that most other answers do. – Mark S. – 2017-05-13T14:26:37.383

Oh rats, didn't look closely enough. Ok fixed. – Ian Miller – 2017-05-14T00:18:57.180

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

cleblanc

Posted 2017-05-12T11:10:38.187

Reputation: 3 360

49WHY is your command prompt font Comic Sans MS?!?!?! – MD XF – 2017-05-12T23:51:17.073

7

Javascript (ES6), 86 bytes

setInterval('with(console)clear(),log(`[${x=x[9]+x.slice(0,9)}]`)',100,x='...      .')

nderscore

Posted 2017-05-12T11:10:38.187

Reputation: 4 912

4+1 for with. Always +1 for with! – Shaggy – 2017-05-13T02:21:02.993

@Shaggy https://codegolf.stackexchange.com/questions/118402/tell-me-my-screen-resolution/118410#118410 #SelfPromotion :p

– Arjun – 2017-05-13T05:54:32.993

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>

Shaggy

Posted 2017-05-12T11:10:38.187

Reputation: 24 623

1Shouldn't there be 10 characters between the []s? – Neil – 2017-05-12T13:46:22.323

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 – 2017-05-12T13:48:37.030

1Can't you use an <input> instead of <pre>and then value instead of innerText? – Johan Karlsson – 2017-05-12T14:15:10.680

Good call, @JohanKarlsson; that saves 2 bytes. – Shaggy – 2017-05-12T14:18:48.333

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 – 2017-05-12T18:05:01.040

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>

tkellehe

Posted 2017-05-12T11:10:38.187

Reputation: 605

2Never heard of Noodel before, but it seems to be the right tool for the right job! +1 – Kevin Cruijssen – 2017-05-12T13:22:06.457

1

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

– tkellehe – 2017-05-12T13:31:11.180

6Just when I thought I outgolfed you, I notice you have already golfed your solution twice – user41805 – 2017-05-12T15:12:46.277

@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 – 2017-05-12T15:16:10.073

Are you sure that characters like and are encoded in a single byte? – nitro2k01 – 2017-05-14T04:44:35.343

@nitro2k01. In the editor, no it is not. The editor uses the character encoding as what works best with JavaScript. These characters are then encoded based off the Noodel code page. Then, once again because of what is easier with JavaScript, Noodel decodes that into the original characters. Sounds stupid, but I did that just to make it to where the noodel function takes in the proper encoding. So, those characters are 1 byte to Noodel. Does that answer your question? – tkellehe – 2017-05-14T13:04:39.290

@tkellehe Well, no. That's still characters (of some unknown length) not bytes (commonly defined as 8 bits in modern computing). – nitro2k01 – 2017-05-15T02:21:08.440

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 – 2017-05-15T09:07:29.897

Ok, thanks. Didn't realize it had its own codepage. – nitro2k01 – 2017-05-15T11:17:37.233

4

MATL, 24 bytes

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

Try it at MATL Online! Or see a gif from the offline compiler:

enter image description here

Explanation

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

Luis Mendo

Posted 2017-05-12T11:10:38.187

Reputation: 87 464

Your link crashes, meaning that I cannot kill it. – Leaky Nun – 2017-05-12T11:29:22.627

1@LeakyNun What do you mean exactly that it crashes? It works for me, and I can kill it. Sometimes there are timeout issues. If it doesn't start, try refreshing the page – Luis Mendo – 2017-05-12T11:45:09.327

4

PHP, 67 bytes

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

no comment

Titus

Posted 2017-05-12T11:10:38.187

Reputation: 13 814

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

or as whole program for 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();}}}}

LiefdeWen

Posted 2017-05-12T11:10:38.187

Reputation: 3 381

+1 Something to golf: for(string o="[.... ]";;) can be golfed to var o="[.... ]";for(;;). Or you can us a port of my Java 7 answer to golf the total some more: ()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};

– Kevin Cruijssen – 2017-05-12T13:21:00.350

Would string interpolation trim anymore off? Something like $"[{o}]\n" – Marie – 2017-05-12T13:54:47.743

1If you replace System.Console.Write(o) with System.Console.Write(o+"\r") you can remove the System.Console.Clear(); – grabthefish – 2017-05-13T20:03:38.083

4

Jelly, 28 27 bytes

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

Example run

How?

ṙ©-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 ['.',' '] = "...      ."

Jonathan Allan

Posted 2017-05-12T11:10:38.187

Reputation: 67 804

4

Pure bash, 68

s=${1:-....      }
printf "[$s]\r"
sleep .1
exec $0 "${s: -1}${s%?}"

Digital Trauma

Posted 2017-05-12T11:10:38.187

Reputation: 64 644

4

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

Saved 7 8 bytes thanks to Digital Trauma.

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

Or, if your system's stdout doesn't need to be flushed after every write without a newline:

C (gcc), 70 bytes

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

How it works

  • usleep( sleeps for the next return value in microseconds.
  • dprintf(2, prints to file descriptor 2, or stderr. This is necessary because while stdout is line-buffered (meaning output will not show until it prints a newline), stderr is character-buffered (all output is shown immediately).
  • "\r prints a carriage return (clears the current line).
  • [%-10.10s]" is the printf format specifier for a string with exact length 10 (no matter what string provided the output will always be a string with length 10), padded with spaces to the right if necessary. This will be enclosed with brackets.
  • ".... ...." is the loading bar.
  • +i%10 offsets the loading bar by the current index modulo 10. For example, if i == 3, i % 10 is equal to 3. Offsetting the loading bar by 3 makes it equal to ". ....".
  • When the offset-ed string is passed to the printf format specifier, it limits to a length of 10 if necessary and adds spaces to the end if necessary. Therefore, the loading bar will always be between [.... ] and [. ...].

MD XF

Posted 2017-05-12T11:10:38.187

Reputation: 11 605

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));} should work. – Christoph – 2017-05-15T11:08:13.963

1Great golfing! Save 1 more byte with f(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);} – Digital Trauma – 2017-05-15T19:05:28.043

@DigitalTrauma The spaces in your code didn't render properly. However, I see what you meant, and thanks for the help!

– MD XF – 2017-05-15T19:17:53.857

3

Python 2, 81 78 bytes

-1 byte (noticing I missed use of %s when Rod submitted an almost identical Python 3 version at the same time!)
-2 bytes (using totallyhuman's idea - replace s[-1]+s[:-1] with s[9]+s[:9])

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

Example run

Jonathan Allan

Posted 2017-05-12T11:10:38.187

Reputation: 67 804

How it's flushing the output? this is the reason why I'm using python3 on my answer (it would take more bytes to flush on python2) – Rod – 2017-05-12T12:29:04.080

@Rod the \r overwrites the line and the , makes it print a tuple rather than a string - I saw it a while back somewhere and have used it before too. – Jonathan Allan – 2017-05-12T12:33:27.753

1Yes, this is what I was doing, but the output wasn't being printed in real time (had to use sys.stdout.flush()) – Rod – 2017-05-12T12:36:58.963

1Found the culprit : my ubuntu terminal :c – Rod – 2017-05-12T12:39:27.627

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();}
  • Mentioning of \r thanks to @Phoenix.

The carriage return \r resets the 'cursor' back to the begin of the line, which can then be overwritten. Unfortunately, online compilers nor the Eclipse IDE doesn't support this, so I've added a gif at the end of this answer to show it from Windows Command Prompt.

Try it here. (Slightly modified so you won't have to wait for the time-out before viewing the result. Also, the TIO doesn't support carriage returns, so every line is printed without overwriting the previous line.)

Explanation:

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

Output gif:

enter image description here

Kevin Cruijssen

Posted 2017-05-12T11:10:38.187

Reputation: 67 575

You can clear the line by replacing println with print and outputting a carriage return. Might not work in your IDE's terminal, but it would work in any other sane one. – Pavel – 2017-05-12T18:00:05.043

@Phoenix By carriage return you mean \r\n? How does System.out.print(someString+"\r\n); clear the console.. It's the same as using System.out.println(someString);.. It simply goes to the next line, but doesn't remove any previous line printed.. :S – Kevin Cruijssen – 2017-05-12T19:31:35.903

4No, I mean \r, without \n. That resets the "cursor" to the beginning of the line so printing anything will overwrite that line. – Pavel – 2017-05-12T22:21:38.160

@Phoenix Ah of course. Thanks. Modified my answer and added a gif to show the result. Too bad online compilers nor the Eclipse IDE aren't supporting this.. >.> – Kevin Cruijssen – 2017-05-13T10:36:42.527

3

Go, 150 145 132 129 124 bytes

-5 bytes thanks to sudee.

I feel like I don't see enough Go here... But my answer is topping C so... pls halp golf?

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

Try it online!

totallyhuman

Posted 2017-05-12T11:10:38.187

Reputation: 15 378

1Not familiar with Go, but I would assume you can convert 100000000 to 10^8 to save 5 bytes. – Grant Miller – 2017-05-13T05:33:05.147

@goatmeal I tried that but it's apparently bitwise negation. I also tried 10**8 which also gives an error. – totallyhuman – 2017-05-13T12:50:02.583

3You can use scientific notation: 1e8. – sudee – 2017-05-14T16:20:38.010

1@sudee Aha, that would be the way to use large numbers. Thanks! – totallyhuman – 2017-05-14T16:24:06.410

No longer topping C :P

– MD XF – 2017-05-15T15:41:41.270

2@MDXF I should've phrased that differently, I meant my answer is being out-golfed by C. – totallyhuman – 2017-05-15T16:39:01.943

3

VBA 32-bit, 159 157 143 141 134 Bytes

VBA does not have a built in function that allows for waiting for time periods less than one second so we must declare a function from kernel32.dll

32 Bit Declare Statement (41 Bytes)

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

64 Bit Declare Statement (49 Bytes)

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

Additionally, we must include a DoEvents flag to avoid the infinite loop from making Excel appear as non-responsive. The final function is then a subroutine which takes no input and outputs to the VBE immediate window.

Immediate Window function, 93 Bytes

Anonymous VBE immediate window function that takes no input and outputs to the range A1 on the ActiveSheet

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

Old Version, 109 Bytes

Immediate window function that takes no input and outputs to the VBE immediate window.

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

Ungolfted and formatted

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 for removing whitespace

-30 Bytes for counting correctly

-14 Bytes for converting to immediate window function

Output

The gif below uses the full subroutine version because I was too lazy to rerecord this with the immediate window function.

VBA loading Gif

Taylor Scott

Posted 2017-05-12T11:10:38.187

Reputation: 6 709

What's that a at the top of the output? – MD XF – 2017-05-15T15:44:25.730

@MDXF that is the call to run subroutine a as is listed above; this is functionally equivalant to the more verbose call a(). – Taylor Scott – 2017-05-16T03:27:22.063

Ah, my bad. Just looking for bad submissions. Your's isn't, then, so +1 – MD XF – 2017-05-16T03:28:13.803

2

Perl, 69 bytes

-3 bytes thanks to @Dom Hastings.

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

That select undef,undef,undef,.1 is the shortest way to sleep less than 1 second in Perl, and it takes a lot of bytes...


Slightly longer (79 bytes), there is:

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

Dada

Posted 2017-05-12T11:10:38.187

Reputation: 8 279

Evening, managed to get this down a little more 69 (or 68 with a literal ESC): https://gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992 I feel like the tried to use !print but you need parens so it ends up the same length :/

– Dom Hastings – 2017-05-15T18:30:16.147

@DomHastings Nice, thanks! You still know how to golf :D – Dada – 2017-05-16T07:44:17.713

2

05AB1E, 23 bytes

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

Try it online!

Explanation

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

Emigna

Posted 2017-05-12T11:10:38.187

Reputation: 50 798

2

Bash, 93 90 96 bytes

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

view here

couldn't get nested { } in for syntax

marcosm

Posted 2017-05-12T11:10:38.187

Reputation: 986

I intended to post a quite similar solution, but is pointless now. But may give some inspiration to improve your: https://pastebin.com/Ld6rryNX

– manatwork – 2017-05-12T14:06:50.393

much better! i'm not stealing from you, i knew i had to work out this one... – marcosm – 2017-05-12T14:19:23.503

edited, printf padding can't help in shortening s. wraping the string as @DigitalTrauma looks better. – marcosm – 2017-05-15T13:27:10.807

2

Ruby, 57 56 bytes

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

Heavily influenced by other answers here.

Saved a byte thanks to @manatwork. Also apparently I have trouble counting characters -- I use ST3 and apparently it will include newlines in the count of characters in the line if you're not attentive.

canhascodez

Posted 2017-05-12T11:10:38.187

Reputation: 201

How does it work? Does this assume that the input is stored in s? – Rɪᴋᴇʀ – 2017-05-12T22:47:10.793

@Riker He defines s at the beginning of the program as 4 .s and a few spaces – Conor O'Brien – 2017-05-12T22:50:55.147

s[0..8]s.chop – manatwork – 2017-05-15T08:53:41.820

2

Batch, 99 98 bytes

Saved 1 byte thanks to SteveFest!

(I could remove \r from the code, but in the spirit of batch golfing, I won't.)

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

Recorded with LICEcap

There are four spaces after the first line.

The main logic is modifying the string. %s:~-1% is the last character of %s% and %s:~0,-1% is all but the last character of %s%. Thus, we are moving the last character to the front of the string, which rotates the string.

Conor O'Brien

Posted 2017-05-12T11:10:38.187

Reputation: 36 228

Aw... I've been looking for this... – stevefestl – 2017-05-12T23:05:55.023

1Golf 1 byte: the 0 in the variable substring can be removed – stevefestl – 2017-05-12T23:12:16.617

You use cmder. Nice job. – MD XF – 2017-05-13T03:21:14.880

1@SteveFest Huh, TIL. Thanks! – Conor O'Brien – 2017-05-13T03:45:50.543

1@MDXF It's the only reason I'm still sane :P – Conor O'Brien – 2017-05-13T03:46:21.940

@ConorO'Brien Well, there's Git for Windows, which comes with bash. Quite useful, it's what I use.

– MD XF – 2017-05-13T16:45:54.840

timeout/t 0 >nul saves some bytes – stevefestl – 2017-05-15T08:40:08.733

I'm curious why won't you remove the \rs? – stevefestl – 2017-05-15T12:19:37.267

1

Groovy, 72 bytes

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

Explaination

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
}

staticmethod

Posted 2017-05-12T11:10:38.187

Reputation: 191

Didn't know a proper way to clear the console in Groovy/Java. If someone has a way of doing it, please tell me – staticmethod – 2017-05-12T18:48:46.903

1You can use \r to return the cursor to the start of the line. It appears that at least several answers are doing this. From there, you could delete the *20, saving 3 bytes. – phyrfox – 2017-05-12T21:09:19.450

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

Explanation

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

Haskell's purity made generating the cycling dot pattern somewhat complex. I ended up creating a nested list comprehension that generated an infinite list of strings in the order they should be output, then went back added the appropriate IO operations.

user46863

Posted 2017-05-12T11:10:38.187

Reputation:

1

Ruby, 61 bytes

If the spec were for the dots to scroll left instead of right, it would save 1 byte because rotate! with no arguments shifts the array once to the left.

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

Value Ink

Posted 2017-05-12T11:10:38.187

Reputation: 10 608

1

GNU sed (with exec extension), 64

Score includes +1 for -r flag.

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

Digital Trauma

Posted 2017-05-12T11:10:38.187

Reputation: 64 644

1

c, 100

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

Digital Trauma

Posted 2017-05-12T11:10:38.187

Reputation: 64 644

Why print to stderr using dprintf and not just use printf? – MD XF – 2017-05-12T23:58:48.103

@MDXF Because by default stderr is character buffered, whereas stdout is line buffered. Since I don't want to print any \n, then with printf() I'd have to explicitly fflush(stdout) as well as #include <stdio.h> – Digital Trauma – 2017-05-13T00:27:29.347

Good point, but actually, you wouldn't have to #include <stdio.h> to flush STDOUT. fflush(0) flushes all buffers. – MD XF – 2017-05-13T00:28:22.097

1Save three bytes by renaming main to f, that counts. – MD XF – 2017-05-13T03:19:53.227

1

S.I.L.O.S, 282 bytes

canvas # #
def # 1000 ! Obj N new M move > 10
newObj 0 # #
pen 255 255 255
N! 0 > >0
M! 1 > >
N! 0 > >0
M! 2 560 >
x=8
lblx
x-1
N! 0 > >
if x x
M! 3 20 >
M! 4 20 >0
M! 5 550 >
M! 6 550 >0
lbla
x=4
lbly
A=6+x
B=60+50*(((x-1)+a)%>)
M! A B 50 
x-1
if x y
refresh
a+1
a%>
wait >0
GOTO a

TIO currently does not support graphical output, but the official interpreter does. I think this is the first time I have gotten a chance to test out the graphical output functionality of SILOS.

enter image description here

Rohan Jhunjhunwala

Posted 2017-05-12T11:10:38.187

Reputation: 2 569

1

shortC, 85 72 71 66 65 64 bytes

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

Explanation:

f(i){                                                           function that takes integer
     U                                                          sleep
      dprintf(2,                                                print unbuffered
                "\r[%-10.10s]",                                 string with exactly 10 characters, wrapped with spaces
                               "....    ...."                   a string that, when printed with exactly 10 characters, will always have output that is in the loading screen
                                             +i%10              scroll through the string
                                                  )<<13);       sleep 10<<13 microseconds
                                                         f(i+9  recursion :D

MD XF

Posted 2017-05-12T11:10:38.187

Reputation: 11 605

1

Japt, 31 22 bytes

Saved 9 bytes thanks to @obakaron

Li@O¬OpT=T?Té :'.²²+6î

Try it online!

Luke

Posted 2017-05-12T11:10:38.187

Reputation: 4 675

p4 can be shortened to ²², Sp6 can be replaced by , and Oq can be replaced by – Oliver – 2017-05-17T13:23:52.617

1

TI-Basic (TI-84 Plus CE), 58 bytes

"....      (6 spaces)
Ans+Ans
While 1
For(X,11,2,-1
ClrHome
Disp "["+sub(Ans,X,10)+"]
Wait .1
End
End

enter image description here

pizzapants184

Posted 2017-05-12T11:10:38.187

Reputation: 3 174

1I wanted to submit a 68k version but realized that 1) None of my TI-92 Plus have a new enough AMS to use the clock, and 2) even if they did, the granularity is in seconds – Fox – 2017-05-18T01:24:21.310

1

APL (Dyalog), 44 bytes

{∇r⊣⎕DL.1⊣⎕←⎕TC[20⍴2],1⌽'][',r←¯1⌽⍵}10↑4⍴'.'

Try it online with a slightly modified version: ⎕← replaced by ∆_ which outputs with timestamps.

4⍴'.' four periods

10↑ take the first ten characters of that (pads with spaces)

{} apply the following function

¯1⌽ rotate one character from the tail to the head

r← assign that to r

'][', prepend the brackets

1⌽ rotate one character from the head to the tail

⎕TC[] index the list of Terminal Control characters with

  20⍴2 twenty repetitions of the number two (the second element is the newline)

⎕← output that

.1⊣ discard that in favour of the number 0.1

⎕DLDelay that many seconds (returns elapsed time)

r⊣ discard that in favour of r (which is then returned by the function)

 recurse (tail calls do not work up a stack, and can thus be repeated forever)

Adám

Posted 2017-05-12T11:10:38.187

Reputation: 37 779

1

Haskell, 132 bytes

import Control.Concurrent
main=mapM_(\x->putStrLn("\27[H\27[J["++x++"]")>>threadDelay(10^5))$iterate(\x->last x:init x)"....      "

First, we define a function r to rotate a string to the right. We begin with ".... " and construct an infinite list of its right-rotations, then for each x of these, print:

  • An ANSI escape sequence to clear the screen,
  • A left-bracket,
  • x itself,
  • A right-bracket,
  • And a newline character so the terminal will flush.

Then threadDelay waits 100000 microseconds before continuing onto the next element.

Since we are applying these operations to an infinite list, it will continue forever.

Fox

Posted 2017-05-12T11:10:38.187

Reputation: 341

f x=last x:init x should be shorter than using reverse. – Laikoni – 2017-05-17T19:07:38.010

@Laikoni Wow, thanks for that! Saved a whole dozen bytes – Fox – 2017-05-17T19:13:40.503

Save another byte by moving the $ to the position of the .. Also is the newline needed if the screen is cleared anyway? If not then putStrLn can be shortened to putStr. – Laikoni – 2017-05-17T19:27:22.117

@Laikoni Right, don't know why I didn't see that. In my case, the Ln is needed, else the terminal never displays anything. I think that's terminal-dependent though — else I would just use a carriage return instead of the ANSI escape – Fox – 2017-05-17T19:28:58.333

1

VBA (Excel), 109 bytes

Using Immediate Window and Cell A1 as output

a="...      .":Do:b=Right(a,1):a=b &Left(a,9):[A1]="["& a &"]":c=Timer+.1:Do While Timer<c:DoEvents:Loop:Loop

remoel

Posted 2017-05-12T11:10:38.187

Reputation: 511

Do While:...:Loop -> While:...:Wend for -3 bytes – Taylor Scott – 2019-03-07T14:18:53.647

0

CJam, 39 bytes

'.4*S6*+{_a`'"-oDcoes{es1$m100<}g;1m>}h

Can't make a GIF right now...

How it works

'.4*S6*+       e# Push a string containing 4 dots and 6 spaces
{              e# Do:
 _             e#  Copy the string
 a`            e#  Wrap it in an array and take its string representation: ["....      "]
 '"-           e#  Remove quote characters from it: [....      ]
 o             e#  Print it
 Dco           e#  Print a carriage return (ASCII 13), moving the cursor back to the start
 es            e#  Push the current time in milliseconds
 {es1$m100<}g  e#  Loop until the current time is at least 100 more than that time
 ;             e#  Delete the old time
 1m>           e#  Rotate the string 1 space to the right
}h             e# Repeat while the TOS is truthy. The string being printed is non-empty, so
               e#   it is always truthy, and will repeat forever.

Business Cat

Posted 2017-05-12T11:10:38.187

Reputation: 8 927

0

Pyth, 28 bytes

J+*4\.*6d#.d.1p"\r"pj=.>J1`Y

isaacg

Posted 2017-05-12T11:10:38.187

Reputation: 39 268

0

Perl 6, 61 bytes

$_='....      ';loop {"^M[$_]".print;s/(.*)(.)/$1$0/;sleep .1}

(That ^M is a single carriage return character.)

I really tried to base the output on a lazy infinite list, but couldn't nearly approach the terseness of this solution.

Sean

Posted 2017-05-12T11:10:38.187

Reputation: 4 136

0

C, 74 73 bytes

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

Modified and improved version of https://codegolf.stackexchange.com/a/120321.

Displays correct output on MinGW.

2501

Posted 2017-05-12T11:10:38.187

Reputation: 748

0

C, 98 93 Bytes

main(){char b[]="x...      .";for(;;)*b=b[10],usleep(12<<printf("\r[%s]",memcpy(b+1,b,10)));}

View Video

Johan du Toit

Posted 2017-05-12T11:10:38.187

Reputation: 1 524

@MDXF, Besides screwing up the pointer arithmetics, gcc does not allow the following on the global scope: b[]="x... ."; – Johan du Toit – 2017-05-15T17:46:07.430

0

Octave, 71 bytes

s="...       ."';do;printf('[%s]\r',s=circshift(s,1));pause(.1);until 0

For once my Octave answer is not MATLAB compatible. Specifically this solution uses

  • Both " and ' for quotes, to transpose a string
    • MATLAB: ('asd')'
    • Octave: "asd"'
  • Octave specific do ... until 0 structure, one char shorter than while 1 ... end
  • Octave's printf,one char shorter than the fprintf in MATLAB

Loading image...

algmyr

Posted 2017-05-12T11:10:38.187

Reputation: 858

0

C, 91 bytes

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

If it doesn't have to begin at the left: (89 bytes)

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

takra

Posted 2017-05-12T11:10:38.187

Reputation: 793

2Something not quite right with this, sometimes it displays [a.... ] – cleblanc – 2017-05-15T13:51:46.810

-7 bytes: eliminate char*s= and use the raw string in dprintf, e.g. ".... .... "+i%10-1. – MD XF – 2017-05-15T17:11:17.003

0

R, 100 bytes

z="....      "
repeat{flush.console()
cat("\r[",z,"]",sep="")
z=sub("(.)(.+)(.)","\\3\\1\\2",z)
Sys.sleep(.1)}

Sven Hohenstein

Posted 2017-05-12T11:10:38.187

Reputation: 2 464

0

F# (Mono), 122 114 118 110 bytes

let rec t s=printf"[%s]\r"s;System.Threading.Thread.Sleep(100);t((string s.[8])+s.Substring(0,8))
t"      ..."

Try it online!

Brunner

Posted 2017-05-12T11:10:38.187

Reputation: 331

0

JS (ES6), 179 bytes

x=`[....      ]
[ ....     ]
[  ....    ]
[   ....   ]
[    ....  ]
[     .... ]
[      ....]
[.      ...]
[..      ..]
[...      .]`.split`
`;c=0;setTimeout(y=>alert(x[++c]),100)

NAND

Posted 2017-05-12T11:10:38.187

Reputation: 1

0

Powershell, 64 bytes

for(){cls;"[$('...      .'*2|% s*g(9-$i++%10)10)]";sleep -m 100}

Where $string|% s*g $From $Length is a shortcut to summon $string.SubString($From,$Length)

This solution has one small disadvantage:

  • there will be an overflow exception after the Windows style Loading bar has worked for 988 million years.

Powershell, 65 bytes

for(){9..0|%{cls;"[$('...      .'*2|% s*g $_ 10)]";sleep -m 100}}

This Windows style Loading bar is an Immortal Eldar from Valinor.

mazzy

Posted 2017-05-12T11:10:38.187

Reputation: 4 832