NASM x86_64 - 349 283 bytes

6

Arquivo .com do MS-DOS, 56 bytes

Aqui o conteúdo do arquivo em hexadecimal:

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

O código do assembler correspondente é assim:

    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... ",'$'
Martin Rosenau
fonte
1
Manter uma tecla pressionada acelera o botão rotativo, que pode ser corrigido mascarando outras interrupções além da interrupção do temporizador, por exemplo:mov al, 0xfe / out 0x21,al
ninjalj 29/11
O comentário para HLT está errado, você provavelmente quis dizer que HLT acorda a ~ 18,2 Hz (ou, mais precisamente, no relógio NTSC / 12/65536 Hz).
Ninjalj
@ninjalj Obrigado. Mudei o comentário ...
Martin Rosenau

Respostas:

6

NASM x86_64 - 349 283 bytes

Isso deve ser executado em sistemas Linux de 64 bits

construído usando:

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

animação:

salvou 65 bytes - obrigado user254948

insira a descrição da imagem aqui

Samuel
fonte
Conto 349 bytes, a menos que haja uma nova linha / espaço à direita
FlipTack
^ Flp. Tkc Obrigado, havia uma linha com um espaço no final
Samuel
@ Samuel são necessárias as linhas 13-17? Parece funcionar muito bem sem essas linhas. Tanto quanto posso dizer (receio que não seja tão bom em montagem), você imprime o Loading ...., depois o | caractere, remova esse caractere e insira um loop em que você repete a impressão do | pela primeira vez.
precisa saber é o seguinte
@Samuel além de xor r8, r8 -> mov r8,0 (salva 1 caractere), alguns MOVs têm um espaço extra (mov r7, 1 -> mov r7,1). além disso, as instruções cmp r8,4, jl l, xor r8, r8, podem ser substituídas por AND r8,3 (salvando 15 caracteres). Você deve ter 285 bytes e não 349! (em combinação com as linhas mencionadas acima)
user254948 1/16/16
5

R, 85 89 bytes

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

Editar: Corrigida a resposta de forma que Tnão transbordasse, redefinindo o contador se maior que 4.

O único aspecto interessante sobre essa resposta é o uso do R TRUTHYembutido T. É efetivamente um conjunto de variáveis ​​predefinido, o 1/TRUEque significa que não precisamos inicializar o contador, mas podemos começar a incrementar T.

Billywob
fonte
Acabaria Ttransbordando?
FlipTack
@ Flp.Tkc Não transbordaria, mas seria tratado como passado infinito, 1e+308caso em que NAé retornado, então acho que essa resposta é inválida (não a note nas regras). Será atualizado em breve
Billywob 28/11
1
Na verdade, você pode obter 2 bytes mais curtos se não usar o built-in T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}é 87 bytes.
plannapus
Hmm ... o R opera apenas em vetores? Por que não existem módulos ou operadores bit a bit para átomos? éT um vetor? Funciona T=(T+1)%%4? Isso salvaria outros 5 bytes.
Titus
2
... ou T=T%%4+1 : até 2 bytes mais curtos.
Titus
5

Haskell (GHC), 103 91 bytes

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

Obrigado @nimi por salvar 12 bytes!

Angs
fonte
Não há necessidade de um programa completo. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
N28 /
Dois bytes podem ser salvos usando a tolerância de 10% e a substituição 250000e o espaço antes dele (4^9).
Christian Sievers
5

C (em sistemas UNIX) 88 bytes

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

Começa com o personagem errado, mas acho que parece melhor. Você pode alterar facilmente a ordem dos caracteres modificando o "\ - / |" corda.

LambdaBeta
fonte
Pode ser jogado ainda mais com a mudança de instruções para for, por exemplo ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}main(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
:,
Você precisa do fflush () lá?
John U
Na maioria dos sistemas, você precisa do flush, muitos deles com buffer baseado em novas linhas. No entanto, é possível que isso não seja necessário em alguns sistemas.
LambdaBeta 2/16/16
Você pode usar em fprintf(stderr,...vez disso, uma vez que isso não é buffer de linha como stdout. O jogo f...stderr,leva oito caracteres, enquanto o jogo fflush(0);leva dez, por isso é uma vitória líquida de dois personagens.
#
5

Perl, 71 63 61 bytes

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

Versão anterior:

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

Thanx para @primo por 10 bytes.

Denis Ibaev
fonte
2
Bom truque para usar o selecttempo limite em vez de Time::HiRes. Você pode salvar alguns bytes usando ... while$|=printe movendo os hífens na transliteração para a frente e o final. s//\r Loading... |/também salva um byte sobre a atribuição.
Primo28
2
E também, se você usar aspas simples para o delimitador de transliteração, não há necessidade de escapar a barra invertida ou: y'-\|/'\|/-'.
Primo 28/11
Parece que você tem um espaço extra antes do seu código.
Erik o Outgolfer
1
Você pode salvar outro byte usando um literal \r.
Ninjalj 28/11
1
Use y'-|\/'\/|-'/4no lugar de .25por mais 2.
Primo