로드 중… 영원히


106

당신의 도전은 다음과 같이 무한 로딩 화면을 만드는 것입니다.

여기에 이미지 설명을 입력하십시오


또는 더 구체적으로 말하면 :

  • 입력하지 마십시오.
  • 출력 Loading...후행 공간,하지만 후행 줄 바꿈.
  • 문자를 통해 무한주기 |, /, -\: 0.25 초마다이 시퀀스에서 다음과 마지막을 덮어 씁니다. 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

답변:


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îñg CSS는 정지 문제를 해결할 수 있으므로 완전히 완료되지 않습니다 (무한 애니메이션이 없으면 정지합니다). HTML에도 동일하게 적용됩니다 (JS를 포함하지 않는 경우).
Artyer

4
@Artyer stackoverflow.com/a/5239256/3273184 는 고려해야 할 가치가 있습니다.
Mama Fun Roll

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
그냥 호기심 : "프로그램이 무기한으로 실행될 수 있어야합니다"를 위반합니까? 결국 스택 오버플로에 도달 할 수 있습니까? :)
Dan Oak

4
@dahnoak 글쎄, 분명히 그것을 테스트 할 수는 없지만 여분의 메모리를 할당하지 않으므로 무한히 작동하지 않는 이유를 알 수 없습니다.
DJMcMayhem

1
당신이 전환하는 경우 iS와 매크로 내에서 이동, 당신은 건너 뛸 수 있습니다 r|.
udioica

2
@dahnoak vi 엔진이 꼬리 재귀를 알 수없는 이유는 없습니다. 그리고 재귀의 일부 구현은 자연스럽게 수행됩니다 (실행할 명령 벡터와 현재 실행 위치가 있는지 상상해보십시오. 그런 다음 @q레지스터 스크립트의 내용에 at-current-location을 삽입하십시오 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 바이트 (Zachary T)

132 바이트 HTML / CSS 답변 도 확인하십시오 .


오버플로가 발생할 수 i있습니까?
Zacharý

그렇습니다. 고쳤다!
darrylyeo

1
당신은 대체 할 수 i++,i%=4i=-~i%4바이트를 위해?
Zacharý

2
@Xufox 유닛이 작동 할 수 <pre>있도록 모노 스페이스 글꼴 만 사용 ch했습니다. 규칙은 사용 된 글꼴 모음에 대해서는 언급하지 않습니다. ;)
darrylyeo

1
내가 실수하지 않으면 JS가 인쇄하는 첫 번째 문자가 문자열의 마지막 문자가됩니다. 그래서 -대신에 초기화해야합니다 /. 또는로 초기화 |하고 반복하십시오 '-\\|/'. 그래도 좋은 증가.
Titus

21

윈도우 배치, 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 바이트를 절약 한 Roman Grä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

20

노드, 72 70 바이트

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

교체 \x1B정확한 바이트 수를 얻을 수있는 문자 이스케이프 문자로. f()애니메이션을 시작하려면 호출 하십시오. 내 컴퓨터의 ConEmu 터미널 에뮬레이터에서 어떻게 보이는지 보여줍니다.

enter image description here


사용하십시오 \033c( \033실제 문자 표현으로 대체 ). 잘 보이지는 않지만 약간의 바이트를 절약합니다.
Mama Fun Roll

하지 않습니다 i오버 플로우?
Zacharý

12
@ZacharyT 그것은 71 백만 년 후에 나올 것입니다, 그러나 필요한 경우 고칠 수 있습니다
ETHproductions

3
"프로그램은 무한정 실행될 수 있어야합니다. 예를 들어, 프레임에 카운터를 사용하는 경우 카운터는 사용자 언어의 최대 값을 초과하여 오류를 발생시키지 않아야합니다.", 예, 필요합니다.
Zacharý

3
@Florent 그러나 노드에서 실행되지 않습니다 ;-)
ETHproductions

14

코 틀린, 67 66 바이트

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

enter image description here

\r선을 정리하고 Kotlin의 멋진 문자열 보간을 활용 하여 상당히 자명 한 설명 .

편집 : 변경하여 @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu 1 개 바이트 덕분에 저장된 while(true)while(1>0)


1
(-1) while(1>0)대신 사용하여 1 바이트를 절약 할 수 while(true)있으며 실제 함수 구문을 답변 ( fun a(){<code>}, +9) 에 포함시켜야합니다 . 약간 건방진하고 싶다면 함수를 변수 ( val a={<code>}, +8) 로 저장할 수 있습니다 .
F. George

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu '전체 프로그램'모드가 허용되지 않습니까? .kts클래스 나 함수 정의없이 Kotlin 스크립트로 실행할 수 있습니다 . 또한, 좋은 전화 while(1>0)!
Tyler MacDonell

3
그러나 어느 날 0이 1보다 커지면 어떻게 될까요 ??? : P
FlipTack

Kotlin 스크립트를 사용하는 것이 좋습니다. @ Flp.Tkc 귀하의 의견은 codegolf.stackexchange.com/a/101131/62024에서 생각 나게 했습니다 . 여전히 이것이 가능하다는 것을 떨고 있습니다.
F. George

@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, @.그리고 @@@.여전히 나의 머리를 다치게하게!
Christian Rondeau

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 루프로 이동했습니다 (아니요 ;).

그런 다음 그것을 지적한 Roman 덕분에 2 바이트 저장을 위해 배열 인덱서로 옮겼습니다.

또한 ;Clear 화면 ( cls) 부분을 for 루프로 이동하여 1 바이트 ( )를 더 절약했습니다 .

질문의 무한한 측면에 대해 TimmyD가 지적한 문제 및 수정, +5 바이트 만 필요로 변경 $a++%4되어 ($a=++$a%4)3을 초과하지 않습니다.

Powershell 버전 4에서 실제로 가능하다는 것을 지적한 '무엇이든'덕분에 for 루프를 완전히 비워 다른 바이트를 절약했습니다!

이 답변 의 (최종?) 버전에 대한 새로운 업데이트 된 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)
Roman Gräf

항상 무언가를 잊어 버립니다-고마워요!
colsw

2
Powershell에 능숙하지는 않지만 Windows Batch 항목을 보았을 때 "Powershell이 ​​이길 수 있습니까?"라고 생각했습니다. 그리고 여기 있습니다!
Jakub Jankowski

1
추신 V4에 적어도 당신은 조건을 완전히 빈 상태를 유지하여 다른 바이트 수 골프 있어야한다 :for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
어떤

1
천만에요. 그것은 실제로 버전 2+를 위해 작동하는 것 같다 전에 확인 너무 게으른)
어떤

11

Pyth- 36 35 바이트

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

분명히 온라인으로 작동하지 않습니다.


당신은 이것에 대한 gif를 가지고 있습니까? 또한 오버플로가 발생할 수있는 카운터가 있습니까?
플립 택

@ Flp.Tkc 유일한 카운터는 Z파이썬 정수이며 오버플로하지 않습니다. 나는 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


11

HTML / CSS, 23 + 109 = 132 바이트

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

매스 매 티카, 74 67 바이트

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

@dahnoak 덕분에 엄청난 7 바이트 할인


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

1
@dahnoak 건배! ListAnimate가 문제라는 것을 몰랐습니다. <>Flat not Listable 인 수치 는 그렇지 않으면 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);}}}

37 바이트를 절약 한 Roman Gräf와 raznagul에게 큰 감사를드립니다. (특히 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");하고 두 번째를 Console.Write("\b"+a);?
Roman Gräf

동작을 정의하는 것은 불필요하며 루프처럼 길게 사용 foreach(var a in"|/-\\")하고 본문에 현재 코드를 추가하면 ~ 20 바이트가 절약됩니다.
raznagul

또한 작업은 필요한 출력을 정확하게 작성하는 것입니다. 현재는 그렇지 않습니다.
raznagul

지금이되어야합니다. '|' "Loading ..."뒤에 후행 공백이 있습니다.
Snowfire

골프화되지 않은 버전에서는 (골프 버전과 일치하지 않기 때문에) 첫 번째를 제거 하고 두 번째 대신 Console.Write()하나만 사용할 수 있습니다 Console.Write($"Loading... {c}\r").
우유

9

앞으로, 72, 73 바이트

편집 :

  • Gforth 전용 버전 69 바이트를 추가했습니다 (감사합니다 @ninjalj!).
  • "로드 중 ..."(Thx @Roman Grä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

파이썬 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괄호를 피하기 위해. (덕분에 @ Flp.Tkc 이 -2 바이트!) (그것은이었다 i=(i+1)%4i=-~i%4 )

기술적으로 파이썬이 int오버플로 할 수 없으므로 카운터를 영원히 상승시킵니다 . 지적하고 바이트를 저장하는 @ Zachary T 에게 감사드립니다 !
머신에 메모리가 부족하기 때문에 머신에서만 중지되지만, 해당 메모리에 4GB의 메모리 가있는 9.7 세대 가 소요 int됩니다.

인쇄 와 공간이 분리 된 -1 바이트에 대한 @Kade 덕분에 내 공간이 필요하지 않습니다.print a,bab

Windows에서 작동하는 GIF는 다음과 같습니다.

Loading

Linux VM에서도 테스트했습니다. Mac에서 테스트 할 수 없었습니다.


1
내가 정확하게 기억한다면, 당신은 i=-~i%4parens에 대한 바이트를 저장하는 데 사용할 수 있습니다 :)
FlipTack

2
교체하지 않음 [i],;i=-~i%4으로 [i%4],;i+=1는 파이썬에 대한 최대 만 최대 메모리를 초과하지 않기 때문에 바이트를 저장?
Zacharý

9
다음과 같이 로그인 해 주셔야합니다 Administrator.
Neil

5
@Neil 완전히 정직하게 말하면, 다른 계정 이름은 실제 이름 (개인 PC)이므로 Python 파일을 Administrator에 넣고 거기에서 실행했습니다.
Artyer

2
기술적으로 파이썬 정수가 무한히 클 수 있기 때문에 @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

@Hoki 아이디어 주셔서 감사합니다. 실제로 처음에는 카운터 모듈로 4가 증가했지만 조금 더 길었습니다 (초기 일시 중지가 필요 없기 때문에 바이트를 얻었습니다). 또한, 나는 분명 화면과 기본 디스플레이가보다 짧은 생각 fprintf백 스페이스와
루이스 Mendo

7

Dyalog APL, 50 바이트

Windows 버전에서만 작동합니다. 그렇지 않으면 호출 ⎕SM하지 않으면 창이 표시되지 않습니다 ⎕SR.

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

설명:

  • {... }1:로 시작하는 기능 실행⍵=1
  • Loading... '∘,¨'|/-\': 네 가지 가능한 출력을 생성
  • ⊂⊃⍵⌽: 목록을 회전하여 다섯 번째 요소를 먼저 배치하고 첫 번째 요소를 가져 와서 묶습니다.
  • ⎕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 오 쓰레기, 게으른 복사 및 붙여 넣기. 내가 곧 :) 다시 내 책상에있을 때 그것을 수정합니다
피트 아덴

내 의견으로 인해 솔루션이 더 길어 지다니 죄송합니다. 186으로 되 돌리는 1>0대신 사용할 수 없습니까 true?
manatwork

@ErikGolfer 에릭 크퍼 포어, C #에 대해서는 전혀 모르지만 언어는 Java의 사본이라는 사실을 기반으로 할 수 없다 . (BTW, 만약 작동한다면, 첫 번째 호출을 l()조건으로 사용하는 것이
좋을까요

2
@manatwork 글쎄, C #은 해결할 수없는 것 같습니다.
Outgolfer Erik

7

스냅!, 8 블록

8 blocks of Snap!

이것은 제가 애플에서 가장 먼저 생각했던 알고리즘 중 하나였습니다.


1
Applesoft BASIC :)
roblogic

1
나는 이것을 기쁜 마음으로 하이퍼 카드에서 할 것입니다.
wyldstallyns

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

배쉬, 98 69 바이트

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

많은 바이트를 골라 낸 많은 사람들에게 감사합니다!


또한 작은 따옴표를 사용하고 인수를 echo -e -n결합 할 수 있다면 백 슬래시를 피할 필요가 없습니다.echo -en
Evan Chen

반향 줄을 다음과 같이 바꾸면 2 줄과 13 바이트를 절약 할 수 있습니다.echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; while조건을 지정하십시오 .
manatwork

manatwork와 같은 printf를 사용하고 부분 문자열을 단순화하고 while조건에 직접 넣으십시오 while printf "\rLoading... ${s:i++%4:1}";do. 67 바이트
Dominik R

그것은 Dominik R에서 작동하지 않으며 결국 오버플로가 발생합니다.
Zacharý

6

펄 6 , 72 61 바이트

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

6

> <> , 55 + 4 = 59 바이트

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

-t .01바이트 수의 +4 인 인터프리터에 추가 인수로 전달 하여 실행해야합니다 .

이 작업은 스택에 4 개의 문자를 인쇄하여 제거하지 않고 상단을 인쇄하고 한 위치 씩 스택을 이동시키는 것입니다. 그런 다음 \b(백 스페이스, 문자 x08) 인쇄 하고 루프를 다시 시작합니다.

타이밍은 인터프리터에 전달 된 인수에 의해 달성되며, 각 명령을 실행하기 전에 0.01 초 동안 대기합니다. 출력과 다음 명령 사이에는 23 개의 명령이 있으며 (대부분은 명령 포인터를 다음 셀로 간단히 이동합니다), 이것은 명령 실행에 필요한 시간에 0.23 초를 더한 시간을 기다릴 것입니다. 10 % 오류

온라인으로 시도 할 수는 있지만 해당 인터프리터는 백 스페이스 문자를 인식하지 못하므로 출력이 약간 이상합니다.


일반적 플래그는 같은 -n1 바이트로 득점, 그래서 난 당신이 같은 인수 점수를 할 수 있다고 생각 t, .014 바이트입니다. 10 % 규칙 btw의 좋은 사용 :)
FlipTack

@ Flp.Tkc 감사합니다! 내가 인수에 대해 바이트를 계산하는 방법 확실하지 않았다, 나는이 방법을 좋아한다 :
레오

@Leo-0.01을 사용하고 더 적은 지시로 더 큰 눈금이 아닌 이유가 있습니까? 8 명령 루프와 0.03의 틱 수를 사용하는 버전을 추가했습니다. # "... gnidaoL"l?! vob0. "\ | /-": o} 8o51. > #
청록 펠리컨

@Tealpelican 이유가 있지만 그다지 좋은 것은 아닙니다. 규칙은 "처음 출력을 표시하기 전에 0.25 초를 기다리지 말아야합니다. 첫 번째 프레임은 프로그램이 실행 되 자마자 인쇄되어야합니다."라고 말합니다. 타이머를 너무 길게 만들고 싶지는 않지만 코드 골프이므로 너무 짧게 만들고 싶지 않습니다. 결국 요청 된 0.25 초의 정확한 타이밍을 달성하기 위해 각각 0.01을 취하는 25 개의 명령 루프를 결정했습니다. 내가 그것을 구현했을 때, 나는 전체 루프를위한 충분한 공간이 없다는 것을 깨달았으므로 10 % 규칙을 사용해야했습니다.
Leo

규칙을 잘못 읽었을 것입니다. 그것은 타이밍에 대한 완벽한 이유입니다 :)
청록 펠리칸

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.2Hz (또는 NTSC 클럭 / 12 / 65536Hz)에서 깨어 났을 수 있습니다.
ninjalj

@ninjalj 감사합니다. 댓글을 변경했습니다 ...
Martin Rosenau

6

NASM의 x86_64의 - 349 283 바이트

이것은 64 비트 리눅스 시스템에서 실행되어야합니다

사용하여 구축 :

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 바이트 절약-감사합니다.

enter image description here


후행 줄 바꿈 / 공백이 없으면 349 바이트를 계산합니다.
FlipTack

^ Flp. Tkc 감사합니다. 끝에 공백이있는 줄이있었습니다.
Samuel

@ 사무엘 13-17 행이 필요합니까? 그 줄이 없으면 꽤 잘 작동하는 것 같습니다. 내가 말할 수있는 한 (어셈블리가 그렇게 두렵지 않다고 생각합니다) Loading ....을 인쇄 한 다음 | 문자를 제거한 다음 해당 문자를 제거한 다음 루프를 입력하여 | 처음으로.
user254948

@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답변이 유효하지 않은 것 같습니다 (규칙에서 알지 못했습니다). 곧 업데이트 예정
Billywob

1
실제로 내장을 사용하지 않으면 2 바이트 더 짧아 질 수 있습니다 T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}is 87 bytes.
plannapus

흠 ... R은 벡터에서만 작동합니까? 원자에 대한 모듈러스 또는 비트 연산자가없는 이유는 무엇입니까? 인 T벡터는? 않는 T=(T+1)%%4일을? 다른 5 바이트를 절약 할 수 있습니다.
Titus

2
... 또는 T=T%%4+1: 2 바이트 더 짧습니다.
Titus

5

하스켈 (GHC), 103 91 바이트

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

12 바이트를 절약 해 주셔서 감사합니다 @nimi!


전체 프로그램이 필요하지 않습니다. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

10 %의 허용 오차와 대치 250000및 그 앞의 공백 을 사용하여 2 바이트를 절약 할 수 있습니다 (4^9).
Christian Sievers

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을 ()?
John U

대부분의 시스템에서는 플러시가 필요하며, 대부분은 개행을 기준으로 버퍼링합니다. 그러나 일부 시스템에서는 필요하지 않을 수 있습니다.
LambdaBeta

fprintf(stderr,...대신 라인 버퍼링되어 있지 않기 때문에 대신 사용할 수 있습니다 stdout. 이 f...stderr,(가) 동안, 8 자합니다 fflush(0);열을합니다, 그래서 두 문자의 순 승리입니다.
cmaster

5

펄, 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... |/또한 할당 초과 바이트를 저장합니다.
primo

2
또한 음역 구분 기호에 작은 따옴표를 사용하면 백 슬래시를 이스케이프 처리하지 않아도됩니다 y'-\|/'\|/-'.
primo

코드 앞에 여분의 공간이있는 것 같습니다.
Outgolfer Erik

1
리터럴을 사용하여 다른 바이트를 저장할 수 있습니다 \r.
ninjalj

1
2 개 y'-|\/'\/|-'/4대신 사용하십시오 .25.
primo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.