กำลังโหลด ... ตลอดไป


106

ความท้าทายของคุณคือสร้างหน้าจอการโหลดแบบไม่ จำกัด ซึ่งมีลักษณะดังนี้:

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


หรือจะเจาะจงมากขึ้น:

  • ไม่มีการป้อนข้อมูล
  • เอาท์พุทที่Loading...มีพื้นที่ต่อท้าย แต่ไม่มีการขึ้นบรรทัดใหม่
  • วงจรอนันต์ผ่านตัวอักษร|, /, -และ\ทุก 0.25 วินาทีเขียนทับคนสุดท้ายที่มีต่อไปในลำดับ คุณสามารถเขียนทับอักขระตัวสุดท้ายหรือลบและเขียนทั้งบรรทัดใหม่ได้ตราบใดที่Loading...ยังคงไม่เปลี่ยนแปลง

กฎระเบียบ

  • ข้อความที่ส่งออกจะต้องมีลักษณะตรงตามที่ระบุไว้ ขึ้นบรรทัดใหม่ / ช่องว่างเป็นที่ยอมรับ
  • คุณไม่ควรรอ 0.25 วินาทีก่อนที่จะเริ่มแสดงผล - เฟรมแรกควรจะพิมพ์ทันทีที่โปรแกรมทำงาน
  • โปรแกรมของคุณควรจะสามารถทำงานได้อย่างไม่มีกำหนด ตัวอย่างเช่นหากคุณใช้ตัวนับสำหรับเฟรมตัวนับไม่ควรทำให้เกิดข้อผิดพลาดโดยเกินจำนวนสูงสุดในภาษาของคุณ
  • แม้ว่าระยะเวลารอระหว่าง "เฟรม" แต่ละครั้งควรอยู่ที่ 0.25 วินาที แต่แน่นอนว่าจะไม่แน่นอน - อนุญาตให้มีข้อผิดพลาด 10% หรือมากกว่านั้น
  • คุณสามารถส่งฟังก์ชั่น stdoutแต่มันจะต้องพิมพ์ไป
  • คุณสามารถส่งคำตอบในสภาพแวดล้อมที่ไม่ใช่คอนโซล (แต่ยังเป็นแบบข้อความ) ตราบใดที่สามารถสร้างภาพเคลื่อนไหวการโหลดได้
  • นี่คือดังนั้นการแก้ปัญหาที่สั้นที่สุด (เป็นไบต์) ชนะ มีช่องโหว่ของรหัสมาตรฐานสำหรับกอล์ฟ
  • หากเป็นไปได้โปรดระบุ gif ของหน้าจอการโหลดที่ใช้งานอยู่

ตัวอย่าง

นี่คือรหัส C ++ ที่ฉันใช้ในการสร้างตัวอย่าง (ungolfed):

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

using namespace std;

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

    cout << "Loading... ";

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

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

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

ขอให้นักกอล์ฟที่ดีที่สุดชนะ!


3
การส่งสามารถรอ 0.25 วินาทีก่อนที่จะเริ่มแสดงผลได้หรือไม่?
ETHproductions

2
ไม่ แต่ต้องขอบคุณสำหรับการกล่าวถึงว่าฉันจะเพิ่มกฎ @ETHproductions
FlipTack

บรรทัดใหม่ต่อท้าย (หลังจากสัญลักษณ์ภาพเคลื่อนไหว) เป็นที่ยอมรับหรือไม่?
ทองแดง

แน่นอน :) @Copper
FlipTack

1
@TheBitByte หมายความว่าในทางทฤษฎีแล้วไม่มีสิ่งใดในโปรแกรมของคุณที่จะทำให้เกิดข้อผิดพลาด - เช่นตัวนับล้นหรือถึงความลึกในการเรียกซ้ำสูงสุด
FlipTack

คำตอบ:


76

HTML / CSS, 183 180 163 161 160 147 143 ไบต์

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

แก้ไข: บันทึกแล้ว 3 ไบต์ด้วย @betseg บันทึกแล้ว 17 ไบต์ขอบคุณ @manatwork บันทึก 1 ไบต์ขอบคุณ @Daniel บันทึกแล้ว 13 ไบต์ขอบคุณ @Ismael Miguel บันทึกแล้ว 4 ไบต์ขอบคุณ @Fez Vrasta


4
ตาม meta แล้ว CSS + HTML นั้นใช้ได้สำหรับการตอบคำถาม นอกจากนี้ฉันอนุญาตสิ่งนี้ในคำอธิบายการท้าทาย ดังนั้นคำตอบนี้เป็นอย่างดี :) ที่ถูกต้อง
FlipTack

5
HTML + CSS คือ TC ดังนั้นฉันไม่เห็นว่าทำไมจึงไม่ใช่การแข่งขัน
TuxCrafting

1
@ TùxCräftîñg CSS ไม่ได้ทำให้เสร็จสมบูรณ์อย่างแน่นอนเนื่องจากคุณสามารถแก้ปัญหาการหยุดชะงักได้ (ถ้าไม่มีภาพเคลื่อนไหวที่ไม่มีที่สิ้นสุดก็หยุด) ฉันคิดว่าเหมือนกันใช้กับ HTML (ถ้าคุณไม่รวม JS)
Artyer

4
@Artyer stackoverflow.com/a/5239256/3273184เป็นสิ่งที่ควรพิจารณา
Mama Fun Roll

4
@MamaFunRoll ความคิดเห็นในโพสต์นั้นกล่าวว่าไม่ได้พิสูจน์ว่าเป็น TC เพราะมันไม่สามารถวนซ้ำได้หากไม่มีการแทรกแซงจากผู้ใช้ อย่างไรก็ตามมันสามารถแก้ปัญหาเฉพาะนี้ได้ดังนั้นฉันไม่เห็นปัญหาใด ๆ กับคำตอบนี้
ETHproductions

57

เป็นกลุ่ม43 , 41 ไบต์

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

บันทึกสองไบต์ด้วย @Udioica!

นี่เป็นแอนิเมชั่นที่ล้าสมัยเล็กน้อยซึ่งเกิดขึ้นแบบเรียลไทม์!

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

และนี่คือคำอธิบาย:

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

1
เพียงแค่อยากรู้อยากเห็น: มันละเมิด "โปรแกรมของคุณควรจะสามารถทำงานได้อย่างไม่มีกำหนด" หรือไม่? ในที่สุดมันสามารถไปถึงสแต็คล้นได้หรือไม่? :)
Dan Oak

4
@ dahnoak อืมเห็นได้ชัดว่าฉันไม่สามารถทดสอบได้อย่างไร้ขีด จำกัด แต่มันไม่ได้จัดสรรหน่วยความจำเพิ่มเติมดังนั้นฉันจึงไม่เห็นเหตุผลที่จะไม่ทำงานอย่างไม่มีกำหนด
DJMcMayhem

1
หากคุณสลับiไปมาSและย้ายไปอยู่ภายในมาโครคุณสามารถข้ามr|ได้
udioica

2
@dahnoak ไม่มีเหตุผลที่เครื่องยนต์ vi ไม่สามารถสังเกตเห็นการเรียกซ้ำหางได้ และการประยุกต์ใช้การเรียกซ้ำจะทำให้เป็นไปตามธรรมชาติ (ลองคิดดูว่าหากมีเวกเตอร์ของคำสั่งที่ต้องถูกดำเนินการและตำแหน่งการดำเนินการปัจจุบันจากนั้น@qจะแทรกเนื้อหาของสคริปต์ลงทะเบียน ณ ปัจจุบันที่ตำแหน่งqไม่ต้องการสแต็ก จัดสรรหน่วยความจำเว้นแต่มีคำสั่งในการเรียกใช้หลังจาก @qภายในq).
Yakk

เกือบทุกครั้งที่คุณโพสต์คำตอบของความท้าทายฉันได้เรียนรู้สิ่งใหม่ (ในกรณีนี้@:และ:sl) ดังนั้นขอขอบคุณและให้พวกเขามา :)
Christian Rondeau

37

HTML + JS (ES6), 20 + 51 50 = 70 ไบต์

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

-1 ไบต์ (Zachary T)

ตรวจสอบคำตอบ HTML / CSS 132 ไบต์ของฉันเช่นกัน


อาจล้นได้iไหม
Zacharý

ใช่ในที่สุดมันก็จะ คงที่!
darrylyeo

1
คุณสามารถแทนที่i++,i%=4ด้วยi=-~i%4ไบต์ได้หรือไม่?
Zacharý

2
@Xufox <pre>เพียงมั่นใจอักษรพิมพ์ดีดถูกนำมาใช้เพื่อให้chหน่วยจะทำงาน กฎไม่พูดถึงสิ่งใดเกี่ยวกับตระกูลฟอนต์ที่ใช้ ;)
darrylyeo

1
ถ้าฉันไม่เข้าใจผิดตัวอักษรตัวแรกที่พิมพ์โดย JS จะเป็นตัวสุดท้ายในสตริง ดังนั้นคุณควร init กับแทน- /หรือ init ด้วยและห่วงผ่าน| '-\\|/'แม้ว่าจะเพิ่มได้ดี
ติตัส

21

Windows Batch 121 114 84 80 79 78 ไบต์

เพียงแค่โยนมันออกมาเพื่อความสนุก

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

ฉันไม่สามารถกำหนดไพพ์ ( |) ลงในอาร์เรย์ได้ดังนั้นฉันต้องเพิ่มมันด้วยตนเองด้วยการมอบหมายอื่นความล่าช้าจะทำด้วยPINGซึ่งอาจไม่ถูกต้อง

เอาท์พุท:

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

แก้ไข:

  • ขอบคุณ Roman Gräfสำหรับการบันทึก 7 ไบต์!
  • ขอบคุณ Neil สำหรับการบันทึก 30 ไบต์! ฉันยังจัดการมันอีกเล็กน้อยเพื่อประหยัดไบต์บนบรรทัดใหม่
  • ขอบคุณ phyrfox สำหรับการบันทึก 4 ไบต์!
  • ขอบคุณ YourDeathIsComing ที่ช่วยประหยัด 2 ไบต์!

3
คุณสามารถลบ@echo offและวาง@ด้านหน้าของทุกคำสั่งsetหรือecho
Roman Gräf

1
คุณไม่ต้องการอาร์เรย์in (/ - \ ^|)ทำงาน นอกจากนี้ 0% gotoเป็นวิธีที่สั้นห่วงกว่า
Neil

2
คุณควรใช้ที่อยู่ IP "1.1" (-4 ไบต์) ได้เนื่องจากแพลตฟอร์มส่วนใหญ่จะขยายอัตโนมัติเป็น 1.0.0.1 สำหรับคุณ
phyrfox

1
คุณสามารถบันทึก 1 >nulไบต์โดยการเอาพื้นที่ในด้านหน้าของ
YourDeathIsComing

1
ฉันหมายถึงพื้นที่ก่อนหน้าไม่ใช่หลังจากนั้น
YourDeathIsComing

20

โหนด, 72 70 ไบต์

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

แทนที่\x1Bด้วยอักขระ escape ตามตัวอักษรเพื่อรับจำนวนไบต์ที่ถูกต้อง โทรf()เพื่อเริ่มภาพเคลื่อนไหว นี่คือลักษณะที่ปรากฏในเครื่องจำลองเทอร์มินัล ConEmu บนคอมพิวเตอร์ของฉัน:

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


ลองใช้\033c(แทนที่\033ด้วยการแทนอักขระจริง) มันดูไม่ดีเท่าไหร่ แต่มันช่วยให้คุณประหยัดได้บ้าง
Mama Fun Roll

จะไม่iล้น
Zacharý

12
@ ZacharyT มันจะผ่านไป 71 ล้านปี แต่ฉันสามารถแก้ไขได้หากจำเป็น
ETHproductions

3
"โปรแกรมของคุณควรจะสามารถทำงานได้อย่างไม่มีกำหนดตัวอย่างเช่นถ้าคุณใช้ตัวนับสำหรับเฟรมตัวนับไม่ควรทำให้เกิดข้อผิดพลาดเกินจำนวนสูงสุดในภาษาของคุณ" ใช่มันจำเป็น
Zacharý

3
@ ที่ดี แต่แล้วมันจะไม่ทำงานบน Node ;-)
ETHproductions

14

Kotlin, 67 66 ไบต์

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

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

อธิบายตนเองได้อย่างเป็นธรรมใช้\rเพื่อลบล้างเส้นและใช้ประโยชน์จากการแก้ไขข้อความที่น่ากลัวของ Kotlin

แก้ไข: บันทึก 1 ไบต์ขอบคุณ @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu โดยเปลี่ยนwhile(true)เป็นwhile(1>0)


1
คุณสามารถบันทึกหนึ่งไบต์โดยใช้while(1>0)แทนwhile(true)(-1) และอาจรวมถึงไวยากรณ์ของฟังก์ชันจริงในคำตอบของคุณ ( fun a(){<code>}, +9) หากคุณต้องการเป็นคนโกงคุณสามารถใช้ฟังก์ชั่นจัดเก็บเป็นตัวแปร ( val a={<code>}, +8)
จอร์จเอฟ

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu โหมด 'โปรแกรมแบบเต็ม' ไม่ยอมรับหรือไม่ สิ่งนี้สามารถรันเป็นสคริปต์ Kotlin .ktsโดยไม่มีคลาสหรือนิยามฟังก์ชัน นอกจากนี้ยังมีการโทรที่ยอดเยี่ยมด้วยwhile(1>0)!
Tyler MacDonell

3
แต่ถ้าวันหนึ่ง 0 กลายเป็นมากกว่า 1 ??? : P
FlipTack

แนวคิดที่ยอดเยี่ยมในการใช้สคริปต์ Kotlin @ Flp.Tkc ความคิดเห็นของคุณทำให้ผมนึกถึงนี้: codegolf.stackexchange.com/a/101131/62024 ยังคงสั่นคลอนว่านี่เป็นไปได้
F. George

@TylerMacDonell จริงเหรอ? ฉันไม่รู้ว่าคุณสามารถรัน kotlin ได้โดยตรงในฐานะสคริปต์ ขอบคุณสำหรับข้อมูล.
TheNumberOne

14

เป็นกลุ่ม 35 ไบต์

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

รุ่นที่น่าเบื่อ นี่เป็นวิธีแก้ไขปัญหาที่ไม่สอดคล้องซึ่งดีกว่า:

เป็นกลุ่ม (สลีป 1 วินาที), 27 ไบต์

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

การใช้gsไม่เพียงสั้นกว่ามาก แต่คุณไม่จำเป็นต้องกด Enter @.นั่นหมายความว่าเหมาะกับแมโครในบรรทัดและฉันสามารถบันทึกไบต์โดยการเปลี่ยนไป (เนื่องจากไม่มีอะไรหลังจากการเรียกซ้ำเกิดขึ้นฉันจึงสามารถพิมพ์สิ่งที่ฉันต้องการได้)


ขอบคุณสำหรับคำตอบนี้! ผมได้เรียนรู้gs, @.และ@@ภายใน@.ยังคงทำให้หัวของฉันเจ็บ!
Christian Rondeau

14

Pyth, 31 ไบต์

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

ล่ามที่นี่

กำลังโหลด GIF

คำอธิบาย

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

13

Powershell (v4), 57 56 54 53 58 57 ไบต์

กลับมาที่ Bytecount ฉันเริ่มด้วย!

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

CLI in powershell จะผิดพลาดเล็กน้อยในคอมพิวเตอร์บางเครื่องดังนั้นมันจึงดูไม่สมบูรณ์แบบ แต่มันดีเท่าที่จะทำได้

ย้าย $ a ++ ไปที่ for loop เพื่อบันทึกหนึ่งไบต์ (ไม่ใช่;)

จากนั้นย้ายไปไว้ในตัวทำดัชนีอาร์เรย์สำหรับการบันทึกอีก 2 ไบต์ต้องขอบคุณ Roman สำหรับการชี้ให้เห็น

บันทึกอีก 1 ไบต์ ( ;) โดยการย้ายส่วน Clear screen ( cls) ไปยังวง for ..

ปัญหาและการแก้ไขที่ TimmyD ชี้ให้เห็นสำหรับประเด็นที่ไม่มีที่สิ้นสุดของคำถามต้องการเพียง 5 ไบต์เท่านั้นเปลี่ยน$a++%4เป็น($a=++$a%4)ดังนั้นจึงไม่มีทางเหนือกว่า 3

บันทึกไบต์อื่นโดยปล่อยให้ลูปว่างเปล่าโดยสิ้นเชิงขอบคุณ 'อะไรก็ตาม' สำหรับการชี้ให้เห็นว่านี่เป็นไปได้จริงใน Powershell เวอร์ชัน 4!

gif ที่อัปเดตใหม่สำหรับคำตอบนี้(สุดท้าย?)รุ่น

กำลังโหลด Gif

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

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

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

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

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


2
for(;;){"Loading... "+"|/-\"[$a++%4];sleep -m 250;cls}(เลื่อน$a++ไปยังการใช้งานครั้งสุดท้าย$a)
Roman Gräf

ลืมบางสิ่งอยู่เสมอ - ขอบคุณสำหรับสิ่งนั้น!
colsw

2
ฉันไม่เชี่ยวชาญที่ Powershell มาก แต่เมื่อฉันเห็นรายการ Windows Batch ฉันคิดว่า "Powershell สามารถเอาชนะสิ่งนี้ได้หรือไม่" และนี่คือ!
Jakub Jankowski

1
อย่างน้อยใน ps v4 คุณควรจะสามารถเล่นไบต์อื่นได้โดยรักษาสภาพว่างไว้โดยสิ้นเชิง:for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
ทุกอย่างที่

1
ไม่เป็นไร ดูเหมือนว่าจะใช้งานได้จริงสำหรับเวอร์ชัน 2+ มันขี้เกียจเกินกว่าจะตรวจสอบก่อน)
ไม่ว่า

11

Pyth - 36 35 ไบต์

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

ไม่ทำงานออนไลน์แน่นอน


คุณมี gif ของสิ่งนี้ในการดำเนินการ? นอกจากนี้ยังมีเคาน์เตอร์ที่สามารถล้นได้หรือไม่
FlipTack

@ Flp.Tkc ตัวนับเท่านั้นคือZซึ่งเป็นจำนวนเต็มหลามซึ่งไม่ล้น ฉันพยายามทำ gif แต่ไม่สามารถใช้งานได้ หากคุณรู้วิธีการสร้างหนึ่งคุณสามารถใช้งานได้กับล่าม pyth ที่github.com/isaacg1/pyth
Maltysen

4
หากจำนวนเต็มไม่ล้นก็อาจจะเติบโตจนเต็มหน่วยความจำทั้งหมดซึ่งจะทำให้มันล้มเหลวอย่างน้อยหลังจาก10⁶⁵⁰⁰⁰⁰⁰⁰⁰ปีในระบบ 32 บิตส่วนใหญ่ แน่นอนความตายอันร้อนแรงของเอกภพจะเกิดขึ้นก่อน แต่ก็ยัง ...
jjrv



9

Mathematica, 74 67 ไบต์

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

A มหันต์ไป 7 ไบต์ขอบคุณ @dahnoak


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

1
@ dahnoak ไชโย! ฉันไม่ได้ตระหนักถึง ListAnimate ว่าเป็นเรื่องอะไร มันเป็นความอัปยศที่<>แบนไม่สามารถฟังได้มิฉะนั้นจะสามารถลบได้อีก 4 ไบต์!
ซิมมอนส์

เพื่อความสนุก:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
ยักไหล่

9

C #, 170 133 ไบต์

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

ขอขอบคุณ Roman Gräfและ raznagul ที่ช่วยฉันได้ 37 ไบต์ (โดยเฉพาะ raznagul ผู้ชี้ให้เห็นว่าโซลูชันดั้งเดิมของฉันไม่ถูกต้องอย่างไรก็ตามฉันพลาดบางอย่างที่นั่น แต่ตอนนี้ได้รับการแก้ไขแล้วและควรเป็นไปตามข้อกำหนด :)

ค่อนข้างคล้ายกับคำตอบ C # ที่มีอยู่ของ Pete Arden แต่มีการปรับปรุงบางอย่าง

เช่น "for (;;)" แทนที่จะเป็น "while (true)", char แทนที่จะเป็นสตริง

ฉันจะแสดงความคิดเห็นคำแนะนำของฉันเกี่ยวกับคำตอบของเขา แต่จริง ๆ แล้วฉันไม่มีชื่อเสียงเพียงพอที่จะทำเช่นนั้น

Ungolfed:

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

2
ทำไมไม่ลบอันแรกConsole.Write("\b");และเปลี่ยนวินาทีเป็นConsole.Write("\b"+a);?
Roman Gräf

การกำหนดแอ็คชันไม่จำเป็นและใช้ลูปแบบ Like foreach(var a in"|/-\\")และเพิ่มรหัสที่คุณมีในการกระทำเป็นเวลานานเนื่องจากเนื้อความจะช่วยให้คุณประหยัดได้ถึง 20 ไบต์
raznagul

นอกจากนี้ภารกิจคือการสร้างผลลัพธ์ที่ต้องการอย่างแน่นอน ซึ่งขณะนี้ไม่ใช่ในกรณี
raznagul

มันควรจะเป็นกรณีนี้ฉันลืม '|' และพื้นที่ต่อท้ายหลังจาก "กำลังโหลด ... "
Snowfire

ในเวอร์ชันที่ไม่ได้อัปโหลดของคุณ (เนื่องจากไม่ตรงกับรุ่นที่ตีกอล์ฟ) คุณสามารถลบเวอร์ชันแรกConsole.Write()และใช้เพียงเวอร์ชันเดียวConsole.Write($"Loading... {c}\r")แทนที่จะเป็นเวอร์ชั่นที่สอง
นม

9

มา 72, 73 ไบต์

แก้ไข :

  • เพิ่ม Gforth-only version, 69 bytes (ขอบคุณ @ninjalj!)
  • เพิ่มช่องว่างที่หายไปหลังจาก "กำลังโหลด ... " (ขอบคุณ @Roman Gräf!), +1 ไบต์
  • อัปเดตเพื่อให้ตรงกับกฎอย่างแม่นยำมากขึ้น (ในจำนวนไบต์เดียวกัน)

แข็งแรงเล่นกอล์ฟ

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

รุ่น Gforth

GNU Forth-only version สามารถลดขนาดลงเหลือ 69 bytes ดังนี้:

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

screencast

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

ลองออนไลน์!


1
เนื่องจากคุณใช้ gforth หากคุณไม่สนใจเรื่องความสะดวกในการพกพาของคนอื่นคุณสามารถใช้[begin]และ[again]อยู่นอกเหนือความหมายของคำ
ninjalj

9

Python 2, 81 79 78 77 ไบต์

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

เป็นวิธีแก้ปัญหาที่ใช้งานtimeง่าย

ฉันใช้\r(การคืนค่าขนส่ง) เพื่อกลับไปที่จุดเริ่มต้นของบรรทัดจากนั้นพิมพ์ข้อความที่เขียนทับบรรทัด

ฉันเริ่มต้นด้วยi=1การหลีกเลี่ยงการหลบหนีเป็นสองเท่า\( '\|/-'แทนที่จะเป็น'|/-\\')

ในอดีตฉันเคยใช้-~iหมายถึงi + 1การหลีกเลี่ยงวงเล็บ (ขอบคุณ@ Flp.Tkcสำหรับ -2 ไบต์เหล่านี้!) ( i=(i+1)%4เทียบกับi=-~i%4)

ตอนนี้ฉันแค่ปล่อยให้ตัวนับเพิ่มขึ้นตลอดกาลเพราะเทคนิคของ Python intไม่สามารถล้นได้ ขอบคุณ@Zachary Tสำหรับการชี้และบันทึกไบต์!
มันหยุดบนเครื่องเพราะเครื่องวิ่งออกไปจากหน่วยความจำ แต่นี้จะใช้เวลา9.7 คนรุ่นที่มีหน่วยความจำ 4GB intสำหรับที่หนึ่ง

ขอบคุณ@Kadeสำหรับ -1 ไบต์ที่การprint a,bพิมพ์aและการbแยกพื้นที่ดังนั้นฉันไม่ต้องการพื้นที่ของตัวเอง

นี่คือ gif ของมันทำงานบน Windows:

กำลังโหลด

ฉันทดสอบบน Linux VM ด้วย ฉันไม่สามารถทดสอบบน Mac ได้


1
ถ้าผมจำไม่ผิดคุณสามารถใช้i=-~i%4เพื่อประหยัดไบต์สำหรับ parens :) ความ
FlipTack

2
จะไม่แทนที่[i],;i=-~i%4ด้วยการ[i%4],;i+=1บันทึกไบต์เพราะมันไม่เกินขนาดสูงสุดสำหรับ Python เพียงหน่วยความจำสูงสุด?
Zacharý

9
ฉันควรลงคะแนนให้คุณเพื่อเข้าสู่ระบบในฐานะAdministrator...
Neil

5
@Neil โดยสุจริตฉันเพิ่งใส่ไฟล์ Python ใน Administrator และเรียกใช้จากที่นั่นเพราะชื่อบัญชีอื่นเป็นชื่อจริง (พีซีส่วนตัว)
Artyer

2
ฉันอนุญาตให้ข้อเสนอแนะของ @ZacharyT เป็นจำนวนเต็ม Python ทางเทคนิคสามารถมีขนาดใหญ่ตราบเท่าที่คอมพิวเตอร์มีหน่วยความจำที่จะถือพวกเขา
FlipTack

7

MATL , 36 ไบต์

ลบ 1 ไบต์โดยใช้แนวคิดของ@ flawr เพื่อเปลี่ยนสตริงเป็นวงกลม

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

นี่คือการบันทึก gif จากคอมไพเลอร์ออฟไลน์:

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

หรือลองที่MATL Online! หากไม่ได้เริ่มต้นให้รีเฟรชหน้าเว็บแล้วกด "Run" อีกครั้ง

มันทำงานอย่างไร

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

เฮ้หลุยส์ ทำได้ดีกับ MATL เช่นเคย นี่คือความแตกต่างเล็กน้อยของรายการวงกลม และแสดง คุณคิดว่าคุณสามารถแปลสิ่งนั้นด้วยวิธีแก้ปัญหาที่สั้นกว่านี้หรือไม่a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
Hoki

@Hoki ขอบคุณสำหรับความคิด อันที่จริงฉันเริ่มมีโมดูโลเคาน์เตอร์ 4 ที่เพิ่มขึ้น แต่มันก็นานกว่าเล็กน้อย (จากนั้นฉันก็จะได้รับไบต์ นอกจากนี้ฉันคิดว่าหน้าจอที่ชัดเจนและการแสดงผลปกติจะสั้นกว่าfprintfแบ็คสเปซ
Luis Mendo

7

Dyalog APL ขนาด 50 ไบต์

ใช้งานได้ในเวอร์ชั่น Windows เท่านั้นมิฉะนั้น⎕SMหน้าต่างจะไม่ปรากฏขึ้นเว้นแต่⎕SRจะมีการเรียก

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

คำอธิบาย:

  • {... }1: เรียกใช้ฟังก์ชันที่ขึ้นต้นด้วย⍵=1
  • Loading... '∘,¨'|/-\': สร้างสี่เอาต์พุตที่เป็นไปได้
  • ⊂⊃⍵⌽: หมุนรายการเพื่อให้องค์ประกอบที่ first เป็นอันดับแรกนำองค์ประกอบที่หนึ่งแล้วใส่ไว้ในรายการ
  • ⎕SM←1 1,⍨: ใส่สตริงที่มุมบนซ้ายของ⎕SMหน้าต่าง
  • ⎕DL÷4: รอ 1 / 4th ของวินาที
  • 4|⍵+⌈: ปัดค่าผลลัพธ์ (วินาทีที่ใช้ในการรอดังนั้นจึงเป็น 1 เสมอ) เพิ่มไปที่(เพิ่มค่า) และใช้ mod-4 (เพื่อป้องกันไม่ให้ล้นในที่สุด)
  • : เรียกใช้ฟังก์ชั่นอีกครั้งกับใหม่

นิเมชั่น


ยังไงก็เถอะฉันรู้ว่าใครบางคนจะส่งคำตอบสำหรับความท้าทายนี้สำหรับ Dyalog (/ APL) :)
YoYoYonnY

7

C #, 187 ไบต์

แข็งแรงเล่นกอล์ฟ:

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

Ungolfed:

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

ยังรอให้โหลด ...

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


ยังคงรอให้มันแสดง“ \” …
จัดการ

@ การจัดการอึอึสำเนาขี้เกียจและวาง จะแก้ไขได้เมื่อฉันกลับมาที่โต๊ะของฉันไม่นาน :)
พีอาร์เดน

ขออภัยที่เห็นโซลูชันของคุณใช้เวลานานขึ้นเนื่องจากความคิดเห็นของฉัน คุณไม่สามารถใช้1>0แทนที่จะtrueเอามันกลับไปที่ 186 ได้ไหม?
จัดการ

@ErikGolfer ไม่มีความคิดเกี่ยวกับ C # แต่ขึ้นอยู่กับความจริงที่ว่าภาษาเป็นสำเนาของ Java และเห็นได้ชัดว่าได้รับการยืนยันโดยไม่สามารถใช้คำสั่งที่ไม่เชื่อฟังได้ฉันคิดว่ามันจะไม่ทำงาน (BTW หากใช้งานได้อาจใช้การเรียกครั้งแรกl()เป็นเงื่อนไขก็จะได้ผลเช่นกัน)
จัดการกับ

2
@ การจัดการดีดูเหมือนว่า C # ไม่น่ารังเกียจ
Erik the Outgolfer

7

Snap !, 8 บล็อก

Snap 8 บล็อก!

นี่เป็นหนึ่งในอัลกอริธึมแรกที่ฉันเคยสงสัยใน Apple] [e


1
แสดง Applesoft BASIC ของคุณให้เรา :)
roblogic

1
ฉันยินดีที่จะทำสิ่งเหล่านี้ใน Hypercard
wyldstallyns

6

ไขว้กันเหมือนแหกปาก, 40 ไบต์

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

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

wฉันลืมที่จะกระทำสิ่งต่างๆมากมายรวมทั้ง โอ้ดี

คำอธิบาย

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

6

Bash, 98 69 ไบต์

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

ขอบคุณหลาย ๆ คนสำหรับหลายไบต์ที่ golfed off!


นอกจากนี้คุณไม่จำเป็นต้องหลบหลีกแบ็กสแลชหากคุณใช้เครื่องหมายคำพูดเดี่ยวและecho -e -nสามารถรวมอาร์กิวเมนต์เข้าด้วยกันได้echo -en
Evan Chen

คุณสามารถบันทึก 2 บรรทัดและ 13 ไบต์โดยแทนที่ echo line เป็น:echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; ทำให้การมอบหมายให้เป็นwhileเงื่อนไข
จัดการ

ใช้ printf เหมือน manatwork กล่าวว่าง่ายย่อยและนำมันโดยตรงในสภาพ:while while printf "\rLoading... ${s:i++%4:1}";do67 bytes
Dominik R

นั่นจะไม่ทำงาน Dominik R มันจะล้นในที่สุด
Zacharý


6

> <> , 55 + 4 = 59 ไบต์

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

ต้องเรียกใช้ผ่าน-t .01เป็นอาร์กิวเมนต์เพิ่มเติมเพื่อล่ามนั่นคือ +4 ในการนับไบต์

สิ่งนี้จะทำให้ตัวละครสี่ตัวที่จะพิมพ์บนสแต็คพิมพ์ด้านบนโดยไม่ต้องลบมันและขยับกองโดยตำแหน่งหนึ่ง จากนั้นมันจะพิมพ์\b(backspace อักขระ x08) และรีสตาร์ทลูป

การจับเวลาทำได้โดยการโต้แย้งที่ส่งไปยังล่ามซึ่งบังคับให้รอ 0.01 วินาทีก่อนที่จะดำเนินการแต่ละคำสั่ง มีคำสั่ง 23 คำสั่งระหว่างเอาท์พุทและคำสั่งถัดไป (ส่วนใหญ่เพียงแค่เลื่อนตัวชี้คำสั่งไปยังเซลล์ถัดไป) ดังนั้นมันจะรอ 0.23 วินาทีพร้อมเวลาที่จำเป็นสำหรับการดำเนินการคำสั่งซึ่งเหมาะกับไม่มีปัญหาใน 0.25s ที่ร้องขอ มีข้อผิดพลาด 10%

คุณสามารถลองออนไลน์ได้ แต่ล่ามนั้นไม่รู้จักอักขระแบ็คสเปซดังนั้นผลลัพธ์จะแปลกไปที่นั่น


ปกติชอบธง-nมีคะแนนเป็น 1 ไบต์ดังนั้นฉันคิดว่าคุณสามารถทำคะแนนอาร์กิวเมนต์เป็นt, .01ซึ่งเป็น 4 ไบต์ ใช้ประโยชน์จากกฎ 10% btw :)
FlipTack

@ Flp.Tkc ขอบคุณ! ฉันไม่แน่ใจวิธีนับไบต์สำหรับการโต้เถียงฉันชอบแบบนี้ :)
Leo

@Leo - มีเหตุผลในการใช้ 0.01 และไม่ใช่เห็บที่ใหญ่กว่าพร้อมคำแนะนำน้อยกว่าหรือไม่? ฉันได้เพิ่มเวอร์ชันของฉันซึ่งใช้วงวน 8 คำสั่งและจำนวนติ๊ก 0.03; # "... gnidaoL" L?! vob0 "\ | / -": o} 8o51 > #
Teal pelican

@Tealpelican มีเหตุผล แต่ไม่ดีมาก: กฎระบุว่า "คุณไม่ควรรอ 0.25 วินาทีก่อนเริ่มแสดงผล - เฟรมแรกควรจะพิมพ์ทันทีที่โปรแกรมทำงาน" ดังนั้นฉันจึงไม่ ไม่ต้องการตั้งเวลานานเกินไปในขณะที่นี่คือรหัสกอล์ฟดังนั้นฉันไม่ต้องการทำให้สั้นเกินไป ในที่สุดฉันตัดสินใจสำหรับ 25 คำสั่งลูปการละ 0.01s เพื่อให้บรรลุเวลาที่แน่นอนของ 0.25s ร้องขอ; เมื่อฉันนำมาใช้ฉันรู้ว่าฉันไม่มีที่ว่างเพียงพอสำหรับการวนซ้ำเต็มรูปแบบดังนั้นฉันจึงต้องหันไปใช้กฎ 10%
Leo

ฉันต้องอ่านผิดกฎ นั่นเป็นเหตุผลที่ดีที่ดีเลิศสำหรับระยะเวลา :)
น้านนกกระทุง

6

ไฟล์ MS-DOS .COM ขนาด 56 ไบต์

นี่คือเนื้อหาของไฟล์เป็นเลขฐานสิบหก:

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

รหัสแอสเซมเบลอร์ที่ตรงกันมีลักษณะดังนี้:

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

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

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

1
การกดปุ่มค้างไว้จะช่วยเร่งความเร็วของสปินเนอร์ซึ่งสามารถแก้ไขได้โดยการปิดบังmov al, 0xfe / out 0x21,al
อินเทอร์รัปต์

ความคิดเห็นสำหรับ HLT ผิดคุณอาจหมายถึงว่า HLT ตื่นขึ้นมาที่ ~ 18.2 Hz (หรือแม่นยำมากขึ้นที่นาฬิกา NTSC / 12/65536 Hz)
ninjalj

@ninjalj ขอบคุณ ฉันเปลี่ยนความคิดเห็น ...
Martin Rosenau

6

NASM x86_64 - 349 283 ไบต์

สิ่งนี้ควรเรียกใช้ระบบ Linux 64 บิต

สร้างโดยใช้:

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

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

ภาพเคลื่อนไหว:

บันทึก 65 ไบต์ - ขอบคุณผู้ใช้ 254948

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


ฉันนับ 349 ไบต์เว้นแต่ว่ามีการขึ้นบรรทัดใหม่ / พื้นที่ต่อท้าย
FlipTack

^ FLP ขอบคุณ Tkc มีแถวที่มีช่องว่างในตอนท้าย
ซามูเอล

@Samuel จำเป็นต้องใช้บรรทัด 13-17 หรือไม่ ดูเหมือนว่าจะทำงานได้ดีโดยไม่มีบรรทัดเหล่านั้น เท่าที่ฉันสามารถบอกได้ (ไม่ค่อยดีเท่าไหร่ในการชุมนุมฉันกลัว) คุณพิมพ์กำลังโหลด .... จากนั้นก็เป็น | อักขระจากนั้นลบอักขระนั้นจากนั้นป้อนลูปที่คุณพิมพ์ซ้ำ | สำหรับครั้งแรก.
user254948

@Samuel เพิ่มเติมจาก xor r8, r8 -> mov r8,0 (บันทึกได้ 1 ตัวอักษร) MOV บางตัวมีพื้นที่พิเศษ (mov r7, 1 -> mov r7,1) เพิ่มเติมเพิ่มเติมคำแนะนำ cmp r8,4, jl l, xor r8, r8 สามารถถูกแทนที่ด้วย AND r8,3 (บันทึก 15 ตัวอักษร) คุณควรมีขนาดไม่เกิน 285 ไบต์แทนที่จะเป็น 349! (ใช้ร่วมกับบรรทัดที่กล่าวถึงข้างต้น)
254948

5

R, 85 89 ไบต์

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

แก้ไข: แก้ไขคำตอบดังกล่าวที่ล้นเคยชินโดยการรีเซ็ตเคาน์เตอร์ถ้ามากกว่าT4

เพียงด้านที่น่าสนใจเกี่ยวกับคำตอบนี้คือการใช้ R ของbuiltinTRUTHY Tมันเป็นชุดตัวแปรที่กำหนดไว้ล่วงหน้าอย่างมีประสิทธิภาพ1/TRUEซึ่งหมายความว่าเราไม่จำเป็นต้องเริ่มต้นตัวนับ แต่สามารถเริ่มเพิ่มขึ้นTได้


Tในที่สุดจะล้น?
FlipTack

@ Flp.Tkc มันจะไม่ล้น แต่จะถือว่าเป็นอินฟินิตี้ที่ผ่านมา1e+308ในกรณีที่NAถูกส่งกลับดังนั้นฉันคิดว่าคำตอบนี้ไม่ถูกต้องแล้ว (ไม่ได้สังเกตในกฎ) จะอัปเดตเร็ว ๆ นี้
Billywob

1
ที่จริงแล้วคุณสามารถทำให้มันสั้นลงได้ 2 ไบต์หากคุณไม่ได้ใช้บิวด์อินT: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}คือ 87 ไบต์
plannapus

อืม ... R ใช้กับเวกเตอร์ได้หรือไม่ ทำไมไม่มีโมดูโลหรือตัวดำเนินการบิตเตอร์สำหรับอะตอม เป็นTเวกเตอร์? ไม่T=(T+1)%%4ทำงาน? มันจะประหยัดอีก 5 ไบต์
ติตัส

2
... หรือT=T%%4+1: สั้นกว่า 2 ไบต์
ติตัส

5

Haskell (GHC), 103 91 ไบต์

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

ขอบคุณ @nimi สำหรับการบันทึก 12 ไบต์!


ไม่จำเป็นต้องใช้โปรแกรมเต็มรูปแบบ mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

ไบต์ที่สองอาจจะมีการบันทึกไว้โดยใช้ความอดทน 10% และเปลี่ยนและพื้นที่ก่อนที่จะมี250000 (4^9)
Christian Sievers

5

C (บนระบบเหมือน UNIX) 88 ไบต์

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

มันเริ่มต้นด้วยตัวละครที่ผิด แต่ฉันคิดว่ามันดูดีกว่า คุณสามารถเปลี่ยนลำดับตัวอักษรได้อย่างง่ายดายโดยการแก้ไข "\ - / |" เชือก


สามารถ golfed เพิ่มเติมโดยการย้ายคำสั่งลงในforเช่น: ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}จากนั้นจะสามารถ golfed เพิ่มเติมโดยสมมติว่ามีการล้นสำหรับจำนวนเต็ม:main(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
ninjalj

คุณต้องการ fflush () ในนั้นหรือไม่?
John U

ในระบบส่วนใหญ่คุณจำเป็นต้องมี fflush ซึ่งหลาย ๆ ตัวจะทำการบัฟเฟอร์ตามบรรทัดใหม่ อย่างไรก็ตามเป็นไปได้ว่ามันไม่จำเป็นสำหรับบางระบบ
LambdaBeta

คุณสามารถใช้แทนตั้งแต่ที่ไม่ได้บัฟเฟอร์บรรทัดเช่นfprintf(stderr,... ใช้เวลาแปดตัวอักษรในขณะที่ใช้เวลาสิบดังนั้นจึงชนะสุทธิของตัวละครทั้งสอง stdoutf...stderr,fflush(0);
cmaster

5

Perl, 71 63 61 ไบต์

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

รุ่นก่อนหน้า:

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

Thanx ถึง @primo เป็นเวลา 10 ไบต์


2
เคล็ดลับที่ดีที่จะใช้หมดเวลามากกว่าselect Time::HiResคุณสามารถบันทึกไม่กี่ไบต์โดยใช้... while$|=printและโดยการย้ายยัติภังค์ในการทับศัพท์ไปข้างหน้าและสิ้นสุด s//\r Loading... |/ยังช่วยประหยัดไบต์มากกว่าการมอบหมาย
โม่

2
y'-\|/'\|/-'และยังถ้าคุณใช้คำพูดเดียวสำหรับคั่นทับศัพท์ที่ไม่มีความจำเป็นที่จะหลบหนีทับขวาอย่างใดอย่างหนึ่ง:
โม่

ดูเหมือนว่าคุณมีพื้นที่เพิ่มเติมก่อนรหัสของคุณ
Erik the Outgolfer

1
\rคุณสามารถบันทึกไบต์อื่นโดยใช้ตัวอักษร
ninjalj

1
ใช้y'-|\/'\/|-'/4แทน.252 เพิ่มเติม
โม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.