読み込み中...永遠に


106

あなたの課題は、次のような無限のロード画面を作成することです。

ここに画像の説明を入力してください


または、より具体的に:

  • 入力なし。
  • 出力Loading...、末尾にスペースがあり、末尾に改行はありません。
  • 無限に文字を循環|/-および\:0.25秒ごとに、シーケンス内の次で最後の1を上書きします。最後の文字だけを上書きすることも、行全体を削除して書き換えることもできますが、その間はLoading...変更されません。

ルール

  • 出力テキストは、指定されたとおりに表示される必要があります。末尾の改行/スペースは許容されます。
  • 最初に出力を表示するまで0.25秒待つべきではありません -プログラムが実行されるとすぐに最初のフレームが印刷されます。
  • プログラムは無期限に実行できる必要があります。たとえば、フレームにカウンターを使用する場合、カウンターが言語の最大値を超えてエラーを引き起こすことはありません。
  • 各「フレーム」間の待機期間は0.25秒である必要がありますが、明らかにこれは決して正確ではありません-10%程度の誤差が許容されます。
  • 関数を送信できますが、に印刷する必要がありますstdout
  • 読み込みアニメーションを生成できる限り、非コンソール(ただしテキストベース)環境で回答を送信できます。
  • これはであるため、最短のソリューション(バイト単位)が優先されます。標準的なコードとゴルフの抜け穴が適用されます。
  • 可能であれば、動作中のロード画面のgifを提供してください。

これが、サンプルの作成に使用したC ++コードです(変更なし)。

#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;
    }
}

最高のゴルファーが勝つように!


3
最初に出力を表示する前に、提出を0.25秒待つことはできますか?
ETHproductions

2
いいえ、しかしそれについて言及してくれてありがとう、@ ETHproductions
FlipTack

(アニメーション記号の後の)末尾の改行は許容されますか?

もちろん:) @Copper
FlipTack

1
@TheBitByteは、理論的には、プログラム内でエラーが発生することはないことを意味します。たとえば、カウンターがオーバーフローしたり、最大再帰深度に達した場合などです。
FlipTack 16

回答:


76

HTML / CSS、183 180 163 161 160の 147 143バイト

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>

編集:@betsegのおかげで3バイト保存されました。@manatworkのおかげで17バイト節約されました。@Danielのおかげで1バイト節約されました。@Ismael Miguelのおかげで13バイト節約されました。@Fez Vrastaのおかげで4バイト節約されました。


4
メタによると、CSS + HTMLは質問への回答に適しています。さらに、チャレンジの説明でこれを許可しました。したがって、この答えは完全に有効です:)
FlipTack

5
HTML + CSSはTCであるため、競合しない理由がわからない
-TuxCrafting

1
@TùxCräftîñgCSSは停止の問題を解決できるため、完全にチューリングされていません(無限アニメーションがない場合は停止します)。同じことがHTMLにも当てはまると思います(JSを含めない場合)。
アーティアー

4
@Artyer stackoverflow.com/a/5239256/3273184は検討する価値があります。
ママファンロール

4
@MamaFunRollこの投稿へのコメントは、ユーザーの介入なしではループできないため、それが実際にTCであることを証明しないと述べています。ただし、この特定の課題を解決できるため、この回答に問題はありません。
ETHproductions

57

VIM、43、41のバイト

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

@Udioicaのおかげで2バイト節約できました!

これがリアルタイムで発生する(少し時代遅れの)アニメーションです。

enter image description here

そして、ここに説明があります:

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
単なる好奇心:「あなたのプログラムは無期限に実行できるはずです」に違反していますか?最終的にスタックオーバーフローに達することはできますか?:)
ダン・オーク

4
@dahnoakまあ、明らかに私はそれを無限にテストすることはできませんが、余分なメモリを割り当てることはありませんので、無期限に動作しない理由はわかりません。
DJMcMayhem

1
マクロに切り替えiSマクロ内で移動する場合は、スキップできますr|
udioica

2
@dahnoak viエンジンがテール再帰に気付かなかった理由はありません。そして、いくつかの再帰の実装は自然にそうします(実行されるコマンドのベクトルと現在の実行場所があると想像してください。そして@q、現在の場所にregisterスクリプトの内容を挿入しますq。スタックは不要です。実行するコマンドがある場合を除き、メモリ割り当てられた後、 @q内がq)。
Yakk

チャレンジへの回答を投稿するたびに、私は何か新しいことを学びます(この場合、@:そして:sl)。感謝し、それらを続けてください:)
クリスチャンロンドー

37

HTML + JS(ES6)、20 + 51 50 = 70バイト

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

-1バイト(ザカリーT)

132バイトのHTML / CSSの回答ご覧ください。


オーバーフローする可能性がありiますか?
ザカリー

はい、最終的にはそうなります。それを修正しました!
-darrylyeo

1
1バイトで置き換えi++,i%=4てもらえi=-~i%4ますか?
ザカリー

2
@Xufox ユニットが機能する<pre>ように、唯一の固定幅フォントが使用されるようにしましたch。ルールでは、使用するフォントファミリについては何も言及していません。;)
darrylyeo

1
誤解しない限り、JSが出力する最初の文字は文字列の最後の文字になります。したがって、の-代わりにinitを使用する必要があります/。またはで初期化し|、ループスルーし'-\\|/'ます。いい増分。
タイタス

21

Windowsバッチ、 121 114 84 80 79 78バイト

ただこれを捨てて楽しんでください。

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

パイプ(|)を配列に割り当てることができなかったため、別の割り当てで手動で追加する必要がありました。遅延はで行われますがPING正確はない場合があります

出力:

enter image description here

編集:

  • 7バイトを節約してくれたRomanGräfに感謝します!
  • 30バイトを節約してくれたNeilに感謝します!また、改行のバイト数を節約するためにもう少し変更しました。
  • 4バイトを節約してくれたphyrfoxに感謝します!
  • 2バイトを節約してくれたYourDeathIsComingに感謝します!

3
あなたは削除することができます@echo offし、入れて@おきの前にsetまたはechoコマンド
ローマグラーフ

1
配列は必要ありません、in (/ - \ ^|)動作します。また、%0はのループよりも短い方法ですgoto
ニール

2
ほとんどのプラットフォームは1.0.0.1に自動的に拡張するため、IPアドレス「1.1」(-4バイト)を使用できるはずです。
phyrfox

1
の前のスペースを削除すると、1バイト節約できます>nul
YourDeathIsComing

1
私はその前ではなく、前のスペースを意味しました。
YourDeathIsComing 16

20

ノード、72 70バイト

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

\x1B正しいバイトカウントを取得するには、リテラルエスケープ文字に置き換えます。呼び出しf()てアニメーションを開始します。コンピューターのConEmuターミナルエミュレーターでの表示は次のとおりです。

enter image description here


使用してみてください\033c\033実際のchar表現に置き換えてください)。見た目は良くありませんが、バイトを節約できます。
ママファンロール

iオーバーフローしませんか?
ザカリー

12
@ZacharyT 7100万年後になりますが、必要に応じて修正できます
-ETHproductions

3
「プログラムは無期限に実行できるはずです。たとえば、フレームにカウンターを使用する場合、カウンターが言語の最大値を超えてもエラーが発生することはありません。」はい、必要です。
ザカリー

3
@Florentしかし、それはノードで実行されません
;

14

Kotlin、67 66バイト

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

enter image description here

かなり自明で\r、ラインをクリアするために使用し、Kotlinの素晴らしい文字列補間を利用します。

編集:@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIuに変更while(true)して1バイト保存while(1>0)


1
(-1)のwhile(1>0)代わりに使用することで1バイト節約できます。while(true)おそらく、回答に実際の関数構文を含める必要があります(fun a(){<code>}、+9)。少しチートになりたい場合は、関数を変数として保存することができます(val a={<code>}、+ 8)。
F.ジョージ

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu「フルプログラム」モードは受け入れられませんか?これは、.ktsクラスまたは関数の定義なしでKotlinスクリプトとして実行できます。また、との素晴らしい呼び出しwhile(1>0)
タイラーマクドネル

3
しかし、ある日、0が1より大きくなった場合はどうなりますか???? :P
FlipTack

Kotlinスクリプトを使用することをお勧めします。@ Flp.Tkcあなたのコメントはこのことを思い出させてくれました:codegolf.stackexchange.com/a/101131/62024。まだこれが可能であることをぞっとさせる。
F.ジョージ

@TylerMacDonell本当に?スクリプトとして直接kotlinを実行できるとは知りませんでした。情報をありがとう。
-TheNumberOne

14

Vim、35バイト

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

退屈なバージョン。これは、準拠しないソリューションの方が優れています。

Vim(1秒のスリープ)、27バイト

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

使用するgs方がはるかに短いだけでなく、Enterキーを押す必要はありません。つまり、マクロはインラインに収まり、に切り替えることでバイトを節約できます@.。(再帰呼び出しの後は何も実行できないため、必要なものを入力できます。)


この答えをありがとう!私は学びましたgs@.そしてそれでも@@@.は私の頭を傷つけます!
クリスチャンロンドー

14

Pyth、31バイト

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

通訳はこちら

Loading GIF

説明

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バイト

私が始めたバイトカウントに戻って!

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

powershellのCLIは、一部のコンピューターでわずかにグリッチが発生するため、完璧に見えませんが、実現可能な範囲で優れています。

1バイトを節約するために$ a ++をforループに移動しました(no ;

次に、それを配列インデクサーに移動して、さらに2バイト保存しました。これを指摘してくれたRomanに感謝します。

また;、画面をクリア(cls)部分をforループに移動することで、さらに1バイト()節約しました。

問題と質問の無限の側面に関してTimmyDによって指摘修正し唯一の5バイトは、必要な変更$a++%4($a=++$a%4) 3を超えないようにた。

Powershellバージョン4で実際に可能であることを指摘してくれた「何でも」のおかげで、forループを完全に空白のままにして、もう1バイト節約しました!

この回答の(最終バージョンの新しいgifが更新されました。

Loading 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}$a++最後の使用に移動します$a
ローマングレーフ

いつも何かを忘れている-それをありがとう!
コルス

2
私はPowershellにあまり熟達していませんが、Windows Batchエントリを見たとき、「Powershellはこれを打ち負かすことができますか?」と思いました。そしてここにある!
ヤクブヤンコフスキ

1
PS v4の上に、少なくとも、あなたは条件を完全に空に保つことにより、別のバイトできるゴルフべきである:for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
どんな

1
どういたしまして。それは実際にバージョン2+のために働くようだ、前にチェックするだけで面倒だった;)
何でも

11

Pyth- 36 35バイト

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

明らかに、オンラインでは機能しません。


このgifを実際に使用していますか?また、オーバーフローする可能性のあるカウンターはありますか?
FlipTack

@ Flp.Tkc唯一のカウンターはZpython整数であり、オーバーフローしません。私はgifを作成しようとしていましたが、機能させることができませんでした。あなたがものを作る方法を知っていれば、あなたはでpythインタプリタでそれを実行することができますgithub.com/isaacg1/pyth
Maltysen

4
整数がオーバーフローしない場合、おそらくすべてのメモリがいっぱいになるまで大きくなり、ほとんどの32ビットシステムで少なくとも10年後には失敗します。確かに、宇宙の熱死が最初に起こりますが、それでも…
jjrv

11

Matlab、78 75バイト

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

enter image description here



9

Mathematica、74 67バイト

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

@dahnoakのおかげで途方もない7バイト


ListAnimate["Loading... "<>#&/@Characters@"|/-\\",AnimationRate->4]
ダン・オーク

1
@dahnoak乾杯!ListAnimateがモノであることを知りませんでした。それ<>はフラットではなく、リストにないのは残念です。さもないと、さらに4バイト削られる可能性があります。
シモンズ

ただ楽しみのために:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
shrx

9

C位、170の 133バイト

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

RomanGräfとraznagulに感謝します。彼は37バイト節約してくれました。(特にraznagulは、私の元の解決策はとにかく無効であると指摘しました。そこで何かを逃しましたが、今は修正されており、要件を満たしているはずです:)

Pete Ardenの既存のC#の回答にかなり似ていますが、いくつかの改善があります

たとえば、「while(true)」ではなく「for(;;)」、文字列ではなくchar

私は彼の答えに私の提案をコメントしたでしょうが、実際にはそれをするのに十分な評判がありません。

ゴルフをしていない:

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

2
なぜ最初のものConsole.Write("\b");を削除し、2番目のものをに変更しないのConsole.Write("\b"+a);ですか?
ローマングラフ

アクションを定義する必要はありません。長い間、次のようなループを使用して、foreach(var a in"|/-\\")現在アクションにあるコードを追加すると、本文が20バイトまで節約されます。
raznagul

また、タスクは必要な出力を正確に作成することです。現在はそうではありません。
raznagul

今はそうだろう、私は '|'を忘れた 「読み込み中...」の後の末尾のスペース。
スノーファイア

未ゴルフバージョンでは(ゴルフバージョンと一致しないため)、最初のバージョンを削除し、2番目ではなくConsole.Write()1つだけを使用できますConsole.Write($"Loading... {c}\r")
ミルク

9

前方へ、 72、73バイト

編集

  • Gforth専用バージョン、69バイトを追加(ありがとう@ninjalj!)
  • 「読み込み中...」(Thx @RomanGräf!)の後に欠落している空白を追加、+ 1バイト
  • ルールにさらに正確に一致するように更新されました(同じバイト数で)

ゴルフ

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

Gforthバージョン

GNU Forth専用バージョンは、次のように69バイトまで縮小できます。

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

スクリーンキャスト

enter image description here

オンラインでお試しください!


1
あなたが他のフォースのへの移植性を気にしない場合は、Gforthのを使用しているので、あなたが使用することができます[begin]し、[again]言葉の定義の外。
ninjalj

9

Python 2、81 79 78 77バイト

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

を使用してスリープする非常にシンプルなソリューションtime

\r(キャリッジリターン)を使用して行の先頭に戻り、行を上書きしてメッセージを出力します。

i=1二重エスケープを避けるために始めます\'\|/-'代わりに'|/-\\')。

過去には、括弧を避けること-~iを意味i + 1していました。(これらの-2バイトの@ Flp.Tkcに感謝します!)(i=(i+1)%4vs.i=-~i%4

技術的にはPython intがオーバーフローすることはないので、今はカウンターを永遠に上昇させています。@Zachary Tに指摘してバイトを保存してくれてありがとう!
マシンがメモリを使い果たすため、マシン上で停止するだけですが、そのためには4GBのメモリで9.7世代かかりますint

印刷とスペースが区切られている-1バイトの@Kadeに感謝します。そのため、自分のスペースは必要ありません。print a,bab

Windowsで動作するgifを次に示します。

Loading

Linux VMでもテストしました。Macではテストできませんでした。


1
私の記憶が正しければi=-~i%4、括弧のバイトを保存するために使用できます:)
FlipTack

2
Pythonの最大値を超えず、最大メモリだけを超えないため、バイト[i],;i=-~i%4[i%4],;i+=1保存に置き換えませんか?
ザカリー

9
私はとしてログインするためにあなたをdownvote必要がありますAdministrator...
ニール

5
@Neil正直に言うと、他のアカウント名は本名(パーソナルPC)であるため、PythonファイルをAdministratorに入れてそこから実行しただけです。
アーティアー

2
技術的にPythonの整数は無限に大きくなる可能性があるため、コンピューターにそれらを保持するメモリがある限り、@ ZacharyTの提案を許可します
FlipTack

7

MATL、36バイト

文字列を循環シフトするという@flawrのアイデアを使用して1バイトを削除

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

オフラインコンパイラからのgif記録は次のとおりです。

enter image description here

または、MATL Online試しください最初に実行されない場合は、ページを更新して、もう一度「実行」を押します。

使い方

'\-/|'           % 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

ねえ、ルイス。いつものようにMATLでよくやった。循環リストのわずかなバリエーションを次に示します。そして表示。あなたはさらに短い溶液中でそれを翻訳できると思いますか:a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
ホキ

@Hokiアイデアをありがとう。実際、最初は4を法とするカウンタが増加していましたが、もう少し長くなりました(最初の一時停止が必要ないため、1バイト増えました)。また、クリアスクリーンと通常のディスプレイはfprintfバックスペースよりも短いと思います
ルイス・メンドー

7

Dyalog APL、50バイト

これは、Windowsバージョンでのみ機能し⎕SMます。それ以外の場合、⎕SR呼び出されない限りウィンドウは表示されません。

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

説明:

  • {... }1:で始まる関数を実行します⍵=1
  • Loading... '∘,¨'|/-\':4つの可能な出力を生成します
  • ⊂⊃⍵⌽:リストを回転して、⍵番目の要素を最初に配置し、最初の要素を取得して、それを囲みます
  • ⎕SM←1 1,⍨⎕SMウィンドウの左上隅に文字列を配置します。
  • ⎕DL÷4:1/4秒待ち
  • 4|⍵+⌈:結果の値を切り上げ(待機に費やされた秒数、したがってこれは常に1)、追加します (増分)し、mod-4を取得します(最終的にオーバーフローしないようにします)。
  • :新しい

Animation


どういうわけか、誰かがこのチャレンジに対してDyalog(/ APL)の回答を送信することを知っていました:)
YoYoYonnY

7

C#、187バイト

ゴルフ:

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

ゴルフをしていない:

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

まだロードされるのを待っています...

enter image description here


まだ「\」が表示されるのを待っています…
manatwork

@manatworkがらくた、怠zyなコピーと貼り付け。すぐにデスクに戻ったときに修正します:)
ピートアーデン

私のコメントが原因でソリューションが長くなるのを見てすみません。186に戻す1>0代わりに使用することはできませんtrueか?
マナトワーク

@ErikGolferエリックゴルファー、C#についてのアイデアはありませんが、この言語はJavaのコピーであり、明らかにCant intをboolキャストできないという事実に基づいて、私はそれがうまくいかないと思った。(ところで、それが機能する場合、おそらくl()as条件の最初の呼び出しを使用しても機能しますか?)
manatwork

2
@manatworkさて、C#は利用できないようです。
エリックアウトゴルファー


6

網状、非競合、40バイト

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

enter image description here

を含むたくさんのものをコミットするのを忘れましたw。しかたがない。

説明

: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バイト

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

たくさんのバイトをしてくれた多くの人々に感謝します!


また、単一引用符を使用して引数をecho -e -n結合できる場合、バックスラッシュをエスケープする必要はありませんecho -en
エヴァンチェン

エコー行を次のように置き換えることにより、2行と13バイトを節約できます。echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; while条件への割り当てを行います。
マナトワーク

前述のmanatworkのようなprintfを使用して、部分文字列を単純化し、while条件に直接入れますwhile printf "\rLoading... ${s:i++%4:1}";do。67バイト
ドミニクR

これはDominik Rで機能しません。最終的にはオーバーフローします。
ザカリー


6

> <>、55 + 4 = 59バイト

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

通過して実行する必要があります -t .01インタープリターに追加の引数としててます。これは、バイトカウントの+4です。

これは、印刷する4文字をスタックに置き、先頭の文字を削除せずに印刷し、スタックを1ポジションだけシフトします。次に印刷します\b(バックスペース、文字x08)を、ループを再開します。

タイミングは、各命令を実行する前に強制的に0.01秒待機するインタープリターに渡される引数によって実現されます。出力と次の命令の間に23の命令があり(それらのほとんどは単に命令ポインタを次のセルに移動するだけです)、これは0.23秒と命令の実行に必要な時間を待機し、要求された0.25に問題なく適合します10%のエラーで。

オンライン試すこともできますが、そのインタープリターはバックスペース文字を認識しないため、出力は少し奇妙になります。


通常、次のようなフラグ-nは1バイトとしてスコア付けされるため、引数をとしてスコア付けできると思いますt.01 4バイトです。10%ルールの
良い使い方

@ Flp.Tkcありがとう!引数のバイト数をカウントする方法がわからなかったので、この方法が好きです:)
レオ

@Leo-0.01を使用する理由はありますか?8命令のループと0.03のティックカウントを使用するバージョンを追加しました。# "... gnidaoL" l?!vob0。「\ | /-」:o} 8o51。>#
ティールペリカン

@Tealpelican理由はありますが、それはあまり良いものではありません。ルールは「最初に出力を表示する前に0.25秒待つべきではありません-プログラムが実行されたらすぐに最初のフレームを印刷するべきです」と述べています。タイマーを長くしすぎたくはありませんが、一方でこれはコードゴルフなので、短すぎたくありませんでした。最終的に、要求された0.25秒の正確なタイミングを達成するために、それぞれ0.01を使用する25の命令ループを決定しました。しかし、実装したときに、完全なループに十分なスペースがないことに気づいたため、10%ルールを使用する必要がありました。
レオ

私はルールを読み違えたに違いありません。それがタイミングの完璧な理由です:)
ティールペリカン

6

MS-DOS .COMファイル、56バイト

ここでは、16進数のファイルコンテンツ:

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

一致するアセンブラコードは次のようになります。

    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
キーを押し続けるとスピナーが加速します。これは、タイマー割り込み以外の割り込みをマスクすることで修正できます。たとえば、次のmov al, 0xfe / out 0x21,al
とおりです。– ninjalj

HLTのコメントが間違っています。おそらく、HLTが〜18.2 Hz(より正確にはNTSCクロック/ 12/65536 Hz)で起動することを意味します。
ninjalj

@ninjaljありがとう。私は...コメントを変更
マーティンローゼナウ

6

NASMのx86_64版- 349 283バイト

これは64ビットLinuxシステムで実行する必要があります

を使用して構築:

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

アニメーション:

65バイトを節約-ありがとうuser254948

enter image description here


末尾の改行/スペースがない限り、349バイトをカウントします
-FlipTack

^ Flp。Tkcありがとう、最後にスペースのある行がありました
サミュエル

@Samuelは13〜17行目が必要ですか?これらの行がなくてもかなりうまくいくようです。Loading ....を印刷してから(アセンブリではそれほど素晴らしいとは言えません)文字を入力してからその文字を削除し、ループを入力して|を繰り返し印刷します。初めて。
user254948 16

@Samuelに加えてxor r8、r8-> mov r8,0(1文字を保存)、一部のMOVには余分なスペースがあります(mov r7、1-> mov r7,1)。さらに、命令cmp r8,4、jl l、xor r8、r8をAND r8,3(15文字を節約)に置き換えることができます。349バイトではなく、285バイトまで減らす必要があります!(上記の行との組み合わせ)
user254948

5

R、85 89バイト

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

編集:Tカウンターがより大きい場合、カウンターをリセットすることによりオーバーフローしないように回答を修正しました4

この答えに関する唯一の興味深い側面は、RのTRUTHYbuiltinの使用ですT。これは、定義済みの変数セットで1/TRUEあるため、カウンターを初期化する必要はありませんが、インクリメントを開始できますT


だろうT結局オーバーフロー?
FlipTack

@ Flp.Tkcオーバーフローすることはありませんが、無限大として扱われ1e+308、その場合NAは返されますので、この答えは無効だと思います(ルールで気づかなかった)。間もなく更新されます
ビリーウォブ

1
実際、組み込みのTi=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}87バイトを使用しない場合は、2バイト短くすることができます。
プランナパス

うーん... Rはベクトルでのみ動作しますか?アトムにモジュロ演算子やビット単位演算子がないのはなぜですか?あるTベクトルは?いT=(T+1)%%4動作しますか?さらに5バイト節約できます。
タイタス

2
...またはT=T%%4+1:さらに2バイト短くなります。
タイタス

5

Haskell(GHC)、103 91バイト

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

@ nimi、12バイトの節約に感謝します!


完全なプログラムは必要ありません。mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\"
nimi

10%の許容値を使用し、その250000前のスペースをで置き換えることにより、2バイトを節約できます(4^9)
クリスチャンシーバーズ

5

C(UNIX系システム)88バイト

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

間違った文字で始まりますが、見た目は良いと思います。「\-/ |」を変更することにより、文字の順序を簡単に変更できます 文字列。


ステートメントをforに移動することでさらにゴルフをすることができます。例:ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}、整数オーバーフローのラップアラウンドを想定してさらにゴルフすることができますmain(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
。– ninjalj

そこにfflush()が必要ですか?
ジョンU

ほとんどのシステムでは、フラッシュが必要です。それらの多くは、改行に基づいてバッファリングします。ただし、一部のシステムでは必要ない場合があります。
ラムダベータ16

fprintf(stderr,...代わりに使用できますstdout。これはのような行バッファリングではないためです。f...stderr,一方で、8つの文字を取るfflush(0);10を取り、それは2つの文字の純勝利です。
cmaster 16

5

Perl、71 63 61バイト

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

前のバージョン:

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

10バイトの@primoに感謝します。


2
select代わりにタイムアウトを使用するのは良い方法ですTime::HiRes。を使用... while$|=printし、音訳のハイフンを前後に移動することにより、数バイトを節約できます。s//\r Loading... |/また、割り当てのバイトを節約します。
プリモ

2
また、音訳区切り文字に単一引用符を使用する場合、バックスラッシュをエスケープする必要もありませんy'-\|/'\|/-'
プリモ

コードの前に余分なスペースがあるようです。
エリックアウトゴルファー

1
リテラルを使用して、別のバイトを保存できます\r
-ninjalj

1
y'-|\/'\/|-'/4代わりに.252つ使用します。
プリモ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.