Yükleniyor… Her Zaman


106

Buradaki zorluk, şuna benzeyen sonsuz bir yükleme ekranı oluşturmak:

görüntü tanımını buraya girin


Veya daha spesifik olmak gerekirse:

  • Giriş yapmayın.
  • Çıktı Loading..., sonunda boşluk var ama sonunda yeni satır yok.
  • Karakter ile kademesiz döngüsü |, /, -ve \:, her 0.25 saniyede bir dizideki bir sonraki son üzerine yazar. Yalnızca son karakterin üzerine yazabilir veya Loading...değişmeden kaldığı sürece tüm satırı silip yeniden yazabilirsiniz .

kurallar

  • Çıktı metni tam olarak belirtildiği şekilde görünmelidir. Son satırlar / boşluklar kabul edilebilir.
  • Sen gerektiğini değil , başlangıçta çıktı göstermeden önce 0.25 saniye bekleyin - İlk kare kısa sürede programın çalıştırıldığı olarak basılmalıdır.
  • Programınız süresiz çalışabilmelidir. Örneğin, çerçeveler için bir sayaç kullanıyorsanız, sayaç, kendi dilinizde maksimum değeri aşarak hiçbir zaman hataya neden olmamalıdır.
  • Her bir "kare" arasındaki bekleme süresi 0.25 saniye olmalıdır, açıkçası bu asla kesin olmayacak -% 10 gibi bir hata payına izin verilir.
  • Bir işlev gönderebilirsiniz, ancak yazdırmanız gerekir stdout.
  • Yükleme animasyonu üretebildiği sürece, konsol dışı (ancak yine de metin tabanlı) bir ortamda yanıt gönderebilirsiniz.
  • Bu , yani en kısa çözüm (bayt cinsinden) kazanır. Standart kod-golf boşlukları uygulanır.
  • Mümkünse, lütfen yükleme ekranınıza bir gif ekleyin.

Örnek

Örnek oluşturmak için kullandığım C ++ kodu:

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

En iyi golfçü kazansın!


3
Gönderimler, başlangıçta çıktı gösterilmeden önce 0,25 saniye bekleyebilir mi?
ETHProductions, 27:16

2
Hayır, ama bahsettiğin için teşekkürler, kurallara ekleyeceğim @ETHproductions
FlipTack

Sondaki yeni satır (animasyon sembolünden sonra) kabul edilebilir mi?
Bakır

Elbette :) @Copper
FlipTack 27:16

1
@BitByte, teorik olarak, programınızın içindeki hiçbir şeyin hataya yol açmayacağı anlamına gelir - örneğin bir sayaç taşması veya maksimum tekrarlama derinliğine ulaşma gibi.
FlipTack

Yanıtlar:


76

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

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>

Düzenleme: @ betseg sayesinde 3 bayt kaydedildi. @ Manatwork sayesinde 17 bayt kaydedildi. @Daniel sayesinde 1 bayt kaydedildi. @Ismael Miguel sayesinde 13 byte kurtarıldı. @Fez Vrasta sayesinde 4 byte kurtarıldı.


4
Metaya göre, CSS + HTML soruları yanıtlamak için gayet iyi. Ayrıca, meydan okuma tarifinde buna izin verdim. Yani bu cevap tamamen geçerlidir :)
FlipTack

5
HTML + CSS TC, bu yüzden neden
rakipsiz

1
@ TùxCräftîñg CSS, içinde durma problemini çözebileceğiniz için kesinlikle tam değildir (Sonsuz bir animasyon yoksa, durur). Aynı şeyin HTML için de geçerli olduğunu düşünüyorum (JS'yi dahil etmiyorsanız).
Artyer

4
@Artyer stackoverflow.com/a/5239256/3273184 , dikkate değer bir şeydir.
Mama Fun Roll

4
@MamaFunRoll Bu yazının bir yorumu, kullanıcı müdahalesi olmadan döngü yapamayacağından TC'yi gerçekten kanıtlamadığını belirtir. Ancak, bu belirli sorunu çözebilir, bu yüzden bu cevapta herhangi bir sorun görmüyorum.
ETHProductions,

57

Vim, 43 , 41 bayt

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

@Udioica sayesinde iki bayt kurtarıldı!

İşte gerçek zamanlı olarak gerçekleşen (biraz modası geçmiş) bir animasyon!

enter image description here

Ve işte bir açıklama:

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
sadece merak ediyorum: “Programınız süresiz çalışabilmelidir” i ihlal ediyor mu? sonunda bir yığın taşmasına ulaşabilir mi? :)
Dan Oak

4
@dahnoak Açıkçası, sınırsız bir şekilde test edemiyorum, ancak fazladan bir hafıza ayırmıyor, bu yüzden süresiz çalışmaması için herhangi bir sebep göremiyorum.
DJMcMayhem

1
Geçiş iyapar Sve onu makro içinde hareket ettirirseniz, atlayabilirsiniz r|.
udioica

2
@dahnoak vi motorunun kuyruk özyinelemesini fark etmemesinin bir nedeni yoktur. Ve bazı özyineleme uygulamaları doğal olarak böyle yapacaktır (yürütülmesi gereken bir komut vektörü ve geçerli bir yürütme konumu olup olmadığını düşünün. Sonra @qgeçerli konumda register betiğinin içeriğini ekler q. çalıştırmak için komutlar olmadığı sürece bellek tahsis sonra @q içinde q).
Yakk

Neredeyse her zorluğa cevap yazdığınızda, yeni bir şeyler öğreniyorum (bu durumda @:ve :sl), bu yüzden teşekkürler ve gelmelerini
sağlayın

37

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

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

-1 bayt (Zachary T)

Benim göz atın 132 bayt HTML / CSS cevabı da.


Bu taşma olabilir imi?
Zacharý

Evet, sonunda olur. Bunu düzeltdim!
darrylyeo

1
Değiştirmek Could i++,i%=4ile i=-~i%4bir byte için?
Zacharý

2
@Xufox Birimlerin çalışabilmesi <pre>için tek boşluklu bir font kullanıldığından emin olunur ch. Kurallar, kullanılan font ailesi hakkında hiçbir şeyden bahsetmiyor. ;)
darrylyeo 30:16

1
Yanılmıyorsam, JS tarafından basılan ilk karakter dizedeki son karakter olacaktır; bu yüzden -yerine init olmalı /. Veya ile init |ve döngü '-\\|/'. Güzel artış olsa da.
Titus,

21

Windows Toplu İşi, 121 114 84 80 79 78 bayt

Sadece eğlenmek için bunu atıyorum.

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

Dizine pipe ( |) atayamadım, bu yüzden başka bir atama ile el ile eklemek zorunda kaldım.Gecikme ile yapılır PING, hangi doğru olmayabilir .

Çıktı:

enter image description here

Düzenle:

  • Roman Gräf'a 7 byte tasarruf ettiğin için teşekkürler!
  • Neil'e 30 bayt kaydettiği için teşekkürler! Ayrıca yeni hatlardaki baytları kurtarmak için biraz daha uğraştım.
  • 4 byte kaydettiğiniz için phyrfox'a teşekkürler!
  • 2 byte tasarruf için YourDeathIsComing sayesinde!

3
Her veya komutun önüne @echo offbir tane çıkarabilir ve koyabilirsiniz@setecho
Roman Gräf

1
Diziye ihtiyacınız yok, in (/ - \ ^|)çalışıyor. Ayrıca,% 0, döngüden daha kısa bir döngüdür goto.
Neil

2
IP adresini "1.1" (-4 bayt) kullanabilmelisiniz, çünkü çoğu platform sizin için bunu otomatik olarak 1.0.0.1'e genişletir.
phyrfox

1
Önündeki boşluğu kaldırarak 1 byte tasarruf edebilirsiniz >nul.
SeninKasın

1
Ondan önceki alanı kastetmiştim.
Sizin 5'inci 5'16'da

20

Düğüm, 72 70 bayt

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

Değiştir \x1BDoğru bayt sayısını almak için hazır bilgi kaçış karakteri ile. f()Animasyonu başlatmak için arayın . Bilgisayarımdaki ConEmu terminal emülatöründe nasıl göründüğü:

enter image description here


Kullanmayı deneyin \033c( \033asıl karakter gösterimi ile değiştirin ). O kadar iyi görünmüyor, ancak size bazı bayt kazandırır.
Mama Fun Roll

iTaşma olmaz mı?
Zacharý


3
“Programınız süresiz olarak çalışabilmelidir. Örneğin, çerçeveler için bir sayaç kullanıyorsanız, sayaç dilinizde azami değeri aşarak hiçbir zaman hataya neden olmamalıdır.”, Evet, bu gereklidir.
Zacharý

3
@Florent Ama sonra Düğüm üzerinde çalışmayacaktı ;-)
ETHproductions

14

Kotlin, 67 66 bayt

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

görüntü tanımını buraya girin

\rÇizgiyi temizlemek ve Kotlin'in müthiş string enterpolasyonundan faydalanmak için kullanmak oldukça açık bir şekilde açıklanmıştır .

DÜZENLEME: değiştirerek @ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu için 1 bayt sayesinde Kaydedilen while(true)içinwhile(1>0)


1
(-1) while(1>0)yerine bir bayt kaydedebilirsiniz ; while(true)muhtemelen cevabınıza gerçek işlev sözdizimini de içermelisiniz ( fun a(){<code>}, +9). Biraz hile yapmak istiyorsanız, store işlevini değişken olarak kullanabilirsiniz ( val a={<code>}, +8).
F. George

2
@ mEQ5aNLrK3lqs3kfSa5HbvsTWe0nIu 'Tam program' modu kabul edilebilir değil mi? Bu, .ktssınıf veya işlev tanımları olmadan bir Kotlin betiği olarak çalıştırılabilir . Ayrıca, harika çağrı while(1>0)!
Tyler MacDonell

3
Ancak, bir gün 0, 1'den büyük olursa ne olur? : P
FlipTack

Kotlin senaryosunu kullanmak harika bir fikir. @ Flp.Tkc Yorumunuz bana şunu hatırlattı: codegolf.stackexchange.com/a/101131/62024 . Hala bunun mümkün olabileceğinden korkuyorum.
F. George

@TylerMacDonell Gerçekten mi? Kotlin'i doğrudan senaryo olarak çalıştırabileceğini bilmiyordum. Bilgi için teşekkürler.
TheNumberOne

14

Vim, 35 bayt

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

Sıkıcı versiyonu. İşte daha iyi olan uyumlu olmayan bir çözüm:

Vim (1 saniye uyku), 27 bayt

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

gsSadece kısa kullanmakla kalmaz, Enter tuşuna basmanız da gerekmez. Bu makroya sıraya girdiği anlamına gelir ve geçiş yaparak baytları kaydedebilirim @.. (Özyinelemeli çağrıdan sonra hiçbir şey çalışamadığı için istediğimi yazabilirim.)


Bu cevap için teşekkürler! Öğrendim gs, @.ve @@içinde @.hala başım zarar yapar!
Christian Rondeau

14

Pyth, 31 bayt

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

Tercüman burada .

GIF yükleniyor

açıklama

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 Bayt

Bytecount'a geri döndüm!

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

Powershell'deki CLI bazı bilgisayarlarda hafifçe parlayacak, bu yüzden mükemmel görünmüyor, ancak makul bir şekilde alabildiğim kadar iyi.

Bir bayttan tasarruf etmek için $ a ++ for for döngüsüne taşındı, (no ;)

Daha sonra, bunu işaret ettiği için Roman sayesinde, başka bir 2 baytlık tasarruf için dizi indeksleyicisine getirdi.

Ayrıca ;Clear ( cls) bölümünü for döngüsüne taşıyarak 1 bayt ( ) daha kaydedin .

Sayı ve söz sonsuz yönü için TimmyD tarafından işaret düzeltme, yalnızca 5 bayt gerekli değişti $a++%4içine ($a=++$a%4)yüzden 3'ün üzerinde hiç gitmeyecek.

Powershell Sürüm 4'te bunun gerçekten mümkün olduğunu gösteren 'ne olursa olsun' için for döngüsünü tamamen boş bırakarak başka bir bayt kaydetti!

Bu cevabın (final?) Versiyonu için yeni güncellenmiş gif .

Gif yükleniyor

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++son kullanımına geçmek $a)
Roman Gräf

her zaman bir şeyi unutmak - bunun için teşekkürler!
colsw

2
Powershell'de pek usta değilim, ancak Windows Toplu İş girişini gördüğümde "Bunu Powershell'i yenebilir mi?" Diye düşündüm. Ve işte burada!
Jakub Jankowski

1
En azından ps for(){cls;"Loading... "+"|/-\"[($a=++$a%4)];sleep -m 250}
ne olursa olsun

1
Rica ederim. Aslında Sürüm 2+ için çalışıyor gibi görünüyor, daha önce kontrol etmek için çok tembeldi;)
ne olursa olsun

11

Pyth - 36 35 bayt

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

Açıkçası, çevrimiçi çalışmıyor.


Bu eylemde bir gif var mı? Ayrıca taşabilecek herhangi bir sayaç var mı?
FlipTack

@ Flp.Tkc tek sayaç, taşmayan Zbir python tamsayıdır. Bir gif yapmaya çalışıyordum ama işe yaramadı. Nasıl yapılacağını biliyorsanız, onu github.com/isaacg1/pyth adresindeki pyth
Maltysen

4
Tamsayı taşmadığı takdirde, muhtemelen tüm bellekleri dolduruncaya kadar büyüyecektir; bu, en fazla 32-bit sistemlerde en az 10⁶⁵⁰⁰⁰⁰⁰⁰⁰ yıl sonra başarısız olacaktır. Tabii, evrenin ısı ölümü ilk önce gerçekleşecek, ama yine de ...
jjrv

11

Matlab, 78 75 bayt

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

görüntü tanımını buraya girin


11

HTML / CSS, 23 + 109 = 132 bayt

Neil'in cevabı üzerine geliştirildi .

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 Bayt

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

@Dahnoak sayesinde bir kuyruklu 7 bayt


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

1
@dahnoak şerefe! ListAnimate'in bir şey olduğunu bilmiyordum. Bu bir utanç verici <>Flat değil Listable aksi takdirde 4 byte tıraş edilebilir!
Simmons

Sadece eğlence için:Dynamic["Loading... "<>{"|","/","-","\\"}[[1+Round[4Now@"Second"]~Mod~4]],UpdateInterval->.25]
shrx

9

C #, 170 133 Bayt

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

Beni 37 bayt kurtardı, Roman Gräf ve raznagul'a teşekkür ederim. (Özellikle raznagul, orijinal çözümümün yine de geçersiz olduğunu belirtti. Orada bir şeyi kaçırdım, ama şimdi düzeltildi ve gereklilikleri yerine getirmeli :)

Pete Arden'in mevcut C # cevabına oldukça benzer, ancak bazı gelişmelerle birlikte

örneğin "while (;;)" yerine "while (true)", string yerine char

Cevabımla ilgili önerilerime yorum yapardım ama aslında bunu yapacak kadar itibarım yok.

Ungolfed:

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

2
Neden birinciyi çıkarıp ikinciyi Console.Write("\b");değiştirmiyorsunuz Console.Write("\b"+a);?
Roman Gräf

Bir eylem tanımlamak gereksizdir ve uzun süredir böyle bir döngü kullanarak foreach(var a in"|/-\\")ve vücut size harcayacağınız ~ 20 Bayt gibi eylemde bulunduğunuz kodu ekleyin.
raznagul

Ayrıca, görev tam olarak istenen çıktıyı oluşturmaktır. Şu anda durum böyle değil.
raznagul

Şimdi böyle olmalı, unuttum '|' ve "Yükleniyor ..." sonrası izleyen boşluk.
Snowfire

Ungolfed versiyonunuzda (golf versiyonuna uymadığından), ilkini kaldırabilir Console.Write()ve Console.Write($"Loading... {c}\r")ikincisi yerine sadece birini kullanabilirsiniz .
süt

9

Forth, 72, 73 bayt

EDIT :

  • Yalnızca Gforth sürümüne 69 bayt eklendi (Thanks @ ninjalj!)
  • "Yükleniyor ..." den sonra eksik boşluk eklendi (Thx @ Roman Gräf!), +1 bayt
  • Kuralları daha kesin eşleştirmek için güncellendi (aynı bayt sayısında)

golfed

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

Gforth sürümü

Yalnızca GNU Forth sürümü aşağıdaki gibi 69 byte'a çıkarılabilir:

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

Ekran yayınlama

görüntü tanımını buraya girin

Çevrimiçi deneyin!


1
Eğer Forth diğer giden tarihiyle taşınabilirlik umurumda değil eğer, gforth kullandığınıza göre, kullanabileceğiniz [begin]ve [again]bir kelime tanımının dışında.
ninjalj

9

Python 2, 81 79 78 77 bayt

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

Uyuyan basit bir çözüm time.

Kullandığım \rsatırın başlangıcına geri dönmek ve sonra çizgiyi üzerine yazarak mesajı yazdırmak için (A satır başı).

i=1Çifte kaçmayı önlemek için başlıyorum \(Onun '\|/-'yerine '|/-\\').

Geçmişte, kullanmıştı -~idemek i + 1parantez önlemek için. (Sayesinde @ Flp.Tkc bu -2 bayt için!) (O idi i=(i+1)%4vs i=-~i%4)

Şimdi, teknik olarak Python intun taşmadığı için sayacın sonsuza dek yükselmesine izin veriyorum . Bu işaret ve bayt tasarrufu için @ Zachary T teşekkürler !
Bir makine üzerinde durur çünkü makine belleği yetersizdir, ancak bu işlem için 4 GB belleğe sahip 9.7 kuşak vardır int.

Baskıların ve alanın ayrıldığı -1 baytlık için @Kade sayesinde kendi alanıma ihtiyacım yok.print a,bab

İşte Windows üzerinde çalışan bir gif:

Yükleniyor

Ben de bir Linux VM'de test ettim. Mac'te test edemedim.


1
Eğer doğru hatırlıyorsam, i=-~i%4
parenler

2
Python için maks, yalnızca maksimum bellek geçmediği için bir bayt kaydetme [i],;i=-~i%4ile değiştirilmeyecek [i%4],;i+=1mi?
Zacharý

9
Olarak giriş yaptığınız için oyunuzu iptal etmeliyim Administrator...
Neil

5
@ Neil Tamamen dürüst olmak gerekirse, Python dosyasını Yönetici'ye koyup diğer hesap adları gerçek adlar olduğu için oradan koştum.
Artyer

2
Teknik olarak Python tamsayılar sonsuz büyük olabilir bilgisayar onları tutmak için hafızaya sahip sürece ben, @ZacharyT 'ın önerisini izin verirler
FlipTack

7

MATL , 36 bayt

1 bayt, @ flawr'ın dizgeyi dairesel olarak kaydırma fikri kullanılarak kaldırıldı

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

Çevrimdışı derleyiciden bir gif kaydı:

görüntü tanımını buraya girin

Veya MATL Online'da deneyin ! Başlangıçta çalışmazsa, sayfayı yenileyin ve tekrar "Çalıştır" a basın.

Nasıl çalışır

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

Selam Luis. her zaman olduğu gibi MATL ile aferin. İşte döngüsel listenin küçük bir çeşitlemesi. ve ekran. Bunu daha kısa bir çözümde tercüme edebileceğinizi düşünüyor musunuz:a='\|/-';k=1; fprintf('Loading... -') while 1 k=mod(k,4)+1; fprintf('\b\b%c\n',a(k)); pause(.25); end
Hoki

@Hoki Fikir için teşekkürler. Aslında başlangıçta artan bir sayaç modulo 4 vardı, ancak biraz daha uzundu (daha sonra ilk duraklama gerekmemesi nedeniyle bir bayt kazandım). Ayrıca, net ekran ve normal ekranın fprintfbackspaces'ten daha kısa olduğunu düşünüyorum.
Luis Mendo

7

Dyalog APL, 50 bayt

Bu sadece Windows versiyonunda çalışır, aksi halde çağrılmadıkça ⎕SMpencere gösterilmez ⎕SR.

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

Açıklama:

  • {... }1: ile başlayan işlevi çalıştır⍵=1
  • Loading... '∘,¨'|/-\': dört olası çıktıyı üret
  • ⊂⊃⍵⌽: Birinci öğeyi önce koymak, ilk öğeyi almak ve içine almak için listeyi döndürün
  • ⎕SM←1 1,⍨: dizeyi ⎕SMpencerenin sol üst köşesine yerleştirin .
  • ⎕DL÷4: 1/4 saniye bekleyin
  • 4|⍵+⌈: elde edilen değeri topla (bekleme harcanan saniye, yani bu her zaman 1'dir) (arttırma) ve mod-4'ü al (sonunda taşmalarını önlemek için).
  • : fonksiyonu yenisiyle tekrar çalıştırın .

Animasyon


Her nasılsa birisinin Dyalog (/ APL) için bu zorluğa cevap vereceğini biliyordum :)
YoYoYonnY

7

C #, 187 Bayt

golfed:

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

Hala yüklenmesini bekliyorum ...

görüntü tanımını buraya girin


Hala “\” göstermesini bekliyorum…
manatwork

@ manatwork Ah bok, tembel kopya ve yapıştırma. Kısa sürede masama döndüğümde düzeltecek :)
Pete Arden

Yorumum nedeniyle çözümünüzün daha da uzadığı için üzgünüm. 186’ya geri getirmek 1>0yerine kullanamaz truemısın?
Manat çalışması

@ErikGolfer エ リ ッ ク ゴ ル フ ァ ー C, C # hakkında bir fikrim yok, ancak dilin Java'nın bir kopyası olduğu ve görünüşe göre teyit edemediği gerçeğine dayanarak, işe yaramayacağını düşündüm. (BTW, bu işe yararsa, belki l()de koşulu olarak ilk çağrıyı kullanmak da işe
yarar mıydı

2
@ yönetim işi Pekala, görünüşe göre C # ungolfable.
Outgolfer Erik,

7

Çıtçıt !, 8 blok

8 blok Snap!

Bu, bir Apple’a bastığım ilk algoritmalardan biriydi.


1
Bize Applesoft BASIC'inizi gösterin :)
roblogic

1
Bunları memnuniyetle Hypercard'da yapardım.
wyldstallyns

6

retiküler, rekabetçi olmayan, 40 bayt

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

görüntü tanımını buraya girin

Bir sürü şey yapmayı unuttum. w . Oh iyi.

açıklama

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

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

Golf atılan birçok bayt için birçok kişiye teşekkür ederiz!


Ayrıca tek tırnak kullanıyorsanız ve argümanlar echo -e -nbirleştirilebilirse ters eğik çizgiden kaçmanız gerekmezecho -en
Evan Chen

Eko satırını değiştirerek 2 satır ve 13 bayttan tasarruf edebilirsiniz:echo -en "\rLoading... ${s:i=(i+1)%4:1}"
Ipor Sircer 28:16

echo -enprintf; s atama yapmak whileşart.
Manatwork

manatwork Dediğim gibi printf alt dize basitleştirmek ve bunu doğrudan koydu whilekoşulu: while printf "\rLoading... ${s:i++%4:1}";do. 67 bytes
Dominik R

Bu Dominik R işe yaramazsa, sonunda taşar.
Zacharý


6

> <> , 55 + 4 = 59 bayt

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

Geçirerek çalıştırılması gerekir -t .01Tercümana ek bir argüman olarak , bayt sayısındaki +4.

Bu, yığına basılacak dört karakteri koymak, üstünü çıkarmadan basmak ve yığını bir konuma kaydırmak. Daha sonra yazdırır \b(geri al, x08 karakteri) ve döngüyü yeniden başlatır.

Zamanlama, her bir talimatı yerine getirmeden önce 0.01 saniye beklemeye zorlayan tercümana iletilen argümanla gerçekleştirilir. Bir çıktı ile bir sonraki arasında 23 komut vardır (çoğu sadece komut göstericisini bir sonraki hücreye taşır), bu yüzden 0.23 saniye bekleyecek, istenen 0.25s'de problemsiz bir şekilde uyan komutların çalıştırılması için gereken süre bekleyecektir. % 10 hata ile.

Sen olabilir çevrimiçi denemek , ama bu yorumlayıcı backspace karakterini tanımıyor, bu yüzden çıkış var biraz garip olacak.


Normalde bayraklar gibi -n1 byte olarak puanlanır, bu yüzden siz tartışmayı puanı düşünüyorum t, .014 bayt. % 10 kuralının güzel kullanımı btw :)
FlipTack

@ Flp.Tkc Teşekkürler! Argüman için nasıl bayt sayılacağından emin değildim, bu şekilde hoşuma gidiyor :)
Leo

@Leo - 0.01 kullanmak için bir neden var mı, daha az talimatla daha büyük bir onay işaretini değil mi? 8 komuttan oluşan bir döngü ve 0.03 tene sayısını kullanan versiyonumu ekledim; # "... gnidaoL" l?! vob0. "\ | / -": o} 8o51. > #
Teal Pelikan

@Tealpelican Bir sebep var, ama çok iyi değil: kurallar "İlk çıktıyı göstermeden önce 0.25 saniye beklememelisiniz - ilk kare program çalışır çalışmaz basılmalı" diyor. zamanlayıcıyı çok uzun yapmak istemiyor, diğer yandan bu kod golf, bu yüzden çok kısa yapmak istemedim. Sonunda, istenen 0.25 saniyenin kesin zamanlamasını elde etmek için her biri 0.01 saniye alan 25 komut döngüsüne karar verdim; Ancak uyguladığımda tam döngü için yeterince yerim olmadığını farkettim, bu yüzden% 10 kuralını kullanmak zorunda kaldım.
Leo,

Kuralları yanlış okumuş olmalıyım. Bu zamanlama için çok iyi bir sebep :)
Teal pelikan

6

MS-DOS .COM dosyası, 56 bayt

İşte onaltılık dosya içeriği:

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

Eşleşen assembler kodu şöyle görünür:

    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
Bir tuşa basılı tutulması, zamanlayıcı kesmesi dışındaki diğer maskeleme kesmeleriyle sabitlenebilen eğiriciyi hızlandırır, örneğin:mov al, 0xfe / out 0x21,al
ninjalj

HLT'nin yorumu yanlıştır, muhtemelen HLT'nin ~ 18.2 Hz'de (veya daha kesin olarak NTSC saatinde / 12/65536 Hz'de) uyandığını kastediyorsunuz.
ninjalj

@ ninjalj Teşekkürler. Yorumu değiştirdim ...
Martin Rosenau

6

NASM x86_64 - 349 283 bayt

Bu 64 bit linux sistemleri çalıştırılmalıdır

kullanılarak oluşturulmuş:

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

animasyon:

65 bayt kurtardı - teşekkürler user254948

görüntü tanımını buraya girin



^ Flp. Tkc Teşekkürler, sonunda bir boşluk olan bir çizgi vardı
Samuel

@Samuel 13-17 hatları gerekli mi? Bu çizgiler olmadan oldukça iyi çalışıyor gibi görünüyor. Söyleyebildiğim kadarıyla (montajda o kadar da iyi değil) korkarım) Yükleniyor'ı, sonra | karakterini, ardından bu karakteri kaldırın, sonra | ilk kez.
44'te

@ X veya r8, r8 -> mov r8,0 (1 karakter kaydeder) ek olarak, bazı MOV'larda fazladan boşluk (mov r7, 1 -> mov r7,1) bulunur. daha fazla bilgi cmp r8,4, jl l, x veya r8, r8, AND r8,3 (15 karakter kaydederek) ile değiştirilebilir. 349 yerine 285 bayta kadar olmalı! (yukarıda belirtilen satırlarla birlikte)
user254948

5

R, 85 89 bayt

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

Düzenleme: TSayacı sıfırlandıysa sayacı sıfırlayarak yanıtı taşması düzeltildi.4 .

Bu cevabın tek ilginç yanı R'nin TRUTHYyerleşik kullanımıdır T. Etkili önceden tanımlanmış bir değişkendir, 1/TRUEbunun anlamı sayacı sıfırlamak zorunda değiliz, ancak artmaya başlayabiliriz T.


Misiniz Tsonunda taşacak?
FlipTack

@ Flp.Tkc Bu taşma olmaz ama sonsuz geçmiş gibi kabul edilir 1e+308 bu durumda NAgeri gönderilen , bu yüzden bu cevabın geçersiz olduğunu sandım (kurallarda farketmedim). Yakında güncellenecek
Billywob

1
Aslında yerleşik kullanmazsanız 2 bayt daha kısa alabilirsiniz T: i=1;repeat{cat("\rLoading...",c("\\","|","/","-")[i]);Sys.sleep(.25);i=`if`(i>3,1,i+1)}is 87 bayttır.
plannapus

Hmm ... R sadece vektörlerde mi çalışıyor? Atomlar için neden modulo veya bitsel operatörler yok? olan Tbir vektör? Çalışıyor T=(T+1)%%4mu Başka bir 5 bayt kazandıracak.
Titus

2
... veya T=T%%4+1: hatta 2 bayt daha kısa.
Titus,

5

Haskell (GHC), 103 91 bayt

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

12 bayt kaydettiğiniz için teşekkürler @!


Tam bir programa gerek yok. mapM((threadDelay 250000>>).putStr)$("\rLoading... "++).pure<$>cycle"|/-\\".
nimi

İki bayt,% 10 tolerans ve yerine koyma 250000ve ondan önceki boşluğu kullanarak tasarruf edilebilir (4^9).
Christian Sievers

5

C (UNIX benzeri sistemlerde) 88 bayt

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

Yanlış karakterle başlıyor, ama daha hoş gözüktüğünü düşünüyorum. "\ - / |" karakterini değiştirerek karakter sırasını kolayca değiştirebilirsiniz. dize.


İçine ifadeleri taşıyarak daha da golfed olabilir for: Örneğin ain(_){for(;printf("\rLoading... %c","\\-/|"[_%4]);usleep(250000))_++,fflush(0);}: daha sonra başka tamsayı taşması için wraparound varsayarak golfed olabilirmain(_){for(;printf("\rLoading... %c","\\-/|"[_++%4]);usleep(250000))fflush(0);}
ninjalj

Eğer Do gerek içeride fflush ()?
John U,

Çoğu sistemde fflush'a ihtiyacınız vardır, birçoğu newlines'a dayanarak tamponlanır. Bununla birlikte, bazı sistemlerde gerekli olmaması mümkündür.
LambdaBeta

Bunun fprintf(stderr,...yerine tampon kullanabilirsiniz , çünkü bu satır tamponlu değildir stdout. f...stderr,İken, sekiz karakter alır fflush(0);on sürer, bu nedenle iki karakter net galibiyet.
cmaster

5

Perl, 71 63 61 bayt

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

Önceki versiyon:

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

10 bayt için @primo Thanx.


2
selectZaman aşımını kullanmak yerine güzel bir numara Time::HiRes. Kullanarak ... while$|=printve harf çevirisi harflerini öne ve sonuna hareket ettirerek birkaç bayttan tasarruf edebilirsiniz . s//\r Loading... |/Ayrıca atama üzerinden bir bayt kaydeder.
primo

2
Eğer çevirisi sınırlayıcınız için tek tırnak kullanırsanız Ve ayrıca, ters eğik çizgi ya kaçmaya gerek yoktur: y'-\|/'\|/-'.
primo

Kodunuzdan önce fazladan bir alanınız var gibi görünüyor.
Outgolfer Erik,

1
Bir hazır bilgi kullanarak başka bir bayt kaydedebilirsiniz \r.
ninjalj

1
2 tane daha y'-|\/'\/|-'/4yerine kullanın .25.
primo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.