Fais de moi un faux chargeur

29

Faites un faux chargeur comme ceci:

Paramètres :

  • Affichez loading(espace) l'un de ces éléments cycliquement -\|/(espace) (compteur de pourcentage de 0 à 100) puis a %.
  • Le compteur de pourcentage est censé augmenter de 1 chaque fois que l'affichage change.
  • Le temps mis par le compteur pour passer à l'itération suivante est aléatoire. N'importe quel type d'aléatoire fera l'affaire tant que la fonction / méthode est capable de générer tous les entiers aléatoires ayant une probabilité> 0 dans la plage 1<= ms <=750ici msétant le temps en millisecondes.
  • Commencez à loading - 0 %.
  • Fin à loading - 100 %.
  • AUCUNE ENTRÉE n'est requise.
  • soumettre un programme ou une fonction complète ou quelque chose de similaire.

Le code que j'ai utilisé:

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

Gagnant

  • le code avec le moins d'octets gagne.
Mukul Kumar
la source
11
En relation
DJMcMayhem
1
Je ne pensais pas que c'était un doublon. Cette question ne peut pas être implémentée dans> <>, mais peut être dans *> <> par exemple. J'ai bien aimé.
redstarcoder
1
@Mego La question n'est pas un doublon. La sortie est un peu différente, le temps d'exécution est complètement différent et la sortie nécessite un temps aléatoire au lieu d'un délai fixe de 250 ms. Les réponses sur une question ne peuvent pas être utilisées sur l'autre sans modification lourde. Veuillez lire les questions.
Ismael Miguel
8
En tant qu'auteur de l'autre défi, j'interviendrai dans le débat dupe. Bien que les caractères cycliques ( \|/-) soient les mêmes, la réponse semble être différente en ce qu'elle n'est pas infinie et implique la génération de nombres aléatoires, plutôt qu'une sortie statique. Par conséquent, je dirai que, bien que je me sois d'abord senti copié, cela ne me semble pas dupe.
FlipTack
@ flp.tkc cette idée est venue de nombreux endroits combinés comme je l'ai vu -\|/dans certains jeux. Et je me suis inspiré des programmes d'installation de la console.
Mukul Kumar

Réponses:

6

MATL , 45 octets

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

Exemple exécuté dans le compilateur hors ligne:

entrez la description de l'image ici

Ou essayez-le sur MATL Online!

Explication

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)
Luis Mendo
la source
16

Powershell, 71 68 65 octets

Similaire à /codegolf//a/101357/59735

Sauvegardé 3 octets en n'étant pas idiot (laissé le ... au chargement)

-3 grâce à VisualMelon

changé 750 -> 751 pour vous assurer que 750 est inclus.

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

Explication:

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 mis à jour

entrez la description de l'image ici

colsw
la source
votre sortie n'est pas exactement la même s'il vous plaît voir mon gif et corrigez le vôtre
Mukul Kumar
Je pense que vous pouvez laisser tomber l'espace après -m, et perdre les parenthèses autour $_%4(semble fonctionner au moins sur ma boîte).
VisualMelon
@VisualMelon merci, les ()restes de l'autre défi dont j'ai directement copié mon code.
colsw
8

Python 2, 119 113 112 Octets

J'étais à l'origine allé avec le montant aléatoire étant random()/.75, cependant le point final ne serait pas inclus. Il n'y a pas beaucoup de différence entre cette question et l'autre question pour le temps de chargement infini, sauf pour le caractère aléatoire et le fait qu'il se termine réellement.

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

merci à Jonathan Allan pour avoir sauvé 6 octets, et DJMcMayhem pour avoir sauvé un octet!

Kade
la source
1
Économisez 6 octets avec import time,random as ret r.randint.
Jonathan Allan
@JonathanAllan Je ne savais pas que vous pouviez importer comme ça, merci!
Kade
Une boucle for est légèrement plus courte:for i in range(101):print'\rLoading','-\|/'[i%4],i,'%',;time.sleep(r.randint(1,750)/1e3)
DJMcMayhem
@DJMcMayhem Oups, je l'avais testé avec range(1,101)pour une raison quelconque.
Kade
En fait, j'ai trouvé quelque chose de 3 octets plus court:i=0;for c in'-\|/'*25:print'\rLoading',c,i,'%',;time.sleep(r.randint(1,750)/1e3);i+=1
DJMcMayhem
6

Lot, 185 octets

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

Le timing est malheureusement assez médiocre, mais Batch n'a rien de mieux à utiliser que ping.

Neil
la source
Cela ne fonctionne que sur Windows. Le lot FreeCom DOS donne Loading % Invalid switch. - /aw ( j'adorerais l' essayer sous MS DOS si je peux toujours trouver ma copie).
Brian Minton
@BrianMinton: Bonne chance pour l'exécuter sur MS DOS (pas de commande ping)
Joshua
@BrianMinton Il nécessite CMD.EXE en raison des substitutions de variables avancées.
Neil
@Joshua Eh bien, pas construit du moins; cela n'est pas arrivé avant Windows 2000.
Neil
6

*> <> (Étoile de mer), 86 82 octets

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

Essayez-le ici!

Cela peut peut-être être plus joué au golf, mais je ne vois rien de super évident. Il dort 100 ms, 400 ms ou 700 ms, si ce n'est pas assez aléatoire, faites le moi savoir!

Merci à @TealPelican de m'avoir sauvé 4 octets et de le rendre beaucoup plus aléatoire!

Les plus grands défis que j'ai rencontrés (tout en essayant de le garder petit) étaient le caractère aléatoire et la sortie de "chargement - 100%" à la fin, au lieu de simplement sortir à ma convenance la plus proche: p.

redstarcoder
la source
1
Hé, j'adore cette version de la langue <<>, cela ouvre beaucoup plus de défis: D - J'ai eu un peu de réglage sur votre code et je ne l'ai pas beaucoup réduit mais j'ai changé les nombres aléatoires. Lien vers le code> <> Le seul changement pour rendre cela viable dans *> <> serait de changer le ~ du lien de code en S pour utiliser l'heure. Cela génère des nombres aléatoires jusqu'à 749 et supprime certaines opérations de pile en excès. PS J'aimerais que vous fassiez *> <> interprète en ligne: D
Pélican bleu sarcelle
1
@Tealpelican, merci! J'adore vos changements, en particulier le générateur de nombres aléatoires! J'aimerais aussi un interprète en ligne *> <>: p. Je ne joue pas trop souvent avec JS, mais je vais tous les deux envisager de jouer avec JS, ou peut-être d'abord exécuter l'interpréteur Go via GopherJS pour une longueur d'avance. :)
redstarcoder
1
Merci, il a fallu un certain temps pour arriver à une version de travail, mais cela semble le plus golfé que je puisse générer. Je garderai mon œil ouvert et sinon je pourrai essayer d'en faire un en python. Je pense toujours que la première ligne pourrait être jouée un peu plus mais je n'ai pas pu le faire moi-même.
Pélican bleu sarcelle
1
@Tealpelican, espérons-le, cela comble la démangeaison de l'interprète en ligne, ou au moins fait rouler la balle. Je vais chercher un moyen de partager du code plus tard. starfish.000webhostapp.com
redstarcoder
1
Cela a été rapide, il suffit d'exécuter le programme maintenant et semble fonctionner correctement: D Je vais essayer de l'utiliser pour certains défis cette semaine.
Pélican
5

Perl 6 , 67 octets

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

Étendu:

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

}
Brad Gilbert b2gills
la source
4

Javascript (ES6), 128 118 116 115 112 110 109 octets

Cela semble fonctionner parfaitement bien, même avec cette source sommaire de nombres "aléatoires".

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


Alternative 1 , Javascript + HTML, 16 + 84 octets

Celui-ci utilise un élément déjà existant pour afficher le contenu restant:

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

Alternative 2 , 95 octets

Si je peux supposer qu'un onglet est ouvert et que vous le collez dans la console:

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

Au lieu d'afficher le HTML, le titre du document va changer.


Merci à @ user2428118 pour avoir économisé 2 octets!

Ismael Miguel
la source
Vous pouvez supprimer l' ()after Datepour enregistrer deux octets.
user2428118
@ user2428118 Je ne savais pas que ça marche! Merci pour le tuyau.
Ismael Miguel
4

F #, 118 octets

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

Pour exécuter cet extrait, passez-le dans Async.Startou Async.RunSynchronously.

pmbanka
la source
Vote positif instantané à cause de F #
Snowfire
4

PHP, 90 83 80 78 77 octets

77:

La fermeture ;n'est pas nécessaire.

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

78:

En cherchant une autre solution pour obtenir un 0 au départ sans initialiser la variable, j'ai trouvé ceci:

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

Changé en écho pour gagner quelques octets car je n'ai utilisé printf que pour forcer le formatage en int. En incrémentant le $ i incrémenté avec 0, j'obtiens un entier valide. En utilisant des guillemets simples comme délimiteur de chaîne, la barre oblique inverse n'a pas besoin d'être échappée, ce qui entraîne la libération d'un autre octet

80:

Déplacer l'incrément de $ i de la dernière section for vers l'imprimeur m'a donné encore 3 de plus. (Voir les commentaires ci-dessous)

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

83:

Suppression de l'initialisation d'une variable avec les états de charge.

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

90:

J'ai essayé de supprimer l'init de $ i pour gagner quelques octets, car j'ai dû en ajouter quelques-uns pour activer l'animation du chargeur. printf ajoute 2 par opposition à echo, mais le formatage NULL comme un entier donne 0.

for($l='-\|/';$i<101;usleep(rand(0,750)*1e3),$i++)printf("\rloading %s %d%%",$l[$i%4],$i);
thisisboris
la source
Il y a une erreur: la question exige que le délai soit compris entre 1 et 750 inclus. Vous avez entre 0 et 750. En outre, vous pouvez déplacer l'incrément vers le printf, vous économisant un seul octet:for(;$i<101;usleep(rand(1,750)*1e3))printf("\rloading %s %d%%",'-\|/'[$i%4],$i++); (82 octets)
Ismael Miguel
1
@IsmaelMiguel rand () est inclusif , ou est-ce à cause de la multiplication par * 1e3? Je vais me faufiler dans cet octet libre.
thisisboris
La question nécessite un intervalle aléatoire entre 1 ms et 750 ms (inclus). rand(0,750)*1e3renvoie une valeur comprise entre 0 (non valide) et 750, qui est multipliée par 1000. rand(1,75e4)renvoie une valeur comprise entre 1 (non valide) et 750000. Le délai doit être rand(1,750)*1e3, puisque vous utilisez usleep(). Il fonctionne avec des microsecondes , ce qui est 1000 fois plus petit qu'une milliseconde.
Ismael Miguel
Cela peut vous amener inopinément près de la réponse de user59178, mais echoest 3 octets plus court que printf. Vous voudrez peut-être mettre la version la plus récente en haut et utiliser à la #titleplace de **title**. Et il manque un espace entre le nombre et le %.
Titus
@Titus Je ne peux pas utiliser echo ici parce que je n'ai pas initialisé mon $ i, null à la chaîne est évalué à '', via printf je force un entier (% d) résultant en null = 0. #justphpthings
thisisboris
3

Groovy, 113 87 octets

-36 octets grâce à lealand

{p=-1;101.times{print"\rLoading ${"-\\|/"[p++%4]} $p%";sleep Math.random()*750as int}}​
Urne de poulpe magique
la source
2
84 octets, et devrait fonctionner à partir de la console Groovy:p=-1;101.times{println"Loading ${"-\\|/"[p++%4]} $p%";sleep Math.random()*750as int}
lealand
1
Bien que le propriétaire de la question ne l'ait pas explicitement demandé, il souhaite probablement que les messages de chargement consécutifs se remplacent. Il n'y a pas de différence de taille, il vaut donc mieux changer println"Loading…print"\rLoading…. Et supprimez cette variable p, utilisez-la à la place.
manatwork
3

Bash, 162 104 octets

Modification de la réponse Zachary sur une question connexe, avec des améliorations massives par manatwork:

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

Je devais chercher comment faire des nombres aléatoires en bash.

Non golfé / expliqué

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
la source
1
Bon premier essai. Voir Conseils pour jouer au golf à Bash pour des conseils d'amélioration. Personnellement, j'irais avec s='-\|/';for x in {0..100};{ printf "\rloading ${s:x%4:1} $x %%";sleep `printf .%03d $[RANDOM%750+1]`; }BTW, notre collègue Unix et Linux a également une question sur la façon de faire des calculs d'entiers et de flottants, en bash ou dans d'autres langages / frameworks? .
manatwork
@manatwork De bons liens! Je ne savais pas $[math], utiliser à la { }place de do done, ou utiliser des tiques à la place de $(). Oui, réutiliser $ x pour accéder au tableau graphique du chargeur est logique. De plus, gifler un .devant le nombre pour obtenir la décimale pour le sommeil est assez doux!
Hydraxan14
3

C #, 170 149 135 octets

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

Non golfé:

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

Je ne garantis pas que chaque personnage dans ce document est correct, veuillez me corriger s'il y a des erreurs de compilation. J'ai dû taper le tout sur mon téléphone, donc j'ai peut-être accidentellement inclus des erreurs ... ¯_ (ツ) _ / ¯ J'espère que vous me pardonnerez

Testé sur mon PC, fonctionne comme un charme et j'ai même économisé 20 octets grâce à pmbanka :)

Snowfire
la source
1
Vous pouvez utiliser \r(retour chariot) au lieu de Console.Clear(). Vous pouvez également incorporer la variable s pour enregistrer certains octets.
pmbanka
1
Vous pouvez également économiser un octet supplémentaire en remplaçant le i<=100fori<101
auhmaan
for (int i = 0; i <= 100; i++)peut être réécrit comme for (int i = 0; i++ <= 100;)Ensuite, vous pouvez mettre le Thread.Sleep à l'endroit où se trouvait i ++ et enregistrer les deux accolades. Couper 3 octets au total
CSharpie
OP n'a pas non plus demandé de programme afin que vous puissiez le remplacer static void l()par()=>
CSharpie
2

C 112 103 octets

9 octets enregistrés grâce à @G. Sliepen. Pas très excitant, juste un golf de votre réponse C ++ en gros. Ce n'est pas non plus une fonction aléatoire très excitante. J'y ai pensé Sleep(c[i%4]), ou Sleep(i)mais ils ne sont pas du tout aléatoires!

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

Non golfé:

#include <windows.h>
int i;
void f() {
  for(;i<101;) {
    printf("\rloading %c %d %%", "-\\|/"[i%4], i++);
    Sleep(rand()%750+1);
  }
}
nmjcman101
la source
3
J'ai peur mais rand ()%750génère des nombres de 0 à 749, vous devrez ajouter 1.
Mukul Kumar
Changer rand()%750pour rand()%751ne donnera pas le résultat souhaité. Il va générer une valeur aléatoire entre 0 et 750. Dans la question, le retard doit être compris entre 1 et 750 (inclus). Selon tutorialspoint.com/c_standard_library/c_function_rand.htm , la rand()fonction génère des nombres compris entre 0 et (au moins) 32767. Si vous le faites 0 % 750, vous obtenez 0 depuis 0 / <anything> == 0.
Ismael Miguel
Raser 9 octets en supprimant char*c="-\\|/";et en utilisant la chaîne littérale directement au lieu de la variable c:printf(...,"-\\|/"[i%4],...)
G. Sliepen
2

Mathematica, 133 octets

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

Cela s'exécutera une fois, en supposant que x n'est pas défini. Clear@xva le redémarrer.

55 caractères attachés dans la verbosité: /

Kelly Lowder
la source
S'agit-il d'un intervalle fixe ou sera-t-il aléatoire à plusieurs reprises?
Titus
C'est aléatoire. UpdateInterval:>. 75 aurait été corrigé
Kelly Lowder
1
@Titus: Je crois que UpdateInterval:>[email protected]les appels répétés RandomReal, mais UpdateInterval->[email protected]ne l'appelleraient qu'une seule fois.
Omar
2

R - 94 octets

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

Vraiment sympa sample(750,1) == sample(1:750,1).

balle rebondissante
la source
2

HTML + JS (ES6), 16 + 87 = 103 octets

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

darrylyeo
la source
2

PHP, 66 79 octets

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

Malheureusement, j'ai dû assigner $ i pour qu'il puisse imprimer '0'.
Utilisez comme:

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

Modifications: grâce à Titus confirmant exactement ce qui est autorisé avec Mukul Kumar, nous pouvons économiser 3 octets avec une plage moins restreinte, mais pas les 9 octets avec une plage non restreinte. Merci également d'avoir souligné que j'avais oublié le caractère cycliste et d'avoir fourni une solution simple pour le faire.

user59178
la source
1
Les exigences aléatoires sont que vous générez tous les 1 ms à 750 ms avec une possibilité> 0. Je ne peux pas voir que d'autres valeurs sont interdites. rand(1,75e4)enregistre 3 octets; 1e6peut en sauver un autre; et aucun paramètre n'économise au total 9 octets; et je ne vois pas que violer une règle. Mais vous avez oublié de faire défiler le caractère: +16 pour ","-\\|/"[$i%4],"au lieu de -.
Titus
@Titus Ne usleep(rand(1,75e4))générera pas d' intervalle aléatoire entre 1 microseconde et 750 millisecondes ? De plus, selon la question, l'intervalle doit être compris entre 1 et 750 inclus.
Ismael Miguel
Voir les derniers commentaires sur la question: 1 to 75e4est acceptable.
Titus
@Titus J'avais envisagé des changements comme ceux-ci, mais j'ai décidé de suivre ce qui semblait impliquer la question (retards en millisecondes entiers). Merci d'avoir demandé exactement ce qui était autorisé!
user59178
2

Noodel , non compressible 40 octets

Il suffit de revenir à travers d'anciens défis (comme dans les défis qui ont été faits avant Noodel ) et de rivaliser avec Noodel pour trouver où il est faible.

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

Si la sortie finale n'a pas d'importance, vous pouvez économiser 2 octets.

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

Noodel pousse le haut de la pile à l'écran à la fin du programme donc en ajoutant le€Ḃ cela empêche que cela se produise.

Essayez-le :)

Comment ça marche

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
la source
Pourquoi y a-t-il tant de ¤s?
Kritixi Lithos
@KritixiLithos Noodel utilise des espaces comme NOP donc pour imprimer un espace, il ¤est utilisé :)
tkellehe
1
Btw, c'est bien qu'il y ait un extrait de pile pour cela :)
Kritixi Lithos
Comment fonctionne l'extrait? Le script importé trouve-t-il l'élément avec l'id de noodle, puis traduit-il codeen Javascript?
Carcigenicate
@Carcigenicate, oui. Le "parseur" est la fonction JavaScriptnoodel qui gère codecorrectement. Il traduit les codetokens en objets JavaScript qui sont enchaînés puis exécutés. Le ppcg.min.jscrée les objets HTML appropriés et traduit la sortie de ce qui est analysé dans les objets HTML pour créer l'affichage. Chaque jeton est exécuté en les parcourant, déclenchant un événement de pas enregistré pour mettre à jour l'écran :) Est-ce que cela aide?
tkellehe
2

C 126 121 octets

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

Version non golfée:

 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 N'a pas lu entre les lignes là-bas, merci! :)

Abel Tom
la source
1
c [] n'est pas aléatoire ... Mais c'est du vélo ....
Mukul Kumar
Ou, en d'autres termes, vous n'êtes pas censé choisir un caractère aléatoire dans "\ | / -", vous êtes censé afficher /, puis -, puis \, puis |, dans un cycle.
Carcigenicate
@MukulKumar @ Carcigenicate Mise à jour du code pour qu'il fasse ce que dit la spécification concernant les personnages cyclistes!
Abel Tom
1

MATLAB, 108 octets

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

Octave, 122 120 119 108 octets

J'ai mal lu le défi et créé un chargeur infini qui a redémarré à 0 une fois qu'il a passé 100. Ce qui en fait un chargeur unique:

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

Circulation a, a=a([2:4,1])était l'idée de flawr ici . En outre, enregistré 2 octets en sautant les parenthèses après randmerci à MattWH.

Stewie Griffin
la source
Devrait-il en être ainsi .749*rand()+.001? Cela peut attendre 751 ms. Vous pouvez également laisser le ()rand off et enregistrer 2 octets.
MattWH
1

ForceLang, 250 octets

Non compétitif, nécessite des fonctionnalités linguistiques postérieures à la question

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

Je devrais probablement corriger bientôt quelques bugs liés à l'analyse littérale des chaînes.

SuperJedi224
la source
1

Raquette 110 octets

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

Non golfé:

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

Essai:

(f)

Sortie: entrez la description de l'image ici

(Ce fichier gif affiche un affichage plus lent que réel)

rnso
la source
Quel est le truc à la fin dans le gif?
Carcigenicate
Cela semble être un artefact du programme de capture d'écran.
rnso
1

107 75 rubis

-32 grâce au manatwork

Ordinaire

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

Golfé

101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}
Tom Lazar
la source
Étant donné que vous avez une seule ligne de sortie à écraser, system'clear'c'est exagéré ici. Aussi l'utilisation de la variable séparée i. Oh, et précalculez si possible: 0.750-0.010.749(notez également qu'il vous manque une décimale dans 0,01 - devrait être 0,001). La résultante 101.times{|c|$><<"\rloading #{'-\|/'[c%4]} #{c} %";sleep rand*0.749+0.001}est très similaire à Conor O'Brien de Ruby réponse en cours de chargement ... Pour toujours , mais il en est le défi.
manatwork
1

Python 3, 149 octets

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

Similaire à Loading ... Forever, mais j'ai dû beaucoup modifier ma réponse à partir de là.

python-b5
la source
1

TI-Basic, 80 octets

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

Le caractère aléatoire provient de la For(boucle (E est un jeton scientifique E) et puisque TI-Basic est interprété, il y a aussi automatiquement des frais généraux. Rappelez-vous que dans TI-Basic, les lettres minuscules et certains symboles ASCII moins courants sont deux octets chacun (donc spécifiquement pour ce programme, l o a d i n g sub( \ | %sont les jetons à deux octets

Timtech
la source
1

Clojure, 109 octets

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

Boucles sur une liste de la plage de nombres de 0 à 100, zippée avec une liste infinie de "\|/-"répétition pour toujours.

; (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
la source
1

tcl, 116

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

Jouable sur http://www.tutorialspoint.com/execute_tcl_online.php?PID=0Bw_CjBb95KQMOXoybnVSOVJEU00

sergiol
la source
Votre sortie semble peu excitée ...
Mukul Kumar
hmm ,,, mon code a disparu! ...
sergiol
Je veux dire que votre sortie est dans ce format "loading ... xx%" au lieu de cela devrait être comme ce "loading - xx%" où '-' varie comme expliqué dans la question.
Mukul Kumar
@MukulKumar: corrigé.
sergiol
1

Java 8, 130 octets

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

Explication:

()->{                           // 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 de sortie:

entrez la description de l'image ici

Kevin Cruijssen
la source
0

Visual Basic, 371 octets

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

Étendu:

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
la source