永远载入中……Windows风格


36

按照以下说明制作Windows样式的加载栏。

(请注意,这与Loading ... Forever不同)

您的输出应以开头[.... ]

每次滴答,您都应等待100毫秒,然后将每个点向右移动一个字符。如果点在第十个字符上,则将其移至第一个字符。请注意,在再次输出之前,您应该清除屏幕。输出顺序如下:

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

..然后它永远循环。

规则

  • 这是,所以最短答案会胜出,我怀疑我什至会接受一个成功答案
  • 请尽可能提供加载栏的gif文件。

1
我们可以在每次输出之前输出20条换行符来“清除”屏幕吗?
Okx

2
@Okx是的,如果您的语言没有其他清除屏幕的方法。
马修·罗

延迟有多少错误?(例如+-0.5秒),我建议250毫秒错误
。...– stevefestl

1
我是否可以建议不要将固定的延迟时间包括在未来的挑战中?我发现它出现在最近的许多挑战中,并且每次我编写相同的无法模拟的样板来使系统等待n毫秒。
xnor

2
是使用\r允许的方法,而不是实际上清除屏幕的方法?
phyrfox

Answers:


19

V,17 16 15字节

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

<esc>0x1b

和hexdump:

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

说明

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


如何在Vim中测试?
帕维尔

@ Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@q应该工作(<esc>显然是转义键,并且<CR>是换行符)(4个点之后有6个空格)
Kritixi Lithos

3
很高兴看到该功能有用。好的回答顺便说一句:)
DJMcMayhem

19

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

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

编辑:由于@Luke,节省了12个 14字节。


您不能通过将动画重命名为来节省6个字节b吗?
路加福音

@卢克,我简直不敢相信我忘记这样做了
尼尔(Neil)

您可以通过ch在末尾删除来再保存2个字节;0不需要单位。
路加福音

2
如何更改<x><span>(以及在CSS中:x成为spanx>x成为span>*)?这样可以节省display:inline-block;,但仅花费15个字节。因此总共节省了6B。
路加福音

1
@Luke我不在乎显示,但我确实想避免重复显示position:absolute;
尼尔

12

PowerShell,67 66字节

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

-1通过使用缩短的构造函数得益于Beatcracker

用最后一个字符放在其余字符前面的字符串副本替换该字符串,清除屏幕,打印出来,然后休眠100毫秒。

通过使用for循环构造函数节省了很多字节,而不是将逻辑包装在字符串中。

在此处输入图片说明


1
+1 for循环技巧,让我重新阅读about_Join
Beatcracker

1
附注:您可以使用来再打一个字节$s='.'*4+' '*6
Beatcracker

@beatcracker对此表示感谢-更新了:)
colsw

该脚本不能以开头[.... ]。您可以免费解决它: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标志)字节

-12字节归功于ovs
-2字节归功于totalhuman

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

在线尝试!


你为什么有flush=True?它对我没有影响
L3viathan

3
@ L3viathan因为我的(ubuntu)终端没有刷新。这种冲洗行为取决于操作系统= /
Rod

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

2
您可以使用-u命令行标志完全删除flush 。相关的SO问题
ovs '17

1
您也可以使用保存一些字节s[9]+s[:9]
完全人类

10

Windows批处理,201个 181字节

原来使用老式方法实际上可以节省字节!

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

注意:

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!

请注意,我的GIF记录器跳过了几帧,使加载栏跳了 :(


1
如果您只使用点和空格保留变量并对其执行字符串操作,则无需计算点的数量,就可以将其减少到100个字节。
尼尔

我会尽力而为,谢谢您的提示:)!
stevefestl

timeout / t 0> nul而不是ping 1.1 -n 1 -w 100> nul将在100ms +/- 250ms的时序要求内(通常应在25-100ms左右),因此可以在那里保存一些字节(ss64.com/ nt / timeout.html
利亚姆·戴利

1
同样,删除@echo off和替换do do @(echo %%~p&timeout/t 0 >nul&cls)也将起作用,并且应该保存11个字符(我的计算机上为200个字节)
Liam Daly

8

Mathematica,67 77字节

+10字节,因为我忘了方括号。

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

1
真的,Mathematica具有内置功能Animate吗?:|
Xcoder先生17年

是的,它将对给定变量上的几乎所有内容进行动画处理。:)
伊恩·米勒

这似乎不包括大多数其他答案所包含的方括号。
Mark S.

哦,老鼠,看起来不够近。好的,确定。
伊恩·米勒

8

C(GCC) 126 125 124 123 122 121个 119 118 117 114 115字节

这个使用位掩码来跟踪点的位置。

我不得不添加另一个字节,因为我之前仅输出5个空格。

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

在线尝试!

在此处输入图片说明


48
为什么您的命令提示符字体是Comic Sans MS?!?!?!
MD XF


6

JavaScript(ES6)+ HTML,104 85 83字节

f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`)
<input id=o
  • 由于Johan建议我使用an input而不是a ,因此节省了2个字节pre

试试吧

>input代码段中起作用,需要在标签上加上一个结束符。

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


1
[]s 之间不应该有10个字符吗?
尼尔

你说得对,@ Neil;有6个空格-如果我要用肉眼计数,那么我至少可以戴眼镜!
毛茸茸的

1
您不能使用<input>而不是<pre>然后使用value代替innerText吗?
约翰·卡尔森

好的,@ JohanKarlsson; 节省2个字节。
毛茸茸的

嘿! 这是相同的字节数:s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=o,也许有人可以改进它(用`代替引号)
Thomas W

5

Noodel16 15 14 13 字节

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

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

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

试试吧:)


怎么运行的

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

更新资料

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

试试吧:)

不知道为什么这花了我一些时间。无论如何,这将其放置在13个字节处

[Ð]ıʠ⁶¤⁴.ḷėḍ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
以前从未听说过Noodel,但这似乎是完成正确工作的正确工具!+1
凯文·克鲁伊森

1
@ KevinCruijssen,ETHProductions有一份不错的清单,列出了打高尔夫的语言 :)
tkellehe

6
就在我以为我超越了您时,我注意到您已经两次解决您的问题了
Kritixi Lithos

@KritixiLithos,我很害怕您要击败我,所以我花了很长时间尝试获取14个字节。但是,现在你又关闭了!!!!
tkellehe

1
@ nitro2k01 Noodel使用自己的256个字符的代码页,这些代码页均以自己的编码形式保存为一个字节。与其他高尔夫语言类似,例如Jelly05AB1E。如果将这些字符另存为默认的UTF-8编码,则实际上它们将是2或3个字节,但是以它们自己的编码,它们每个都是1字节。
凯文·克鲁伊森

4

PHP,67字节

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

没有意见


4

C#,162个 157字节

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

或整个程序为177个字节

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高尔夫项目:for(string o="[.... ]";;)可以打高尔夫球var o="[.... ]";for(;;)。或者,您可以将我的Java 7答案移植到更多内容中:()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};
Kevin Cruijssen

字符串插值是否会修剪掉?像$"[{o}]\n"
Marie

1
如果您替换System.Console.Write(o)System.Console.Write(o+"\r"),则可以将System.Console.Clear();
thegrathefish '17

4

纯bash 68

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

4

MATL,24字节

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

MATL在线上尝试一下或从离线编译器中查看gif:

在此处输入图片说明

说明

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

您的链接崩溃了,这意味着我无法杀死它。
Leaky Nun

1
@LeakyNun你到底是什么意思崩溃了?它对我有用,我可以杀死它。有时存在超时问题。如果不启动,请尝试刷新页面
路易斯Mendo

4

果冻28 27 字节

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

运行示例

怎么样?

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

由于数字创伤,节省了7个 8字节。

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

或者,如果stdout在每次写入后都无需刷新而无需换行,则无需刷新系统:

C(gcc),70个字节

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

怎么运行的

  • usleep( 睡眠下一个返回值(以微秒为单位)。
  • dprintf(2,打印到文件描述符2或stderr。这是必要的,因为while stdout是行缓冲的(意味着输出直到打印换行符才显示),stderr而是字符缓冲的(所有输出立即显示)。
  • "\r 打印回车(清除当前行)。
  • [%-10.10s]"printf精确长度为10的字符串的格式说明符(无论输出是什么字符串,始终是长度为10的字符串),并在必要时在其右边填充空格。这将包含在括号中。
  • ".... ...." 是加载栏。
  • +i%10偏移由当前索引模10分的加载条例如,如果i == 3i % 10等于3抵消由3成使得它等于所述加载条". ...."
  • 当将偏移量的字符串传递给printf格式说明符时,如果需要,它的长度限制为10,并在必要时在末尾添加空格。因此,加载栏将始终在[.... ]和之间[. ...]

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}应该管用。
克里斯多夫(Christoph)

1
很棒的高尔夫!使用f(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Digital Trauma

@DigitalTrauma 代码中的空格未正确呈现。但是,我明白了您的意思,并感谢您的帮助!
MD XF

3

Java 7,139 124字节

String s="....      ";void c()throws Exception{System.out.print("["+s+"]\r");s=(s+s).substring(9,19);Thread.sleep(100);c();}
  • 提到\r感谢@Phoenix

回车\r将“光标”重置为该行的开头,然后可以将其覆盖。不幸的是,在线编译器和Eclipse IDE都不支持此功能,因此我在此答案的末尾添加了一个gif,以从Windows命令提示符处进行显示。

在这里尝试。(稍作修改,因此您不必等待超时即可查看结果。而且,TIO不支持回车,因此在打印每行时不会覆盖前一行。)

说明:

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

输出gif:

在此处输入图片说明


您可以通过替换清除线printlnprint和输出一个回车。可能无法在您的IDE终端中运行,但可以在其他任何理智的终端中运行。
帕维尔

@凤凰回车是\r\n什么意思?如何System.out.print(someString+"\r\n);清除控制台..与使用System.out.println(someString);.. 相同,只是转到下一行,但不会删除打印的任何前一行。。:S
Kevin Cruijssen

4
不,我的意思是\r,没有\n。这会将“光标”重置为该行的开头,因此打印任何内容都将覆盖该行。
帕维尔

@凤凰啊,当然。谢谢。修改了我的答案并添加了gif以显示结果。糟糕的在线编译器或Eclipse IDE都不支持此功能。
>>>

3

Python 2中81 78个字节

-1个字节(注意到我错过了%sRod 在同一时间提交几乎相同的Python 3版本用法!)-
2个字节(使用完全人类的想法 -替换s[-1]+s[:-1]s[9]+s[:9]

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

运行示例


它如何刷新输出?这就是为什么我在答案上使用python3的原因(在python2上刷新需要更多字节)
Rod

@Rod \r覆盖了该行,并,使其打印出一个元组而不是一个字符串-我在某处看到它已经有一段时间了,之前也曾经使用过它。
乔纳森·艾伦

1
是的,这就是我正在做的事情,但是输出不是实时打印(必须使用sys.stdout.flush()
Rod

1
找到了罪魁祸首:我的Ubuntu终端:c
Rod

3

围棋150个 145 132 129 124字节

-5个字节,感谢sudee。

我觉得我没看到足够的东西去...但是我的答案是超过C,所以...请停顿高尔夫球吗?

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

在线尝试!


1
不熟悉走,但我会假设你可以转换10000000010^8保存5个字节。
Grant Miller

@goatmeal我尝试过,但是显然是按位取反。我也尝试过10**8,这也给一个错误。
完全人类

3
您可以使用科学计数法:1e8
sudee

1
@sudee Aha,那将是使用大量数字的方式。谢谢!
完全人类

2
@MDXF我应该已经是措辞不同,我的意思是我的回答正在出golfed由C.
totallyhuman

3

VBA 32位,159 157 143 141 134个字节

VBA没有允许等待少于一秒的时间的内置函数,因此我们必须从 kernel32.dll

32位声明语句(41个字节)

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

64位声明语句(49字节)

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

此外,我们必须包含一个DoEvents标志,以避免无限循环使Excel显得无响应。然后,最后一个函数是一个子例程,该子例程不输入任何内容并输出到VBE立即窗口。

立即窗口功能,93字节

匿名VBE立即窗口功能,无需输入即可输出到A1ActiveSheet上的范围

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

旧版本,109字节

立即窗口功能,无需输入即可输出到VBE立即窗口。

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

取消格式化

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字节,用于删除空白

-30个字节,用于正确计数

-14个字节,用于转换为即时窗口功能

输出量

下面的gif使用完整的子例程版本,因为我懒得用即时窗口功能重新记录下来。

VBA加载Gif


那是什么a在输出的顶部?
MD XF

@MDXF是a上面列出的运行子程序的调用;这在功能上与更详细的等价call a()
泰勒·斯科特

啊,我的坏。只是寻找不好的提交。因此,您的不是,所以+1
MD XF

2

05AB1E,23个字节

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

在线尝试!

说明

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

批处理,99 98字节

感谢SteveFest,节省了1个字节!

(我可以\r从代码中删除,但是本着批量打高尔夫球的精神,我不会。)

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

用LICEcap记录

第一行之后有四个空格。

主要逻辑是修改字符串。%s:~-1%是的最后一个字符%s%,并%s:~0,-1%为所有,但最后一个字符%s%。因此,我们将最后一个字符移到字符串的开头,这将旋转字符串。


......我一直在寻找这个...
stevefestl

1
高尔夫1个字节:0可以删除变量子字符串中的
stevefestl

你用 cmder。不错的工作。
MD XF'17年

1
@SteveFest呵呵,蒂尔。谢谢!
科纳·奥布莱恩

1
@MDXF这是我仍然保持理智的唯一原因:P
Conor O'Brien

2

Ruby,57个 56字节

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

在这里受其他答案的影响很大。

感谢@manatwork,节省了一个字节。同样显然我在计算字符时遇到了麻烦-我使用ST3,而且如果您不注意,显然它将在行中的字符计数中包含换行符。


它是如何工作的?这是否假定输入存储在s
Rɪᴋᴇʀ

@Riker他s在程序开始时定义为4 .s和几个空格
Conor O'Brien

s[0..8]s.chop
manatwork '17

2

Perl,69个字节

-3个字节,感谢@Dom Hastings

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

select undef,undef,undef,.1是Perl中少于1秒的最短睡眠方式,并且占用大量字节...


稍长(79个字节),有:

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

晚上,设法下来多一点69(或68文字ESC):gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992感觉好像试图使用!print,但因此结束了相同的长度,你需要的括号:/
Dom Hastings

@DomHastings很好,谢谢!您仍然知道如何打高尔夫球:D
Dada,

2

重击 93 90 96字节

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

在这里查看

无法嵌套{}以获取语法


我打算发布一个非常类似的解决方案,但现在毫无意义。但是可能会给您一些改进的启发:pastebin.com/Ld6rryNX
manatwork

好多了!我不是从你那里偷东西,我知道我必须解决这个问题……
marcosm

编辑后,printf填充不能缩短s。将字符串包装为@DigitalTrauma看起来更好。
marcosm '17

1

Groovy,72个字节

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

讲解

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
}

不知道在Groovy / Java中清除控制台的正确方法。如果有人做这件事的方式,请告诉我
STATICMETHOD

1
您可以使用\r将光标返回到行首。看来至少有几个答案正在这样做。从那里,您可以删除* 20,节省3个字节。
phyrfox

1

Haskell(Windows),159字节

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

说明

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的纯度使生成循环点图案有些复杂。我最终创建了一个嵌套列表推导,它按照应该输出的顺序生成了一个无限的字符串列表,然后又添加了适当的IO操作。


1

Ruby,61个字节

如果规范是让点向左滚动而不是向右滚动,则将节省1个字节,因为rotate!没有参数会将数组向左移动一次。

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

1

GNU sed(带有exec扩展名),64

分数包括+1 -r

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

为什么打印stderr使用dprintf而不是仅使用printf
MD XF

@MDXF因为默认情况下stderr是字符缓冲,而stdout行缓冲。因为我不希望打印的任何\n,然后printf()我不得不明确fflush(stdout)以及#include <stdio.h>
数字创伤

好点,但是实际上,您不必#include <stdio.h>刷新STDOUT。fflush(0)刷新所有缓冲区。
MD XF

1
通过重命名mainf,可以节省三个字节。
MD XF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.