Сделай мне поддельный загрузчик

29

Сделайте фальшивый загрузчик просто так:

Параметры:

  • Выведите loading(пробел) один из них циклически -\|/(пробел) (процентный счетчик от 0 до 100), затем a %.
  • Предполагается, что процентный счетчик увеличивается на 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");
    }
}

победитель

  • код с наименьшим количеством байтов выигрывает.
Мукул Кумар
источник
11
Связанные
DJMcMayhem
1
Я не думал, что это был дубликат. Этот вопрос не может быть реализован в> <>, но может быть в *> <>, например. Мне это очень понравилось.
Redstarcoder
1
@Mego Вопрос не дубликат. Выход немного отличается, время выполнения полностью отличается, и выход требует случайного времени вместо фиксированной задержки 250 мс. Ответы на один вопрос не могут быть использованы для другого без серьезной модификации. Пожалуйста, прочитайте вопросы.
Исмаэль Мигель
8
Как автор другой задачи, я вступлю в дебаты о обмане. Несмотря на то, что циклические символы ( \|/-) одинаковы, ответ, по-видимому, отличается тем, что он не бесконечен и включает генерацию случайных чисел, а не статический вывод. Поэтому я скажу, хотя я изначально чувствовал себя скопированным, для меня это не похоже на обман.
FlipTack
@ flp.tkc эта идея пришла из многих мест, объединенных, как я видел -\|/в некоторых играх. И меня вдохновили программы установки консоли.
Мукул Кумар

Ответы:

6

MATL , 45 байт

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

Пример запуска в автономном компиляторе:

введите описание изображения здесь

Или попробуйте в 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 байт

Аналогично /codegolf//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

введите описание изображения здесь

colsw
источник
ваш вывод не совсем такой, пожалуйста, посмотрите мой GIF и исправьте свой
Mukul Kumar
Я думаю, что вы можете отбросить пробел после -m, и потерять круглые скобки $_%4(кажется, работает на моей коробке по крайней мере).
VisualMelon
@VisualMelon спасибо, остался ()от другого вызова, с которого я прямо скопировал свой код.
Colsw
8

Python 2, 119 113 112 байт

Я изначально ушел со случайным количеством random()/.75, однако конечная точка не будет включена. Нет большой разницы между этим и другим вопросом для бесконечного времени загрузки, за исключением случайности и того факта, что она действительно заканчивается.

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

спасибо Джонатану Аллану за сохранение 6 байтов и DJMcMayhem за сохранение байта!

Када
источник
1
Сохранить 6 байтов с помощью import time,random as rи r.randint.
Джонатан Аллан
@JonathanAllan Не понимал, что вы можете импортировать так, спасибо!
Каде
Цикл for немного короче: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%

К сожалению, время довольно плохое, но у Batch нет ничего лучше, чем использовать ping.

Нил
источник
Это работает только на Windows. Пакет FreeCom DOS дает Loading % Invalid switch. - /aw (я хотел бы попробовать это в MS DOS, если я все еще могу найти свою копию).
Брайан Минтон
@BrianMinton: Удачи, запустив его в MS DOS (команда ping отсутствует)
Джошуа
@BrianMinton Требуется CMD.EXE из-за расширенных подстановок переменных.
Нил
@ Джошуа Ну, по крайней мере, не встроенный; это не происходило до Windows 2000.
Нил
6

*> <> (Морская звезда), 86 82 байта

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

Попробуй это здесь!

Это может быть в состоянии играть в гольф больше, но я не вижу ничего супер очевидного. Он спит 100 мс, 400 мс или 700 мс, если это не достаточно случайно, дайте мне знать!

Спасибо @TealPelican за то, что сэкономили мне 4 байта и сделали его намного более случайным!

Самыми большими проблемами, которые я обнаружил (хотя все еще пытался сохранить их малыми), была случайность и фактически вывод «загрузка - 100%» в конце, а не просто выход при моем ближайшем удобстве: с.

redstarcoder
источник
1
Эй, мне нравится этот подход к языку> <>, он открывает намного больше проблем: D - Я немного подправил ваш код, и я не сильно его уменьшил, но изменил случайные числа. Ссылка на> <> код Единственное изменение, которое сделает это жизнеспособным в *> <>, - это изменение ~ из ссылки на код на S, чтобы использовать время. Это генерирует случайные числа вплоть до 749 и исключает некоторые лишние операции стека. PS Я бы с удовольствием, если бы вы могли сделать *> <> онлайн-переводчика: D
Teal pelican
1
@ Tealpelican, спасибо! Я люблю ваши изменения, особенно генератор случайных чисел! Я также хотел бы, чтобы онлайн * * <> переводчик: с. Я не слишком часто играю с JS, но я оба позабочусь о том, чтобы поиграть с JS или, возможно, сначала запустить Go-интерпретатор через GopherJS для начала. :)
redstarcoder
1
Спасибо, потребовалось некоторое время, чтобы на самом деле придумать рабочую версию, но это, кажется, мошенник, который я мог создать. Я буду следить за этим и, если не получится, попробую сделать Python. Я все еще думаю, что первая линия могла бы быть в гольфе чуть больше, но я не смог сделать это сам.
Чирок пеликан
1
@Tealpelican, надеюсь, это заполнит зуд онлайн-переводчика, или, по крайней мере, заставит шарить. Я собираюсь найти способ поделиться кодом позже. starfish.000webhostapp.com
redstarcoder
1
Это было быстро, просто запустив программу сейчас и, кажется, она работает нормально: D Я попытаюсь взглянуть на использование этого для некоторых задач на этой неделе.
Тил пеликан
5

Perl 6 , 67 байт

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

Expanded:

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

}
Брэд Гилберт b2gills
источник
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 Я не знал, что это работает! Спасибо за совет.
Исмаэль Мигель
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.Startили Async.RunSynchronously.

pmbanka
источник
Мгновенное повышение из-за F #
Snowfire
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,'%';

Изменено обратно на echo, чтобы выиграть несколько байтов, так как я использовал printf только для принудительного форматирования как int. Увеличивая $ i с 0, я получаю правильное целое число. Используя одинарные кавычки в качестве разделителя строк, не нужно экранировать обратную косую черту, что приводит к освобождению другого байта

80:

Перемещение приращения $ i из последней секции for к prinf дало мне еще 3 скидки. (См. Комментарии ниже)

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

83:

Убрал инициализацию переменной с загрузчиками.

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

90:

Я попытался удалить инициал $ i, чтобы получить несколько байтов, так как мне пришлось добавить немало, чтобы включить анимацию загрузчика. printf добавляет 2 в отличие от echo, но форматирование NULL в виде целого числа приводит к 0.

for($l='-\|/';$i<101;usleep(rand(0,750)*1e3),$i++)printf("\rloading %s %d%%",$l[$i%4],$i);
thisisboris
источник
Есть одна ошибка: вопрос требует, чтобы задержка составляла от 1 до 750 включительно. У вас есть от 0 до 750. Кроме того, вы можете переместить инкремент в printf, сэкономив вам один байт: for(;$i<101;usleep(rand(1,750)*1e3))printf("\rloading %s %d%%",'-\|/'[$i%4],$i++);(82 байта)
Исмаэль Мигель
1
@IsmaelMiguel rand () включительно , или это из-за умножения на * 1e3? Я собираюсь пробраться в этот бесплатный байт.
Thisisboris
Вопрос требует случайного интервала от 1 мс до 750 мс (включительно). rand(0,750)*1e3возвращает значение между 0 (недействительным) и 750, которое умножается на 1000. rand(1,75e4)возвращает значение между 1 (недействительным) и 750000. Задержка должна быть rand(1,750)*1e3, поскольку вы используете usleep(). Он работает с микросекундами , которые в 1000 раз меньше миллисекунды.
Исмаэль Мигель
Это может сделать вас неудобно близким к ответу пользователя 59178, но echoна 3 байта короче printf. Вы можете поставить самую последнюю версию на вершину и использовать #titleвместо **title**. И пропущен пробел между числом и %.
Тит
@Titus Я не могу использовать эхо здесь, потому что я не инициализировал свой $ i, от нуля до строки оценивается как '', через printf I форсирует целое число (% 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…. И удалите эту переменную p, вместо этого используйте ее неявную.
manatwork
3

Баш, 162 104 байта

Модификация ответа Захария по смежному вопросу с огромными улучшениями от manatwork:

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

Я должен был посмотреть, как сделать случайные числа в Bash.

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]`
}
Hydraxan14
источник
1
Хорошая первая попытка. Смотрите Советы по игре в гольф в Bash для советов по улучшению. Лично я хотел бы s='-\|/';for x in {0..100};{ printf "\rloading ${s:x%4:1} $x %%";sleep `printf .%03d $[RANDOM%750+1]`; }поговорить с BTW, у нашего коллеги по сайту Unix & Linux также есть вопрос о том, как выполнять целочисленные вычисления и вычисления с плавающей запятой в bash или других языках / фреймворках? ,
Манатворк
@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 :)

Snowfire
источник
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 не попросил Программу, чтобы вы могли заменить 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);
  }
}
nmjcman101
источник
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.
Исмаэль Мигель
Сбрейте 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 было бы исправлено
Келли Лоудер
1
@ Titus: я считаю, UpdateInterval:>RandomReal@.75неоднократно звонит RandomReal, но UpdateInterval->RandomReal@.75позвонил бы только один раз.
Омар
2

R - 94 байта

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

Это действительно приятно sample(750,1) == sample(1:750,1).

прыгучий мяч
источник
2

HTML + JS (ES6), 16 + 87 = 103 байта

(f=_=>a.innerHTML='\\|/-'[i++%4]+` ${i<100&&setTimeout(f,Math.random()*750),i} %`)(i=0)
loading <a id=a>

darrylyeo
источник
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 %";'

Редактирование: благодаря Титу, подтверждающему в точности то, что разрешено с Мукулом Кумаром, мы можем сохранить 3 байта с меньшим ограниченным диапазоном, но не все 9 байтов с неограниченным диапазоном. Спасибо также за то, что указал на то, что я забыл про велосипедного персонажа и предоставил простое решение для этого

user59178
источник
1
Случайные требования заключаются в том, что вы генерируете все от 1 мс до 750 мс с возможностью> 0. Я не вижу, чтобы другие ценности были запрещены. rand(1,75e4)экономит 3 байта; 1e6может сохранить еще один; и никакие параметры вообще не сохраняют 9 байтов в целом; и я не вижу, чтобы это нарушало какое-либо правило. Но вы забыли зациклить персонажа: +16 ","-\\|/"[$i%4],"вместо -.
Тит
@ Titus Не usleep(rand(1,75e4))генерирует ли случайный интервал от 1 микросекунды до 750 миллисекунд ? Также, согласно вопросу, интервал должен быть от 1 до 750 включительно.
Исмаэль Мигель
Смотрите последние комментарии по вопросу: 1 to 75e4это приемлемо.
Тит
@Titus Я рассматривал подобные изменения, но решил пойти с тем, что, казалось, подразумевалось под вопросом (целочисленные задержки в миллисекундах). Спасибо за вопрос, что именно было разрешено!
user59178 12.12.16
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>

tkellehe
источник
Почему так много ¤с?
Kritixi Lithos
@KritixiLithos Noodel использует пробелы в качестве NOP, поэтому для печати пробела ¤используется :)
tkellehe
1
Кстати, приятно, что для этого есть фрагмент стека :)
Kritixi Lithos
Как работает фрагмент? Найдет ли импортированный скрипт элемент с идентификатором noodle, а затем переведет его codeв Javascript?
Carcigenicate
@Carcigenicate, Да. «Парсер» - это функция JavaScript,noodel которая codeправильно обрабатывает . Он переводит codeв токены, которые являются объектами JavaScript, которые объединяются и затем выполняются. ppcg.min.jsСоздает соответствующие HTML - объекты и переводит вывод о том , что разбирается в HTML - объектов для создания дисплея. Каждый токен выполняется, проходя через них, вызывая событие шага, которое регистрируется для обновления экрана :) Это помогает?
17
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 @ Мукул Кумар Не читал между строк, спасибо! :)

Абель Том
источник
1
с [] не случайно ... но
Мукул Кумар
Или, другими словами, вы не должны выбирать случайный символ из "\ | / -", вы должны отображать /, затем -, затем \, затем |, в цикле.
Carcigenicate
@MukulKumar @ Carcigenicate Обновил код, чтобы он делал то, что сказано в спецификации относительно циклических символов!
Абель Том
1

MATLAB, 108 байт

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

Октава, 122 120 119 108 байтов

Я неправильно понял задачу и создал бесконечный загрузчик, который перезапустился с 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? Это может подождать 751 мс. Также вы можете оставить ()офф-ранд и сохранить 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

Возможно, мне следует исправить некоторые ошибки, связанные с синтаксическим анализом строкового литерала в ближайшее время

SuperJedi224
источник
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-файл отображается медленнее, чем на самом деле)

rnso
источник
Что с материалом в конце в GIF?
Carcigenicate
Похоже, что это артефакт из программы захвата экрана.
rnso
1

107 75 рубин

-32 благодаря манатворке

Обычный

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

Golfed

101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}
Том Лазар
источник
Учитывая, что у вас есть одна строка вывода для перезаписи, system'clear'здесь перебор. Также использование отдельной переменной i. Да, и по возможности пересчитайте: 0.750-0.010.749(также обратите внимание, что вам не хватает одного десятичного знака в 0,01 - должно быть 0,001). Полученный 101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}становится очень похож на Конора О'Брайен «s Руби ответ в Loading ... навсегда , но так это вызов.
manatwork
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))

Похоже на Загрузка ... Навсегда, но мне пришлось много отредактировать свой ответ.

питон-b5
источник
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( \ | %это двухбайтовые токены

Timtech
источник
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)))
Carcigenicate
источник
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

sergiol
источник
Ваш вывод кажется немного не в порядке ...
Мукул Кумар
хм ,,, мой код исчез! ...
sergiol
Я имею в виду, что ваш вывод в этом формате "loading ... xx%", вместо этого он должен выглядеть примерно так: "loading - xx%", где '-' меняется, как объяснено в вопросе.
Мукул Кумар
@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

Expanded:

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
polyglotrealIknow
источник