Her zaman yükleniyor ... Windows tarzı


36

Aşağıdaki talimatları uygulayarak Windows tarzı bir Yükleme çubuğu yapın.

(Bunun Yükleniyor ... ' dan farklı olduğuna dikkat edin )

Çıktınız başlamalı [.... ].

Her kene, 100 ms beklemelisiniz, sonra her noktayı bir karakter sağa hareket ettirmelisiniz. nokta onuncu karakterdeyse, ilkine getirin. Tekrar çıkmadan önce ekranı temizlemeniz gerektiğine dikkat edin. Çıktı aşağıdaki gibi sipariş edilir:

[....      ]
[ ....     ]
[  ....    ]
[   ....   ]
[    ....  ]
[     .... ]
[      ....]
[.      ...]
[..      ..]
[...      .]

.. Sonra sonsuza dek döngüler.

kurallar

  • Bu , bu yüzden en kısa cevap kazanır cevap bile kabul edeceğinden şüpheliyim
  • Mümkünse lütfen yükleme çubuğunun gif dosyasını harekete geçirin.

1
Her çıkıştan önce ekranı 'temizlemek' için yirmi yeni satır çıktısını alabilir miyiz?
Okx,

2
@Okx Evet, dilinizin ekranı temizleme başka bir yolu yoksa.
Matthew Roh

Gecikme ne kadar olabilir? (Örneğin + - 0.5 saniye) 250 milisaniye hata öneririm ....
stevefestl 12:17

1
Gelecekteki zorluklara sabit zaman gecikmesini eklememeyi önerebilir miyim? Son zamanlarda ortaya çıkan zorlukların çoğunda ortaya çıktığını biliyorum ve her seferinde sistemi unutabilen milisaniyelerde bekletmek için aynı ekilebilir kazanı yazıyorum.
xnor

2
\rKelimenin tam anlamıyla ekranı temizlemek yerine , kullanımına izin veriliyor mu?
phyrfox

Yanıtlar:


19

V, 17 16 15 bayt

i[´.¶ ]<esc>ògó$X|p

<esc>olduğunu 0x1b.

Ve hexdump:

00000000: 695b b42e b620 5d1b f267 f324 587c 70    i[... ]..g.$X|p

açıklama

i                       " Insert
[                       " a [
´.                      " 4 .s
¶<space>                " 6 spaces
]<esc>                  " and a ]. Then return to normal mode
ò                       " Recursively do:
 gó                     "  Sleep for 100 milliseconds
 $                      "  Go to the ]
 X                      "  Delete the character to the left of the ]
 |                      "  Go to the [
 p                      "  And paste the deleted character right after the [
                        " Implicit ending ò

gif


Vim'de test nasıl yapılır?
Pavel

@Phoenix i.... <esc>qq:sl 100m<CR>$X|P@qq@qçalışmalıdır ( <esc>kaçış anahtarıdır ve hatalı beslenir <CR>) (4 noktadan sonra 6 boşluk vardır)
Kritixi Lithos

3
Fonksiyonun işe yaradığını görmekten memnun oldum . Güzel cevap BTW :)
DJMcMayhem

19

CSS / HTML, 202 190 186 + 45 = 247 235 231 bayt

pre{position:relative}x{position:absolute;display:inline-block;width:10ch;height:1em;overflow:hidden}x>x{width:14ch;left:-10ch;animation:1s steps(10,end)infinite l}@keyframes l{to{left:0
<pre>[<x><x>....      ....</x></x>          ]

Düzenleme: @Luke sayesinde 12 14 bayt kaydedildi.


Animasyonu yeniden adlandırarak 6 bayt kaydedemez misiniz b?
Luke

@Luke Bunu yapmayı unuttuğuma inanamıyorum ...
Neil

chSonuna bırakarak 2 bayt daha kaydedebilirsiniz ; 0bir birime ihtiyaç duymaz.
Luke

2
Nasıl değiştirme hakkında <x>etmek <span>(ve de CSS içinde: xolur spanve x>xolur span>*)? Bu tasarruf display:inline-block;, ancak sadece 15 bayt maliyeti. Böylece toplam 6B kaydedilir.
Luke

1
@Luke Ekranı umursamıyorum ama tekrar etmekten kaçınmak istiyorum position:absolute;.
Neil,

12

PowerShell, 67 66 Bayt

for($s='.'*4+' '*6;$s=-join($s[,9+0..8])){cls;"[$s]";sleep -m 100}

-1 Beatcracker sayesinde kısaltılmış yapıcı kullanarak

Son karakterin kalan karakterlerin önüne konulduğu dizenin bir kopyasıyla dizeyi değiştirir, ekranı temizler, yazdırır ve ardından 100 ms boyunca uyur.

dizginin içerisindeki mantığı sarmak yerine for döngüsü yapıcısını kullanarak çok sayıda bayt kaydetti.

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


1
forDöngü numarası ve + _Join hakkında tekrar okumamı sağlayan +1 .
beatcracker

1
PS kullanarak bir bayt daha golf oynayabilirsiniz $s='.'*4+' '*6.
beatcracker

bunun için @beatcracker için teşekkürler - güncellendi :)
colsw

Betik başlamıyor [.... ]. Ceza olmadan düzeltebilirsiniz:for($s='.'*4+' '*6){cls;"[$s]";$s=-join($s[,9+0..8]);sleep -m 100}
mazzy

10

Python 3 , 99 93 85 83 + 2 ( -u bayrağı ) bayt

Tamamen-insan sayesinde -12 bayt
ovs-2 bayt

import time
s=4*'.'+6*' '
while 1:print(end='\r[%s]'%s);time.sleep(.1);s=s[9]+s[:9]

Çevrimiçi deneyin!


Neden var mı flush=True? Bensiz çalışır
L3viathan

3
@ L3viathan, çünkü (ubuntu) uçbirim kızarma değildi. Bu yıkama davranışı işletim sistemine bağlıdır = /
Rod

1
Bazı baytları kaydedinprint(end='\r[%s]'%s,flush=1)
ovs

2
-uKomut satırı bayrağını kullanarak yıkamayı tamamen kaldırabilirsiniz . İlgili SO soru
ovs

1
Ayrıca bazı baytları da kaydedebilirsiniz s[9]+s[:9].
tamamen insanlık

10

Windows toplu iş, 201 181 bayt

Eski okul yöntemini kullanarak çıkıyor aslında bayt kazandırır!

@for %%p in ("....      " " ....     " "  ....    " "   ....   " "    ....  " "     .... " "      ...." ".      ..." "..      .." "...      .")do @echo [%%~p]&timeout 0 >nul&cls
@%0

Not:

get-screenrecorder.level
- low grade

get-gpu.level
- horrible

if get-screenrecorder.level == low grade || get-gpu.level == horrible {
     say("GIF may not be accurate");
}

GIF!

Lütfen GIF kaydedicimin birkaç kare atladığını ve yükleme çubuğunun sıçradığını unutmayın. :(


1
Nokta sayısını hesaplamak yerine, sadece noktalar ve boşluklarla bir değişken tuttuysanız ve üzerinde string manipülasyonu yaptıysanız, muhtemelen 100 bayta indirebilirsin.
Neil

Bunun üzerinde çalışmayı denerim, tüyoların için teşekkürler :)!
stevefestl

ping 1.1 -n 1 -w 100> yerine ping 1.1 yerine <t> 100 nul 100ms +/- 250ms zamanlama gereksinimi içerisinde olacaktır (normalde yaklaşık 25 - 100ms olmalıdır), böylece birkaç bayttan tasarruf edebilirsiniz ( ss64.com/ nt / timeout.html )
Liam Daly

1
Ayrıca çıkartma @echo offve değiştirme işleminin değiştirilmesi do @(echo %%~p&timeout/t 0 >nul&cls)de işe yarayacaktır ve 11 karakter (bilgisayarımda 200 bayt) kaydetmelidir
Liam Daly

8

Mathematica, 67 77 Bayt

Köşeli parantezleri unuttum gibi +10 bayt.

Animate["["<>"....      "~StringRotateRight~n<>"]",{n,1,10,1},RefreshRate->10]

1
Gerçekten, Mathematica'nın yerleşik bir Animatemi var? : |
Bay Xcoder,

Evet, verilen bir değişken üzerindeki hemen hemen her şeyi canlandıracak. :)
Ian Miller

Bu, çoğu cevabın yaptığı dikdörtgen parantezleri içermiyor gibi görünüyor.
Mark S.

Oh sıçanlar, yeterince yakından bakmadı. Tamam düzeltildi.
Ian Miller

8

C (gcc) , 126 125 124 123 122 121 119 118 117 114 115 bayt

Bu noktaların nerede olduğunu takip etmek için bir bit maskesi kullanıyor.

Daha önce sadece 5 boşluk çıktığım için başka bir byte eklemek zorunda kaldım.

m=30;f(i){usleep(3<<15);system("clear");for(i=1;i<1920;i*=2)putchar(i^1?i&m?46:32:91);m+=m&512?m+1:m;f(puts("]"));}

Çevrimiçi deneyin!

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


48
Niçin komut istemi yazı tipi Comic Sans MS nedir?!?!?!
MD XF,


6

JavaScript (ES6) + HTML, 104 85 83 bayt

f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`)
<input id=o

Dene

Bir kapanmasını gerektirir >üzerinde inputbir Snippet'ine işlev için etikete.

(f=(s="....      ")=>setTimeout(f,100,s[9]+s.slice(0,9),o.value=`[${s}]`))()
<input id=o>


1
[]S arasında 10 karakter olmamalıdır mı ?
Neil

Haklısın, @Neil; 6 boşluk var - eğer şeyleri gözle sayacaksam, yapabileceğim en azından gözlüklerimi takmak!
Shaggy

1
Onun <input>yerine <pre>ve sonra valueyerine kullanamaz innerTextmısınız?
Johan Karlsson

İyi arama, @JohanKarlsson; Bu 2 bayt kaydeder.
Shaggy

Hey! Bu aynı bayt sayımıdır: s='.... ';setInterval(f=>{o.value='[${s=s[9]+s.slice(0,9)}]'},100);<input id=obelki birileri onu iyileştirebilir (tırnak işareti yerine `ile)
Thomas W

5

Noodel , 16 15 14 13 bayt

[CỤ'Ṁ ~ ğð] ʠḷẸḍt

] ʠ [d. × 4¤ × 6⁺ḷẸḍt

] ʠ⁶¤⁴.ȧ [ėÐḷẸḍt

Dene:)


Nasıl çalışır

]ʠ⁶¤⁴.ȧ[ėÐḷẸḍt

]ʠ⁶¤⁴.ȧ[ėÐ     # Set up for the animation.
]              # Pushes the literal string "]" onto the stack.
 ʠ             # Move the top of the stack down by one such that the "]" will remain on top.
  ⁶¤           # Pushes the string "¤" six times onto the stack where "¤" represents a space.
    ⁴.         # Pushes the string "." four times onto the stack.
      ȧ        # Take everything on the stack and create an array.
       [       # Pushes on the string literal "[".
        ė      # Take what is on the top of the stack and place it at the bottom (moves the "[" to the bottom).
         Ð     # Pushes the stack to the screen which in Noodel means by reference.

          ḷẸḍt # The main animation loop.
          ḷ    # Loop endlessly the following code.
           Ẹ   # Take the last character of the array and move it to the front.
            ḍt # Delay for a tenth of a second.
               # Implicit end of loop.

Güncelleştirme

[Ð]ıʠ⁶¤⁴.ḷėḍt

Dene:)

Bunun neden beni düşünmesi biraz zaman aldı bilmiyorum. Neyse, bu 13 bayta yerleştirir .

[Ð]ıʠ⁶¤⁴.ḷėḍt

[Ð]ıʠ⁶¤⁴.     # Sets up the animation.
[             # Push on the character "["
 Ð            # Push the stack as an array (which is by reference) to the screen.
  ]           # Push on the character "]"
   ı          # Jump into a new stack placing the "[" on top.
    ʠ         # Move the top of the stack down one.
     ⁶¤       # Push on six spaces.
       ⁴.     # Push on four dots.

         ḷėḍt # The main loop that does the animation.
         ḷ    # Loop the following code endlessly.
          ė   # Take the top of the stack and put it at the bottom.
           ḍt # Delay for a tenth of a second.

<div id="noodel" code="[Ð]ıʠ⁶¤⁴.ḷėḍt" input="" cols="12" rows="2"></div>

<script src="https://tkellehe.github.io/noodel/noodel-latest.js"></script>
<script src="https://tkellehe.github.io/noodel/ppcg.min.js"></script>


2
Noodel'i daha önce hiç duymamıştım, ancak doğru iş için doğru araç gibi görünüyor! +1
Kevin Cruijssen

1
@KevinCruijssen, ETHProductions kod
golfü

6
Tam da seni çok abarttığımı düşündüğüm zaman, çözümünü iki kere golf oynadığını fark ettim
Kritixi Lithos

@KritixiLithos, beni yeneceğinden korktum, bu yüzden sonsuza kadar 14 byte almaya çalıştım . Ama, şimdi yine yakınsın! Dang !!
tkellehe

1
@ nitro2k01 Noodel, kod kodlarında tek bir bayt olarak kaydedilen 256 karakterli kendi kod sayfasını kullanır . Jelly veya 05AB1E gibi diğer golf dillerinde olduğu gibi . Bu karakterleri varsayılan UTF-8 kodlaması olarak kaydedecekseniz, bunun yerine aslında 2 veya 3 bayt olur, ancak kendi kodlarında her biri 1 bayttır.
Kevin Cruijssen

4

PHP, 67 bayt

for($s="...      .";$s=substr($s.$s,9,10);usleep(1e5))echo"\r[$s]";

yorum yok


4

C #, 162 157 bayt

()=>{for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);System.Console.Write(o);System.Threading.Thread.Sleep(100);System.Console.Clear();}};

veya 177 baytlık programın tamamı olarak

namespace System{class P{static void Main(){for(string o="[....      ]";;){o=o.Insert(1,o[10]+"").Remove(11,1);Console.Write(o);Threading.Thread.Sleep(100);Console.Clear();}}}}

+1 Golf for(string o="[.... ]";;)edilecek bir şey: golf oynayabilir var o="[.... ]";for(;;). Veya bize biraz daha golf ()=>{var o=".... "for(;;){o=(o+o).Substring(9,10);System.Console.Write("["+o+"]\n");System.Threading.Thread.Sleep(100);System.Console.Clear();}};
oynamak

İp enterpolasyonu artık kesilebilir mi? Gibi bir şey$"[{o}]\n"
Marie

1
Eğer değiştirirseniz System.Console.Write(o)ile System.Console.Write(o+"\r")size kaldırabilirsinizSystem.Console.Clear();
grabthefish


4

MATL , 24 bayt

`1&Xx'['897B@YS46*93hhDT

MATL Online'da deneyin ! Veya çevrimdışı derleyiciden bir gif bakın:

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

açıklama

`        % Do...while
  1&Xx   %   Pause for 0.1 s and clear screen
  '['    %   Push this character
  897B   %   Push [1 1 1 0 0 0 0 0 0 1]
  @      %   Push current iteration index, 1-based
  YS     %   Circularly shift the array by that amount
  46*    %   Multiply by 46 (code point of '.')
  93     %   Push 93 (code point of ']')
  hh     %   Concatenate horizontally twice. Numbers are interpreted as chars
         %   with the corresponding code points
  D      %   Display
  T      %   Push true. Used as loop condition. Results in an infinite loop
         % End (implicit)

Bağlantın çöküyor, yani onu öldüremem.
Sızdıran Rahibe

1
@LeakyNun Tam olarak çökmesiyle ne demek istiyorsun? Bu benim için çalışıyor ve ben onu öldürebilirim. Bazen zaman aşımı sorunları vardır. Başlamazsa, sayfayı yenilemeyi deneyin
Luis Mendo

4

Jöle , 28 27 bayt

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß
897ṃ⁾. Ç

Örnek çalışma

Nasıl?

ṙ©-j@⁾[]ṭ”ÆȮœS.1®ß - Link 1, the infinite loop: list of characters s
ṙ                  - rotate s left by:
  -                -   -1 (e.g. "...      ." -> "....      ")
 ©                 -   copy to the register and yield
     ⁾[]           - literal ['[',']']
   j@              - join with reversed @rguments
         Ӯ        - literal '\r'
        ṭ          - tack (append the display text to the '\r')
           Ȯ       - print with no newline ending
              .1   - literal 0.1
            œS     - sleep for 0.1 seconds then yield the printed text (unused)
                ®  - recall the value from the register
                 ß - call this link (1) again with the same arity

897ṃ⁾. Ç - Main link: no arguments
897      - literal 897
    ⁾.   - literal ['.',' ']
   ṃ     - base decompression: convert 897 to base ['.',' '] = "...      ."

4

C (gcc), 202 198 196 189 96 99 88 86 79 77 75 74 73 bayt

Digital Trauma sayesinde 7 8 bayt kaydedildi .

f(i){usleep(dprintf(2,"\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Veya sisteminizin stdoutyeni bir satır yazmadan her yazmadan sonra yıkanması gerekmiyorsa:

C (gcc), 70 bayt

f(i){usleep(printf("\r[%-10.10s]","....      ...."+i%10)<<13);f(i+9);}

Nasıl çalışır

  • usleep( mikrosaniye cinsinden bir sonraki dönüş değeri için uyur.
  • dprintf(2,dosya tanıtıcısına 2 yazdırır veya stderr. Bu gereklidir, çünkü stdoutsatır tamponluyken (çıktı yeni satır yazana kadar gösterilmez), stderrkarakter arabelleğe alınır (tüm çıktılar hemen gösterilir).
  • "\r satır başı yazdırır (geçerli satırı siler).
  • [%-10.10s]"ise printfgerekirse tam uzunlukta 10 (her zaman uzunluğu 10 ile bir dize olacaktır çıkışı sağlanan Ne dize olursa olsun) bir dize için biçim belirteci, sağa boşluklarla doldurulur. Bu parantez içine alınacaktır.
  • ".... ...." yükleme çubuğu.
  • +i%10Örneğin, akım endeksi modülo 10 tarafından yükleme çubuğu uzaklıklar, eğer i == 3, i % 103. bu için eşit 3 markası tarafından yükleme çubuğu Ofset eşittir ". ....".
  • Ofset dizgisi, printfformat belirticisine iletildiğinde , gerekirse 10 uzunluğunu sınırlar ve gerekirse sonuna sonuna boşluk ekler. Bu nedenle, yükleme çubuğu her zaman arasında olacaktır [.... ]ve [. ...].

i;f(){for(;;i=++i%10)usleep(7500*dprintf(2,"\r[%-10.10s]",".... ...."-i+10));}çalışmalı.
Christoph

1
Harika golf! 1 bayttan daha fazla tasarruf edinf(i){usleep(dprintf(2,"\r[%-10.10s]",".... ...."+i%10)<<13);f(i+9);}
Digital Trauma

@DigitalTrauma Kodunuzdaki boşluklar düzgün şekilde oluşturulmadı. Ancak, ne demek istediğinizi anlıyorum ve yardımınız için teşekkürler!
MD XF

3

Java 7, 139 124 bayt

String s="....      ";void c()throws Exception{System.out.print("["+s+"]\r");s=(s+s).substring(9,19);Thread.sleep(100);c();}
  • Bunlardan bahsedilmesi \rsayesinde @Phoenix .

Satır başı \r'imleci' tekrar satırın başına döndürür ve üzerine yazılabilir. Ne yazık ki, çevrimiçi derleyiciler ve Eclipse IDE bunu desteklemiyor, bu yüzden Windows Komut İstemi'nden göstermek için bu cevabın sonuna bir gif ekledim.

Burada dene. (Hafifçe değiştirildiğinden sonucu görüntülemeden önce zaman aşımını beklemenize gerek kalmaz. Ayrıca, TIO satırbaşlarını desteklemez, bu nedenle her satır önceki satırın üzerine yazılmadan yazdırılır.)

Açıklama:

String s="....      ";            // Starting String "....      " on class level
void c()                          // Method without parameter nor return-type
 throws Exception{                // throws-clause/try-catch is mandatory for Thread.sleep
  System.out.print("["+s+"]\r");  //  Print the String between square-brackets,
                                  //  and reset the 'cursor' to the start of the line
  s=(s+s).substring(9,19);        //  Set `s` to the next String in line
  Thread.sleep(100);              //  Wait 100 ms
  c();                            //  Recursive call to same method
}                                 // End of method

Çıkış gif:

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


Satırı bir satır başı printlnile değiştirip printçıkararak temizleyebilirsiniz . IDE'nizin terminalinde çalışmayabilir, ancak herhangi bir diğerinde de işe yarar.
Pavel

@Phoenix Taşıyıcıya göre demek istiyorsun \r\n? System.out.print(someString+"\r\n);Konsolu nasıl temizler .. Kullanmakla aynıdır System.out.println(someString);.. Sadece bir sonraki satıra gider, fakat daha önce basılan herhangi bir satırı kaldırmaz ..: S
Kevin Cruijssen 12:17

4
Hayır, demek istediğim \r, olmadan \n. Bu "imleci" satırın başına sıfırlar, böylece herhangi bir şey yazdırmak o satırın üzerine yazacaktır.
Pavel

Tabii ki @Phoenix Ah. Teşekkürler. Cevabımı değiştirdim ve sonucu göstermek için bir gif eklendi. Çok kötü çevrimiçi derleyiciler ve Eclipse IDE bunu desteklemiyor ..>.>
Kevin Cruijssen 13:17

3

Python 2 , 81 78 bayt

-1 bayt (I kullanımını cevapsız fark %sRod bir gönderirken neredeyse aynı Python 3 versiyonu ! Aynı anda)
-2 bayt (kullanarak totallyhuman fikrini - değiştirmek s[-1]+s[:-1]ile s[9]+s[:9])

import time
s='.'*4+' '*6
while s:print'\r[%s]'%s,;s=s[9]+s[:9];time.sleep(.1)

Örnek çalışma


Çıktıyı nasıl temizliyor? Bu benim yanıta python3 kullanıyorum nedeni budur (o python2 üzerine floş daha bayt alacağını)
Rod

@Rod, \rçizginin üzerine yazar ve dizgeden ,ziyade tuple basmasını sağlar - Bir süre önce bir yerde gördüm ve daha önce de kullandım.
Jonathan Allan

1
Evet, yaptığım şey buydu, ancak çıktı gerçek zamanlı olarak sys.stdout.flush()
Rod

1
Suçlu bulundu: benim ubuntu terminalim: c
Rod

3

Go , 150 145 132 129 124 bayt

Sudee sayesinde -5 bayt.

Yeterince görmedim gibi hissediyorum buraya gidin ... Ama cevabım C'yi atmak yani ... halp golf?

package main
import(."fmt"
."time")
func main(){s:="....      ";for{Print("\r["+s+"]");Sleep(Duration(1e8));s=(s+s)[9:19];}}

Çevrimiçi deneyin!


1
Değil Go aşina, ama dönüştürebilirsiniz varsayılabilir 100000000için 10^85 bayt kaydedin.
Grant Miller

@ goatmeal Bunu denedim ama görünüşe göre bitsel olumsuzlama. Ayrıca 10**8bir hata veren de denedim .
tamamen insanlık

3
Sen bilimsel gösterim kullanabilirsiniz: 1e8.
sudee

1
@sudee Aha, bu büyük sayıları kullanmanın yolu olurdu. Teşekkürler!
tamamen insanlık

2
@MDXF ben farklı, ben cevabım ediliyor anlamına geldiğini ifade edilmiş gerekirdi dışı golfed C ile
totallyhuman

3

VBA 32 bit, 159 157 143 141 134 Bayt

VBA, bir saniyeden daha kısa süreleri beklemeye izin veren yerleşik bir işleve sahip değildir, bu nedenle bir işlev bildirmek zorundayız. kernel32.dll

32 Bit Beyanı Beyanı (41 Bayt)

Declare Sub Sleep Lib"kernel32"(ByVal M&)

64 Bit Beyanı Beyanı (49 Bayt)

Declare PtrSafe Sub Sleep Lib"kernel32"(ByVal M&)

Ek olarak, DoEventssonsuz döngünün Excel'in yanıt vermeyen olarak görünmesini engellemek için bir bayrak eklemeliyiz . Son işlev daha sonra giriş yapmayan ve VBE anında penceresine çıkış yapan bir alt yordamdır.

Hemen Pencere işlevi, 93 Bayt

A1ActiveSheet üzerindeki girişe ve çıkışa sahip olmayan ve giriş yapmayan anonim VBE acil pencere işlevi

s="...      ....      .":Do:DoEvents:Sleep 100:[A1]="["&Mid(s,10-i,10)&"]":i=(i+1)Mod 10:Loop

Eski Sürüm, 109 Bayt

Giriş yapmayan ve VBE acil durum penceresine çıkan anlık pencere işlevi.

s="...      ....      .":i=0:Do:DoEvents:Sleep 100:Debug.?"["&Mid(s,10-i,10)&"]":i=(i+1) Mod 10:Loop

Ungolfted ve biçimlendirilmiş

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal M&)
Sub a()
    Dim i As Integer, s As String
    s = "...      ....      ."
    i = 0
    Do
        Debug.Print [REPT(CHAR(10),99]; "["; Mid(s, 10 - i, 10); "]"
        DoEvents
        Sleep 100
        i = (i + 1) Mod 10
    Loop
End Sub

Beyaz boşlukları kaldırmak için -2 Bayt

-30 Doğru saymak için bayt

Acil pencere işlevine dönüştürmek için -14 Bayt

Çıktı

Aşağıdaki gif tam alt rutin sürümünü kullanır, çünkü bunu hemen pencere işleviyle yeniden kaydetmek için çok tembeldim.

VBA yükleme Gif


aÇıktının tepesinde ne var ?
MD XF

aYukarıda listelenen alt yordamı çalıştırmak için çağrı olan @MDXF ; bu, işlevsel olarak daha ayrıntılı olanlara eşdeğerdir call a().
Taylor Scott

Ah, benim hatam. Sadece kötü gönderiler arıyorum. Siz, o zaman, yani, yani +1
MD XF

2

05AB1E , 23 bayt

'.4×ð6×J[D…[ÿ],Á¶т×,т.W

Çevrimiçi deneyin!

açıklama

'.4×ð6×J                  # push the string "....      "
        [                 # forever do:
         D                # duplicate
          …[ÿ],           # interpolate the copy between brackets and print
               Á          # rotate the remaining copy right
                ¶т×,      # print 100 newlines
                    т.W   # wait 100ms

2

Toplu, 99 98 bayt

SteveFest sayesinde 1 byte kaydedildi!

(Koddan kaldırabilirim \r, ancak toplu golf oynamak için kullanmayacağım.)

@SET s=....      
:g
@CLS
@ECHO [%s%]
@SET s=%s:~-1%%s:~,-1%
@ping 0 -n 1 -w 100>nul
@GOTO g

LICEcap ile kaydedildi

İlk satırdan sonra dört boşluk var.

Ana mantık dizgeyi değiştiriyor. %s:~-1%son karakteridir %s%ve %s:~0,-1%son karakteri hariçtir %s%. Böylece son karakteri, dizeyi döndüren dizenin önüne taşıyoruz.


Aw ... Ben bunu arıyorum ...
stevefestl

1
Golf 1 bayt: 0değişken alt dize çıkartılabilir
stevefestl

Sen kullan cmder. İyi iş.
MD XF

1
@ SteveFest Huh, TIL. Teşekkürler!
Conor O'Brien,

1
@MDXF Hâlâ aklı başında olmamın tek nedeni bu: P
Conor O'Brien,

2

Ruby, 57 56 bayt

s=?.*4+' '*6;loop{$><<"[%s]\r"%s=s[-1]+s.chop;sleep 0.1}

Buradaki diğer cevaplardan ağır şekilde etkilendi.

@ Manatwork sayesinde bir bayt kaydedildi. Ayrıca görünüşe göre karakterleri saymakta zorlanıyorum - ST3 kullanıyorum ve görünüşe göre özenli değilseniz satırdaki karakter sayısında yeni satırlar içerecek.


O nasıl çalışır? Bu, girişin saklandığını varsayıyor mu s?
Rɪᴋᴇʀ

@Riker sProgramın başlangıcında 4 .sn ve birkaç boşluk olarak tanımladı
Conor O'Brien

s[0..8]s.chop
manikür işi

2

Perl, 69 bayt

@Dom Hastings sayesinde -3 bayt .

$_="....".$"x6;{print"\ec[$_]
";select$a,$a,!s/(.*)(.)/$2$1/,.1;redo}

Bu select undef,undef,undef,.1, Perl'de 1 saniyeden daha az uyumanın en kısa yoludur ve çok fazla bayt alır ...


Biraz daha uzun (79 bayt), var:

@F=((".")x4,($")x6);{print"\ec[",@F,"]\n";@F=@F[9,0..8];select$a,$a,$a,.1;redo}

: Akşam biraz (bir hazır ESC ile veya 68) daha 69 aşağı bu başardı gist.github.com/dom111/e3ff41c8bc835b81cbf55a9827d69992 ben kullanıma çalıştı gibi hissediyorum !printama aynı uzunlukta biter böylece parens ihtiyaç: /
Dom Hastings

@DomHastings Güzel, teşekkürler! Hala golf oynamayı biliyorsun: D
Dada

2

Bash, 93 90 96 bayt

s="...      ....      ."
for((;;)){ for i in {0..9};do printf "\r[${s:10-i:10}]";sleep .1;done;}

burada göster

sözdizimi için {} içine yerleştirilemedi


Oldukça benzer bir çözüm yollamayı düşündüm, ama şimdi anlamsız. Ancak, geliştirmek için bazı ilham verebilir: pastebin.com/Ld6rryNX
manatwork

çok daha iyi!
Senden çalmadım

düzenlendi, printf dolgusu s kısaltmasında yardımcı olamaz. dize @DigitalTrauma olarak kaydırma daha iyi görünüyor.
marcosm

1

Groovy, 72 bayt

s="*"*4+" "*6
for(;;){print("["+s+"]"+"\n"*20);s=s[9]+s[0..8];sleep 100}

Açıklama

s="*"*4+" "*6 //creates the string "****      "
for(;;){ //classic infinite loop
    print("["+s+"]"+"\n"*20) //prints the string with [ at the beginning and ] at the end. After that some newlines
    s=s[9]+s[0..8] //appends the final char of the string to beginning, creating a cycling illusion
    sleep 100 //100 ms delay
}

Konsolu Groovy / Java ile temizlemenin uygun bir yolunu bilmiyordum. Birisi bunu yapmanın bir yolu varsa, lütfen bana söyleyin
staticmethod

1
\rİmleci satırın başına getirmek için kullanabilirsiniz . En azından birkaç cevap bunu yapıyor gibi görünüyor. Oradan, * 20'yi silebilir, 3 bayt kaydedebilirsiniz.
phyrfox

1

Haskell (Windows), 159 bayt

import System.Process
import Control.Concurrent
main=mapM id[do system"cls";putStrLn('[':["....      "!!mod(i-n)10|i<-[0..9]]++"]");threadDelay(10^5)|n<-[0..]]

açıklama

mapM id             sequentially perform each IO action in the following list
[                   start a list comprehension where each element is...
  do                  an IO operation where
    system "cls";       we clear the screen by calling the windows builtin "cls"
    putStrLn(           then display the string...
      '[':                with '[' appended to
      [                   a list comprehension where each character is...
        "....      "!!       the character in literal string "....      " at the index
        mod(i-n)10          (i - n) % 10
      |i<-[0..9]]         where i goes from 0 to 9
      ++"]"             and that ends with ']'
    );
    threadDelay(10^5)   then sleep for 100,000 microseconds (100 ms)
|n<-[0..]]          where n starts at 0 and increments without bound

Haskell'in saflığı, bisiklet nokta şeklinin oluşturulmasını biraz karmaşık hale getirdi. Çıkması gereken sırada sonsuz bir dizge listesi oluşturan iç içe geçmiş bir liste kavrayışı oluşturdum, ardından uygun IO işlemlerini tekrar ekledim.


1

Ruby, 61 bayt

Spect, noktaların sağ yerine sola kaydırılması durumunda, 1 bayt kazandıracaktır çünkü rotate!hiçbir argüman olmadan diziyi bir kez sola kaydırır.

s=[?.]*4+[' ']*6
loop{print ?[,*s,"]\r";s.rotate!9;sleep 0.1}

1

GNU sed (exec uzantılı), 64

Puan -rbayrak için +1 içerir .

s/^/[....      ]/
:
esleep .1
s/[^. ]*(.+)(.)].*/\c[c[\2\1]/p
b

1

c, 100

char *s="....      ....     ";main(i){for(i=0;;i=(i+9)%10)dprintf(2,"[%.10s]\r",s+i),usleep(3<<15);}

Neden stderrkullanmaya yazdırıp dprintfyalnızca kullanmıyorsunuz printf?
MD XF

@ MDXF Varsayılan stderrolarak karakter arabelleğe alınır, oysa stdoutsatır arabelleğe alınır. Hiçbirini basmak istemediğim için \n, o zaman printf()açıkça fflush(stdout)de açıklamalıyım#include <stdio.h>
Digital Trauma

İyi bir nokta, ama aslında, #include <stdio.h>STDOUT'u yıkamak zorunda kalmazsınız . fflush(0)tüm tamponları temizler.
MD XF

1
Önemli mainolan f, yeniden adlandırarak üç bayttan tasarruf edin.
MD XF
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.