Kayan Seçim Çerçevesi


13

Gizlenmiş Merhaba Dünya'ya girişimi takiben , temeldeki kodu paylaşmanın eğlenceli olabileceğini düşündüm. Ama neden sadece kodu gösterelim, bir golf de yapalım!

Meydan okuma

Terminalde, sağdan sola, sol tarafa yerleşerek bir dizeyi kaydeden bir komut dosyası yazın.

Giriş

Bir ipi argüman olarak alır.

Sonuç

Kayan seçim çerçevesini STDOUT olarak yazdırır. Maksimum genişlik ~ 50 karakter. 0 veya 1 karakter göstererek başlar. Kaydırma sırasında harfler arasında biraz boşluk var. Yerleştirildiğinde durur (kelime karakterleri arasında fazladan boşluk kalmaz). Yavaş kaydırma, ancak çok yavaş değil (yineleme başına <1s).

Misal

Arg ile script çalıştırılıyor 'Hello World'

                                                   H

sonra

                H    e    l    l    o         W    o

sonra

H    e    l    l    o          W    o    r    l    d

sonra

Hell    o         W    o    r    l    d

en sonunda

Hello World

Çalışan bir örnek için, kodumu "Merhaba Dünya" sorusundan deneyin. Sonunda benimkini göndereceğim. Şu anda Perl'de 202 karakter. Şimdi bazı rakipler olduğuna göre, cevaplara benimkini verdim.

kazanan

Kısıtlamaların mutlak olmasını istemiyorum, bu yüzden onları biraz belirsiz bıraktım. Orijinalimin ruhunu izleyen en kısa senaryo kazanacak.

notlar

Bu oyun xtermçevreyi varsayar . Başka bir ortamın yararlı olduğu kanıtlanırsa, sadece benzer ortamlar karşılaştırılacak ve her biri için ayrı bir kazanan ilan edilebilir.

Zeyilname (25 Nisan 2012)

Bazı tomurcuklanan sorunları ele almak için bir karar veriyorum. Karakter sayınız aşağıdakiler için gerekli kodu içermelidir:

  1. Flush STDOUT (Sana Yakut Bakarken)
  2. sleep<1s zaman gecikmesi ile uygulayın (Perl'e bakarken)

Bu, komut satırı bir tercümana geçerken yapılabilir, ancak bu karakterler toplamda (boşlukları saran sans) sayılır.


Ben ... şey bu tür terminal davranışları endişe biraz kafam xterm, vt102...?
dmckee --- eski moderatör yavru kedi

Xterm varsayıyorum, ama bunun çok önemli olduğunu düşünmüyorum. Belki de endişeni anlamıyorum?
Joel Berger

Bu hileler genellikle çeşitli terminallerin yazdırılmayan karakterlerden bazılarını ele alma şekline dayanarak üretilir ve terminaller yapabilecekleri ve hangi sekansların efekt ürettiği konusunda farklılık gösterir. Tekrarlanabilirlik için belirli bir terminal ortamına sahip olmak iyi olabilir.
dmckee --- eski moderatör yavru kedi

1
Size doğru hizmet edecek biri , emülatörünüzün olmadığı, ancak Tamam'ın belirsiz bir terminale bağlı olan gerçekten kısa bir cevap gönderir .
dmckee --- eski moderatör yavru kedi

tamam sanırım şimdi var. Düşünceler için teşekkürler :-)
Joel Berger

Yanıtlar:


5

python 2-146 karakter

edit: stdin üzerinden girdi yerine bir işlev yaptı. ilk argüman dizedir ve ikinci argüman olmasını istediğiniz uzunluktur. bu yüzden çağırma olur f('Hello World', 50). Ben de daha düzgün yaptım; her karakter 'indi' olduğunda garip bir duraklama oldu

import os,time
def f(x,n):
 y=' '*n+'  '.join(x);z=0
 while y:w=y[0]==x[z];y=y[1+w:];z+=w;os.system('cls');print((x[:z]+y)[:n]);time.sleep(0.1)

eski, 158 karakter:

import os,time,sys
x=' '.join(sys.argv[1:])
y=' '*50+'  '.join(x)
z=0
while y:z+=y[0]==x[z];y=y[1:];os.system('cls');print((x[:z]+y)[:50]);time.sleep(0.1)

Bash kullanarak (en azından MacOSX ve CentOS'un son kurulumunda), terminal ekranını temizlemek için kullanılan shell komutunun 'cls' değil 'clear' olması gerekir.
Paolo

Windows için 'cls', OSX / Linux için 'temizle', sanırım
Blazer

Günlük olarak python ile uğraşmayanlar için programın nasıl başlatılacağına dair tavsiyeler yardımcı olacaktır. Python'u başlatın. kodu yapıştır, çağrı f("Hello World, 40)benim için çalıştı.
kullanıcı bilinmiyor

@ kullanıcı I um. Oraya çağırdım mı?
Blazer

4

Yakut, 93 91 89 karakter

u="\1";s=u*50+[*$*[0].chars]*(u*3);$><<s.tr(u," ")[0,50]+" \r"while s.sub!u,""*sleep(0.1)

Görüntülenecek metin komut satırı bağımsız değişkeni olarak verilmelidir, örn.

ruby marquee.rb "Hello World"

yukarıda gösterilen örnek için. Ne yazık ki burada animasyonu gösteremiyorum, bu yüzden kodu kendiniz denemek zorundasınız.

Önceki versiyon:

s=" "*67+[*$*[0].chars]*"   ";(s.size*3/4).times{|j|s[j/3]='';$><<s[16,50]+" \r";sleep 0.1}

Etkileyici boyut. Bu çok düzgün değil, ben (şu anda oldukça düşük güçlü bir makinedeyim) ya da kod nasıl çalışır?
Joel Berger

Anladım, STDOUT.sync=true;otomatik yıkama için ayarlamam gerekiyordu. Perl eşdeğeri $|++. Bu 17 karakter daha, ama yine de benim altında çok. Ruby'nin Perl'i yenmesini sağlayamıyorum! Çalışacağım. Güzel.
Joel Berger

Eğer ruby1.8 "Hello World"ararsam, tam olarak sürprizime değil, bir hata diyor ki:ruby1.8: No such file or directory -- Hello World (LoadError)
kullanıcı bilinmiyor

@userunknown belki de kaynak dosyanın yolunu da buraya ruby foo.rb args
koymalısınız

@padde: Evet, yapmalıyım. Ne yazık ki Howard, değişikliği hakkında beni bilgilendirmeden görevini düzenledi. Sorumu anlamak için tarihe bir bakın.
kullanıcı bilinmiyor

3

Cı, 94 83 80 173 karakter

EDIT: Çok sayıda kod eklendi, şimdi istenen tüm işlevleri uygular. 1e8Hız kontrol etmek için sabit ayar yapılabilir. Makinemde olduğu gibi oldukça hızlı.
Bazı karakterler kesinlikle buraya kaydedilebilir. lstatik olabilir (başlatmayı kaydeder), cbir işaretçi olabilir (değiştirerek b+c).

char b[99],c=1;
main(a,t,w,i,l)char**t;{
    for(l=0;b[l++]=*t[1]++;b[l++]=32);
    for(w=80;i--||
        printf("\033[F\033[K%*.*s\n",w-=l<a,a++,b,i=1e8)>l+6||
        b[++c]&&memmove(b+c-1,b+c,l););
}

Kısmi işlevselliği ile eski sürüm (80 karakter):
değiştirerek karakter bir çift Kaydedilen char**tile int*t. 32 bit ( int**t64 bit desteği) iyi çalışır.

main(i,t,w)
    int*t;
{
    for(w=80;i--||printf("\033[F\033[K%*s\n",w,t[1],i=1e8)*--w;);
}

2

K&R C - 431 416 karakter

Standarda yüksek derecede saygı gösterir. Ncurses kullanır, bu nedenle büyük ölçüde terminalden bağımsız olmalıdır. Dizede amaçlanan boşluğu korumak için oynatılan bazı hileler nedeniyle metin yana vurduğunda hafif bir kekemelik olur.

Kullanılacak dize, komut satırında ilk bağımsız değişken olarak geçirilmelidir (ve boşluk içeriyorsa, daha çok, !test dizgim ( Hello, World!) gibi bir a içeriyorsa ) kullanılmalıdır.

#include <ncurses.h>
#include <unistd.h>
#define T usleep(1e5),S(l)
#define U mvprintw(23,0,"%s",l),refresh()
char l[63],*p,*q,r;
S(char*s){r=0;if(*s==32)q=s++;else{for(;*s-32||*(s+1)-32;s++); 
for(q=s;*s==32;s++);(s-q)&1?s--:usleep(1e5);}
for(r=0;*s;*q++=*s++){*s-32?r=1:0;}return r;}
main(int c,char**v){initscr();curs_set(0);for(c=0;c<62;l[c++]=32);
for(p=*++v;*p;){l[52]=*p++;U;T;U;T;U;T;}for(;T;U);getch();endwin();}

Daha okunabilir ve yorumlanmış bir biçimde:

#include <ncurses.h>
#include <unistd.h>

char l[63] /* take advantage of 0 initialization */,
  *p,*q, r;

/* Remove the first unwanted space. Unwanted means at the begining of
 * the line, all of even length blocks between non-spaces, and
 * all-bu-one of odd length blocks between non-spaces.
 *
 * Return true if the removed space occurs before a non-space character.
 */
S/*lide marquee*/(char*s){
  r=0; /* initialize the return value */
  if(*s==' '){
    q=s++;
  } else {
    /* Find the start of first block of contiguous spaces */
    for(;*s-' '||*(s+1)-' ';s++); 
    for(q=s;*s==' ';s++); /* q holds the start, s finds it's end */
    /* if this block is even length remove all, if odd, all but one */
    if( (s-q)%2 )s--; else usleep(1e5);
  }
  /* copy from s to q all the way to the end */
  for(r=0;*s;*q++=*s++){ 
    if(*s-' ')r=1; /* note if we pass a non-space */
  } 
  return r;
}

main(int c,char**v){
  initscr();curs_set(0); /* setup ncurses with invisible cursor */
  for(c=0;c<62;l[c++]=' '); /* initialize l */
  for(p=*++v;*p;){ /* load the message into the marque, skipping space */
    l[52]=*p++;
    mvprintw(23,0,"%s",l),
    refresh();
    usleep(1e5),
    S(l);
    usleep(1e5),
    S(l);
    usleep(1e5),
    S(l);
  }
  for(;usleep(1e5),S(l);mvprintw(23,0,"%s",l),refresh()); /* keeping sliding until we're done. */
  getch();
  endwin();
}

Özellikle ifoperatörlerle değiştirerek kısaltma potansiyeli çok fazladır . Örneğin - if((s-q)%2)s--;else usleep(1e5);-> s-q&1?s--:usleep(1e5);(veya s-=s-q&1||usleep(1e5);)
ugoren

@ugoren: Evet, ben ' 's'yi sayısal eşdeğerlerle değiştirmeyi unutmuştum .
dmckee --- eski moderatör yavru kedi

Birkaç püf noktaları: Değiştir x==32ile x-32ya ile (if-else yüzden ters, yani tersine çevrilir) x<33(0..31 hiç kullanılmamış varsayılarak). Sahip olduğunuz değerlerle başlatın ( for(curs_set(c=0);...). *(s+1)-> s[1]. (Yerine gereksiz telleri sökün ;ile ,irade yardımı).
ugoren

2

Perl 5.13.2, 96

$_=join$;x4,$;x46,split//,pop;print substr(s/$;/ /gr,0,50)." \r"while$|=s/$;//+select'','','',.1

@ Kevin Reid'in cevabından çok şey çalmak , özellikle /rdaha yeni Perls'deki hile.

Perl, 115

@ Joel Berger'ın yanıtı gibi, eğer kullanabilir sleep 1ve yavaşlayabilirsem veya -MTime::HiRes=sleepetkinleştirmek için komut satırını geçirsem bu çok daha kısa olur sleep.1. Aksi takdirde kısa uykular için tek yerleşik yol select'','','',.1oldukça uzun olanıdır .

$|=@_=(($")x45,map{($")x4,$_}split//,pop);for(0..$#_){print@_," \r";splice@_,($_-=45)<0?0:$_/4,1;select'','','',.1}

Perl, 128

$_=$"x9 .pop;s/./    $&/g;$.=-46;$\=" \r";while($|=/./g){print substr($_,0,50);pos=++$.<0?0:$./4;s/\G.//;select'','','',.1}print

Perl, 133

$|=@_=split//,pop;for$i(reverse-$#_..50){for(@_){print$"x($j||$i),$_;($i+=$j=($i++>0)*4)>50&&last}print"    \r";$j=select'','','',.1}

Evet, kendime bu kuralda kendimi ısırdım! Diğer dillerin yerleşik bir uykuya sahip olacağını fark etmemiştim.
Joel Berger

bazı öneriler, her biri sonra boşluk kaldırabilirsiniz xve blok formu mapbirkaç kurtaracak.
Joel Berger

1

JavaScript 180 218 karakter

Üretim Versiyonu:

function f(){i--&&(i>50?h=h.substr(1):h=h.replace(" ",i==16?"&nbsp;":""),document.body.innerHTML="<pre>"+h.substr(0,50)+"</pre>",setTimeout(f,99))}h=(new Array(50)).join(" ")+"HelloWorld".split("").join("   "),i=80,f()

Ungolfed Sürümü:

h=new Array(50).join(" ")+("HelloWorld".split("").join("   "));
i=80;

function f(){
        if(i--){
            if(i>50){
                h=h.substr(1);
            }else{
                h=h.replace(" ",(i==16)?"&nbsp;":"");
            }
            document.body.innerHTML="<pre>"+h.substr(0,50)+"</pre>";
            setTimeout(f,99);
        }
}
f();​

İşte bir jsFiddle Demosu

Not: yeniden oluşturmaya çalışırsanız, kodun gövdenin altında olduğundan emin olun


Demodan söyleyemem, sol tarafta "yığar" mı yoksa sola doğru yapar ve son dizeyi gösterir mi? Emin değilseniz Howard kesinlikle çalışır.
Joel Berger

Merhaba dünya her harf arasında 4 boşluk varsa, h ilk karakter olduğunda, bu boşluklar kaldırılır. Bu demo daha yavaştır jsfiddle.net/fYvg7/1
ajax333221

Bu yakın, ancak her alanı ayrı ayrı kaldırmalısınız.
Joel Berger

@JoelBerger Çözüldü
ajax333221

Bir nag olmaktan nefret ediyorum, ama başka bir sorun: seninki sağa tek tek girmek yerine tüm harfleri gösteren ile başlar.
Joel Berger

1

Perl 5.13.2, 115 karakter

$_=$"x9 .pop=~y/ /\0/r;s/./    $&/g;print(y/\0/ /r=~/(.{50})/,"\r"),select$.,$.,$.,.02while$|=s/ (\S)/$1 /g;print$/
  • Uyarı-temiz.
  • Karakterler veya ilk boşluk arasındaki boşluk azaltılarak biraz sıkılabilir.
  • Kullanılması nedeniyle Perl 5.13.2 veya daha yenisini gerektirir /r.
  • POSIX argv'si NUL-temiz olmadığından boşlukları korumak için NUL ile değiştirme belirsizdir. Ancak, döngü ikamesi diğer boşlukları hiçbir şeye dönüştürmeyecektir (sonunda).

Kredi:


rBayrağı seviyorum, o zamandan beri dile en iyi ekstate
Joel Berger

1

bash 234

w=$1
p(){
i=$1
s=$2
p=$((50+s*3-i))
((p<s+1)) && p=$((s+1));
((p<50)) && echo -en "[20;"${p}H$3"  ";
}
clear
for i in {0..99}
do
for s in $(seq 0 ${#w})
do
p $i $s ${w:s:1} 
done
sleep .1
echo -en "[20;1H  "
done
echo -en "\b\b$w\n"

Kullanımı:

./marquee.sh "Hello, fine marquee world"

ungolfed:

#!/bin/bash
w=$1
p(){
    #si String index
    it=$1
    #it=iteration
    si=$2
    pos=$((50+(si*3)-it))
    ((pos<si+1 )) && pos=$((si+1));
    ((pos<50)) && echo -en "[20;"${pos}H$3"  ";
}
clear
for it in {0..99}
do
    for si in $(seq 0 ${#w})
    do
        p $it $si ${w:si:1} 
    done
    sleep .1
    echo -en "[20;1H   "
done
echo -en "[22;1H"

1

R, 319 karakter

@Blazer örneğinin felsefesini takip ederek (d saniye cinsinden gecikmedir):

f=function(x,n=50,d=0.2){
    s=strsplit(x,"")[[1]];i=1;l=length
    while (i<(n+l(s)-1)){
        if(i<=l(s))cat(rep(" ", n-i),s[1:i])
        else if((i<=n)&&(i>l(s)))cat(rep(" ", n-i),s[1:l(s)])
        else cat(paste(s[1:(i-n+1)],collapse=""),s[(i-n+2):l(s)])
        Sys.sleep(d);system("clear");i=i+1
    }
    cat(paste(s[1:l(s)],collapse=""))
}

Kullanımı:

f("Hello World",n=20,d=0.2)

1

Perl : 144 133

$|=@s=(($")x50,map{$_,($")x4}@i=split//,pop);{$n=0;$s[$n]ne$_?last:$n++for@i;splice@s,$n,1;print"\r",@s[0..50];sleep.1;$n!=@i&&redo}

<1s uyku almak için olsa da çalıştırmak gerekir:

perl -MTime::HiRes=sleep scriptname 'string to print'

Kendimi kazanan ilan edemeyeceğim için kendimi orada neyin önemli olduğu konusunda tartışmayacağım (ama gerçekten Ruby bunu kazanamaz ;-))


4 daha fazla ve bir tweet uyuyor: D
ajax333221

4 karakter burada: s/' '/$"/gves/shift/pop/
ephemient

evet, pushifadeyi kaldırmanın yanı sıra bunları da ekledim . Henüz yayınlamamıştım.
Joel Berger

0

Q, 145

Son satır orijinal giriş dizesindeki tüm boşlukları kaldırdığından gereksinimleri tam olarak karşılamıyor.

{c:2_'((!)(#)a)_'a:((l:3*(#)x)#" "),\(1_(,/)b,'x,'b:" ");{(-1 x;);system"sleep ",($)y}'[-1_c,(l-1)$d(!:)[d]except\(&)(^)d:((!)(#)q)!q:last c;y];}

İki argüman alır, giriş dizesi ve kaydırma hızı

q){c:2_'((!)(#)a)_'a:((l:3*(#)x)#" "),\(1_(,/)b,'x,'b:" ");{(-1 x;);system"sleep ",($)y}'[-1_c,(l-1)$d(!:)[d]except\(&)(^)d:((!)(#)q)!q:last c;y];}["hello";0.05]
             h
            h
           h
          h  e
         h  e
        h  e
       h  e  l
      h  e  l
     h  e  l
    h  e  l  l
   h  e  l  l
  h  e  l  l
 h  e  l  l  o
h  e  l  l  o
h e  l  l  o
he  l  l  o
he l  l  o
hel  l  o
hel l  o
hell  o
hell o
hello

ne yazık ki bu önemli bir nokta. Perl betiklerinin onsuz çok küçük olabileceğini biliyorum.
Joel Berger

0

PowerShell, 135

Çok golf değil ve muhtemelen korkunç bir yaklaşım, ama hasta ve gerçekten düşünemiyorum ...

for($x="`r"+' '*50;$y-ne$x){$y=$x
write-host($x=$x-replace' ([^ ])','$1 ')-n
if(!($t++%5)){$x=$x-replace'.$',"$args"[$i++]}sleep -m 99}

0

J (116)

s(echo@((50#LF)&,)@([[i.@]&2e7)@(50&{.)@;@:(([,~#&' '@])&.>))"1([-=&0@/:@\:@:~:&0)^:(i.>:+/k)k=.50,3#~<:#s=.>2{ARGV

Komut satırındaki giriş dizesini alır, yani jconsole marquee.ijs 'Hello, world!'

Ekranı temizlemek gerekmiyorsa, yani şu şekilde çıktı alın:

H  e  l  l  o
H e  l  l  o
He  l  l  o
He l  l  o
...

izin verilirse, 12 karakter daha kısa olur.

Açıklama:

  • s.=>2{ARGV: dizeyi komut satırından al
  • k.=50,3#~<:#s: her karakterden önce, ilk karakterden 50 ve diğer karakterlerden önce eklenen boşluk alanının başlangıç ​​miktarı. (bir dizi verir, '50 3 3 3 ... ')
  • ([-=&0@/:@\:@~:&0): bir dizi verildiğinde, dizideki ilk sıfır olmayan öğeyi azaltır
  • ^:(i.>:+/k): Bu işlev N kez uygulandı; burada N, eklenen boşluk miktarının toplamına kadar 0'dır. (bir matris verir: 50 3 3 3; 49 3 3 3; 48 3 3 3; ... 0 0 0 1; 0 0 0 0).
  • "1: matrisin her satırında aşağıdaki işlevi çalıştırın
  • ;@:(([,~#&' '@])@.>): dizedeki her karakterin önüne belirli miktarda boşluk ekler
  • (50&{.): dizenin ilk 50 karakterini al
  • ([[i.@]&2e7): listeyi 0 ile 2 * 10 ^ 7 arasında üreten ve sonra listeden kaldıran bir işlev. Bu, makinemde saniyenin yaklaşık üçte birini alır, bu gecikmeye neden olur.
  • ((50#LF)&,): ekranı temizlemek için dizeden önce 50 satır ekleyin
  • echo: dizeyi çıktılar
  • s (...): işleve sol argüman olarak dizeyi ver

0

APL (70)

{⎕SM∘←1,⍨1,⍨,/D{⍺,⍨⍵⍴⍕⍬}¨P←⍵-{⍵×~×⍺}\×⍵⊣⎕DL÷8⋄0∨.≠P:∇P}1↓⎕SD,1↓3⍴⍨⍴D←⍞

Klavyeden giriş alır, çıkış ⎕SMpencerede (sanırım bir metin tabanlı APL varsa terminal olurdu). Eğer gerçekten 50 değişiklik olmasını istiyorsanız pencere boyutu, otomatik olarak algılanır 1↓⎕SDiçin 50.

Açıklama:

  • 1↓⎕SD,1↓3⍴⍨⍴D←⍞: dizeyi okuyun ve depolayın D. Her karakterden önce ne kadar boşluk ekleneceğini açıklayan bir vektör oluşturun; bu, ilk karakterden ( 1↓⎕SD) önce ve diğerlerinden önce (3) ekran genişliği 1↓3⍴⍨⍴D.

  • ⎕DL÷8: saniyenin 1 / 8'ini bekleyin

  • P←⍵-{⍵×~×⍺}\×⍵: sağdaki bağımsız değişkende vektörde, en soldaki sıfır olmayan öğeden 1 çıkarın ve yeni vektörü P'de saklayın.
  • ,/D{⍺,⍨⍵⍴⍕⍬}¨P: D'deki her karakter için P'de verilen boşluk miktarının önüne ön ek ekleyin.
  • ⎕SM∘←1,⍨1,⍨: Ekranda, üst satırın en sol sütununda görüntülenir
  • 0∨.≠P:∇P: P'de sıfır olmayan bir öğe varsa, P ile tekrarlayın.

0

PowerShell , 129 bayt

for($x=' '*52+(($args|% t*y)-join' '*4);$x-match'  '){write-host "`r$(-join($x=$x-replace'(?<!  .*)  ')[0..50])  "-n
sleep -m 99}

Çevrimiçi deneyin!

Bu komut dosyası, Joey komut dosyasının aksine argümanlardaki boşlukları kaldırmaz .

TIOçıkışı düzgün görüntülemiyor. Powershell konsolu ile kaydırma markasını elde edersiniz.


0

05AB1E , 42 bayt

ð¶:S3úJ46ú[D50£¶ð:D?IQ#ðõ.;“…¢('\r')“.eт.W

Çevrimiçi deneyin (uyku olmadan). NOT: Yerel olarak 05AB1E yüklü değil, bu yüzden \rhile çalışıp çalışmadığını % 100 emin değilim (teorik olarak, ancak çalışması gerekir). TIO yılında \ryerine satırbaşıyla olarak yorumlamak vardır. Ayrıca, TIO eski sürümü kullanır, çünkü .eyeni TIO sürümünde devre dışıdır (program 05AB1E'nin hem eski hem de yeni sürümünde aynıdır).

Açıklama:

ð¶:            # Replace all spaces in the (implicit) input-string with newlines
   S           # Split the string to a list of characters
    3ú         # Pad each character with 3 leading spaces
      J        # Join the characters together again
       46ú     # And pad the entire string with an additional 46 leading spaces
[              # Now start an infinite loop:
 D             #  Duplicate the string
  50£          #  And leave only the first 50 characters of this copy as substring
     ¶ð:       #  Replace the newlines back to spaces
        D?     #  Duplicate the string, and print it without trailing newline
 IQ            #  If the current string is equal to the input:
   #           #   Stop the infinite loop
 ðõ.;          #  Replace the first space with an empty string to remove it
 “…¢('\r')“    #  Push dictionary string "print('\r')"
           .e  #  Evaluate it as Python code
 т.W           #  Sleep for 100 ms

Neden “…¢('\r')“olduğunu anlamak için bu 05AB1E bahşişime bakın ( sözlük nasıl kullanılır? )"print('\r')" .


0

Python, 139 bayt

import os;P='\n'
def f(x,w):
 v=k=P*w+P.join(x);o=str.replace
 while v!=x:os.system('sleep 1;clear');k=o(k,P,'',1);v=o(k,P,' ');print v[:w]

f('Hello World', 50)Başlamak için aramak zorunda.

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.