กำลังโหลดตลอดไป…สไตล์ Windows


36

สร้างแถบการโหลดสไตล์ Windows โดยทำตามคำแนะนำต่อไปนี้

(โปรดสังเกตว่าสิ่งนี้แตกต่างจากกำลังโหลด ... ตลอดไป )

[.... ]การส่งออกของคุณควรเริ่มต้นด้วยการ

ทุกเห็บคุณควรรอ 100 ms จากนั้นย้ายแต่ละจุดด้วยอักขระเดียว หากจุดอยู่ที่ตัวละครที่สิบย้ายมันไปที่จุดแรก ขอให้สังเกตว่าคุณควรล้างหน้าจอก่อนที่จะส่งออกอีกครั้ง เอาต์พุตถูกเรียงลำดับดังนี้:

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

.. จากนั้นมันจะวนซ้ำตลอดไป

กฎระเบียบ

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดชนะฉันสงสัยว่าฉันจะยอมรับคำตอบที่ชนะ
  • โปรดระบุไฟล์ gif ของแถบโหลดที่ใช้งานถ้าเป็นไปได้

1
เราสามารถส่งออกพูดยี่สิบบรรทัดใหม่ก่อนที่แต่ละเอาต์พุตเพื่อ 'ล้าง' หน้าจอได้หรือไม่
Okx

2
@Okx ใช่ถ้าภาษาของคุณไม่มีวิธีล้างหน้าจอ
Matthew Roh

ความล่าช้าสามารถเกิดข้อผิดพลาดได้เท่าใด (เช่น + - 0.5 วินาที) ฉันขอแนะนำข้อผิดพลาด 250 มิลลิวินาที ....
stevefestl

1
ฉันขอแนะนำไม่รวมเวลาล่าช้าที่กำหนดไว้สำหรับความท้าทายในอนาคตได้หรือไม่ ฉันพบว่ามันปรากฏอยู่บนความท้าทายล่าสุดมากมายและทุกครั้งที่ฉันเขียนแผ่นสำเร็จรูปที่ไม่สามารถปรับแต่งได้เหมือนกันเพื่อให้ระบบรอไม่ถึงมิลลิวินาที
xnor

2
\rอนุญาตให้ใช้งานแทนการล้างหน้าจออย่างแท้จริงหรือไม่
phyrfox

คำตอบ:


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


วิธีการทดสอบในกลุ่ม?
Pavel

@Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@qควรจะทำงาน ( <esc>จะเห็นได้ชัดที่สำคัญหลบหนีและ<CR>เป็นเลื่อนบรรทัดหนึ่ง) (มี 6 ช่องว่างหลัง 4 จุด)
Kritixi Lithos

3
ดีใจที่ได้เห็นฟังก์ชั่นการใช้งานมีประโยชน์ คำตอบที่ดี BTW :)
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>          ]

แก้ไข: บันทึกแล้ว12 14 ไบต์ขอบคุณ @Luke


คุณไม่สามารถบันทึก 6 ไบต์ด้วยการเปลี่ยนชื่อภาพเคลื่อนไหวเป็นอย่างอื่นได้bหรือไม่
ลุ

@ ลุคฉันไม่อยากจะเชื่อเลยว่าฉันลืมที่จะทำเช่นนั้น ...
นีล

คุณสามารถบันทึกได้อีก 2 ไบต์โดยปล่อยchที่ท้าย 0ไม่ต้องการหน่วย
ลุ

2
วิธีการเกี่ยวกับการเปลี่ยน<x>เป็น<span>(และใน CSS เช่นกัน: xกลายเป็นspanและx>xกลายเป็นspan>*) ที่ช่วยประหยัดdisplay:inline-block;แต่ค่าใช้จ่ายเพียง 15 ไบต์ ดังนั้นทั้งหมด 6B จะถูกบันทึกไว้
ลุ

1
@Luke ฉันไม่สนใจเกี่ยวกับการแสดง position:absolute;แต่ฉันไม่ต้องการที่จะหลีกเลี่ยงการทำซ้ำ
Neil

12

PowerShell, 67 66 ไบต์

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

-1 โดยใช้ Constructor ที่สั้นลงต้องขอบคุณ Beatcracker

แทนที่สตริงด้วยสำเนาของสตริงโดยที่อักขระตัวสุดท้ายถูกวางไว้ด้านหน้าตัวอักษรที่เหลือลบหน้าจอพิมพ์ออกมาแล้วพักเป็นเวลา 100 มิลลิวินาที

บันทึกไบต์จำนวนมากโดยใช้ for constructor loop แทนที่จะล้อมตรรกะภายในสตริง

ป้อนคำอธิบายรูปภาพที่นี่


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 ไบต์ขอบคุณโดยสิ้นเชิงมนุษย์

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ตั้งค่าสถานะบรรทัดคำสั่ง คำถามที่เกี่ยวข้อง SO
OVS

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 ไบต์
Neil

ฉันจะลองทำสิ่งนี้ขอบคุณสำหรับคำแนะนำของคุณ :)!
stevefestl

หมดเวลา / t 0> nul แทน ping 1.1 -n 1 -w 100> nul จะอยู่ในช่วงเวลาที่ต้องการ 100ms +/- 250ms (ควรอยู่ที่ประมาณ 25 - 100ms ตามปกติ) ดังนั้นสามารถบันทึกได้สองสามไบต์ที่นั่น ( ss64.com/ nt / timeout.html )
Liam Daly

1
การลบ@echo offและแทนที่สิ่งที่ต้องทำด้วย do @(echo %%~p&timeout/t 0 >nul&cls)จะทำงานได้และควรบันทึกอักขระ 11 ตัว (200 ไบต์บนคอมพิวเตอร์ของฉัน)
Liam Daly

8

Mathematica, 67 77 ไบต์

+10 Bytes ขณะที่ฉันลืมเครื่องหมายวงเล็บเหลี่ยม

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

1
จริง ๆ แล้ว Mathematica มีแบบในตัวAnimate? : |
Mr. Xcoder

ใช่มันจะเคลื่อนไหวทุกอย่างเกี่ยวกับตัวแปรที่กำหนด :)
Ian Miller

ดูเหมือนจะไม่รวมวงเล็บสี่เหลี่ยมที่คำตอบอื่น ๆ ส่วนใหญ่ทำ
Mark S.

โอ้หนูดูไม่ใกล้พอ ได้รับการแก้ไข
Ian Miller

8

C (gcc) , 126 125 124 123 122 121 119 118 117 114 115 ไบต์

อันนี้ใช้ bitmask เพื่อติดตามจุดที่อยู่

ฉันต้องเพิ่มอีกหนึ่งไบต์เพราะฉันเพิ่งส่งออก 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
  • ที่บันทึกไว้ 2 ไบต์ต้องขอบคุณโจฮานข้อเสนอแนะของที่ผมใช้แทนinputpre

ลองมัน

ต้องปิด>ในinputแท็กเพื่อให้สามารถทำงานในส่วนย่อย

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


1
ไม่ควรจะมี 10 ตัวอักษรระหว่าง[]s?
Neil

คุณพูดถูก @Neil; มีช่องว่าง 6 ช่อง - ถ้าฉันจะนับสิ่งต่าง ๆ ด้วยตาอย่างน้อยที่สุดที่ฉันสามารถทำได้คือใส่แว่นตาของฉัน!
Shaggy

1
คุณไม่สามารถใช้<input>แทน<pre>แล้วก็valueแทนได้innerTextไหม
Johan Karlsson

โทรดี @JohanKarlsson; ที่ช่วยประหยัด 2 ไบต์
ขนปุย

เฮ้! นี่เป็นจำนวนไบต์เดียวกัน: s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=oบางทีบางคนสามารถปรับปรุงได้ (แทนที่เครื่องหมายคำพูดด้วย `)
Thomas W

5

Noodel , 16 15 14 13 ไบต์

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

] ʠ [d. ××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

ลองมัน:)

ไม่รู้ว่าทำไมมันใช้เวลาซักพักนึง Anyways นี้วางไว้ที่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
Kevin Cruijssen

1
@KevinCruijssen, ETHProductionsมีรายการดีที่มีภาษารหัสกอล์ฟ :)
tkellehe

6
เมื่อฉันคิดว่าฉัน outgolfed คุณฉันสังเกตเห็นว่าคุณมี
golfed

@KritixiLithos ผมกลัวคุณจะชนะฉันดังนั้นฉันใช้เวลาตลอดไปพยายามที่จะได้รับ14 ไบต์ แต่ตอนนี้คุณอยู่ใกล้อีกครั้ง !! แดง !!
tkellehe

1
@ nitro2k01 Noodel ใช้โค้ดเพจของตัวเองที่มีอักขระ 256 ตัวซึ่งทั้งหมดจะถูกบันทึกเป็นไบต์เดียวในการเข้ารหัสของตนเอง ที่คล้ายกันเป็นภาษากอล์ฟบางอื่น ๆ ทำเหมือนเจลลี่หรือ05AB1E หากคุณจะบันทึกอักขระเหล่านี้เป็นการเข้ารหัส UTF-8 ที่เป็นค่าเริ่มต้นอักขระเหล่านั้นจะเป็น 2 หรือ 3 ไบต์แทน แต่ในการเข้ารหัสของพวกเขาเองจะมี 1 ไบต์ต่ออักขระ
Kevin Cruijssen


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();}};
เควิน Cruijssen

การแก้ไขสตริงจะตัดอีกต่อไปไหม บางสิ่งบางอย่างที่เหมือนกัน$"[{o}]\n"
Marie

1
หากคุณแทนที่System.Console.Write(o)ด้วยSystem.Console.Write(o+"\r")คุณสามารถลบSystem.Console.Clear();
grabthefish


4

MATL , 24 ไบต์

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

ลองที่MATL Online! หรือดู 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)

ลิงก์ของคุณขัดข้องหมายความว่าฉันไม่สามารถฆ่าได้
Leun Nun

1
@LeakyNun คุณหมายความว่าอะไรมันขัดข้อง มันใช้งานได้สำหรับฉันและฉันสามารถฆ่ามันได้ บางครั้งมีปัญหาการหมดเวลา หากยังไม่เริ่มต้นให้ลองรีเฟรชหน้า
Luis 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 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( sleeps สำหรับค่าส่งคืนถัดไปเป็นไมโครวินาที
  • dprintf(2,พิมพ์ไปยังแฟ้มบ่ง 2 stderrหรือ สิ่งนี้จำเป็นเนื่องจากในขณะที่stdoutline-buffered (หมายถึงเอาต์พุตจะไม่แสดงจนกว่าจะพิมพ์บรรทัดใหม่), stderrจะถูกกำหนดเป็นอักขระบัฟเฟอร์ (เอาต์พุตทั้งหมดจะถูกแสดงทันที)
  • "\r พิมพ์ carriage return (ล้างข้อมูลบรรทัดปัจจุบัน)
  • [%-10.10s]"เป็นตัวprintfระบุรูปแบบสำหรับสตริงที่มีความยาวที่แน่นอน 10 (ไม่ว่าสตริงใดที่ให้ผลลัพธ์จะเป็นสตริงที่มีความยาว 10 เสมอ) พร้อมด้วยช่องว่างทางด้านขวาหากจำเป็น สิ่งนี้จะถูกใส่ไว้ในวงเล็บ
  • ".... ...." เป็นแถบโหลด
  • +i%10ชดเชยแถบโหลดโดยดัชนีโมดูโลปัจจุบัน 10. ตัวอย่างเช่นถ้าi == 3, i % 10เท่ากับ 3. ชดเชยแถบโหลดโดย 3 ". ...."ทำให้มันเท่ากับ
  • เมื่อสตริง offset-ed ถูกส่งผ่านไปยังตัวprintfระบุรูปแบบจะ จำกัด ความยาว 10 ถ้าจำเป็นและเพิ่มช่องว่างให้สิ้นสุดหากจำเป็น ดังนั้นแถบโหลดจะอยู่ระหว่าง[.... ]และ[. ...]เสมอ

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}ควรทำงาน.
Christoph

1
สุดยอดการเล่นกอล์ฟ! ประหยัดอีก 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 เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


คุณสามารถล้างข้อมูลบรรทัดได้ด้วยการแทนที่printlnด้วยprintและส่งคืนการขึ้นบรรทัดใหม่ อาจไม่ทำงานในเทอร์มินัล IDE ของคุณ แต่มันจะทำงานได้ในสติอื่น ๆ
Pavel

@Phoenix โดย carriage return คุณหมายถึง\r\nอะไร วิธีSystem.out.print(someString+"\r\n);ล้างคอนโซล .. มันเหมือนกับการใช้System.out.println(someString);.. มันไปที่บรรทัดถัดไป แต่ไม่ได้ลบบรรทัดก่อนหน้าใด ๆ ที่พิมพ์ออกมา .. : S
Kevin Cruijssen

4
ไม่มีผมหมายถึงโดยไม่ต้อง\r \nซึ่งจะรีเซ็ต "เคอร์เซอร์" ไปที่จุดเริ่มต้นของบรรทัดเพื่อพิมพ์สิ่งใดก็ตามที่จะเขียนทับบรรทัดนั้น
Pavel

@ ฟีนิกซ์แน่นอน ขอบคุณ แก้ไขคำตอบของฉันและเพิ่ม gif เพื่อแสดงผลลัพธ์ คอมไพเลอร์ออนไลน์ที่แย่เกินไปหรือ Eclipse IDE ไม่สนับสนุนสิ่งนี้ .. >.>
Kevin Cruijssen

3

Python 2 , 81 78 ไบต์

-1 ไบต์ (สังเกตว่าฉันพลาดการใช้งาน%sเมื่อ Rod ส่งรุ่น 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 \rเขียนทับเส้นและ,ทำให้มันพิมพ์ tuple แทนที่จะเป็นสตริง - ฉันเห็นมันกลับไปที่อื่นและเคยใช้มาก่อนด้วย
Jonathan Allan

1
ใช่นี่คือสิ่งที่ฉันทำ แต่ผลลัพธ์ไม่ได้ถูกพิมพ์แบบเรียลไทม์ (ต้องใช้sys.stdout.flush())
Rod

1
พบผู้ร้าย: เทอร์มินัล Ubuntu ของฉัน: c
Rod

3

ไป , 150 145 132 129 124 ไบต์

-5 ไบต์ขอบคุณที่ซูดี

ฉันรู้สึกเหมือนฉันไม่เห็นพอไปที่นี่ ... แต่คำตอบของฉันคือเติม C ดังนั้น ... กรุณา halp golf?

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

ลองออนไลน์!


1
ไม่คุ้นเคยกับ Go แต่ฉันคิดว่าคุณสามารถแปลง100000000เป็น10^85 ไบต์ได้
Grant Miller

@ goatmeal ฉันพยายาม แต่ก็เห็นได้ชัดว่าเป็นการปฏิเสธในระดับบิต ฉันยังลอง10**8ซึ่งทำให้เกิดข้อผิดพลาด
สิ้นเชิงมนุษย์

3
1e8คุณสามารถใช้ทางวิทยาศาสตร์:
sudee

1
@sudee Aha นั่นจะเป็นวิธีการใช้จำนวนมาก ขอบคุณ!
ทั้งหมด

2
@ MDDF ฉันควรจะใช้ถ้อยคำที่แตกต่างกันฉันหมายถึงคำตอบของฉันคือการออกสนามกอล์ฟโดย C.
สิ้นเชิงมนุษย์

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 แบบไม่ระบุชื่อทันทีที่ไม่รับอินพุตและเอาต์พุตไปยังช่วงA1บน ActiveSheet

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ตามที่ระบุไว้ข้างต้น นี่เป็นหน้าที่ equivalant call a()ไปอย่างละเอียดมากขึ้น
Taylor Scott

โอ้ฉันไม่ดี เพียงมองหาการส่งที่ไม่ดี ดังนั้นไม่ใช่ของคุณดังนั้น +1
MD XF


2

แบตช์99 98 ไบต์

บันทึก 1 ไบต์ขอบคุณ SteveFest!

(ฉันสามารถลบออก\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

1
@SteveFest Huh, TIL ขอบคุณ!
Conor O'Brien

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หรือไม่?
2560

@Riker เขากำหนดsจุดเริ่มต้นของโปรแกรมเป็น 4 .s และช่องว่างไม่กี่
Conor O'Brien

s[0..8]s.chop
จัดการ

2

Perl, 69 ไบต์

-3 ไบต์ขอบคุณที่@Dom เฮสติ้งส์

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

นั่นselect undef,undef,undef,.1เป็นวิธีที่สั้นที่สุดในการนอนหลับน้อยกว่า 1 วินาทีใน Perl และต้องใช้ไบต์จำนวนมาก ...


อีกเล็กน้อย (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/e3ff41c8bc835c81b88bc835b81cbf55a9827d69992ฉันรู้สึกเหมือนพยายามที่จะใช้!printแต่คุณต้องการ parens ความยาวเดียวกัน: /
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
จัดการ

ดีกว่ามาก! ฉันไม่ได้ขโมยจากคุณผมรู้ว่าผมจะทำงานออกมาอย่างใดอย่างหนึ่งนี้ ...
marcosm

การแก้ไขการซ้อนทับ printf ไม่สามารถช่วยในการทำให้สั้นลงได้ การตัดสตริงเป็น @DigitalTrauma ดูดีขึ้น
marcosm

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

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>
Digital Trauma

จุดดี แต่ที่จริงแล้วคุณไม่ต้อง#include <stdio.h>ล้างข้อมูล STDOUT fflush(0)ล้างข้อมูลบัฟเฟอร์ทั้งหมด
MD XF

1
บันทึกสามไบต์ด้วยการเปลี่ยนชื่อmainเป็นfนับ
MD XF
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.