Chargement… Forever


106

Votre défi consiste à créer un écran de chargement infini, qui ressemble à ceci:

entrez la description de l'image ici


Ou, pour être plus précis:

  • Ne prenez aucune entrée.
  • Sortie Loading..., avec un espace de fin, mais pas de nouvelle ligne.
  • Le cycle en continu à travers les caractères |, /, -et \: toutes les 0,25 secondes, écrasent la dernière avec le suivant dans la séquence. Vous pouvez écraser le dernier caractère ou effacer et réécrire la ligne entière tant que le temps Loading...reste inchangé.

Règles

  • Le texte de sortie doit ressembler exactement à celui spécifié. Les retours à la ligne / espaces sont acceptables.
  • Vous ne devez pas attendre 0,25 seconde avant d’afficher la sortie. La première image doit être imprimée dès que le programme est exécuté.
  • Votre programme devrait pouvoir fonctionner indéfiniment. Par exemple, si vous utilisez un compteur pour les images, celui-ci ne devrait jamais provoquer d'erreur en dépassant le maximum dans votre langue.
  • Bien que le délai d'attente entre chaque "trame" devrait être de 0,25 seconde, il est évident que cela ne sera jamais exact - une marge d'erreur de 10% environ est autorisée.
  • Vous pouvez soumettre une fonction, mais elle doit être imprimée sur stdout.
  • Vous pouvez soumettre une réponse dans un environnement non console (mais toujours basé sur du texte), à ​​condition qu'il soit capable de produire l'animation de chargement.
  • C'est du , donc la solution la plus courte (en octets) est gagnante. Les échappatoires standard de code-golf s'appliquent.
  • Si possible, veuillez fournir un gif de votre écran de chargement en action.

Exemple

Voici le code C ++ que j'ai utilisé pour créer l'exemple (non-golfé):

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

using namespace std;

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

    cout << "Loading... ";

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

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

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

Que le meilleur golfeur gagne!


3
Les soumissions peuvent-elles attendre 0,25 seconde avant d’afficher initialement le résultat?
ETHproductions

2
Non, mais merci de l'avoir mentionné, je vais l'ajouter aux règles. @ETHproductions
FlipTack

Une nouvelle ligne (après le symbole d’animation) est-elle acceptable?
Cuivre

Bien sûr :) @Copper
FlipTack

1
@TheBitByte, cela signifie que, théoriquement, rien dans votre programme ne le provoquera d'erreur - tel qu'un débordement de compteur ou une profondeur maximale de récursivité.
FlipTack

Réponses:


76

HTML / CSS, 183 180 163 161 160 147 143 octets

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

Edit: 3 octets sauvegardés grâce à @betseg. Sauvegardé 17 octets grâce à @manatwork. Enregistré 1 octet grâce à @Daniel. Sauvegardé 13 octets grâce à @Ismael Miguel. Sauvegardé 4 octets grâce à @Fez Vrasta.


4
Selon méta, CSS + HTML convient parfaitement pour répondre à des questions. De plus, j'ai permis cela dans la description du défi. Donc, cette réponse est parfaitement valide :)
FlipTack

5
HTML + CSS est TC, donc je ne vois pas pourquoi il pourrait ne pas être concurrent
TuxCrafting

1
@ TùxCräftîñg CSS n'est certainement pas complet car vous pouvez résoudre le problème d'arrêt qui se pose (s'il n'y a pas d'animation infinie, elle s'arrête). Je pense que la même chose s'applique pour HTML (si vous n'incluez pas JS).
Artyer

4
@Artyer stackoverflow.com/a/5239256/3273184 est une chose à considérer.
Mama Fun Roll

4
@MamaFunRoll Un commentaire sur cet article mentionne que cela ne le prouve pas vraiment parce qu'il ne peut pas fonctionner en boucle sans intervention de l'utilisateur. Cependant, cela peut résoudre ce problème particulier et je ne vois donc aucun problème avec cette réponse.
ETHproductions

57

Vim, 43 , 41 octets

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

Deux octets enregistrés grâce à @Udioica!

Voici une animation (légèrement dépassée) de ce qui se passe en temps réel!

entrez la description de l'image ici

Et voici une explication:

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

1
juste une bêtise: est-ce que cela viole "Votre programme devrait pouvoir fonctionner indéfiniment"? Peut-il éventuellement atteindre un débordement de pile? :)
Dan Oak

4
@ dahnoak Eh bien, évidemment, je ne peux pas le tester à l'infini, mais il n'alloue pas de mémoire supplémentaire, je ne vois donc aucune raison pour laquelle cela ne fonctionnerait pas indéfiniment.
DJMcMayhem

1
Si vous basculez ivers Set déplacez-le à l'intérieur de la macro, vous pouvez ignorer r|.
dimanche

2
@dahnoak Il n'y a aucune raison pour que le moteur vi ne remarque pas la récursion de la queue. Et certaines implémentations de récursion le feraient naturellement (imaginez s’il existe un vecteur de commandes à exécuter, ainsi qu’un emplacement d’exécution en cours. Ensuite @q, insérerait à l'emplacement actuel le contenu du script de registre q. Aucune pile nécessaire, ni aucune la mémoire allouée à moins que des commandes à exécuter après @q l' intérieur q).
Yakk

Presque chaque fois que vous postez une réponse à un défi, j'apprends quelque chose de nouveau (dans ce cas, @:et :sl), alors merci et continuez-les :)
Christian Rondeau

37

HTML + JS (ES6), 20 + 51 50 = 70 octets

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

-1 octet (Zachary T)

Découvrez aussi ma réponse HTML / CSS de 132 octets .


Cela pourrait-il déborder i?
Zacharý

Oui, ça le serait finalement. Corrigé ça!
darrylyeo

1
Pourriez-vous remplacer i++,i%=4par i=-~i%4un octet?
Zacharý

2
@Xufox Le <pre>seul moyen de s'assurer qu'une police à espacement fixe était utilisée afin que les chunités puissent fonctionner. Les règles ne mentionnent rien sur la famille de polices utilisée. ;)
darrylyeo

1
Si je ne me trompe pas, le premier caractère imprimé par JS sera le dernier de la chaîne; donc vous devriez init avec -au lieu de /. Ou init avec |et en boucle '-\\|/'. Belle augmentation cependant.
Titus

21

Lot Windows, 121 114 84 80 79 78 octets

Je lance ça pour le plaisir.

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

Je ne pouvais pas assigner pipe ( |) au tableau, je devais donc l'ajouter manuellement avec une autre affectation.Le retard est fait avec PING, ce qui pourrait ne pas être précis .

Sortie:

entrez la description de l'image ici

Modifier:

  • Merci à Roman Gräf d'avoir économisé 7 octets!
  • Merci à Neil d'avoir économisé 30 octets! Je l'ai aussi malmené un peu plus pour économiser des octets sur les nouvelles lignes.
  • Merci à phyrfox pour la sauvegarde de 4 octets!
  • Merci à YourDeathIsComing d'avoir économisé 2 octets!

3
Vous pouvez supprimer @echo offet mettre un @en face de chaque commande setouecho
Roman Gräf

1
Vous n'avez pas besoin du tableau, ça in (/ - \ ^|)marche. De plus,% 0 est un moyen plus court de boucler que goto.
Neil

2
Vous devriez pouvoir utiliser l'adresse IP "1.1" (-4 octets), car la plupart des plates-formes l'élargiront automatiquement à la version 1.0.0.1 pour vous.
phyrfox

1
Vous pouvez économiser 1 octet en supprimant l’espace devant >nul.
YourDeathIsComing

1
Je voulais dire l'espace avant, pas après.
YourDeathIsComing

20

Noeud, 72 70 octets

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

Remplacez-le \x1Bpar le caractère d'échappement littéral pour obtenir le nombre d'octets correct. Appelez f()pour lancer l'animation. Voici à quoi cela ressemble dans l'émulateur de terminal ConEmu sur mon ordinateur:

entrez la description de l'image ici


Essayez d’utiliser \033c(remplacez \033par sa représentation réelle des caractères). Cela ne semble pas aussi beau, mais cela vous évite des octets.
Mama Fun Roll

Ne idébordera pas ?
Zacharý

12
@ZacharyT Cela arrivera après 71 millions d'années, mais je peux résoudre ce problème si nécessaire
ETHproductions

3
"Votre programme devrait pouvoir fonctionner indéfiniment. Par exemple, si vous utilisez un compteur pour les images, celui-ci ne devrait jamais provoquer d'erreur en dépassant le maximum dans votre langue.", Oui, c'est nécessaire.
Zacharý

3
@Florent Mais cela ne fonctionnerait pas sur Node ;-)
ETHproductions

14

Kotlin, 67 66 octets

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

entrez la description de l'image ici

Plutôt explicite, utiliser \rpour effacer la ligne et tirer parti de l'impressionnante interpolation des cordes de Kotlin.

EDIT: 1 octet enregistré grâce à @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu en passant while(true)àwhile(1>0)


1
Vous pouvez enregistrer un octet en utilisant while(1>0)plutôt que while(true)(-1) et devrait probablement inclure la syntaxe de la fonction dans votre réponse ( fun a(){<code>}, +9). Si vous voulez être un peu tricheur, vous pouvez utiliser stocker une fonction en tant que variable ( val a={<code>}, +8).
F. George

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Le mode 'programme complet' n'est-il pas acceptable? Ceci peut être exécuté en tant que script Kotlin .ktssans définitions de classe ou de fonction. Aussi, super appel avec while(1>0)!
Tyler MacDonell

3
Mais que se passe-t-il si, un jour, 0 devient supérieur à 1 ???? : P
FlipTack

Excellente idée d'utiliser le script Kotlin. @ Flp.Tkc Votre commentaire m'a rappelé ceci: codegolf.stackexchange.com/a/101131/62024 . Frémissant encore que c'est possible.
F. George

@TylerMacDonell Vraiment? Je ne savais pas que vous pouviez exécuter kotlin directement en tant que script. Merci pour l'info.
TheNumberOne

14

Vim, 35 octets

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

La version ennuyeuse. Voici une solution non conforme qui vaut mieux:

Vim (1 seconde de sommeil), 27 octets

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

L'utilisation est gsnon seulement beaucoup plus courte, mais vous n'avez pas besoin d'appuyer sur Entrée. Cela signifie que la macro s'adapte en ligne et que je peux économiser des octets en basculant sur @.. (Puisqu'aucun appel ne peut être exécuté après l'appel récursif, je peux saisir ce que je veux.)


Merci pour cette réponse! J'ai appris gs, @.et à l' @@intérieur @.fait encore mal ma tête!
Christian Rondeau

14

Pyth, 31 octets

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

Interprète ici .

Chargement de GIF

Explication

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

13

Powershell (v4), 57 56 54 53 58 57 octets

De retour au Bytecount, j'ai commencé avec!

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

La CLI de PowerShell ne fonctionnera pas très bien sur certains ordinateurs. Elle n’est donc pas parfaite, mais c’est aussi bon que possible.

Déplacé $ a ++ dans la boucle for pour enregistrer un octet, (non ;)

Puis déplacé dans l'indexeur de tableau, pour une autre sauvegarde de 2 octets, grâce à Roman pour l'avoir signalé.

Également enregistré 1 octet supplémentaire ( ;) en déplaçant la partie Clear screen ( cls) dans la boucle for.

Problème et fixer souligné TimmyD pour l'aspect infini de la question, seulement 5 octets requis, changé $a++%4en ($a=++$a%4)sorte qu'il ne sera jamais au- dessus de 3.

Vous avez sauvé un autre octet en laissant la boucle for totalement vide, grâce à "quoique ce soit" pour avoir signalé que ceci est réellement possible dans Powershell Version 4!

Nouvelle mise à jour pour la version (finale?) De cette réponse.

Chargement Gif

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

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

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

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

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


2
for(;;){"Loading... "+"|/-\"[$a++%4];sleep -m 250;cls}(déplacer le $a++à la dernière utilisation de $a)
Roman Gräf

toujours oublier quelque chose - merci pour cela!
Colsw

2
Je ne suis pas très adepte de Powershell, mais lorsque j'ai vu l'entrée Windows Batch, j'ai pensé "Powershell pourrait-il battre cela?". Et le voici!
Jakub Jankowski

1
Au moins sur ps v4, vous devriez pouvoir lire un autre octet en gardant l'état initial totalement vide:for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
que ce soit

1
Je vous en prie. Il semble en fait que cela fonctionne pour la version 2+, était trop paresseux pour vérifier avant;)
importe,

11

Pyth - 36 35 octets

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

Ne fonctionne pas en ligne, évidemment.


Avez-vous un gif de cela en action? Aussi, y a-t-il un compteur qui pourrait déborder?
FlipTack

@ Flp.Tkc le seul compteur est Zun entier python, qui ne déborde pas. J'essayais de faire un gif mais je ne pouvais pas le faire fonctionner. Si vous savez comment en créer un, vous pouvez l'exécuter avec l'interpréteur pyth
Maltysen

4
Si l'entier ne déborde pas, il augmentera probablement jusqu'à remplir toute la mémoire, ce qui entraînerait un échec au moins après 10 ans sur la plupart des systèmes 32 bits. Bien sûr, la chaleur
meurtrière

11

Matlab, 78 75 octets

a='\|/-';while 1;clc;disp(['Loading... ',a(1)]);a=a([2:4,1]);pause(1/4);end

entrez la description de l'image ici


11

HTML / CSS, 23 + 109 = 132 octets

Amélioré sur la réponse de Neil .

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


9

Mathematica, 74 67 octets

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

Un énorme 7 octets grâce à @dahnoak


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

1
@dahnoak à la vôtre! Je n'avais pas réalisé que ListAnimate était une chose. C’est dommage que ce <>ne soit pas plat, mais 4 octets supplémentaires pourraient être supprimés!
Un Simmons

Juste pour le plaisir:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
Shinx

9

C #, 170 133 octets

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

Un grand merci à Roman Gräf et à raznagul, qui m'ont sauvé 37 octets. (Surtout raznagul, qui a souligné que ma solution initiale était de toute façon invalide. J'ai un peu raté quelque chose là-bas, mais c'est réparé maintenant et devrait répondre aux exigences :)

assez similaire à la réponse C # existante de Pete Arden mais avec quelques améliorations

Par exemple, "pour (;;)" au lieu de "while (true)", un caractère au lieu de chaîne

J'aurais commenté mes suggestions sur sa réponse, mais je n'ai pas assez de réputation pour le faire.

Ungolfed:

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

2
Pourquoi ne pas supprimer le premier Console.Write("\b");et changer le second en Console.Write("\b"+a);?
Roman Gräf

Définir une action est inutile et trop long en utilisant une boucle comme foreach(var a in"|/-\\")et ajoutez le code que vous avez actuellement dans l'action car le corps vous fera économiser ~ 20 octets.
Raznagul

En outre, la tâche consiste à créer exactement la sortie requise. Ce qui n'est pas le cas actuellement.
Raznagul

Ce devrait être le cas maintenant, j'ai oublié '|' et l'espace de fin après "Chargement en cours ...".
Snowfire

Dans votre version sans golf (car elle ne correspond pas à la version avec golf), vous pouvez supprimer la première Console.Write()et utiliser une seule Console.Write($"Loading... {c}\r")au lieu de la seconde.
lait

9

4ème 72, 73 octets

EDIT :

  • Ajout de la version réservée à Gforth, 69 octets (Merci @ninjalj!)
  • Ajout d'espaces manquants après "Loading ..." (Thx @Roman Gräf!), +1 octet
  • Mis à jour pour correspondre aux règles plus précisément (dans le même nombre d'octets)

Golfé

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

Version Gforth

La version GNU Forth uniquement peut être réduite à 69 octets comme ceci:

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

Screencast

entrez la description de l'image ici

Essayez-le en ligne!


1
Puisque vous utilisez gforth, si vous ne vous souciez pas de la transférabilité vers d'autres Forth, vous pouvez utiliser [begin]et en [again]dehors d'une définition de mot.
Ninjalj

9

Python 2, 81 79 78 77 octets

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

Une solution assez simple qui dort en utilisant time.

J'utilise \r(retour chariot) pour revenir au début de la ligne, puis imprimer le message en remplaçant la ligne.

Je commence par i=1éviter de double échapper à la \(c'est '\|/-'au lieu de '|/-\\').

Dans le passé, j'avais l'habitude -~ide vouloir i + 1éviter les parenthèses. (Merci à @ Flp.Tkc pour ces -2 octets!) (C'était i=(i+1)%4contre i=-~i%4)

Maintenant, je laisse simplement le compteur monter pour toujours, car techniquement, les Python intne peuvent pas déborder. Merci à @Zachary T pour l'avoir signalé et avoir sauvegardé un octet!
Il ne s’arrête que sur une machine car elle manque de mémoire, mais cela prend 9,7 générations avec 4 Go de mémoire pour celle-ci int.

Merci à @Kade pour l'octet -1 où les print a,bimpressions aet l' bespace sont séparés, pour que je n'aie pas besoin de mon propre espace.

Voici un exemple de travail sur Windows:

Chargement

Je l'ai également testé sur une machine virtuelle Linux. Je n'ai pas pu le tester sur un Mac.


1
Si je me souviens bien, vous pouvez utiliser i=-~i%4pour sauvegarder les octets des parens :)
FlipTack

2
Est-ce que remplacer [i],;i=-~i%4par [i%4],;i+=1un octet ne sera pas sauvegardé puisqu'il ne dépasse pas le maximum pour Python, seulement la mémoire maximale?
Zacharý

9
Je devrais vous inviter à vous connecter en tant que Administrator...
Neil

5
@Neil Pour être tout à fait honnête, je viens de placer le fichier Python dans Administrator et de l'exécuter à partir de là, car les autres noms de compte sont des noms réels (Personal PC).
Artyer

2
J'autoriserais la suggestion de @ZacharyT étant donné que techniquement les entiers Python peuvent être infiniment grands, à condition que la mémoire de l'ordinateur le permette de les contenir
FlipTack

7

MATL , 36 octets

1 octet supprimé en utilisant l'idée de @ flawr de décaler la chaîne de façon circulaire

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

Voici un enregistrement gif du compilateur hors ligne:

entrez la description de l'image ici

Ou essayez-le sur MATL Online! S'il ne s'exécute pas initialement, actualisez la page et appuyez à nouveau sur "Exécuter".

Comment ça fonctionne

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

Salut Luis. bien fait avec MATL comme toujours. Voici une légère variation de la liste circulaire. et l'affichage. Pensez-vous que vous pourriez traduire cela par une solution encore plus courte:a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
Hoki

@Hoki Merci pour l'idée. En fait, j’avais initialement un compteur croissant modulo 4, mais c’était un peu plus long (j’ai ensuite gagné un octet à cause de la nécessité de ne pas mettre en pause). De plus, je pense que l'écran clair et l'affichage normal sont plus courts fprintfqu'avec les backspaces
Luis Mendo

7

Dyalog APL, 50 octets

Cela ne fonctionne que dans la version Windows, sinon la ⎕SMfenêtre ne s'affichera que si elle ⎕SRest appelée.

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

Explication:

  • {... }1: lance la fonction commençant par⍵=1
  • Loading... '∘,¨'|/-\': générer les quatre sorties possibles
  • ⊂⊃⍵⌽: Faites pivoter la liste pour placer le th élément en premier, prenez le premier élément et entourez-le
  • ⎕SM←1 1,⍨: placez la chaîne dans le coin supérieur gauche de la ⎕SMfenêtre.
  • ⎕DL÷4: attendez 1/4 de seconde
  • 4|⍵+⌈: arrondissez la valeur résultante (secondes passées en attente, donc toujours 1), ajoutez-la à (incrémentez-la) et prenez le mod-4 (pour l’empêcher de déborder éventuellement).
  • : exécutez à nouveau la fonction avec le nouveau .

Animation


D'une manière ou d'une autre, je savais que quelqu'un soumettrait une réponse à ce défi pour Dyalog (/ APL) :)
YoYoYonnY

7

C #, 187 octets

Golfé:

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

Ungolfed:

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

J'attends toujours qu'il soit chargé ...

entrez la description de l'image ici


J'attends toujours qu'il affiche «\»…
manatwork

@ manatwork Oh merde, copier et coller paresseux. Je vais réparer ça quand je serai bientôt de retour à mon bureau :)
Pete Arden Le

Désolé de voir votre solution s'allonger à cause de mon commentaire. Ne pouvez-vous pas utiliser 1>0au lieu de truele ramener à 186?
Manatwork

@ErikGolfer n'a aucune idée de C #, mais basé sur le fait que le langage est une copie de Java et apparemment confirmée par Can't Cast int to bool , j'ai pensé que cela ne fonctionnerait pas. (BTW, si cela fonctionne, peut-être que le premier appel de ou l()comme condition fonctionnerait aussi?)
manatwork

2
@manatwork Eh bien, il semble que C # soit non-golfable.
Erik the Outgolfer

7

Snap !, 8 blocs

8 blocs de Snap!

C’était l’un des tout premiers algorithmes que je me suis jamais imaginé sur une pomme] [e


1
Montrez-nous votre Applesoft BASIC :)
roblogic

1
Je ferais volontiers cela dans Hypercard.
wyldstallyns

6

réticulaire, non compétitif, 40 octets

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

entrez la description de l'image ici

J'ai oublié de commettre un tas de choses, y compris w. Tant pis.

Explication

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

6

Bash, 98 69 octets

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

Merci à beaucoup de gens pour les nombreux octets qui ont été joués au golf!


En outre, vous ne devez pas échapper à la barre oblique inversée si vous utilisez des guillemets simples et que les arguments de pour echo -e -npeuvent être combinés àecho -en
Evan Chen

Vous pouvez enregistrer 2 lignes et 13 octets en remplaçant la ligne d'écho par:echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; faire l'affectation à la whilecondition.
Manatwork

utiliser printf comme manatwork dit, simplifier la sous - chaîne, et le mettre directement dans l' whileétat: while printf "\rLoading... ${s:i++%4:1}";do. 67 octets
Dominik R

Ça ne marchera pas Dominik R, ça finirait par déborder.
Zacharý

6

Perl 6 , 72 61 octets

Supply.interval(1/4).tap: {print "\rLoading... ",<| / - \ >[$/++];$/%=4}
loop {print "\rLoading... ",<| / - \ >[$/++];$/%=4;sleep 1/4}

6

> <> , 55 + 4 = 59 octets

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

Doit être exécuté en passant -t .01comme argument supplémentaire à l'interpréteur, c'est le +4 dans le nombre d'octets.

Cela permet de mettre les quatre caractères à imprimer sur la pile, d’imprimer le premier sans l’enlever et de décaler la pile d’une position. Ensuite, il imprime \b(retour arrière, caractère x08) et redémarre la boucle.

Le timing est obtenu par l'argument transmis à l'interprète, ce qui oblige à attendre 0,01 seconde avant d'exécuter chaque instruction. Il y a 23 instructions entre une sortie et la suivante (la plupart d'entre elles déplacent simplement le pointeur d'instruction vers la cellule suivante), de sorte que cela attend 0,23 seconde plus le temps nécessaire à l'exécution des instructions, ce qui correspond sans problème aux 0,25 demandés. avec 10% d'erreur.

Vous pouvez l' essayer en ligne , mais cet interprète ne reconnaît pas le caractère de retour arrière. Le résultat sera donc un peu étrange.


Normalement, les drapeaux comme -nsont marqués comme 1 octet, donc je pense que vous pouvez marquer l'argument comme t, .01c'est-à-dire 4 octets.
Bonne

@ Flp.Tkc Merci! Je n'étais pas sûr de savoir comment compter les octets pour l'argument, j'aime bien cette façon :)
Leo

@Leo - Existe-t-il une raison d'utiliser 0,01 et non un tick plus grand avec moins d'instructions? J'ai ajouté ma version qui utilise une boucle de 8 instructions et un nombre de ticks de 0,03; # "... gnidaoL" l?! vob0. "\ | / -": o} 8o51. > #
Pélican sarcelle

@Tealpelican Il y a une raison, mais ce n'est pas une très bonne: les règles stipulent que "Vous ne devez pas attendre 0,25 seconde avant d'afficher initialement le résultat - la première image doit être imprimée dès que le programme est exécuté.", Je ne veux pas que le chronomètre soit trop long, alors qu’il s’agit d’un code de golf, je ne voulais donc pas le rendre trop court. Finalement, j'ai opté pour une boucle de 25 instructions prenant 0,01 s chacune pour obtenir le minutage exact de 0,25 demandé; Cependant, lorsque je l'ai implémentée, j'ai réalisé que je n'avais pas assez d'espace pour la boucle complète. J'ai donc dû utiliser la règle des 10%.
Leo

Je dois avoir mal lu les règles. C’est une très bonne raison pour le choix du moment :)
Teal pélican,

6

Fichier .COM MS-DOS, 56 octets

Voici le contenu du fichier en hexadécimal:

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

Le code assembleur correspondant ressemble à ceci:

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

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

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

1
Maintenir la touche enfoncée accélère la mov al, 0xfe / out 0x21,al
rotation du disque

Le commentaire pour HLT est erroné, vous vouliez probablement dire que HLT se réveille à environ 18,2 Hz (ou, plus précisément, à l'horloge NTSC / 12/65536 Hz).
Ninjalj

@ninjalj Merci. J'ai changé le commentaire ...
Martin Rosenau

6

NASM x86_64 - 349 283 octets

Cela devrait être exécuté systèmes linux 64 bits

construit en utilisant:

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

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

animation:

enregistré 65 octets - merci utilisateur254948

entrez la description de l'image ici


Je compte 349 octets, sauf s'il y a un
retour à la

^ Flp. Merci, il y avait une ligne avec un espace à la fin
Samuel

@Samuel les lignes 13-17 sont-elles nécessaires? Cela semble fonctionner assez bien sans ces lignes. Autant que je sache (je crains fort pour l'assemblage), vous imprimez le chargement ..., puis le | caractère, puis supprimez ce caractère, puis entrez une boucle dans laquelle vous répétez l’impression | pour la première fois.
user254948

@Samuel en plus xor r8, r8 -> mov r8,0 (enregistre 1 caractère), certains MOV ont un espace supplémentaire (mov r7, 1 -> mov r7,1). De plus, les instructions cmp r8,4, jl l, xor r8, r8 peuvent être remplacées par AND r8,3 (enregistrement de 15 caractères). Vous devriez avoir 285 octets au lieu de 349! (en combinaison avec les lignes mentionnées ci-dessus)
user254948

5

R, 85 89 octets

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

Edit: Correction de la réponse telle que Tne débordera pas en réinitialisant le compteur si supérieur à 4.

Le seul aspect intéressant de cette réponse est l'utilisation de R de TRUTHYla builtin T. Il s’agit en fait d’une variable prédéfinie, 1/TRUEce qui signifie que nous n’avons pas à initialiser le compteur, mais que nous pouvons commencer à incrémenter T.


Serait Téventuellement déborder?
FlipTack

@ Flp.Tkc Il ne déborderait pas mais serait traité comme un infini passé, 1e+308auquel cas le cas NAest renvoyé, donc je suppose que cette réponse est invalide à ce moment-là (je ne l'ai pas remarqué dans les règles).
Mettra à

1
En fait, vous pouvez obtenir 2 octets plus courts si vous n'utilisez pas le paramètre intégré T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}87 octets.
Plannapus

Hmm ... R ne fonctionne-t-il que sur des vecteurs? Pourquoi n’existe-t-il pas d’opérateurs modulo ou binaires pour les atomes? est Tun vecteur? Ça T=(T+1)%%4marche? Cela économiserait 5 octets supplémentaires.
Titus

2
... ou T=T%%4+1: même 2 octets plus court.
Titus

5

Haskell (GHC), 103 91 octets

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

Merci @nimi d'avoir économisé 12 octets!


Pas besoin d'un programme complet. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

Vous pouvez enregistrer deux octets en utilisant la tolérance de 10% et en les remplaçant 250000avec l’espace précédent (4^9).
Christian Sievers

5

C (sur les systèmes de type UNIX) 88 octets

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

Cela commence avec le mauvais personnage, mais je pense que ça a l'air plus joli. Vous pouvez facilement changer l'ordre des caractères en modifiant le "\ - / |" chaîne.


Pourrait être joué plus loin en déplaçant les déclarations dans for, par exemple ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}main(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
:,

Avez-vous besoin de la fonction fflush ()?
John U

Sur la plupart des systèmes, vous avez besoin de la commande fflush, la plupart d’entre eux étant tamponnés en fonction des nouvelles lignes. Cependant, il est possible que cela ne soit pas nécessaire sur certains systèmes.
LambdaBeta

Vous pouvez utiliser à la fprintf(stderr,...place, puisque ce n'est pas une ligne tamponnée comme stdout. Le f...stderr,prend huit caractères, tandis que le fflush(0);prend dix, donc c'est un gain net de deux caractères.
cmaster

5

Perl, 71 63 61 octets

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

La version précédente:

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

Merci à @primo pour 10 octets.


2
Belle astuce pour utiliser le selectdélai d'attente plutôt que Time::HiRes. Vous pouvez économiser quelques octets en utilisant ... while$|=printet en déplaçant les traits d'union de la translittération vers l'avant et vers la fin. s//\r Loading... |/enregistre également un octet sur l’affectation.
primo

2
Et aussi, si vous utilisez des guillemets simples pour le delimiter translittération, il n'y a pas besoin d'échapper à la barre oblique inverse soit: y'-\|/'\|/-'.
Primo

Il semble que vous ayez un espace supplémentaire avant votre code.
Erik l'Outgolfer

1
Vous pouvez enregistrer un autre octet en utilisant un littéral \r.
Ninjalj

1
Utilisez y'-|\/'\/|-'/4à la place de .25pour 2 autres.
Primo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.