Memuat ... Selamanya


106

Tantangan Anda adalah membuat layar pemuatan tanpa batas, yang terlihat seperti ini:

masukkan deskripsi gambar di sini


Atau, untuk lebih spesifik:

  • Jangan masukan.
  • Output Loading..., dengan spasi tambahan, tetapi tanpa tambahan baris baru.
  • Siklus jauh melalui karakter |, /, -dan \: setiap 0,25 detik, menimpa yang terakhir dengan berikutnya dalam urutan. Anda dapat menimpa hanya karakter terakhir, atau menghapus dan menulis ulang seluruh baris, selama Loading...tidak berubah.

Aturan

  • Teks keluaran harus terlihat persis seperti yang ditentukan. Newline / spasi tambahan dapat diterima.
  • Anda tidak harus menunggu 0,25 detik sebelum awalnya menampilkan output - frame pertama harus dicetak segera setelah program dijalankan.
  • Program Anda harus dapat berjalan tanpa batas. Misalnya, jika Anda menggunakan penghitung untuk bingkai, penghitung tidak boleh menyebabkan kesalahan dengan melebihi maksimum dalam bahasa Anda.
  • Meskipun masa tunggu antara setiap "frame" harus 0,25 detik, jelas ini tidak akan pernah tepat - margin kesalahan 10% atau lebih diizinkan.
  • Anda dapat mengirimkan fungsi, tetapi harus dicetak ke stdout.
  • Anda dapat mengirimkan jawaban di lingkungan non-konsol (tapi masih berbasis teks), selama itu mampu menghasilkan animasi pemuatan.
  • Ini adalah , sehingga solusi terpendek (dalam byte) menang. Lubang kode standar golf berlaku.
  • Jika memungkinkan, berikan gif layar memuat Anda dalam tindakan.

Contoh

Berikut ini adalah kode C ++ yang saya gunakan untuk membuat contoh (ungolfed):

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

Semoga pegolf terbaik menang!


3
Bisakah pengiriman menunggu 0,25 detik sebelum awalnya menampilkan output?
ETHproduksi

2
Tidak, tapi terima kasih sudah menyebutkan itu, saya akan menambahkannya ke aturan @ETHproductions
FlipTack

Apakah baris baru tambahan (setelah simbol animasi) dapat diterima?
Tembaga

Tentu saja :) @
Copper

1
@TheBitByte itu berarti bahwa, secara teoritis, tidak ada di dalam program Anda yang akan menyebabkan kesalahan - seperti penghitung meluap atau mencapai kedalaman rekursi maksimum.
FlipTack

Jawaban:


76

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

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>

Sunting: Disimpan 3 byte berkat @betseg. Disimpan 17 byte berkat @manatwork. Disimpan 1 byte berkat @Daniel. Disimpan 13 byte berkat @Ismael Miguel. Disimpan 4 byte berkat @Fez Vrasta.


4
Menurut meta, CSS + HTML baik untuk menjawab pertanyaan. Lebih jauh lagi saya mengizinkan ini dalam deskripsi tantangan. Jadi jawaban ini sangat valid :)
FlipTack

5
HTML + CSS adalah TC, jadi saya tidak melihat mengapa itu mungkin tidak bersaing
TuxCrafting

1
@ TùxCräftîñg CSS pasti tidak lengkap karena Anda dapat menyelesaikan masalah penghentian di dalamnya (Jika tidak ada animasi tanpa batas, ia berhenti). Saya pikir hal yang sama berlaku untuk HTML (Jika Anda tidak memasukkan JS).
Artyer

4
@Artyer stackoverflow.com/a/5239256/3273184 adalah sesuatu yang patut dipertimbangkan.
Mama Fun Roll

4
@MamaFunRoll Sebuah komentar pada posting itu menyebutkan bahwa itu tidak benar-benar membuktikannya TC karena tidak dapat diulang tanpa intervensi pengguna. Namun, ini bisa menyelesaikan tantangan khusus ini, jadi saya tidak melihat masalah dengan jawaban ini.
ETHproduksi

57

Vim, 43 , 41 byte

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

Dua byte disimpan berkat @Udioica!

Inilah animasi (yang agak ketinggalan jaman) dari itu terjadi secara real time!

masukkan deskripsi gambar di sini

Dan inilah penjelasannya:

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
hanya rasa ingin tahu: apakah itu melanggar "Program Anda harus dapat berjalan tanpa batas"? akhirnya bisa mencapai stack overflow? :)
Dan Oak

4
@ Wahnoak Yah, jelas saya tidak bisa mengujinya secara tak terbatas, tetapi tidak mengalokasikan memori tambahan, jadi saya tidak bisa melihat alasan mengapa itu tidak akan bekerja tanpa batas.
DJMcMayhem

1
Jika Anda beralih ike Sdan memindahkannya di dalam makro, Anda bisa melewati r|.
udioica

2
@ ahnoak Tidak ada alasan mengapa mesin vi tidak bisa melihat rekursi ekor. Dan beberapa implementasi rekursi akan melakukannya secara alami (bayangkan jika ada vektor perintah yang harus dieksekusi, dan lokasi eksekusi saat ini. Kemudian @qakan memasukkan lokasi skrip register pada saat ini ke lokasi q. Tidak perlu tumpukan, dan tidak ada memori yang dialokasikan kecuali ada perintah untuk dijalankan setelah di @q dalam q.)
Yakk

Hampir setiap kali Anda mengirim jawaban untuk tantangan, saya belajar sesuatu yang baru (dalam hal ini, @:dan :sl), jadi terima kasih dan teruskan mereka :)
Christian Rondeau

37

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

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

-1 byte (Zachary T)

Periksa jawaban HTML / CSS 132 byte saya juga.


Mungkinkah itu meluap i?
Zacharý

Ya, pada akhirnya akan. Memperbaiki itu!
darrylyeo

1
Bisakah Anda ganti i++,i%=4dengan i=-~i%4byte?
Zacharý

2
@ Xufox Satu- <pre>satunya memastikan font monospace digunakan sehingga chunit akan bekerja. Aturan tidak menyebutkan apa pun tentang keluarga font yang digunakan. ;)
darrylyeo

1
Jika saya tidak salah, karakter pertama yang dicetak oleh JS akan menjadi yang terakhir di string; jadi Anda harus init dengan -alih - alih /. Atau init with |dan loop through '-\\|/'. Peningkatan bagus.
Titus

21

Windows Batch, 121 114 84 80 79 78 byte

Hanya membuang ini untuk bersenang-senang.

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

Saya tidak dapat menetapkan pipa ( |) ke dalam array, jadi saya harus menambahkannya secara manual dengan tugas lain.Penundaan dilakukan dengan PING, yang mungkin tidak akurat .

Keluaran:

masukkan deskripsi gambar di sini

Sunting:

  • Terima kasih kepada Roman Gräf karena telah menghemat 7 byte!
  • Terima kasih kepada Neil untuk menghemat 30 byte! Saya juga telah mengubahnya sedikit lebih banyak untuk menghemat byte pada baris baru.
  • Terima kasih kepada phyrfox karena telah menghemat 4 byte!
  • Terima kasih untuk YourDeathIsComing karena telah menghemat 2 byte!

3
Anda dapat menghapus @echo offdan meletakkan @di depan setiap setatau echoperintah
Roman Gräf

1
Anda tidak perlu array, in (/ - \ ^|)berfungsi. Juga,% 0 adalah cara yang lebih pendek untuk mengulang goto.
Neil

2
Anda harus dapat menggunakan alamat IP "1.1" (-4 bytes), karena sebagian besar platform akan secara otomatis memperluasnya ke 1.0.0.1 untuk Anda.
phyrfox

1
Anda dapat menghemat 1 byte dengan menghapus spasi di depan >nul.
YourDeathIsComing

1
Maksud saya ruang sebelum itu, bukan setelahnya.
YourDeathIsComing

20

Node, 72 70 byte

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

Ganti \x1Bdengan karakter escape literal untuk mendapatkan jumlah byte yang benar. Panggil f()untuk memulai animasi. Begini tampilannya di emulator terminal ConEmu di komputer saya:

masukkan deskripsi gambar di sini


Coba gunakan \033c(ganti \033dengan representasi karakter sebenarnya). Itu tidak terlihat bagus, tetapi menghemat beberapa byte.
Mama Fun Roll

Tidak akan imeluap?
Zacharý

12
@ ZakaryT Ini akan terjadi setelah 71 juta tahun, tetapi saya dapat memperbaikinya jika perlu
ETHproduksi

3
"Program Anda harus dapat berjalan tanpa batas. Misalnya, jika Anda menggunakan penghitung untuk bingkai, penghitung tidak boleh menyebabkan kesalahan dengan melebihi maksimum dalam bahasa Anda.", Ya, itu perlu.
Zacharý

3
@Forent Tapi kemudian itu tidak akan berjalan pada Node ;-)
ETHproduksi

14

Kotlin, 67 66 byte

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

masukkan deskripsi gambar di sini

Cukup jelas, digunakan \runtuk menghapus garis dan mengambil keuntungan dari interpolasi string yang mengagumkan.

EDIT: Disimpan 1 byte berkat @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu dengan mengubah while(true)kewhile(1>0)


1
Anda dapat menyimpan satu byte dengan menggunakan while(1>0)alih-alih while(true)(-1) & mungkin harus menyertakan sintaks fungsi aktual dalam jawaban Anda ( fun a(){<code>}, +9). Jika Anda ingin sedikit curang, Anda bisa menggunakan fungsi toko sebagai variabel ( val a={<code>}, +8).
F. George

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu Apakah mode 'program penuh' tidak dapat diterima? Ini dapat dijalankan sebagai skrip Kotlin .ktstanpa definisi kelas atau fungsi. Juga, panggilan yang bagus while(1>0)!
Tyler MacDonell

3
Tetapi bagaimana jika, suatu hari, 0 menjadi lebih besar dari 1 ???? : P
FlipTack

Ide bagus menggunakan skrip Kotlin. @ Flp.Tkc Komentar Anda mengingatkan saya tentang ini: codegolf.stackexchange.com/a/101131/62024 . Masih bergidik bahwa ini mungkin.
F. George

@TylerMacDonell Benarkah? Saya tidak tahu Anda bisa menjalankan kotlin secara langsung sebagai skrip. Terimakasih atas infonya.
TheNumberOne

14

Vim, 35 byte

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

Versi yang membosankan. Inilah solusi yang tidak patuh yang lebih baik:

Vim (1 detik tidur), 27 byte

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

Menggunakan gstidak hanya jauh lebih pendek, tetapi Anda tidak harus menekan Enter. Itu artinya makro cocok dengan in-line, dan saya dapat menyimpan byte dengan beralih ke @.. (Karena tidak ada setelah panggilan rekursif dapat berjalan, saya dapat mengetik apa pun yang saya inginkan.)


Terima kasih atas jawaban ini! Saya belajar gs, @.dan bagian @@dalam @.masih membuat kepala saya sakit!
Christian Rondeau

14

Pyth, 31 byte

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

Penerjemah di sini .

Memuat GIF

Penjelasan

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 Bytes

Kembali di Bytecount saya mulai dengan!

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

CLI di PowerShell akan sedikit rusak pada beberapa komputer, jadi itu tidak terlihat sempurna, tapi itu sebaik yang bisa saya dapatkan.

Memindahkan $ a ++ ke dalam for loop untuk menghemat satu byte, (tidak ;)

Kemudian memindahkannya ke array indexer, untuk save 2 byte lainnya, terima kasih kepada Roman untuk menunjukkannya.

Juga menyimpan 1 byte lagi ( ;) dengan memindahkan bagian Hapus layar ( cls) ke dalam for loop ..

Masalah dan perbaikan yang ditunjukkan oleh TimmyD untuk aspek pertanyaan yang tak terbatas, hanya +5 Bytes yang diperlukan, diubah $a++%4menjadi ($a=++$a%4)sehingga tidak akan pernah melampaui 3.

Menyimpan byte lain dengan membiarkan for loop benar-benar kosong, terima kasih kepada 'apa pun' untuk menunjukkan bahwa ini sebenarnya mungkin di Powershell Versi 4!

Gif yang baru diperbarui untuk versi (final?) Dari jawaban ini.

Memuat 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}(pindahkan $a++ke penggunaan terakhir $a)
Roman Gräf

selalu lupa sesuatu - terima kasih untuk itu!
colsw

2
Saya tidak begitu mahir di Powershell, tetapi ketika saya melihat entri Windows Batch, saya berpikir "Bisakah Powershell mengalahkan ini?". Dan ini dia!
Jakub Jankowski

1
Setidaknya pada ps v4 Anda harus dapat golf byte lain dengan menjaga agar kondisi benar-benar kosong:for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
apapun

1
Sama-sama. Tampaknya berfungsi untuk Versi 2+, terlalu malas untuk memeriksanya sebelumnya;)
apapun

11

Pyth - 36 35 byte

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

Jelas tidak bekerja online.


Apakah Anda memiliki gif dalam aksi ini? Juga, apakah ada penghitung yang bisa meluap?
FlipTack

@ Flp.Tkc satu-satunya penghitung adalah Zyang merupakan integer python, yang tidak meluap. Saya mencoba membuat gif tetapi tidak berhasil. Jika Anda tahu cara membuatnya, Anda dapat menjalankannya dengan juru bahasa pyth
Maltysen

4
Jika integer tidak meluap, maka itu mungkin akan tumbuh sampai mengisi semua memori, yang akan membuatnya gagal setidaknya setelah 10⁶⁵⁰⁰⁰⁰⁰⁰⁰ tahun pada kebanyakan sistem 32-bit. Tentu, kematian panas alam semesta akan terjadi lebih dulu, tapi tetap saja ...
jjrv

11

Matlab, 78 75 byte

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

masukkan deskripsi gambar di sini


11

HTML / CSS, 23 + 109 = 132 byte

Memperbaiki jawaban 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 Bytes

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

Off 7 byte off berkat @dahnoak


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

1
@dengnoak sorak-sorai! Saya tidak menyadari ListAnimate adalah sesuatu. Ini memalukan bahwa <>Flat tidak Listable kalau tidak 4 byte lagi bisa dicukur!
A Simmons

Hanya untuk bersenang-senang:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
shrx

9

C #, 170 133 Bytes

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

Terima kasih banyak kepada Roman Gräf dan raznagul, yang menyelamatkan saya 37 byte. (Terutama raznagul, yang menunjukkan, bahwa solusi asli saya tidak valid. Saya agak ketinggalan sesuatu di sana, tetapi sekarang sudah diperbaiki dan harus memenuhi persyaratan :)

sangat mirip dengan jawaban C # Pete Arden yang ada tetapi dengan beberapa perbaikan

misal "for (;;)" bukannya "while (true)", char bukan string

Saya akan mengomentari saran saya pada jawabannya tetapi saya sebenarnya tidak memiliki reputasi yang cukup untuk melakukan itu.

Tidak Terkumpul:

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

2
Mengapa tidak menghapus yang pertama Console.Write("\b");dan mengubah yang kedua Console.Write("\b"+a);?
Roman Gräf

Menentukan suatu tindakan tidak perlu dan lama menggunakan loop seperti foreach(var a in"|/-\\")dan menambahkan kode yang saat ini Anda miliki dalam tindakan karena tubuh akan menyelamatkan Anda ~ 20 Bytes.
raznagul

Juga, tugasnya adalah untuk menciptakan output yang dibutuhkan dengan tepat. Yang saat ini tidak terjadi.
raznagul

Seharusnya begitu sekarang, saya lupa '|' dan spasi tambahan setelah "Memuat ...".
Snowfire

Dalam versi yang tidak dikenali (karena tidak cocok dengan versi golf), Anda dapat menghapus yang pertama Console.Write()dan hanya menggunakan satu Console.Write($"Loading... {c}\r")alih-alih yang kedua.
susu

9

Keempat, 72, 73 byte

EDIT :

  • Menambahkan versi Gforth-only, 69 byte (Terima kasih @ninjalj!)
  • Menambahkan spasi kosong yang hilang setelah "Memuat ..." (Thx @Roman Gräf!), +1 byte
  • Diperbarui untuk mencocokkan aturan dengan lebih tepat (dalam jumlah byte yang sama)

Golf

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

Versi yang lebih baik

Versi GNU Forth-only dapat diturunkan hingga 69 byte seperti ini:

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

Screencast

masukkan deskripsi gambar di sini

Cobalah online!


1
Karena Anda menggunakan gforth, jika Anda tidak peduli tentang portabilitas ke Forth lain, Anda dapat menggunakan [begin]dan di [again]luar definisi kata.
ninjalj

9

Python 2, 81 79 78 77 byte

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

Cukup solusi sederhana yang menggunakan tidur time.

Saya menggunakan \r(pengembalian carriage) untuk kembali ke awal baris dan kemudian mencetak pesan yang menimpa baris.

Saya mulai dengan i=1untuk menghindari dua kali lolos \(itu '\|/-'bukan '|/-\\').

Di masa lalu, saya dulu -~ibermaksud i + 1menghindari kurung. (Terima kasih kepada @ Flp.Tkc untuk -2 byte ini!) (Itu i=(i+1)%4vs. i=-~i%4)

Sekarang, saya hanya membiarkan counter naik selamanya, karena secara teknis Python ints tidak bisa meluap. Terima kasih kepada Zachary T karena menunjukkannya dan menghemat satu byte!
Itu hanya berhenti pada mesin karena mesin kehabisan memori, tetapi ini membutuhkan 9,7 generasi dengan memori 4GB untuk yang satu itu int.

Terima kasih kepada @Kade untuk -1 byte di mana print a,bcetakan adan bruang terpisah, jadi saya tidak membutuhkan ruang saya sendiri.

Berikut ini beberapa gif yang berfungsi pada Windows:

Memuat

Saya mengujinya pada Linux VM juga. Saya tidak bisa mengujinya di Mac.


1
Jika saya ingat dengan benar, Anda dapat menggunakan i=-~i%4untuk menyimpan byte untuk parens :)
FlipTack

2
Tidak akan mengganti [i],;i=-~i%4dengan [i%4],;i+=1menyimpan byte karena tidak melebihi maks untuk Python, hanya memori maksimum?
Zacharý

9
Saya harus menurunkan suara Anda karena masuk sebagai Administrator...
Neil

5
@Neil Sejujurnya, saya hanya meletakkan file Python di Administrator dan menjalankannya dari sana karena nama akun lainnya adalah nama asli (Personal PC).
Artyer

2
Saya mengizinkan saran dari ZacharyT karena bilangan bulat Python secara teknis bisa sangat besar, asalkan komputer memiliki memori untuk menampungnya
FlipTack

7

MATL , 36 byte

1 byte dihapus menggunakan ide @ flawr tentang menggeser string secara sirkuler

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

Berikut ini adalah rekaman gif dari kompiler offline:

masukkan deskripsi gambar di sini

Atau coba di MATL Online! Jika awalnya tidak berjalan, segarkan halaman dan tekan "Run" lagi.

Bagaimana itu bekerja

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

Hai Luis. dilakukan dengan baik dengan MATL seperti biasa. Berikut sedikit variasi daftar lingkaran. dan tampilan. Apakah Anda pikir Anda bisa menerjemahkannya dalam solusi yang lebih pendek:a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
Hoki

@Hoki Terima kasih atas idenya. Sebenarnya saya awalnya memiliki counter modulo 4 yang meningkat, tapi itu sedikit lebih lama (saya kemudian mendapatkan byte karena persyaratan tidak ada jeda awal). Juga, saya pikir layar yang jernih dan tampilan normal lebih pendek daripada fprintfdengan backspaces
Luis Mendo

7

Dyalog APL, 50 byte

Ini hanya berfungsi dalam versi Windows, karena jika tidak, ⎕SMjendela tidak akan ditampilkan kecuali ⎕SRdipanggil.

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

Penjelasan:

  • {... }1: jalankan fungsi yang dimulai dengan⍵=1
  • Loading... '∘,¨'|/-\': menghasilkan empat kemungkinan keluaran
  • ⊂⊃⍵⌽: Putar daftar untuk menempatkan elemen firstth terlebih dahulu, ambil elemen pertama, dan lampirkan
  • ⎕SM←1 1,⍨: letakkan string di sudut kiri atas ⎕SMjendela.
  • ⎕DL÷4: tunggu 1/4 detik
  • 4|⍵+⌈: kumpulkan nilai yang dihasilkan (detik yang dihabiskan menunggu, jadi ini selalu 1), tambahkan ke (incrementing), dan ambil mod-4 (untuk mencegahnya akhirnya meluap).
  • : jalankan fungsi lagi dengan yang baru .

Animasi


Entah bagaimana saya tahu seseorang akan mengirimkan jawaban untuk tantangan ini untuk Dyalog (/ APL) :)
YoYoYonnY

7

C #, 187 Bytes

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

Tidak Terkumpul:

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

Masih menunggu untuk memuat ...

masukkan deskripsi gambar di sini


Masih menunggu untuk menampilkan "\" ...
manatwork

@Manatwork Oh sial, salin dan tempel malas. Akan memperbaikinya ketika aku kembali ke mejaku sebentar lagi :)
Pete Arden

Maaf melihat solusi Anda semakin lama karena komentar saya. Tidak bisakah Anda menggunakan 1>0alih-alih truemengembalikannya ke 186?
manatwork

@ErikGolfer エ リ ッ ク ゴ ル フ ァ ー, tidak tahu tentang C #, tetapi berdasarkan fakta bahwa bahasa tersebut adalah salinan dari Jawa dan tampaknya dikonfirmasi oleh Can't cor int to bool , saya pikir itu tidak akan berhasil. (BTW, jika itu berhasil, mungkin menggunakan panggilan pertama l()sebagai syarat juga akan berfungsi?)
manatwork

2
@manatwork Ya, sepertinya C # tidak bisa diubah.
Erik the Outgolfer

7

Jepret, 8 blok

8 blok Snap!

Ini adalah salah satu algoritma pertama yang saya bingung tentang Apple] [e


1
Tunjukkan pada kami BASIC Applesoft Anda :)
roblogic

1
Saya dengan senang hati akan melakukan ini di Hypercard.
wyldstallyns

6

reticular, noncompeting, 40 byte

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

masukkan deskripsi gambar di sini

Saya lupa melakukan banyak hal, termasuk w. Baiklah.

Penjelasan

: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 byte

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

Terima kasih banyak orang untuk banyak byte yang bermain golf!


Anda juga tidak perlu melarikan diri dari garis miring terbalik jika Anda menggunakan tanda kutip tunggal dan argumen untuk echo -e -ndapat digabungkan menjadiecho -en
Evan Chen

Anda dapat menyimpan 2 baris dan 13 byte dengan mengganti garis gema ke:echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer

echo -enprintf; membuat penugasan sesuai whilekondisi.
manatwork

menggunakan printf seperti manatwork mengatakan, menyederhanakan substring, dan meletakkannya langsung dalam whilekondisi: while printf "\rLoading... ${s:i++%4:1}";do. 67 byte
Dominik R

Itu tidak akan berfungsi Dominik R, itu akhirnya akan meluap.
Zacharý

6

Perl 6 , 72 61 byte

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

6

> <> , 55 + 4 = 59 byte

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

Harus dijalankan lewat -t .01argumen tambahan ke juru bahasa, itulah +4 dalam jumlah byte.

Yang dilakukan adalah menempatkan keempat karakter yang akan dicetak pada tumpukan, mencetak yang teratas tanpa melepasnya dan menggeser tumpukan dengan satu posisi. Kemudian ia mencetak \b(backspace, karakter x08) dan me-restart loop.

Pengaturan waktu dicapai dengan argumen yang diteruskan ke penerjemah, yang memaksa untuk menunggu 0,01 detik sebelum melaksanakan setiap instruksi. Ada 23 instruksi antara output dan yang berikutnya (kebanyakan dari mereka hanya memindahkan pointer instruksi ke sel berikutnya), jadi ini akan menunggu 0,23 detik ditambah waktu yang diperlukan untuk menjalankan instruksi, yang cocok tanpa masalah di 0,25 yang diminta dengan kesalahan 10%.

Anda bisa mencobanya secara online , tetapi juru bahasa itu tidak mengenali karakter backspace, jadi hasilnya akan sedikit aneh di sana.


Biasanya flags like -ndiberi nilai 1 byte, jadi saya pikir Anda dapat mencetak argumen sebagai t, .01yaitu 4 byte. Penggunaan bagus aturan 10% btw :)
FlipTack

@ Flp.Tkc Terima kasih! Saya tidak yakin bagaimana cara menghitung byte untuk argumen, saya suka cara ini :)
Leo

@ Leo - Apakah ada alasan untuk menggunakan 0,01 dan bukan centang yang lebih besar dengan instruksi yang lebih sedikit? Saya telah menambahkan versi saya yang menggunakan loop 8 instruksi dan jumlah centang 0,03; # "... gnidaoL" l?! vob0. "\ | / -": o} 8o51. > #
Teal pelican

@Tealpelican Ada alasan, tapi itu tidak terlalu bagus: aturan menyatakan bahwa "Anda tidak harus menunggu 0,25 detik sebelum awalnya menampilkan output - frame pertama harus dicetak segera setelah program dijalankan.", Jadi saya tidak ingin membuat pengatur waktu terlalu lama, sementara di sisi lain ini adalah kode golf, jadi saya tidak ingin membuatnya terlalu pendek. Pada akhirnya saya memutuskan untuk loop instruksi 25 mengambil 0,01 masing-masing untuk mencapai waktu yang tepat 0,25 diminta; ketika saya mengimplementasikannya, saya menyadari bahwa saya tidak memiliki cukup ruang untuk loop penuh, jadi saya harus menggunakan 10% aturan.
Leo

Saya pasti salah membaca aturan. Itu adalah alasan yang sangat tepat untuk menentukan waktu :)
Teal pelican

6

File MS-DOS .COM, 56 byte

Di sini konten file dalam heksadesimal:

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

Kode assembler yang cocok terlihat seperti ini:

    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
Menekan terus tombol mempercepat pemintal, yang dapat diperbaiki dengan menutupi interupsi selain dari interupsi timer, misalnya:mov al, 0xfe / out 0x21,al
ninjalj

Komentar untuk HLT salah, Anda mungkin bermaksud bahwa HLT bangun pada ~ 18.2 Hz (atau, lebih tepatnya, pada jam NTSC / 12/65536 Hz).
ninjalj

@ninjalj Terima kasih. Saya mengubah komentar ...
Martin Rosenau

6

NASM x86_64 - 349 283 byte

Ini harus menjalankan sistem linux 64 bit

dibangun menggunakan:

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

animasi:

disimpan 65 byte - terima kasih user254948

masukkan deskripsi gambar di sini


Saya menghitung 349 byte, kecuali ada baris / spasi tambahan
FlipTack

^ Flp. Tkc Terima kasih, ada garis dengan spasi di akhir
Samuel

@Amuel, baris 13-17 diperlukan? Tampaknya berfungsi cukup baik tanpa garis-garis itu. Sejauh yang saya tahu (Tidak terlalu bagus dalam perakitan saya khawatir) Anda mencetak Memuat ...., lalu | karakter, lalu hapus karakter itu, lalu masukkan satu lingkaran di mana Anda mengulangi pencetakan | untuk pertama kalinya.
user254948

@Samuel selain xor r8, r8 -> mov r8,0 (menyimpan 1 karakter), beberapa MOV memiliki ruang ekstra (mov r7, 1 -> mov r7,1). lebih jauh lagi instruksi cmp r8,4, jl l, xor r8, r8, dapat digantikan oleh AND r8,3 (hemat 15 karakter). Anda harus turun ke 285 byte daripada 349! (dalam kombinasi dengan garis yang disebutkan di atas)
user254948

5

R, 85 89 byte

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

Sunting: Memperbaiki jawaban agar Ttidak meluap dengan mengatur ulang penghitung jika lebih besar dari 4.

Satu-satunya aspek yang menarik tentang jawaban ini adalah penggunaan R's TRUTHYbuiltin T. Ini secara efektif merupakan set variabel yang telah ditentukan 1/TRUEyang artinya kita tidak harus menginisialisasi penghitung tetapi dapat mulai menambah T.


Apakah Takhirnya akan meluap?
FlipTack

@ Flp.Tkc Ini tidak akan meluap tetapi diperlakukan sebagai masa lalu tanpa batas 1e+308dalam kasus NAyang dikembalikan jadi saya kira jawaban ini tidak valid (tidak memperhatikannya dalam aturan). Akan segera diperbarui
Billywob

1
Sebenarnya Anda bisa mendapatkannya 2 byte lebih pendek jika Anda tidak menggunakan built-in T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}adalah 87 byte.
plannapus

Hmm ... apakah R hanya beroperasi pada vektor? Mengapa tidak ada modulo atau operator bitwise untuk atom? itu Tvektor? Apakah T=(T+1)%%4bekerja? Ini akan menghemat 5 byte lagi.
Titus

2
... atau T=T%%4+1: bahkan 2 byte lebih pendek.
Titus

5

Haskell (GHC), 103 91 byte

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

Terima kasih @nimi karena telah menghemat 12 byte!


Tidak perlu program lengkap. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

Dua byte mungkin disimpan dengan menggunakan toleransi 10% dan mengganti 250000dan ruang sebelum dengan (4^9).
Christian Sievers

5

C (pada sistem mirip UNIX) 88 byte

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

Ini dimulai dengan karakter yang salah, tetapi saya pikir itu terlihat lebih bagus. Anda dapat dengan mudah mengubah urutan karakter dengan memodifikasi "\ - / |" tali.


Bisa di-golf lebih lanjut dengan memindahkan statemen ke for, misalnya ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}main(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
:,

Apakah Anda memerlukan flflush () di sana?
John U

Pada sebagian besar sistem Anda memang perlu fflush, banyak dari mereka buffer berdasarkan baris baru. Namun ada kemungkinan bahwa itu tidak perlu pada beberapa sistem.
LambdaBeta

Anda dapat menggunakan fprintf(stderr,...sebagai gantinya, karena itu bukan seperti garis buffered stdout. The f...stderr,mengambil delapan karakter, sedangkan fflush(0);dibutuhkan sepuluh, jadi menang bersih dua karakter.
cmaster

5

Perl, 71 63 61 byte

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

Versi sebelumnya:

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

Terima kasih kepada @primo selama 10 byte.


2
Trik yang bagus untuk menggunakan selectbatas waktu alih-alih Time::HiRes. Anda dapat menyimpan beberapa byte dengan menggunakan ... while$|=print, dan dengan memindahkan tanda hubung dalam transliterasi ke depan dan akhir. s//\r Loading... |/juga menyimpan byte lebih dari penugasan.
primo

2
Dan juga, jika Anda menggunakan tanda kutip tunggal untuk pembatas transliterasi, tidak perlu untuk melarikan diri backslash baik: y'-\|/'\|/-'.
primo

Tampaknya Anda memiliki ruang ekstra sebelum kode Anda.
Erik the Outgolfer

1
Anda dapat menyimpan byte lain dengan menggunakan literal \r.
ninjalj

1
Gunakan y'-|\/'\/|-'/4sebagai pengganti .252 lagi.
primo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.