Làm cho tôi một trình tải giả


29

Tạo một trình tải giả giống như thế này:

Thông số :

  • Hiển thị loading(không gian) một trong những chu kỳ này -\|/(không gian) (bộ đếm tỷ lệ phần trăm từ 0-100) sau đó a %.
  • Bộ đếm phần trăm được cho là tăng thêm 1 mỗi lần màn hình thay đổi.
  • Thời gian của bộ đếm để chuyển sang lần lặp tiếp theo là ngẫu nhiên. Bất kỳ loại ngẫu nhiên nào cũng sẽ làm miễn là hàm / phương thức có khả năng tạo ra tất cả các số nguyên ngẫu nhiên có xác suất> 0 trong phạm vi 1<= ms <=750ở đây mslà thời gian tính bằng mili giây.
  • Bắt đầu tại loading - 0 %.
  • Kết thúc lúc loading - 100 %.
  • KHÔNG CÓ ĐẦU VÀO là bắt buộc.
  • gửi một chương trình đầy đủ hoặc chức năng hoặc bất cứ điều gì tương tự.

Mã mà tôi đã sử dụng:

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

Người chiến thắng

  • mã có ít byte nhất sẽ thắng.


1
Tôi đã không nghĩ rằng đây là một bản sao. Câu hỏi này không thể được thực hiện trong> <>, nhưng có thể ở *> <> chẳng hạn. Tôi khá thích nó.
redstarcoder

1
@Mego Câu hỏi không phải là một bản sao. Đầu ra hơi khác một chút, thời gian chạy hoàn toàn khác nhau và đầu ra yêu cầu thời gian ngẫu nhiên thay vì độ trễ 250ms cố định. Câu trả lời cho một câu hỏi không thể được sử dụng cho câu hỏi khác mà không cần sửa đổi nhiều. Xin vui lòng, đọc các câu hỏi.
Ismael Miguel

8
Là tác giả của thử thách khác, tôi sẽ tham gia vào cuộc tranh luận về bản sao. Mặc dù các ký tự đi xe đạp ( \|/-) giống nhau, nhưng câu trả lời dường như khác ở chỗ nó không phải là vô hạn và liên quan đến việc tạo ra các số ngẫu nhiên, thay vì đầu ra tĩnh. Vì vậy, tôi sẽ nói, mặc dù ban đầu tôi cảm thấy bị sao chép, nhưng điều này không giống như một bản sao đối với tôi.
FlipTack

@ flp.tkc ý tưởng này đến từ nhiều nơi kết hợp như tôi thấy -\|/trong một số trò chơi. Và tôi đã được truyền cảm hứng từ các chương trình cài đặt giao diện điều khiển.
Mukul Kumar

Câu trả lời:


6

MATL , 45 byte

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

Ví dụ chạy trong trình biên dịch ngoại tuyến:

nhập mô tả hình ảnh ở đây

Hoặc dùng thử tại MATL Online!

Giải trình

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 byte

Tương tự như https://codegolf.stackexchange.com/a/101357/59735

Đã lưu 3 byte bằng cách không phải là một thằng ngốc (còn lại ... khi tải)

-3 cảm ơn VisualMelon

đã thay đổi 750 -> 751 để đảm bảo 750 được bao gồm.

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

Giải trình:

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
}

Cập nhật gif

nhập mô tả hình ảnh ở đây


đầu ra của bạn không hoàn toàn giống nhau, vui lòng xem gif của tôi và sửa lỗi của bạn
Mukul Kumar

Tôi nghĩ rằng bạn có thể bỏ không gian sau đó -mvà mất dấu ngoặc đơn xung quanh $_%4(ít nhất là hoạt động trên hộp của tôi).
VisualMelon 8/12/2016

@VisualMelon cảm ơn, phần ()còn lại từ thử thách khác tôi đã sao chép thẳng mã của mình từ đó.
colsw

8

Python 2, 119 113 112 byte

Ban đầu tôi đã đi với số tiền ngẫu nhiên random()/.75, tuy nhiên điểm cuối sẽ không được bao gồm. Không có nhiều sự khác biệt giữa câu hỏi này với câu hỏi khác về thời gian tải vô hạn ngoại trừ tính ngẫu nhiên và thực tế là nó thực sự kết thúc.

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

cảm ơn Jonathan Allan vì đã lưu 6 byte và DJMcMayhem vì đã tiết kiệm một byte!


1
Lưu 6 byte với import time,random as rr.randint.
Jonathan Allan

@Jonathan ALLan Không nhận ra bạn có thể nhập như vậy, cảm ơn!
Kade

Một vòng lặp for là hơi ngắn hơn:for i in range(101):print'\rLoading','-\|/'[i%4],i,'%',;time.sleep(r.randint(1,750)/1e3)
DJMcMayhem

@DJMcMayhem Rất tiếc, tôi đã thử nghiệm nó với range(1,101)một số lý do ..
Kade

Acttually, tôi thấy một cái gì đó 3 khác byte ngắn:i=0;for c in'-\|/'*25:print'\rLoading',c,i,'%',;time.sleep(r.randint(1,750)/1e3);i+=1
DJMcMayhem

6

Mẻ, 185 byte

@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%

Không may là thời gian khá kém, nhưng Batch không có gì tốt hơn để sử dụng ping.


Điều này chỉ hoạt động trên Windows. Gói FreeCom DOS cung cấp Loading % Invalid switch. - /aw (Tôi rất thích dùng thử trong MS DOS nếu tôi vẫn có thể tìm thấy bản sao của mình).
Brian Minton

@BrianMinton: Chúc may mắn khi chạy nó trên MS DOS (không có lệnh ping)
Joshua

@BrianMinton Nó yêu cầu CMD.EXE vì các thay thế biến nâng cao.
Neil

@Joshua Vâng, không được xây dựng ít nhất; Điều đó đã không xảy ra cho đến Windows 2000.
Neil

6

*> <> (Sao biển), 86 82 byte

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

Hãy thử nó ở đây!

Điều này có thể có thể được chơi gôn nhiều hơn, nhưng tôi không thấy bất cứ điều gì siêu rõ ràng. Nó ngủ 100ms, 400ms hoặc 700ms, nếu điều này không đủ ngẫu nhiên, hãy cho tôi biết!

Cảm ơn @TealPelican đã tiết kiệm cho tôi 4 byte và làm cho nó ngẫu nhiên hơn nhiều!

Những thách thức lớn nhất mà tôi tìm thấy (trong khi vẫn cố gắng giữ cho nó nhỏ) là sự ngẫu nhiên và thực sự xuất ra "tải - 100%" vào cuối, thay vì chỉ thoát ra một cách thuận tiện gần nhất: p.


1
Xin chào, tôi thích ngôn ngữ này> <>, nó mở ra nhiều thách thức hơn: D - Tôi đã có một chút điều chỉnh về mã của bạn và tôi đã không giảm nó nhiều mà thay đổi các số ngẫu nhiên. Liên kết đến> <> mã Thay đổi duy nhất để biến điều này thành khả thi trong *> <> sẽ thay đổi ~ từ liên kết mã sang S để sử dụng thời gian. Điều này không tạo ra số ngẫu nhiên lên đến 749 và cắt bỏ một số thao tác ngăn xếp thừa. PS Tôi thích nó nếu bạn có thể thực hiện *> <> phiên dịch trực tuyến: D
Teal pelican

1
@Tealpelican, cảm ơn! Tôi thích những thay đổi của bạn, đặc biệt là trình tạo số ngẫu nhiên! Tôi cũng thích một người phiên dịch trực tuyến *> <>: p. Tôi không chơi xung quanh với JS quá thường xuyên, nhưng cả hai tôi sẽ xem xét chơi với JS hoặc có thể chạy trình thông dịch Go thông qua GopherJS trước để bắt đầu. :)
redstarcoder

1
Cảm ơn, phải mất một thời gian để thực sự đưa ra một phiên bản hoạt động nhưng đây có vẻ như là môn đánh gôn nhiều nhất tôi có thể tạo ra. Tôi sẽ để mắt đến nó và nếu không có thể lao vào làm một con trăn. Tôi vẫn nghĩ rằng dòng đầu tiên có thể được chơi gôn nhiều hơn một chút nhưng tôi đã không thể tự làm điều đó.
Teal bồ nông

1
@Tealpelican hy vọng điều này sẽ giúp người phiên dịch trực tuyến hết ngứa, hoặc ít nhất là có được quả bóng lăn. Tôi sẽ xem xét một cách để chia sẻ mã sau này. starfish.000webhostapp.com
redstarcoder

1
Điều đó thật nhanh chóng, chỉ cần chạy chương trình trong đó ngay bây giờ và dường như hoạt động tốt: D Tôi sẽ thử xem việc sử dụng điều này cho một số thách thức trong tuần này.
Teal bồ nông

5

Perl 6 , 67 byte

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

Mở rộng:

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 byte

Điều này dường như hoạt động hoàn toàn tốt, ngay cả với nguồn số "ngẫu nhiên" sơ sài này.

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


Thay thế 1 , Javascript + HTML, 16 + 84 byte

Cái này sử dụng một yếu tố đã tồn tại để hiển thị nội dung còn lại:

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

Thay thế 2 , 95 byte

Nếu tôi có thể giả sử một tab được mở và bạn đang dán nó vào bảng điều khiển:

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

Thay vì hiển thị HTML, tiêu đề của tài liệu sẽ thay đổi.


Cảm ơn bạn @ user2428118 vì đã lưu 2 byte!


Bạn có thể thả () sau Dateđể lưu hai byte.
dùng2428118

@ user2428118 Tôi không biết rằng nó hoạt động! Cảm ơn vì tiền boa.
Ismael Miguel

4

F #, 118 byte

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

Để chạy đoạn mã này, hãy chuyển nó vào Async.Starthoặc Async.RunSynchronously.


Upvote ngay lập tức vì F #
Upvote Snowfire

4

PHP, 90 83 80 78 77 byte

77:

Việc đóng cửa ;là không cần thiết.

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

78:

Trong khi tìm kiếm một cách giải quyết khác để có 0 ban đầu mà không khởi tạo biến tôi đã đưa ra điều này:

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

Thay đổi trở lại echo để giành được một vài byte vì tôi chỉ sử dụng printf để định dạng bắt buộc như int. Bằng cách tăng $ i tăng lên 0, tôi có được một số nguyên hợp lệ. Bằng cách sử dụng các dấu ngoặc đơn làm dấu phân cách chuỗi, dấu gạch chéo ngược không cần phải thoát, dẫn đến một byte khác được giải phóng

80:

Việc tăng số tiền $ i từ phần cuối cùng sang phần prinf đã cho tôi thêm 3 lần nữa. (Xem bình luận bên dưới)

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

83:

Đã xóa init của một biến với các trình nạp.

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

90:

Tôi đã cố gắng loại bỏ init của $ i để thu được một số byte, vì tôi phải thêm khá nhiều để kích hoạt hoạt hình của trình tải. printf thêm 2 trái ngược với echo, nhưng định dạng NULL dưới dạng số nguyên cho 0.

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

Có một sai lầm: Câu hỏi yêu cầu độ trễ phải nằm trong khoảng từ 1 đến 750. Bạn có từ 0 đến 750. Ngoài ra, bạn có thể di chuyển số gia sang printf, tiết kiệm cho bạn một byte duy nhất: for(;$i<101;usleep(rand(1,750)*1e3))printf("\rloading %s %d%%",'-\|/'[$i%4],$i++);(82 byte)
Ismael Miguel

1
@IsmaelMiguel rand () đã bao gồm , hoặc điều này là do phép nhân với * 1e3? Tôi sẽ lẻn vào byte miễn phí đó.
thisisboris

Câu hỏi yêu cầu một khoảng thời gian ngẫu nhiên giữa 1ms và 750ms (bao gồm). rand(0,750)*1e3trả về giá trị từ 0 (không hợp lệ) và 750, được nhân với 1000. rand(1,75e4)trả về giá trị từ 1 (không hợp lệ) và 750000. Phải trì hoãn rand(1,750)*1e3, vì bạn sử dụng usleep(). Nó hoạt động với micro giây , nhỏ hơn 1000 lần so với mili giây.
Ismael Miguel

Điều này có thể khiến bạn bất tiện gần với câu trả lời của người dùng59178, nhưng echongắn hơn 3 byte printf. Bạn có thể muốn đưa phiên bản mới nhất lên đầu và sử dụng #titlethay vì **title**. Và có một khoảng trống bị thiếu giữa số và %.
Tít

@Titus Tôi không thể sử dụng echo ở đây vì tôi đã không khởi tạo $ i, null thành chuỗi ước tính thành '', thông qua printf Tôi buộc số nguyên (% d) dẫn đến null = 0. #justphpthings
thisisboris

3

Groovy, 113 87 byte

-36 byte nhờ vào giải đấu

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

2
84 byte và nên chạy từ bảng điều khiển Groovy:p=-1;101.times{println"Loading ${"-\\|/"[p++%4]} $p%";sleep Math.random()*750as int}
giải đấu

1
Mặc dù chủ sở hữu câu hỏi không yêu cầu rõ ràng, nhưng anh ta có thể muốn các tin nhắn tải liên tiếp ghi đè lên nhau. Không có sự khác biệt kích thước, vì vậy thay đổi tốt hơn println"Loading…print"\rLoading…. Và loại bỏ biến p đó, sử dụng ẩn nó thay thế.
manatwork

3

Bash, 162 104 byte

Sửa đổi câu trả lời của Zachary cho một câu hỏi liên quan, với những cải tiến lớn bằng cách thao tác:

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

Tôi đã phải tìm cách làm số ngẫu nhiên trong bash.

Ungolfed / Giải thích

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
Đẹp đầu tiên thử. Xem Mẹo chơi gôn ở Bash để biết các mẹo cải tiến. Cá nhân tôi sẽ đi với s='-\|/';for x in {0..100};{ printf "\rloading ${s:x%4:1} $x %%";sleep `printf .%03d $[RANDOM%750+1]`; }BTW, trang web Unix & Linux đồng nghiệp của chúng tôi cũng có một câu hỏi về Làm thế nào để thực hiện các phép tính số nguyên & float, trong bash hoặc các ngôn ngữ / khung khác? .
manatwork

@manatwork Liên kết tốt! Tôi không biết về $[math], sử dụng { }thay vì do donehoặc sử dụng dấu tick thay vì $(). Vâng, tái sử dụng $ x để truy cập mảng đồ họa của trình tải có ý nghĩa. Ngoài ra, vỗ một cái .trước số để có được số thập phân cho giấc ngủ là khá ngọt ngào!
Hydraxan14

3

C #, 170 149 135 byte

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

Ung dung:

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

Tôi sẽ không đảm bảo rằng mọi ký tự trong phần này đều đúng, vui lòng sửa cho tôi nếu có lỗi biên dịch. Tôi đã phải gõ toàn bộ điều trên điện thoại của mình để có thể vô tình có một số lỗi ... _ (ツ) _ / Tôi hy vọng các bạn tha thứ cho tôi rằng

Đã thử nghiệm nó trên PC của tôi, hoạt động như một bùa mê và tôi thậm chí đã lưu toàn bộ 20 byte nhờ pmbanka :)


1
Bạn có thể sử dụng \r(vận chuyển trở lại) thay vì Console.Clear(). Bạn cũng có thể biến nội tuyến để lưu một số byte.
pmbanka

1
Bạn cũng có thể lưu thêm một byte bằng cách thay thế i<=100choi<101
auhmaan

for (int i = 0; i <= 100; i++)có thể được viết lại dưới dạng for (int i = 0; i++ <= 100;)Sau đó, bạn có thể đặt Thread.S ngủ trong vị trí có i ++ và lưu cả dấu ngoặc nhọn. Cắt tổng cộng 3 byte
CSharpie

Ngoài ra OP không yêu cầu Chương trình để bạn có thể thay thế static void l()bằng()=>
CSharpie

2

C 112 103 byte

Đã lưu 9 byte nhờ @G. Sliepen. Không thú vị lắm, chỉ là một câu trả lời về câu trả lời C ++ của bạn. Cũng không phải là một chức năng ngẫu nhiên rất thú vị. Tôi nghĩ về Sleep(c[i%4]), hoặc Sleep(i)họ không ngẫu nhiên chút nào!

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

Ung dung:

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

3
Tôi sợ nhưng rand ()%750tạo số từ 0-749 bạn sẽ cần thêm 1.
Mukul Kumar

Thay đổi rand()%750thành rand()%751sẽ không cho kết quả bạn muốn. Nó sẽ tạo ra một giá trị ngẫu nhiên trong khoảng từ 0 đến 750. Trong câu hỏi, độ trễ phải nằm trong khoảng từ 1 đến 750 (đã bao gồm). Theo hướngrand() dẫnspoint.com / c_stiteria_l Library / c_feft_rand.htm , hàm tạo số từ 0 đến (ít nhất) 32767. Nếu bạn làm như vậy 0 % 750, bạn sẽ nhận được 0 kể từ đó 0 / <anything> == 0.
Ismael Miguel

Cạo sạch 9 byte bằng cách loại bỏ char*c="-\\|/";và sử dụng trực tiếp chuỗi ký tự thay vì biến c:printf(...,"-\\|/"[i%4],...)
G. Sliepen 9/12/2016

2

Toán học, 133 byte

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

Điều này sẽ chạy một lần, giả sử x là không xác định. Clear@xsẽ khởi động lại nó

55 ký tự gắn liền với tính dài dòng: /


Đó có phải là một khoảng thời gian cố định hay nó sẽ được lặp lại ngẫu nhiên?
Tít

Đó là ngẫu nhiên. UpdateInterval:>. 75 sẽ được sửa
Kelly Lowder

1
@Titus: Tôi tin rằng UpdateInterval:>RandomReal@.75các cuộc gọi liên tục RandomReal, nhưng UpdateInterval->RandomReal@.75sẽ chỉ gọi một lần.
Omar

2

R - 94 byte

for(i in 0:100){cat('\rLoading',c('-','\\','|','/')[i%%4+1],i,'%');Sys.sleep(sample(750,1)/1e3)}

Thực sự tốt đẹp đó sample(750,1) == sample(1:750,1).



2

PHP, 66 79 byte

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

Thật không may, tôi đã phải gán $ i để có được nó để in '0'.
Sử dụng như:

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

Chỉnh sửa: nhờ Titus xác nhận chính xác những gì được phép với Mukul Kumar, chúng tôi có thể lưu 3 byte với phạm vi hạn chế ít hơn, nhưng không phải tất cả 9 byte với phạm vi không giới hạn. Cũng cảm ơn vì đã chỉ ra rằng tôi đã quên nhân vật đi xe đạp và cung cấp một giải pháp đơn giản để làm điều đó.


1
Yêu cầu ngẫu nhiên là bạn tạo ra tất cả 1ms đến 750ms với khả năng> 0. Tôi có thể thấy rằng các giá trị khác bị cấm. rand(1,75e4)tiết kiệm 3 byte; 1e6có thể cứu người khác; và hoàn toàn không có tham số nào lưu 9 byte; và tôi không thể thấy rằng vi phạm bất kỳ quy tắc nào. Nhưng bạn đã quên chu kỳ ký tự: +16 ","-\\|/"[$i%4],"thay vì -.
Tít

@Titus Bạn không usleep(rand(1,75e4))tạo ra một khoảng thời gian ngẫu nhiên giữa 1 micro giây và 750 mili giây ? Ngoài ra, theo câu hỏi, khoảng thời gian phải nằm trong khoảng từ 1 đến 750.
Ismael Miguel

Xem các ý kiến ​​mới nhất về câu hỏi: 1 to 75e4được chấp nhận.
Tít

@Titus Tôi đã xem xét các thay đổi như thế nhưng quyết định đi theo những gì dường như được ngụ ý bởi câu hỏi (độ trễ mili giây). Cảm ơn đã hỏi chính xác những gì được cho phép!
dùng59178

2

Noodel , không biên dịch 40 byte

Chỉ cần quay lại những thử thách cũ (như trong những thử thách đã được thực hiện trước Noodel ) và cạnh tranh với Noodel để tìm ra nơi nào yếu.

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

Nếu đầu ra cuối cùng không quan trọng, thì có thể lưu 2 byte.

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

Noodel đẩy phần trên cùng của ngăn xếp vào màn hình ở cuối chương trình bằng cách thêm€Ḃ nó ngăn chặn điều đó xảy ra.

Thử nó:)

Làm thế nào nó hoạt động

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>


Tại sao có nhiều ¤s?
Kritixi Lithos

@KritixiLithos Noodel sử dụng khoảng trắng làm NOP vì vậy để in một khoảng trắng ¤được sử dụng :)
tkellehe

1
Btw, thật tuyệt khi có một đoạn trích cho việc này :)
Kritixi Lithos

Đoạn trích hoạt động như thế nào? Tập lệnh đã nhập có tìm thấy phần tử có id của noodle, sau đó dịch codesang Javascript không?
Carcigenicate

@Carcigenicate, Có. "Trình phân tích cú pháp" là hàm JavaScriptnoodel xử lý codeđúng. Nó dịch các codemã thông báo thành các đối tượng JavaScript được nối lại với nhau sau đó được thực thi. Việc ppcg.min.jstạo các đối tượng HTML thích hợp và dịch đầu ra của những gì được phân tích cú pháp thành các đối tượng HTML để tạo hiển thị. Mỗi mã thông báo được thực thi bằng cách bước qua chúng kích hoạt một sự kiện bước được đăng ký để cập nhật màn hình :) Điều đó có giúp ích gì không?
tkellehe

2

C 126 121 byte

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

Phiên bản bị đánh cắp:

 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 Không đọc giữa dòng ở đó, Cảm ơn! :)


1
c [] không phải là ngẫu nhiên ... Nhưng đang đạp xe ....
Mukul Kumar

Hay nói cách khác, bạn không cần phải chọn một ký tự ngẫu nhiên từ "\ | / -", bạn phải hiển thị /, sau đó -, sau đó \, sau đó |, trong một chu kỳ.
Carcigenicate

@MukulKumar @ Carcigenicate Cập nhật mã để nó thực hiện những gì thông số kỹ thuật nói về các ký tự đi xe đạp!
Abel Tom

1

MATLAB, 108 byte

function k;for i=0:100;a='-\|/';pause(rand*.749+.001);clc;['loading ' a(mod(i,3)+1) ' ' num2str(i) ' %']
end

1

Tháng mười, 122 120 119 108 byte

Tôi đã đọc sai thử thách và tạo ra một trình tải vô hạn khởi động lại ở 0 khi nó vượt qua 100. Biến nó thành một trình tải duy nhất một lần:

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

Lưu hành a, a=a([2:4,1])là ý tưởng của flawr ở đây . Ngoài ra, đã lưu 2 byte bằng cách bỏ qua dấu ngoặc đơn sau khi randnhờ MattWH.


Có nên .749*rand()+.001không? Điều này có thể chờ 751ms. Ngoài ra, bạn có thể rời ()rand và lưu 2 byte.
MattWH

1

ForceLang, 250 byte

Không soạn thảo, yêu cầu các tính năng ngôn ngữ mà hoãn câu hỏi

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

Tôi có lẽ nên sửa một số lỗi liên quan đến phân tích cú pháp chuỗi.


1

Vợt 110 byte

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

Ung dung:

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

Kiểm tra:

(f)

Đầu ra: enter image description here

(Tệp gif này hiển thị chậm hơn so với thực tế)


Những gì với những thứ ở cuối trong gif?
Carcigenicate

Đây dường như là một vật phẩm từ chương trình chụp màn hình.
rnso

1

107 75 Ruby

-32 nhờ thao tác

Bình thường

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

Chơi gôn

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

Nếu bạn có một dòng đầu ra để ghi đè, system'clear'thì quá mức ở đây. Ngoài ra việc sử dụng các biến riêng biệt i. Ồ, và tính toán trước khi có thể: 0.750-0.010.749(cũng lưu ý rằng bạn thiếu một chữ số thập phân trong 0,01 - nên là 0,001). Kết quả 101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}trở nên rất giống với câu trả lời Ruby của Conor O'Brien trong Đang tải Mãi mãi nhưng đó cũng là một thách thức.
manatwork

1

Python 3, 149 byte

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

Tương tự như Đang tải ... Mãi mãi, nhưng tôi đã phải chỉnh sửa câu trả lời của mình từ đó rất nhiều.


1

TI-Basic, 80 byte

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

Tính ngẫu nhiên đến từ For(vòng lặp (E là mã thông báo E khoa học) và vì TI-Basic được diễn giải nên cũng tự động có một số chi phí. Hãy nhớ rằng trong TI-Basic, các chữ cái viết thường và một số ký hiệu ASCII ít phổ biến hơn là hai byte (đặc biệt cho chương trình này, l o a d i n g sub( \ | %là các mã thông báo hai byte


1

Clojure, 109 byte

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

Vòng lặp trên một danh sách phạm vi các số từ 0 đến 100, được nén với một danh sách vô hạn "\|/-"lặp lại mãi mãi.

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

Có thể phát trong http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMOXoybnVSOVJEU00


Đầu ra của bạn có vẻ ít ...
Mukul Kumar

hmm ,,, mã của tôi biến mất! ...
sergiol

Ý tôi là đầu ra của bạn ở định dạng này "đang tải ... xx%" thay vào đó phải giống như "đang tải - xx%" trong đó '-' thay đổi như được giải thích trong câu hỏi.
Mukul Kumar

@MukulKumar: Đã sửa.
sergiol

1

Java 8, 130 byte

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

Giải trình:

()->{                           // 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 đầu ra:

enter image description here


0

Visual Basic, 371 byte

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

Mở rộng:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.