스크롤 선택 윤곽


13

받는 내 항목에 따라 난독 안녕하세요 I는 기본 코드를 공유 할 수있는 재미있을 줄 알았는데. 그러나 왜 코드를 보여주고 골프도 만들어 보자!

도전

터미널에서 문자열을 오른쪽에서 왼쪽으로 스크롤하여 왼쪽에 정착하는 스크립트를 작성하십시오.

입력

문자열을 인수로 사용합니다.

결과

스크롤 선택 윤곽을 STDOUT에 인쇄합니다. 최대 너비는 ~ 50 자입니다. 0 또는 1 문자 표시로 시작합니다. 스크롤하는 동안 글자 사이에 약간의 공백이 있습니다. 정착 될 때 중지합니다 (단어 문자 사이에 추가 공백이 없음). 스크롤이 느리지 만 너무 느리지는 않습니다 (<1 초당 반복).

arg를 사용하여 스크립트 실행 'Hello World'

                                                   H

나중

                H    e    l    l    o         W    o

나중

H    e    l    l    o          W    o    r    l    d

나중

Hell    o         W    o    r    l    d

드디어

Hello World

실행중인 예제를 보려면 "Hello World"챌린지에서 내 코드를 사용해보십시오. 결국 나는 나의 것을 게시 할 것이다. 현재 Perl에서 202 자입니다. 이제 경쟁 업체가 있으므로 답변에 내 게시물을 게시했습니다.

우승자

나는 제한이 절대적이기를 원하지 않기 때문에 조금 애매하게 남겨둔 것입니다. 내 원본의 정신을 따르는 가장 짧은 스크립트가 이길 것입니다.

노트

이 게임은 xterm환경을 가정 합니다. 다른 환경이 유용하다고 판명되면 유사한 환경 만 비교하고 각각에 대해 별도의 승자가 선언 될 수 있습니다.

부록 (2012 년 4 월 25 일)

신진 문제를 해결하기 위해 판결을 내 렸습니다. 문자 수에는 다음에 필요한 코드가 포함되어야합니다.

  1. STDOUT 플러시 (루비를 바라본다)
  2. sleep<1s의 시간 지연으로 구현하십시오 (Perl을 봅니다).

이것은 명령 행이 인터프리터로 전환 될 때 수행 될 수 있지만 해당 문자는 총계로 계산됩니다 (공백을 둘러싼 산세).


나는 ... 이런 종류의 일을 위해 터미널 행동에 대해 우려 좀 해요 xterm, vt102...을?
dmckee --- 전 운영자 고양이

나는 xterm을 가정하고 있지만 너무 중요하지 않다고 생각합니다. 아마도 나는 당신의 관심사를 이해하지 못합니까?
Joel Berger

이러한 트릭은 일반적으로 다양한 터미널이 일부 비 인쇄 문자를 처리하는 방식에 의존하여 생성되며 터미널은 수행 할 수있는 작업과 효과를 생성하는 시퀀스가 ​​다릅니다. 재현성을 위해 지정된 터미널 환경을 갖는 것이 좋습니다.
dmckee --- 전 운영자 고양이

1
그것은 당신에게 잘 맞을 것입니다 누군가 가 당신이 에뮬레이터가 없지만 모호한 터미널에 의존 하는 정말 짧은 대답을 올리는 것 입니다.
dmckee --- 전 운영자 고양이

알았어. 지금 가지고있는 것 같아. 생각해 주셔서 감사합니다 :-)
Joel Berger

답변:


5

파이썬 2-146 자

편집 : stdin을 통한 입력 대신 함수로 만들었습니다. 첫 번째 인수는 문자열이고 두 번째 인수는 원하는 길이입니다. 따라서 호출은입니다 f('Hello World', 50). 나는 또한 훨씬 매끄럽게 만들었습니다. 각 문자가 '착륙'했을 때 어색한 일시 중지가 발생했습니다.

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)

오래된 158 자 :

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를 사용하면 (최소한 최신 MacOSX 및 CentOS 설치에서) 터미널 화면을 지우는 데 사용되는 쉘 명령은 'cls'가 아니라 'clear'여야합니다.
Paolo

Windows의 경우 'cls', OSX / Linux 빌드의 경우 'clear'인 것 같습니다
Blazer

파이썬을 매일 다루지 않는 사람들을 위해 프로그램을 시작하는 방법에 대한 조언이 도움이 될 것입니다. 파이썬을 시작하십시오. 붙여 넣기 코드, 전화 f("Hello World, 40)가 나를 위해 일했습니다.
사용자 알 수 없음

@user 나는 음. 거기에 전화를 걸었습니까?
Blazer

4

루비, 93 91 89 자

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

표시 될 텍스트는 명령 행 인수로 제공되어야합니다. 예 :

ruby marquee.rb "Hello World"

위의 예를 위해. 불행히도 여기서 애니메이션을 보여줄 수 없으므로 직접 코드를 시험해보십시오.

이전 버전:

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

인상적인 크기. 그다지 부드럽지는 않습니다. 저는 (지금은 저전력 기계에 있습니다) 또는 코드 작동 방식입니까?
Joel Berger

그것을 알아 STDOUT.sync=true;차리고, 자동 플러시되도록 설정 해야했습니다. Perl equiv는 $|++입니다. 그것은 추가 17 문자이지만 여전히 내 아래에 있습니다. 글쎄, 루비가 펄을 때릴 수는 없어! 일하러 갈거야. 좋은데
Joel Berger

전화를하면 ruby1.8 "Hello World"놀랍지 않게 다음과 같은 오류가 발생합니다.ruby1.8: No such file or directory -- Hello World (LoadError)
사용자 알 수 없음

@userunknown 어쩌면 당신도 거기에서 소스 파일의 경로를 넣어해야합니다 ruby foo.rb args;-)
패트릭 Oscity

@padde : 그렇습니다. 불행히도 Howard는 자신의 변경 사항에 대해 알리지 않고 게시물을 편집했습니다. 내 질문을 이해하기 위해 역사를 살펴보십시오.
사용자가 알 수 없음

3

C, 94 83 80 173 자

편집 : 많은 코드를 추가하고 지금 요청 된 모든 기능을 구현합니다. 상수 1e8를 조정하여 속도를 제어 할 수 있습니다. 내 컴퓨터에서는 속도가 매우 빠릅니다.
일부 문자는 반드시 여기에 저장할 수 있습니다. l정적 일 수 있고 (초기화 저장) c포인터가 될 수 있습니다 (교체 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););
}

일부 기능이 이전 버전 (80 문자)는 :
대체하여 문자의 몇 저장된 char**t으로 int*t. 32 비트에서 제대로 작동합니다 ( int**t64 비트를 지원함).

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- 431416

표준을 높은 수준으로 존중합니다. ncurses를 사용하므로 대부분 터미널 독립적이어야합니다. 문자열에서 의도 된 공백을 유지하기 위해 약간의 속임수로 인해 텍스트가 측면을 칠 때 약간의 말더듬이 있습니다.

사용할 문자열은 명령 줄의 첫 번째 인수로 전달되어야합니다 (공백이 있으면 더 이스케이프해야합니다. !내 테스트 문자열 ( Hello, World!)처럼).

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

보다 읽기 쉽고 주석이 달린 형식으로 :

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

특히 if연산자 로 교체 하면 단축 가능성이 많이 있습니다 . 예를 들어-- if((s-q)%2)s--;else usleep(1e5);> s-q&1?s--:usleep(1e5);(또는 s-=s-q&1||usleep(1e5);)
ugoren

@ugoren : 예, ' 's를 숫자 로 바꾸는 것을 잊었습니다 .
dmckee ---

몇 가지 더 트릭 : 교체 x==32와 함께 x-32, 또는과 (있는 경우 - 다른 사람 때문에 역, 의미 반전) x<33(0..31가 사용되지 않는 가정). 가지고있는 값으로 초기화하십시오 ( for(curs_set(c=0);...). *(s+1)-> s[1]. (교체 불필요한 괄호 제거 ;,의지 도움말을).
ugoren

2

펄 5.13.2, 96

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

@ Kevin Reid 에서 많이 훔치기 의 답변, 특히 /r최신 Perls에서 사용할 수 있는 트릭을 칩니다.

펄, 115

@ Joel Berger 의 답변 과 마찬가지로 사용 sleep 1하고 느리게 사용할 수 있거나 -MTime::HiRes=sleep명령 줄을 사용하여 활성화 하면 훨씬 짧아집니다 sleep.1. 그렇지 않으면 짧은 수면을 얻는 유일한 내장 방법 select'','','',.1은 꽤 길다.

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

펄, 128

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

펄, 133

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

그래, 나는 그것에 대한 내 자신의 규칙으로 자신을 물었다! 나는 다른 언어들에 usleep이 내장되어 있다는 것을 몰랐다.
Joel Berger

몇 가지 제안, 당신은 각각 후에 공백을 제거 할 수 x있으며 블록 형태 map는 몇 가지를 저장합니다.
Joel Berger

1

자바 스크립트 180 218 자

생산 버전 :

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()

언 골프 버전 :

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();​

다음은 jsFiddle 데모입니다

참고 : 그것을 재현하려고하면 코드가 본문 아래에 있는지 확인하십시오


데모에서 알 수 없거나 왼쪽에 "쌓아 올리거나"왼쪽으로 가져간 다음 마지막 문자열을 표시합니까? 당신이 확실하지 않은 경우 하워드는 확실히 작동합니다.
Joel Berger

@JoelBerger hello world에는 각 문자 사이에 4 개의 공백이 있으며 h가 첫 번째 문자 인 경우 공백이 제거됩니다. 이 데모는 더 느리다 jsfiddle.net/fYvg7/1
ajax333221

가까이 있지만 각 공간을 개별적으로 제거해야합니다.
Joel Berger

@JoelBerger 수정 됨
ajax333221

글쎄, 나는 잔소리가 싫어하지만 다른 문제가 하나 있습니다. 오른쪽에 하나씩 입력하는 대신 모든 글자가 표시됩니다.
Joel Berger

1

Perl 5.13.2, 115 자

$_=$"x9 .pop=~y/ /\0/r;s/./    $&/g;print(y/\0/ /r=~/(.{50})/,"\r"),select$.,$.,$.,.02while$|=s/ (\S)/$1 /g;print$/
  • 경고 청소.
  • 문자 또는 초기 공백 사이의 간격을 줄임으로써 조금 짜낼 수 있습니다.
  • 을 (를) 사용하려면 Perl 5.13.2 이상이 필요합니다 /r.
  • POSIX argv가 NUL-clean이 아니기 때문에 공백을 보존하기 위해 NUL로 대체하는 것은 분명합니다. 그러나 루프 대체는 다른 공백을 아무것도 아닌 것으로 만듭니다 (결국).

크레딧 :


나는 r플래그 이후 언어에 가장 추가 된 것을 좋아합니다state
Joel Berger

1

배쉬 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"

용법:

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

언 골프 :

#!/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 자

@Blazer 예제의 철학 (d는 초 지연)입니다.

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=""))
}

용법:

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

1

: 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의 수면을 얻으려면 다음과 같이 실행해야합니다.

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

나는 자신을 승자로 선언하지 않기 때문에 거기에서 중요한 것이 무엇인지에 대해 논쟁하지 않을 것입니다 (그러나 루비가 이것을 이길 수는 없습니다 ;-))


4 개 더보기
Tweet

4 자 바로 여기에 : s/' '/$"/gs/shift/pop/
ephemient

그래, 나는 그 push진술 을 제거하고 함께 포함시켰다 . 방금 게시하지 않았습니다.
Joel Berger

0

Q, 145

마지막 줄은 원래 입력 문자열에 있던 모든 공백을 제거하므로 요구 사항을 정확하게 충족하지 않습니다.

{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];}

입력 문자열과 스크롤 속도의 두 가지 인수가 필요합니다.

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

불행히도 그것은 중요한 포인트입니다. 나는 Perl 스크립트가 없으면 아주 작아 질 수 있다는 것을 알고있다.
Joel Berger

0

PowerShell, 135

골프는 아니지만 끔찍한 접근 방식이지만 아프고 실제로는 생각할 수 없습니다 ...

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

명령 행에서 입력 문자열을 가져옵니다. 즉 jconsole marquee.ijs 'Hello, world!'

화면을 지울 필요가 없으면 다음과 같이 출력하십시오.

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

허용되며 12 자 더 짧습니다.

설명:

  • s.=>2{ARGV: 명령 행에서 문자열을 가져옵니다.
  • k.=50,3#~<:#s: 각 문자 앞에 추가 된 공백의 시작 량, 첫 문자 앞에 50, 나머지 문자 앞에 3 (배열, '50 3 3 3 ... ')
  • ([-=&0@/:@\:@~:&0): 배열이 주어지면 배열에서 첫 번째가 아닌 항목을 줄입니다.
  • ^:(i.>:+/k):이 함수는 N 번 적용되었으며, 여기서 N은 추가 된 공백 양의 합계까지 0입니다. (매트릭스 제공 : 50 3 3 3; 49 3 3 3; 48 3 3 3; ... 0 0 0 1; 0 0 0 0).
  • "1: 행렬의 각 행에서 다음 기능을 실행합니다.
  • ;@:(([,~#&' '@])@.>): 문자열의 각 문자 앞에 주어진 양의 공백을 추가하십시오.
  • (50&{.): 문자열의 처음 50자를 가져옵니다.
  • ([[i.@]&2e7): 0에서 2 * 10 ^ 7까지 목록을 생성 한 다음 버리는 함수입니다. 내 컴퓨터에서 약 1/3의 시간이 걸리므로 지연이 발생합니다.
  • ((50#LF)&,): 문자열 앞에 50 줄 바꿈을 추가하여 화면을 지우십시오.
  • echo: 문자열을 출력
  • s (...): 문자열을 함수의 왼쪽 인수로 제공하십시오.

0

APL (70)

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

키보드에서 입력을 ⎕SM받으면 출력이 창에 나타납니다 (텍스트 기반 APL이 있으면 터미널이 될 것입니다). 창 크기가 자동으로 감지되도록하려면 1↓⎕SD을 50으로 변경하십시오 50.

설명:

  • 1↓⎕SD,1↓3⍴⍨⍴D←⍞: 문자열을 읽고에 저장하십시오 D. 각 문자 앞에 추가 할 공백의 양을 나타내는 벡터를 생성하십시오. 첫 문자 앞의 화면 너비 ( 1↓⎕SD)와 다른 문자 앞의 3 ( 1↓3⍴⍨⍴D)입니다.

  • ⎕DL÷8: 1/8 초 기다립니다

  • P←⍵-{⍵×~×⍺}\×⍵: 오른쪽 인수의 벡터에서 0이 아닌 가장 왼쪽에있는 항목에서 1을 빼고 새 벡터를 P에 저장합니다.
  • ,/D{⍺,⍨⍵⍴⍕⍬}¨P: D의 각 문자에 대해 P에 지정된 공백의 양을 접두사로 사용합니다.
  • ⎕SM∘←1,⍨1,⍨: 화면 상단 행의 가장 왼쪽 열에 표시
  • 0∨.≠P:∇P: P에 0이 아닌 요소가 있으면 P로 반복하십시오.

0

PowerShell , 129 바이트

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

온라인으로 사용해보십시오!

이 스크립트는 Joey의 스크립트 와 달리 인수에서 공백을 제거하지 않습니다 .

TIO출력이 올바르게 표시되지 않습니다. Powershell 콘솔을 사용하면 스크롤 윤곽을 얻을 수 있습니다.


0

05AB1E , 42 바이트

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

온라인으로 사용해보십시오 (자지 않고). 참고 : 로컬에 05AB1E가 설치되어 있지 않으므로 \r트릭이 작동 하는지 100 % 확실하지 않습니다 (이론적으로 작동해야 함). TIO에서는 \r대신 줄 바꿈으로 해석됩니다. 또한 TIO는 레거시 버전을 사용합니다 .e. 새로운 TIO 버전에서는 비활성화되어 있기 때문 입니다 (프로그램은 레거시 버전과 05AB1E의 레거시 버전 모두 동일합니다).

설명:

ð¶:            # 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

내이 05AB1E 팁을 참조하십시오 (섹션 어떻게 사전을 사용하는 방법을? ) 이유를 이해하는 “…¢('\r')“것입니다 "print('\r')".


0

파이썬, 139 바이트

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)시작 하려면 전화 해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.