ทำให้ฉันเป็นรถตักดินปลอม


29

สร้างตัวโหลดปลอมเช่นนี้:

พารามิเตอร์:

  • จอแสดงผลloading(เว้นวรรค) หนึ่งในจำนวนนี้จะวน-\|/(เคาน์เตอร์ร้อยละ 0-100) (เว้นวรรค) %แล้ว
  • เปอร์เซ็นต์ที่คาดว่าจะเพิ่มขึ้น 1 ทุกครั้งที่มีการเปลี่ยนแปลงการแสดงผล
  • เวลาที่เคาน์เตอร์เพื่อข้ามไปยังการทำซ้ำครั้งถัดไปเป็นการสุ่ม การสุ่มใด ๆ จะทำตราบเท่าที่ฟังก์ชัน / วิธีสามารถสร้างจำนวนเต็มแบบสุ่มทั้งหมดที่มีความน่าจะเป็น> 0 ในช่วง1<= ms <=750ที่นี่msเป็นเวลาเป็นมิลลิวินาที
  • เริ่มต้นloading - 0 %ที่
  • สิ้นสุดloading - 100 %ที่
  • ไม่จำเป็นต้องมีอินพุต
  • ส่งโปรแกรมหรือฟังก์ชั่นเต็มหรืออะไรก็ตามที่คล้ายกัน

รหัสที่ฉันใช้:

C ++

#include<stdio.h>
#include<time.h>
#include<windows.h>

int main()
{
    srand(time(NULL));
    char a[15],b[]="-\\|/";
    int i=0,j=0,ms;
    while(j<101)
    {
        (i<3)?i++:i=0;
        wsprintf(a,"loading %c %d ",b[i],j++);
        printf(a);puts("%");
            //This part is to make the output look cool
        switch(rand()%9)
        {
            case 0:ms=1;break;
            case 1:ms=2;break;
            case 2:ms=5;break;
            case 3:ms=10;break;
            case 4:ms=15;break;
            case 5:ms=20;break;
            case 6:ms=25;break;
            case 7:ms=50;break;
            case 8:ms=500;
        }
        Sleep(ms);  //Otherwise this is supposed to be random
        if(j<101)   //like this Sleep(rand()%750+1);
        system("cls");
    }
}

ผู้ชนะ

  • รหัสที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ


1
ฉันไม่คิดว่านี่เป็นสิ่งที่ซ้ำกัน คำถามนี้ไม่สามารถนำมาใช้ใน> <> แต่สามารถอยู่ใน *> <> ตัวอย่างเช่น ฉันชอบมันมาก
redstarcoder

1
@Mego คำถามไม่ได้ซ้ำกัน เอาท์พุทเป็นที่แตกต่างกันเล็ก ๆ น้อย ๆ รันไทม์เป็นcompletellyแตกต่างกันและการส่งออกต้องใช้เวลาที่สุ่มแทนที่จะเป็น 250 ms ล่าช้าคงที่ คำตอบสำหรับคำถามหนึ่งไม่สามารถใช้ในคำถามอื่นได้โดยไม่ต้องมีการแก้ไขมาก กรุณาอ่านคำถาม
Ismael Miguel

8
ในฐานะผู้เขียนความท้าทายอื่น ๆ ฉันจะเข้ามามีส่วนร่วมในการอภิปรายล่อลวง ถึงแม้ว่า chars cycling ( \|/-) จะเหมือนกัน แต่คำตอบก็ดูเหมือนจะแตกต่างกันในเรื่องที่ไม่สิ้นสุดและเกี่ยวข้องกับการสร้างตัวเลขสุ่มแทนที่จะเป็นเอาท์พุทคงที่ ดังนั้นฉันจะบอกว่าแม้ว่าตอนแรกฉันรู้สึกว่าถูกลอกเลียนแบบ แต่ฉันก็ไม่ได้ดูเหมือนเป็นคนหลอกลวง
FlipTack

@ flp.tkc ความคิดนี้มาจากหลายที่รวมกันเหมือนที่ฉันเห็น-\|/ในบางเกมและฉันก็ได้รับแรงบันดาลใจจากโปรแกรมการติดตั้งคอนโซล
Mukul Kumar

คำตอบ:


6

MATL , 45 ไบต์

101:"'loading'O'-\|/'@)O@qVO37&hD750Yr100/&Xx

ตัวอย่างทำงานในคอมไพเลอร์ออฟไลน์:

enter image description here

หรือลองที่MATL Online!

คำอธิบาย

101:          % Push array [1 2 ... 101]
"             % For each
  'loading'   %   Push this string
  O           %   Push 0. When converted to char it will be displayed as a space
  '-\|/'      %   Push this sring
  @)          %   Modular index into this string with iteration index
  O           %   Push 0
  @q          %   Iteration index minus 1
  V           %   Convert to string
  O           %   Push 0
  37          %   Push 37, which is ASCII for '%'
  &h          %   Concatenate horizontally into a string, Numbers are converted to char
  D           %   Display
  750Yr       %   Random integer with uniform distribution on [1 2 ... 750]
  100/        %   Divide by 100
  &Xx         %   Pause that many tenths of a second and clear screen
              % End (implicit)

16

Powershell, 71 68 65 Bytes

คล้ายกับhttps://codegolf.stackexchange.com/a/101357/59735

บันทึก 3 ไบต์โดยไม่เป็นคนงี่เง่า (เหลือ ... เมื่อโหลด)

-3 ต้องขอบคุณ VisualMelon

เปลี่ยน 750 -> 751 เพื่อให้แน่ใจว่ารวม 750 รายการ

0..100|%{cls;"loading $("|/-\"[$_%4]) $_ %";sleep -m(random 751)}

คำอธิบาย:

0..100|%{                                  #For range 0-100...
    cls                                    #Clear Display
    "loading $("|/-\"[$_%4]) $_ %"    #Display the current string
    sleep -m(random 750)                  #Sleep random ms up to 750
}

อัปเดต gif

enter image description here


ผลลัพธ์ของคุณไม่เหมือนกันโปรดดู gif ของฉันและแก้ไขให้ถูกต้อง
Mukul Kumar

ฉันคิดว่าคุณสามารถทิ้งพื้นที่ไว้-mแล้วและวงเล็บหายไป$_%4(ดูเหมือนว่าจะทำงานในกล่องของฉันอย่างน้อย)
VisualMelon

@VisualMelon ขอบคุณที่()เหลือจากความท้าทายอื่น ๆ ฉันตรงคัดลอกรหัสของฉันจาก
colsw

8

Python 2, 119 113 112 Bytes

ตอนแรกฉันได้ไปกับจำนวนสุ่มrandom()/.75แต่จุดสิ้นสุดจะไม่รวม ไม่มีความแตกต่างจากคำถามนี้กับคำถามอื่น ๆ สำหรับความเร็วในการโหลดไม่ จำกัด ยกเว้นการสุ่มและความจริงที่ว่ามันสิ้นสุดจริง

import time,random as r
for i in range(101):print'\rLoading','-\|/'[i%4],i,'%',;time.sleep(r.randint(1,750)/1e3)

ขอบคุณ Jonathan Allan สำหรับการบันทึก 6 ไบต์และ DJMcMayhem สำหรับการบันทึกไบต์!


1
บันทึก 6 ไบต์ด้วยและimport time,random as r r.randint
Jonathan Allan

@JanathanAllan ไม่ทราบว่าคุณสามารถนำเข้าแบบนั้นได้ขอบคุณ!
Kade

A สำหรับลูปจะสั้นกว่าเล็กน้อย:for i in range(101):print'\rLoading','-\|/'[i%4],i,'%',;time.sleep(r.randint(1,750)/1e3)
DJMcMayhem

@DJMcMayhem อ๊ะฉันได้ทำการทดสอบด้วยrange(1,101)เหตุผลบางอย่าง ..
Kade

ที่จริงแล้วฉันพบบางสิ่งที่สั้นกว่าอีก 3 ไบต์:i=0;for c in'-\|/'*25:print'\rLoading',c,i,'%',;time.sleep(r.randint(1,750)/1e3);i+=1
DJMcMayhem

6

แบตช์ 185 ไบต์

@set s=-\!/
@for /l %%i in (0,1,100)do @call:l %%i
@exit/b
:l
@cls
@set c=%s:~0,1%
@set s=%s:~1%%c%
@echo Loading %c:!=^|% %1 %%
@set/aw=%random%%%751
@ping>nul 1.1 -n 1 -w %w%

ระยะเวลาค่อนข้างยากจนน่าเสียดาย pingแต่ชุดไม่ได้มีอะไรดีกว่าที่จะใช้งานมากกว่า


ใช้ได้กับ Windows เท่านั้น ชุด FreeCom DOS ให้Loading % Invalid switch. - /aw (ฉันชอบที่จะลองใน MS DOS ถ้าฉันยังหาสำเนาของฉันได้)
Brian Minton

@BrianMinton: ขอให้โชคดีทำงานบน MS DOS (ไม่มีคำสั่ง ping)
โจชัว

@BrianMinton มันต้องใช้ CMD.EXE เนื่องจากการทดแทนตัวแปรขั้นสูง
Neil

@ โจชัวเอ่อไม่ได้สร้างอย่างน้อย ที่ไม่ได้เกิดขึ้นจนกว่า Windows 2000
Neil

6

*> <> (ปลาดาว), 86 82 ไบต์

| v1*aoooooooo"loading K"&0"-\|/"
!0x1! +
%$<.0+af{od;?)*aa&:&Soono$&+1:&"  %"{o:}

ลองที่นี่!

นี่อาจจะสามารถเล่นกอล์ฟได้มากกว่านี้ แต่ฉันไม่เห็นอะไรที่ชัดเจนมาก มันหลับได้ 100ms, 400ms หรือ 700ms ถ้ามันไม่สุ่มพอให้ฉันรู้!

ขอบคุณ @TealPelican ที่ช่วยฉัน 4 ไบต์และทำให้มันสุ่มมากขึ้น!

ความท้าทายที่ใหญ่ที่สุดที่ฉันพบ (ในขณะที่ยังพยายามทำให้มันเล็ก) คือการสุ่มและเอาท์พุท "โหลด - 100%" จริง ๆ ในตอนท้ายแทนที่จะออกจากความสะดวกที่ใกล้ที่สุดของฉัน: p


1
สวัสดีฉันรักสิ่งนี้ในภาษา> <> มันเปิดรับความท้าทายมากมาย: D - ฉันมีการปรับแต่งเล็กน้อยในรหัสของคุณและฉันไม่ได้ลดลงมากนัก แต่เปลี่ยนตัวเลขแบบสุ่ม ลิงก์ไปยัง> <> รหัสการเปลี่ยนแปลงเพียงอย่างเดียวที่จะทำให้สิ่งนี้ปฏิบัติได้ใน *> <> จะเป็นการเปลี่ยน ~ จากลิงก์รหัสไปยัง S เพื่อใช้เวลา วิธีนี้จะสร้างตัวเลขสุ่มตลอดจนถึง 749 และตัดการดำเนินการสแต็กส่วนเกินออก ป.ล. ฉันรักมันหากคุณสามารถทำ *> <> ล่ามออนไลน์: D
Teal pelican

1
@Tealpelican ขอบคุณ! ฉันชอบการเปลี่ยนแปลงของคุณโดยเฉพาะเครื่องกำเนิดตัวเลขแบบสุ่ม! ฉันยังรักนักแปลออนไลน์ *> <> ผู้แปล: p ฉันไม่ได้เล่นกับ JS บ่อยนัก แต่ฉันจะลองเล่นกับ JS หรืออาจจะใช้ล่าม Go ผ่าน GopherJS ก่อนเพื่อเริ่มต้น :)
redstarcoder

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

1
@Tealpelican หวังว่านี่จะเป็นการเติมล่ามออนไลน์หรืออย่างน้อยก็ทำให้ลูกบอลกลิ้ง ฉันจะดูวิธีการแบ่งปันรหัสในภายหลัง starfish.000webhostapp.com
redstarcoder

1
นั่นเป็นสิ่งที่รวดเร็วเพียงแค่เรียกใช้โปรแกรมในตอนนี้และดูเหมือนจะทำงานได้ดี: D ฉันจะลองดูสิ่งนี้สำหรับความท้าทายในสัปดาห์นี้
นกกระทุงนกเป็ดน้ำ

5

Perl 6 , 67 ไบต์

for |<- \ | />xx* Z 0..100 {print "\rloading $_ %";sleep .750.rand}

ขยาย:

for

  # produce a list of all the pairs of values

  |<- \ | /> xx *   # a flat infinite list of "clock faces"
  Z                 # zipped with
  0 .. 100          # all the numbers from 0 to 100 inclusive

  # &zip / &infix:<Z> stop on the shortest list

{

  # 「$_」 will look something like 「("/", 39)」
  # when it is coerced to a Str, all of its elements
  # will be coerced to Str, and joined with spaces

  print "\rloading $_ %";

  sleep .750.rand

}

4

Javascript (ES6), 128 118 116 115 112 110 109 ไบต์

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

(X=_=>setTimeout(i>99||X,1+new Date%750,document.body.innerHTML=`<pre>Loading ${'-\\|/'[i%4]} ${i++}%`))(i=0)


ทางเลือก 1 , Javascript + HTML, 16 + 84 ไบต์

องค์ประกอบนี้ใช้องค์ประกอบที่มีอยู่แล้วเพื่อแสดงเนื้อหาที่เหลืออยู่:

(X=_=>setTimeout(i>99||X,1+new Date%750,a.innerHTML=`${'-\\|/'[i%4]} ${i++}%`))(i=0)
Loading <a id=a>

ทางเลือก 2 , 95 ไบต์

หากฉันสามารถสันนิษฐานได้ว่าแท็บเปิดอยู่และคุณกำลังวางสิ่งนี้ลงในคอนโซล:

(X=_=>setTimeout(i>99||X,1+new Date%750,document.title=`Loading ${'-\\|/'[i%4]} ${i++}%`))(i=0)

แทนที่จะแสดง HTML ชื่อของเอกสารจะเปลี่ยนไป


ขอบคุณที่@ user2428118สำหรับการบันทึก 2 ไบต์!


คุณสามารถปล่อย()หลังจากDateเพื่อบันทึกสองไบต์
user2428118

@ user2428118 ฉันไม่รู้ว่าใช้งานได้! ขอบคุณสำหรับเคล็ดลับ
Ismael Miguel

4

F #, 118 ไบต์

async{let r=System.Random()
for i in 0..100 do printf"\rLoading %O %d %%""|/-\\".[i%4]i;do!Async.Sleep(r.Next(1,750))}

เพื่อที่จะรันตัวอย่างข้อมูลนี้ผ่านมันเข้าหรือAsync.StartAsync.RunSynchronously



4

PHP, 90 83 80 78 77ไบต์

77:

;ไม่จำเป็นต้องปิดบัญชี

for(;$i<101;usleep(rand(1,75e4)))echo"\rloading ",'-\|/'[$i%4],' ',$i+++0,'%'

78:

ในขณะที่มองหาวิธีแก้ปัญหาอื่นเพื่อรับ 0 เริ่มแรกโดยไม่ต้องเริ่มต้นตัวแปรฉันมากับสิ่งนี้:

for(;$i<101;usleep(rand(1,75e4)))echo"\rloading ",'-\|/'[$i%4],' ',$i+++0,'%';

เปลี่ยนกลับเป็นเสียงสะท้อนเพื่อรับรางวัลไม่กี่ไบต์เพราะฉันใช้ printf เพื่อบังคับรูปแบบเป็น int เท่านั้น โดยการเพิ่มค่าที่เพิ่มขึ้น $ i ด้วย 0 ฉันจะได้จำนวนเต็มที่ถูกต้อง ด้วยการใช้เครื่องหมายคำพูดเดี่ยวเป็นตัวคั่นสตริงเครื่องหมายแบ็กสแลชไม่จำเป็นต้องถูกหลบหนีส่งผลให้มีการเพิ่มไบต์อื่น

80:

การย้ายการเพิ่มของ $ i จากส่วนสุดท้ายไปยัง prinf ทำให้ฉันออกไปอีก 3 ครั้ง (ดูความคิดเห็นด้านล่าง)

for(;$i<101;usleep(rand(1,75e4)))printf("\rloading %s %d%%","-\\|/"[$i%4],$i++);

83:

ลบ init ของตัวแปรด้วย loaderstates

for(;$i<101;usleep(rand(1,75e4)),$i++)printf("\rloading %s %d%%","-\\|/"[$i%4],$i);

90:

ฉันพยายามลบ init ของ $ i เพื่อรับไบต์เนื่องจากฉันต้องเพิ่มจำนวนเล็กน้อยเพื่อเปิดใช้งานภาพเคลื่อนไหวโหลดเดอร์ printf เพิ่ม 2 ซึ่งตรงข้ามกับ echo แต่การจัดรูปแบบ NULL เป็นจำนวนเต็มให้ผลลัพธ์เป็น 0

for($l='-\|/';$i<101;usleep(rand(0,750)*1e3),$i++)printf("\rloading %s %d%%",$l[$i%4],$i);

มีข้อผิดพลาดหนึ่งข้อ: คำถามต้องมีความล่าช้าระหว่าง 1 ถึง 750 โดยรวม คุณมีระหว่าง 0 ถึง 750 และคุณสามารถย้ายส่วนเพิ่มไปยังprintfบันทึกไบต์เดียว: for(;$i<101;usleep(rand(1,750)*1e3))printf("\rloading %s %d%%",'-\|/'[$i%4],$i++);(82 ไบต์)
Ismael Miguel

1
@IsmaelMiguel rand () รวมอยู่หรือเป็นเพราะการคูณด้วย * 1e3 ฉันจะแอบเข้าไปในไบต์ฟรีนั่น
thisisboris

คำถามต้องมีช่วงเวลาแบบสุ่มระหว่าง 1ms ถึง 750ms (รวม) rand(0,750)*1e3ผลตอบแทนเป็นค่าระหว่าง 0 (ไม่ถูกต้อง) และ 750 ซึ่งจะถูกคูณด้วย 1000 rand(1,75e4)ผลตอบแทนค่าระหว่าง 1 (ถูกต้อง) และ 750000. ความล่าช้าจะต้องเป็นเพราะคุณใช้rand(1,750)*1e3 usleep()ใช้งานได้กับไมโครวินาทีซึ่งเล็กกว่า 1,000 มิลลิวินาที
Ismael Miguel

ซึ่งอาจใช้เวลาคุณลำบากใกล้เคียงกับคำตอบ user59178's แต่echoเป็น 3 printfไบต์สั้นกว่า คุณอาจต้องการที่จะนำรุ่นล่าสุดไปด้านบนและใช้แทน#title และมีช่องว่างที่ขาดหายไประหว่างจำนวนและที่**title** %
ติตัส

@Titus ฉันไม่สามารถใช้เสียงก้องที่นี่เพราะฉันไม่ได้เริ่มต้น $ i ของฉันโมฆะเพื่อสตริงประเมินว่า '' ผ่าน printf ฉันบังคับจำนวนเต็ม (% d) ทำให้เป็นโมฆะ = 0 #justphpthings
thisisboris

3

Groovy, 113 87 ไบต์

-36 ไบต์ต้องขอบคุณ lealand

{p=-1;101.times{print"\rLoading ${"-\\|/"[p++%4]} $p%";sleep Math.random()*750as int}}​

2
84 ไบต์และควรเรียกใช้จากคอนโซล Groovy:p=-1;101.times{println"Loading ${"-\\|/"[p++%4]} $p%";sleep Math.random()*750as int}
lealand

1
แม้ว่าเจ้าของคำถามจะไม่ได้ร้องขออย่างชัดเจนเขาอาจต้องการให้โหลดข้อความติดต่อกันเพื่อเขียนทับกัน ไม่มีความแตกต่างขนาดการเปลี่ยนแปลงเพื่อให้ดีคือ→println"Loading… print"\rLoading…และลบตัวแปรนั้นออกใช้ค่าปริยายแทน
จัดการ

3

Bash, 162 104 ไบต์

การดัดแปลงคำตอบของ Zacharyสำหรับคำถามที่เกี่ยวข้องพร้อมการปรับปรุงอย่างมากโดยการจัดการ:

s='-\|/'
for x in {0..100};{
printf "\rloading ${s:x%4:1} $x %%"
sleep `printf .%03d $[RANDOM%750+1]`
}

ฉันต้องค้นหาวิธีทำตัวเลขสุ่มด้วยการทุบตี

Ungolfed / อธิบาย

s='-\|/'
for x in {0..100}
{
    # \r returns the carriage to the beginning of the current line.
    # ${s:x%4:1} grabs a substring from s, at index x%4, with a length of 1.
    printf "\rloading ${s:x%4:1} $x %%"

    # "$RANDOM is an internal bash function that returns
    #   a pseudorandom integer in the range 0 - 32767."
    # .%03d is a dot followed by a base-ten number formatted to 3 places,
    #   padded with zeros if needed.
    # sleep accepts a floating point number to represent milliseconds.
    sleep `printf .%03d $[RANDOM%750+1]`
}

1
ลองครั้งแรกดี ดูเคล็ดลับสำหรับการเล่นกอล์ฟใน Bashสำหรับเคล็ดลับการปรับปรุง ส่วนตัวจะไปกับs='-\|/';for x in {0..100};{ printf "\rloading ${s:x%4:1} $x %%";sleep `printf .%03d $[RANDOM%750+1]`; }BTW เว็บไซต์เพื่อนของเราUnix & Linuxยังมีคำถามเกี่ยวกับวิธีการคำนวณจำนวนเต็มและลอยในทุบตีหรือภาษา / กรอบอื่น ๆ ? .
จัดการ

@manatwork ลิงค์ที่ดี! ผมไม่ทราบว่าเกี่ยวกับการ$[math]ใช้{ }แทนหรือใช้กลับเห็บแทนdo done $()ใช่การนำมาใช้อีก $ x สำหรับการเข้าถึงอาร์เรย์กราฟิกโหลดเดอร์ นอกจากนี้การตบ.หน้าตัวเลขเพื่อให้ได้ทศนิยมสำหรับการนอนหลับนั้นน่ารักทีเดียว!
Hydraxan14

3

C #, 170 149 135 ไบต์

()=>{for(int i=0;i++<=100;System.Threading.Thread.Sleep(new Random().Next(1,750)))Console.Write($"\rloading {@"-\|/"[i % 4]} {i} %");};

Ungolfed:

static void l()
{
    for (int i = 0; i <= 100; System.Threading.Thread.Sleep(new Random().Next(1, 750)))
        Console.Write($"\rloading {@"-\|/"[i % 4]} {i} %");   
}

ฉันจะไม่รับประกันว่าตัวละครทุกตัวในนี้ถูกต้องโปรดแก้ไขให้ฉันถ้ามีข้อผิดพลาดในการรวบรวม ฉันต้องพิมพ์สิ่งทั้งหมดบนโทรศัพท์ของฉันดังนั้นฉันอาจมีข้อผิดพลาดบางอย่างโดยบังเอิญ ... ¯_ (ツ) _ / ¯ฉันหวังว่าพวกคุณจะยกโทษให้ฉัน

ทดสอบบนพีซีของฉันทำงานเหมือนมีเสน่ห์และฉันยังบันทึกได้ทั้ง 20 ไบต์ด้วย pmbanka :)


1
คุณสามารถใช้\r(กลับรถ) Console.Clear()แทน คุณยังสามารถอินไลน์ตัวแปร s เพื่อบันทึกบางไบต์
pmbanka

1
นอกจากนี้คุณยังสามารถบันทึกไบต์พิเศษได้ด้วยการแทนที่i<=100fori<101
auhmaan

for (int i = 0; i <= 100; i++)สามารถเขียนใหม่เป็นfor (int i = 0; i++ <= 100;)จากนั้นคุณสามารถใส่ Thread.Sleep ภายในสถานที่ที่ i ++ เป็นและบันทึกวงเล็บปีกกาทั้งสอง การตัดรวม 3 ไบต์
CSharpie

OP ไม่ได้ขอ programm เพื่อให้คุณสามารถแทนที่static void l()ด้วย()=>
CSharpie

2

C 112 103 ไบต์

บันทึกแล้ว 9 ไบต์ขอบคุณ @G Sliepen ไม่น่าตื่นเต้นมากแค่คำตอบ C ++ ของคุณ ยังไม่ใช่ฟังก์ชั่นสุ่มที่น่าตื่นเต้นมาก ฉันคิดเกี่ยวกับSleep(c[i%4])หรือSleep(i)แต่พวกเขาไม่ได้สุ่มเลย!

#import<windows.h>
i;f(){for(;i<101;printf("\rloading %c %d %%","-\\|/"[i%4],i++),Sleep(rand()%750+1));}

Ungolfed:

#include <windows.h>
int i;
void f() {
  for(;i<101;) {
    printf("\rloading %c %d %%", "-\\|/"[i%4], i++);
    Sleep(rand()%750+1);
  }
}

3
ฉันกลัว แต่rand ()%750สร้างตัวเลขตั้งแต่ 0-749 คุณจะต้องเพิ่ม 1
Mukul Kumar

การเปลี่ยนrand()%750เป็นrand()%751จะไม่ให้ผลลัพธ์ที่คุณต้องการ มันจะสร้างค่าสุ่มระหว่าง0และ 750 ในคำถามความล่าช้าจะต้องอยู่ระหว่าง1และ 750 (รวม) ตามtutorialspoint.com/c_standard_library/c_function_rand.htmที่rand()ฟังก์ชั่นสร้างตัวเลขระหว่าง 0 และ (อย่างน้อย) 32767 ถ้าคุณทำคุณจะได้รับตั้งแต่0 % 750 0 0 / <anything> == 0
Ismael Miguel

โกนออก 9 ไบต์ด้วยการลบchar*c="-\\|/";และใช้สตริงตัวอักษรโดยตรงแทนตัวแปรc:printf(...,"-\\|/"[i%4],...)
G. Sliepen

2

Mathematica, 133 ไบต์

Dynamic[If[x<100,x++,,x=0];Row@{"Loading ",StringPart["-\|/",1+x~Mod~4]," ",x,"%"},
    UpdateInterval:>RandomReal@.75,TrackedSymbols:>{}]

สิ่งนี้จะทำงานครั้งเดียวโดยสมมติว่า x ไม่ได้ถูกกำหนด Clear@xจะเริ่มต้นใหม่

55 ตัวอักษรผูกติดอยู่ในคำฟุ่มเฟื่อย: /


เป็นช่วงเวลาที่แน่นอนหรือจะถูกสุ่มซ้ำ ๆ หรือไม่?
ติตัส

มันเป็นการสุ่ม UpdateInterval:>. 75 จะได้รับการแก้ไข
Kelly Lowder

1
@Titus: ฉันเชื่อว่าUpdateInterval:>RandomReal@.75การโทรซ้ำ ๆRandomRealแต่UpdateInterval->RandomReal@.75จะเรียกมันเพียงครั้งเดียว
โอมาร์



2

PHP, 66 79 ไบต์

for($i=-1;++$i<101;usleep(rand(1,75e4)))echo"\rloading ","-\\|/"[$i%4]," $i %";

น่าเสียดายที่ฉันต้องกำหนด $ i เพื่อให้พิมพ์ '0'
ใช้เช่น:

php -r 'for($i=-1;++$i<101;usleep(rand(1,75e4)))echo"\rloading ","-\\|/"[$i%4]," $i %";'

การแก้ไข: ขอบคุณ Titus ยืนยันสิ่งที่ได้รับอนุญาตจาก Mukul Kumar เราสามารถบันทึก 3 ไบต์ด้วยช่วงที่ถูก จำกัด น้อยกว่า แต่ไม่ใช่ทั้งหมด 9 ไบต์ด้วยช่วงที่ไม่ จำกัด ขอบคุณสำหรับการชี้ให้เห็นว่าฉันลืมตัวอักษรการขี่จักรยานและให้วิธีแก้ปัญหาง่ายๆ


1
ข้อกำหนดแบบสุ่มคือคุณสร้าง 1ms ถึง 750ms ทั้งหมดที่มีความเป็นไปได้> 0 ฉันไม่เห็นว่ามีการห้ามค่าอื่น ๆ rand(1,75e4)บันทึก 3 ไบต์ 1e6สามารถบันทึกอีกอันหนึ่ง; และไม่มีพารามิเตอร์ที่จะบันทึก 9 ไบต์ทั้งหมด; และฉันไม่เห็นว่าละเมิดกฎใด ๆ แต่คุณลืมที่จะรอบตัวอักษร: +16 สำหรับแทน","-\\|/"[$i%4]," -
ติตัส

@Titus จะไม่usleep(rand(1,75e4))สร้างช่วงเวลาแบบสุ่มระหว่าง 1 microsecondถึง 750 มิลลิวินาทีหรือไม่ นอกจากนี้ตามคำถามช่วงเวลาต้องอยู่ระหว่าง 1 ถึง 750 โดยรวม
Ismael Miguel

ดูความคิดเห็นล่าสุดเกี่ยวกับคำถาม: 1 to 75e4ยอมรับได้
ติตัส

@Titus ฉันคิดว่าจะมีการเปลี่ยนแปลงเช่นนั้น แต่ตัดสินใจที่จะไปกับสิ่งที่ดูเหมือนจะบอกเป็นนัยโดยคำถาม (ความล่าช้าเป็นจำนวนเต็มมิลลิวินาที) ขอขอบคุณที่สอบถามสิ่งที่อนุญาต
user59178

2

Noodelขนาดไม่ถึง 40 ไบต์

เพียงแค่ย้อนกลับไปสู่ความท้าทายเก่า (เช่นเดียวกับความท้าทายที่สร้างขึ้นก่อนNoodel ) และแข่งขันกับNoodelเพื่อค้นหาว่าจุดอ่อนนั้นอยู่ที่ไหน

Loading¤”ḋḟƇḣ⁺s¤ṡ⁺Ḷ101ạ¤%ɱṠĖ²⁺Çṛ749⁺1ḍ€Ḃ

หากผลลัพธ์สุดท้ายไม่สำคัญคุณสามารถบันทึกได้ 2 ไบต์

Loading¤”ḋḟƇḣ⁺s¤ṡ⁺Ḷ101ạ¤%ɱṠĖ²⁺Çṛ749⁺1ḍ

Noodelผลักด้านบนของสแต็คไปที่หน้าจอในตอนท้ายของโปรแกรมดังนั้นโดยการเพิ่ม€Ḃมันจะป้องกันไม่ให้เกิดขึ้น

ลองมัน:)

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

Loading¤”ḋḟƇḣ⁺s¤ṡ⁺Ḷ101ạ¤%ɱṠĖ²⁺Çṛ749⁺1ḍ€Ḃ # Main Noodel script.

Loading¤”ḋḟƇḣ⁺s¤ṡ⁺                       # Creates the array ["Loading¤-¤", "Loading¤\¤", "Loading¤|¤", "Loading¤/¤"]
Loading¤                                 # Pushes the string "Loading¤"
        ”Ƈḟḋḣ                            # Pushes the array ["-", "\", "|", "/"]
             ⁺s                          # Concats "Loading¤" to each element in the array by prepending.
               ¤                         # Pushes a "¤" onto the stack.
                ṡ                        # Pushes
                 ⁺

                  Ḷ101ạ¤%ɱṠĖ²⁺Çṛ749⁺1ḍ   # Main loop that creates the animation.
                  Ḷ101                   # Loop the following code 101 times.
                      ạ                  # Pushes on a copy of the next animation element from the array.
                       ¤%                # Pushes the string "¤%"
                         ɱ               # Pushes on the current count of the number of times that have looped (zero based).
                          Ṡ              # Swaps the two items at the bottom of the stack.
                           Ė             # Pushes the item at the bottom of the stack to the top (which will be the string selected from the array).
                            ²⁺           # Concat twice appending the loop count then the string "¤%" to the string selected from the array.
                              Ç          # Pops the string off of the stack, clears the screen, then prints the string.
                               ṛ749      # Randomly generate an integer from 0 to 749.
                                   ⁺1    # Increment the random number producing a random number from 1 - 750.
                                     ḍ   # Pop off the stack and delay for that number of milliseconds.

                                      €Ḃ # Ends the loop and prevents anything else being displayed.
                                      €  # Ends the loop (new line could be used as well)
                                       Ḃ # Destroys the current stack therein, nothing gets pushed to the screen at the end of the program.

<div id="noodel" code="Loading¤”ḋḟƇḣ⁺s¤ṡ⁺Ḷ101ạ¤%ɱṠĖ²⁺Çṛ749⁺1ḍ€Ḃ" input="" cols="14" 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>


ทำไมจึงมีจำนวนมาก¤หรือไม่?
Kritixi Lithos

@KritixiLithos Noodelใช้ช่องว่างเป็น NOP ดังนั้นสำหรับการพิมพ์พื้นที่ที่¤จะใช้ :)
tkellehe

1
Btw มันเป็นเรื่องดีที่มีตัวอย่างของ stack นี้ :)
Kritixi Lithos

ข้อมูลโค้ดทำงานอย่างไร สคริปต์ที่นำเข้าพบองค์ประกอบที่มี id noodleแล้วแปลเป็นcodeJavascript หรือไม่
Carcigenicate

@Carcigenicate ใช่ "parser" เป็นฟังก์ชันJavaScriptnoodelที่จัดการcodeอย่างถูกต้อง มันแปลcodeเป็นโทเค็นที่เป็นวัตถุJavaScriptที่ได้รับการผูกมัดกันดำเนินการแล้ว การppcg.min.jsสร้างวัตถุHTMLที่เหมาะสมและแปลผลลัพธ์ของสิ่งที่แยกวิเคราะห์เป็นวัตถุHTMLเพื่อสร้างการแสดงผล โทเค็นทุกตัวจะถูกดำเนินการโดยการก้าวผ่านเหตุการณ์ที่เป็นขั้นตอนซึ่งลงทะเบียนเพื่ออัปเดตหน้าจอ :) มันช่วยได้ไหม?
2560

2

C 126 121 ไบต์

f(){i=0;char c[]="/-\\|";for(;i<101;i++){printf("\rloading %c %d %% ",c[i%4],i);fflush(stdout);usleep(1000*(rand()%75));}

เวอร์ชันที่ไม่ถูกปรับแต่ง:

 void f()
 {
  int i=0;
  char c[]="/-\\|";
  for(;i<101;i++)
  {
    printf("\rloading %c %d %% ",c[i%4], i);
    fflush(stdout);
    usleep(1000*(rand()%75));  
  }
 } 

@Carcigenicate @ Mukul Kumar ไม่ได้อ่านระหว่างบรรทัดที่นั่นขอบคุณ! :)


1
c [] ไม่สุ่ม ... แต่ปั่นจักรยาน ....
Mukul Kumar

หรืออีกนัยหนึ่งคุณไม่ควรเลือกตัวอักษรแบบสุ่มจาก "\ | / -" คุณควรจะแสดง /, - - จากนั้น, จากนั้น \, จากนั้น | ในรอบ
Carcigenicate

@MukulKumar @ Carcigenicate อัปเดตรหัสเพื่อให้เป็นไปตามที่สเป็คพูดเกี่ยวกับตัวละครการขี่จักรยาน!
Abel Tom


1

Octave, 122 120 119 108 bytes

ฉันอ่านความท้าทายผิดและสร้างตัวโหลดแบบไม่สิ้นสุดที่รีสตาร์ทที่ 0 เมื่อผ่านไป 100 ทำให้เป็นตัวโหลดแบบครั้งเดียวเท่านั้น:

a='\|/-';for i=0:100;clc;disp(['Loading ',a(1),' ',num2str(i),' %']);a=a([2:4,1]);pause(0.749*rand+.001);end

การไหลเวียนa, a=a([2:4,1])เป็นความคิด flawr ของที่นี่ นอกจากนี้ยังบันทึก 2 ไบต์ด้วยการข้ามวงเล็บหลังจากrandขอบคุณ MattWH


มันควรจะเป็น.749*rand()+.001อย่างไร สิ่งนี้สามารถรอ 751ms นอกจากนี้คุณสามารถออก()จากแรนด์ปิดและบันทึก 2 ไบต์
MattWH

1

ForceLang, 250 ไบต์

ไม่ใช่การแข่งขันต้องใช้คุณสมบัติภาษาที่โพสต์คำถาม

def D def
D w io.write
D l e+"loading"+s
D z string.char 8
D s string.char 32
D d datetime.wait 750.mult random.rand()
D e z.repeat 24
D n set i 1+i
D k s+n+s+"%"
set i -1
label 1
w l+"-"+k
if i=100
exit()
d
w l+"\"+k
d
w l+"|"+k
d
w l+"/"+k
d
goto 1

ฉันควรแก้ไขข้อบกพร่องบางอย่างที่เกี่ยวข้องกับการแยกวิเคราะห์สตริงในไม่ช้า


1

แร็กเก็ต 110 ไบต์

(for((i 101))(printf"Loading ~a ~a % ~n"(list-ref'("-" "\\" "|" "/")(modulo i 4))i)(sleep(/(random 750)1000)))

Ungolfed:

(define(f)
  (for ((i 101))
    (printf "Loading ~a ~a % ~n" (list-ref '("-" "\\" "|" "/") (modulo i 4)) i)
    (sleep (/(random 750)1000))))

การทดสอบ:

(f)

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

(ไฟล์ gif นี้แสดงผลช้ากว่าความเป็นจริง)


อะไรคือสิ่งที่อยู่ท้ายใน gif?
Carcigenicate

สิ่งนี้ดูเหมือนจะเป็นสิ่งประดิษฐ์จากโปรแกรมจับภาพหน้าจอ
rnso

1

107 75 ทับทิม

-32 ขอบคุณ manatwork

ปกติ

i=0
(0..100).each{|c|
system'clear'
puts"loading #{'\|/-'[i=-~i%4]} #{c} %"
sleep rand*(0.750-0.01)+0.01
}

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

101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}

เนื่องจากคุณมีเอาต์พุตบรรทัดเดียวที่จะเขียนทับsystem'clear'จึงเป็น overkill ที่นี่ นอกจากนี้ยังใช้ตัวแปร i แยกต่างหาก โอ้และคำนวณล่วงหน้าหากเป็นไปได้: 0.750-0.010.749(โปรดทราบว่าคุณไม่มีทศนิยมหนึ่งตำแหน่งใน 0.01 - ควรเป็น 0.001) ผลลัพธ์ที่ได้101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}จะคล้ายกับคำตอบ RubyของConor O'Brienในการโหลด ... ตลอดไปแต่ก็เป็นสิ่งที่ท้าทาย
จัดการ

1

Python 3, 149 ไบต์

import time,random;f=0;n=0
while n<=100:
 print("Loading...","|/-\\"[f],n,"%",end="\r");f+=1
 if f>=3:f=0
 n+=1
 time.sleep(random.uniform(.25,.75))

คล้ายกับกำลังโหลด ... ตลอดไป แต่ฉันต้องแก้ไขคำตอบจากที่นั่นบ่อยๆ


1

TI-Basic, 80 ไบต์

For(I,0,100
For(A,0,randE2
End
Text(0,0,"loading "+sub("-\|/",1+fPart(I/4),1)+" ",I," %
End

การสุ่มมาจากFor(ลูป (E คือโทเค็น E ทางวิทยาศาสตร์) และเนื่องจาก TI-Basic ถูกตีความจึงมีค่าใช้จ่ายโดยอัตโนมัติเช่นกัน โปรดจำไว้ว่าใน TI-Basic ตัวอักษรตัวพิมพ์เล็กและสัญลักษณ์ ASCII ที่พบน้อยกว่านั้นมีสองไบต์แต่ละตัว (ดังนั้นโดยเฉพาะสำหรับโปรแกรมนี้l o a d i n g sub( \ | %คือโทเค็นแบบสองไบต์


1

Clojure, 109 ไบต์

(doseq[[c i](map vector(cycle"\\|/-")(range 101))](print"\rloading"c i\%)(flush)(Thread/sleep(rand-int 751)))

วนรอบรายการช่วงของตัวเลขตั้งแต่ 0 ถึง 100 บีบอัดด้วยรายการที่ไม่มีที่สิ้นสุดของการ"\|/-"ทำซ้ำอย่างถาวร

; (map vector...) is how you zip in Clojure
;  All arguments after the first to map are lists. The function is expected to
;  take as many arguments as there are lists. vector is var-arg.
(doseq [[c i] (map vector (cycle "\\|/-") (range 101))]
  ; \r to erase the old line
  (println "\rloading" c i \%)
  (Thread/sleep (rand-int 751)))

1

tcl, 116

set i 0;time {lmap c {- \\ | /} {puts -nonewline stderr "\rloading $c $i%";after [expr int(187*rand())]};incr i} 100

สามารถเล่นได้ในhttp://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMOXoybnVSOVJEU00


ผลงานของคุณดูเล็กน้อย ...
Mukul Kumar

อืม ,, รหัสของฉันหายไป! ...
sergiol

ฉันหมายความว่าผลลัพธ์ของคุณอยู่ในรูปแบบนี้ "กำลังโหลด ... xx%" แทนที่จะเป็นเช่นนี้ "กำลังโหลด - xx%" โดยที่ '-' แตกต่างกันไปตามที่อธิบายไว้ในคำถาม
Mukul Kumar

@MukulKumar: แก้ไขแล้ว
sergiol

1

Java 8, 130 ไบต์

()->{for(int n=0;n<101;Thread.sleep((long)(1+Math.random()*750)))System.out.print("\rloading "+"-\\|/".charAt(n%4)+" "+n+++" %");}

คำอธิบาย:

()->{                           // Method without parameter nor return-type
  for(int n=0;n<101;            //  Loop from 0 to 100
      Thread.sleep((long)(1+Math.random()*750)))
                                //   And sleep randomly 1-750 ms 
    System.out.print(           //   Print:
      "\r                       //    Reset to the start of the line
      loading "                 //    Literal "loading "
      +"-\\|/".charAt(n%4)+" "  //    + the spinner char & a space
      +n++                      //    + the number (and increase it by 1)
      +" %");                   //    + a space & '%'
                                //  End of loop (implicit / single-line body)
}                               // End of method

gif เอาท์พุท:

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


0

Visual Basic, 371 ไบต์

module m
sub main()
Dim s as Object
for i as Integer=0 to 100
Select Case new System.Random().next(0,9)
Case 0
s=1
Case 1
s=2
Case 2
s=5
Case 3
s=10
Case 4
s=15
Case 5
s=20
Case 6
s=25
Case 7
s=50
Case 8
s=500
End Select
Console.SetCursorPosition(0,0)
console.write("loading "+"-\|/"(i mod 4)+" "+i.tostring+" %")
system.threading.thread.sleep(s)
next
end sub
end module

ขยาย:

module m
    sub main()
        Dim s as Object
        for i as Integer=0 to 100
            Select Case new System.Random().next(0,9)
                Case 0
                s=1
                Case 1
                s=2
                Case 2
                s=5
                Case 3
                s=10
                Case 4
                s=15
                Case 5
                s=20
                Case 6
                s=25
                Case 7
                s=50
                Case 8
                s=500
            End Select
            Console.SetCursorPosition(0,0)
            console.write("loading " + "-\|/"(i mod 4) + " " + i.tostring + " %")
            system.threading.thread.sleep(s)
        next
    end sub
end module
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.