স্ক্রোলিং মার্কি


13

অবফেসেড হ্যালো ওয়ার্ল্ডে আমার প্রবেশের পরে আমি ভেবেছিলাম অন্তর্নিহিত কোডটি ভাগ করে নেওয়া মজাদার হতে পারে। তবে কেন কেবল কোডটি দেখায়, এটিকে একটি গল্ফও বানাতে দেয়!

চ্যালেঞ্জ

একটি স্ক্রিপ্ট লিখুন যা ডান থেকে বাম দিকে বাম পাশে স্থির করে টার্মিনাল জুড়ে একটি স্ট্রিং স্ক্রল করে।

ইনপুট

যুক্তি হিসাবে একটি স্ট্রিং লাগে।

ফলাফল

স্ক্রোলিং মার্কিটি STDOUT এ মুদ্রণ করে। 50 ডলার অক্ষরের সর্বোচ্চ প্রস্থ। 0 বা 1 চর প্রদর্শন করে শুরু হয়। স্ক্রোল করার সময় অক্ষরের মাঝে কিছু স্থান। স্থির হয়ে গেলে থামায় (শব্দের বর্ণের মধ্যে কোনও অতিরিক্ত স্থান নেই)। ধীরে ধীরে স্ক্রোল, কিন্তু খুব ধীর নয় (<পিছু পুনরাবৃত্তিতে)।

উদাহরণ

আরগ দিয়ে স্ক্রিপ্ট চলছে '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

চলমান উদাহরণের জন্য, "হ্যালো ওয়ার্ল্ড" চ্যালেঞ্জ থেকে আমার কোডটি চেষ্টা করুন। শেষ পর্যন্ত আমি আমার পোস্ট করব। এটি বর্তমানে পার্লের 202 টি চর। এখন যেহেতু কিছু প্রতিযোগী রয়েছেন, আমি আমার উত্তর পোস্ট করেছি।

বিজয়ী

আমি চাই না বিধিনিষেধগুলি নিখুঁত হোক, এ কারণেই আমি তাদের কিছুটা অস্পষ্ট রেখেছি। সংক্ষিপ্ততম স্ক্রিপ্ট যা আমার আসল মনোভাব অনুসরণ করে তা জিতবে।

মন্তব্য

এই গেমটি xtermপরিবেশ অনুমান করে। যদি অন্য পরিবেশটি কার্যকর প্রমাণিত হয় তবে কেবল একই পরিবেশের সাথে তুলনা করা হবে এবং প্রত্যেকটির জন্য পৃথক বিজয়ী ঘোষণা করা যেতে পারে।

সংযোজন (এপ্রিল 25, 2012)

কিছু উদীয়মান সমস্যা সমাধানের জন্য, আমি একটি রায় দিচ্ছি। আপনার অক্ষর গণনায় অবশ্যই প্রয়োজনীয় কোড অন্তর্ভুক্ত থাকতে হবে:

  1. ফ্লাশ স্টটআউট (আপনার দিকে রুবির দিকে তাকিয়ে)
  2. বাস্তবায়ন sleep<1s সময় বিলম্ব (আপনি পার্ল এ খুঁজছি)

কমান্ড লাইন কোনও দোভাষীকে পরিবর্তন করতে পারে এমন হিসাবে এটি করা যেতে পারে তবে সেই অক্ষরগুলি মোট (গণ্যমানের সাদা অংশের মধ্যে) গণনা করে।


আমি একটু জিনিস এই ধরনের ... এর জন্য টার্মিনাল আচরণে সম্পর্কে উদ্বিগ্ন xterm, vt102, ...?
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

আমি এক্সটার্ম ধরে নিচ্ছি, তবে আমার মনে হয় না এটি খুব বেশি গুরুত্বপূর্ণ। আমি সম্ভবত আপনার উদ্বেগ বুঝতে পারি না?
জোয়েল বার্গার

এই কৌশলগুলি সাধারণত বিভিন্ন টার্মিনালগুলি মুদ্রণবিহীন কিছু অক্ষরগুলির পরিচালনা করার উপর নির্ভর করে উত্পাদিত হয় এবং টার্মিনালগুলি তারা কী করতে পারে এবং কোন সিকোয়েন্সগুলি প্রভাব তৈরি করে তার মধ্যে পার্থক্য করে। প্রজননযোগ্যতার জন্য নির্দিষ্ট টার্মিনাল পরিবেশটি রাখা ভাল।
ডিএমকেকে --- প্রাক্তন মডারেটর বিড়ালছানা

1
এটি ঠিক আপনার পরিবেশন করবে যে কেউ সত্যিই একটি সংক্ষিপ্ত উত্তর পোস্ট করে যা কোনও অস্পষ্ট টার্মিনালের উপর নির্ভর করে যে আপনার জন্য এমুলেটর নেই তবে ঠিক আছে।
ডিএমকেই --- প্রাক্তন মডারেটর বিড়ালছানা

ঠিক আছে আমার মনে হয় এখন আমার কাছে আছে। চিন্তাভাবনার জন্য ধন্যবাদ :-)
জোয়েল বার্গার

উত্তর:


5

অজগর 2 - 146 অক্ষর

সম্পাদনা: স্ট্ডিনের মাধ্যমে ইনপুট পরিবর্তে এটি একটি ফাংশন তৈরি করেছে। প্রথম আর্গুমেন্টটি স্ট্রিং এবং দ্বিতীয় যুক্তিটি হ'ল দৈর্ঘ্যটি আপনি এটি করতে চান। অনুরোধ করা হবে 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)

ব্যাশ ব্যবহার করে (কমপক্ষে ম্যাকোসএক্স এবং সেন্টোস-এর একটি সাম্প্রতিক ইনস্টলেশনতে), টার্মিনাল স্ক্রিনটি সাফ করার জন্য ব্যবহৃত শেল কমান্ডটি 'ক্লিয়ার' নয় 'ক্লস' হওয়া উচিত।
পাওলো

উইন্ডোজের জন্য 'ক্লস', ওএসএক্স / লিনাক্স বিল্ডগুলির জন্য 'ক্লিয়ার', আমার ধারণা
ব্লেজার

প্রতিদিনের ভিত্তিতে অজগর নিয়ে যারা আচরণ করে না তাদের জন্য প্রোগ্রামটি কীভাবে শুরু করা যায়, পরামর্শটি সহায়ক হবে। অজগর শুরু করুন। পেস্ট কোড, কল f("Hello World, 40)আমার জন্য কাজ করেছে।
ব্যবহারকারী অজানা

@ ইউজার আমি উম। আমি সেখানে প্রার্থনা করেছি?
ব্লেজার

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}

চিত্তাকর্ষক আকার। যদিও এটি খুব মসৃণ নয়, তা কি আমি (আমি এই মুহুর্তে একটি কম লো-পাওয়ার মেশিনে আছি) বা কোডটি কীভাবে কাজ করে?
জোয়েল বার্গার

এটিকে বুঝেছি, আমাকে সেট করতে হয়েছিল STDOUT.sync=true;যাতে এটি অটোফ্লাস হয়। পার্ল সমতুল্য $|++। অতিরিক্ত 17 টি অক্ষর রয়েছে, তবে এখনও আমার নীচে রয়েছে। আচ্ছা আমি রুবিকে পার্লকে মারতে পারি না! কাজ করতে যাচ্ছে হাফতা। সুন্দর.
জোয়েল বার্গার

আমি যদি ফোন ruby1.8 "Hello World"করি তবে আমি অবাক হয়েছি না, আমার ত্রুটিটি বলার মতো:ruby1.8: No such file or directory -- Hello World (LoadError)
ব্যবহারকারী অজানা

@ ব্যবহারকারীকে অজানা হতে পারে আপনার সেখানে সোর্স ফাইলে যাওয়ার পথটিও রাখা উচিত: ruby foo.rb args;-)
প্যাট্রিক অসিটি

@ প্যাডে: হ্যাঁ, আমার উচিত। দুর্ভাগ্যক্রমে হাওয়ার্ড আমাকে তার পরিবর্তন সম্পর্কে আমাকে না জানিয়ে তার পোস্ট সম্পাদনা করেছে। আমার প্রশ্নটি বুঝতে ইতিহাস দেখুন at
ব্যবহারকারী অজানা

3

সি, 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

কে ও আর সি - 431 416 টি অক্ষর

একটি উচ্চ ডিগ্রীতে মানকে সম্মান করে। 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);)
উগোরেন

@ ইউগোরেন: হ্যাঁ, এবং আমি ' 'সংখ্যার সমতুল্য সঙ্গে এরগুলি প্রতিস্থাপন করতে ভুলে গিয়েছিলাম ।
ডিএমকেই --- প্রাক্তন মডারেটর বিড়ালছানা

আরো কয়েকটি ঠাট: প্রতিস্থাপন 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

@ কেভিন রেডের উত্তর থেকে প্রচুর চুরি করা , বিশেষত /rনতুন পার্লসে উপলব্ধ কৌশলটি।

পার্ল, 115

@ জোয়েল বার্গারের জবাবের মতো, আমি যদি ব্যবহার করতে 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}

হ্যাঁ, আমি নিজের উপর নিজের নিয়মটি দিয়েছি! আমি বুঝতে পারি নি যে অন্যান্য ল্যাংগুলিতে একটি নিদ্রা নির্মিত হবে Oh ওহ ভাল।
জোয়েল বার্গার

কিছু পরামর্শ, আপনি প্রতিটিের পরে স্থান সরিয়ে ফেলতে পারেন xএবং এর ব্লক ফর্মটি mapকয়েকটি সংরক্ষণ করবে।
জোয়েল বার্গার

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

এখানে একটি জেএসফিডাল ডেমো

দ্রষ্টব্য: আপনি যদি এটি পুনরুত্পাদন করার চেষ্টা করেন তবে কোডটি শরীরের নীচে রয়েছে তা নিশ্চিত করুন


আমি ডেমো থেকে বলতে পারি না, এটি কি বাম দিকে "স্ট্যাক আপ" করে, বা কেবল এটি বামে তৈরি করে এবং তারপরে চূড়ান্ত স্ট্রিংটি দেখায়? আপনি যদি অনিশ্চিত হন তবে হাওয়ার্ড অবশ্যই কাজ করবে।
জোয়েল বার্গার

@ জোয়েলবার্গার হ্যালো দুনিয়ার প্রতিটি বর্ণের মধ্যে 4 টি ফাঁকা স্থান রয়েছে, যখন এইচ প্রথম অক্ষর হয়, এই স্পেসগুলি সরিয়ে ফেলা হয়। এই ডেমোটি ধীরে ধীরে jsfiddle.net/fYvg7/1
ajax333221

এটি কাছে, তবে আপনার প্রতিটি স্থান পৃথকভাবে অপসারণ করা উচিত।
জোয়েল বার্গার

@ জোয়েলবার্গার ফিক্সড
ajax333221

ঠিক আছে আমি নাগকে ঘৃণা করি তবে অন্য একটি সমস্যা: ডানদিকে একের পর এক প্রবেশ করার পরিবর্তে আপনার সমস্ত অক্ষর দেখানো শুরু হয়।
জোয়েল বার্গার

1

পার্ল 5.13.2, 115 টি অক্ষর

$_=$"x9 .pop=~y/ /\0/r;s/./    $&/g;print(y/\0/ /r=~/(.{50})/,"\r"),select$.,$.,$.,.02while$|=s/ (\S)/$1 /g;print$/
  • সতর্কতা-পরিষ্কার।
  • অক্ষর বা প্রাথমিক সাদা স্থানের মধ্যে স্থান হ্রাস করে কিছুটা পিষে নেওয়া যায়।
  • পার্ল 5.13.2 বা আরও নতুন ব্যবহারের কারণে প্রয়োজন /r
  • স্থানগুলি সংরক্ষণের জন্য NUL- র প্রতিস্থাপনটি স্পষ্ট নয় যেহেতু POSIX আরগভি NUL- পরিষ্কার নয়। যাইহোক, লুপ বিকল্পটি অন্য কোনও সাদা স্থানকে কিছুই (শেষ পর্যন্ত) তে পরিণত করবে না।

ক্রেডিট:


আমি rপতাকাটি পছন্দ করি, যেহেতু ভাষাতে সর্বোত্তম সংযোজনstate
জোয়েল বার্গার

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"

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

আর, 319 টি অক্ষর

@ ব্লাজার উদাহরণের দর্শন অনুসরণ করে (ডি সেকেন্ডে বিলম্ব হয়):

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 এবং এটি একটি টুইটের সাথে খাপ
খায়

4 অক্ষর এখানে ডান: s/' '/$"/gএবংs/shift/pop/
ephemient

হ্যাঁ, আমি pushবিবৃতি অপসারণের সাথে সেগুলি অন্তর্ভুক্ত করেছিলাম । আমি এখনও এটি পোস্ট করেননি।
জোয়েল বার্গার

0

প্রশ্নঃ, 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

দুর্ভাগ্যক্রমে একটি গুরুত্বপূর্ণ পয়েন্ট। আমি জানি যে পার্ল স্ক্রিপ্টগুলি এগুলি ছাড়াই খুব ছোট হতে পারে।
জোয়েল বার্গার

0

পাওয়ারশেল, 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

জে (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 টি শ্বেতস্পেসের সূচনা পরিমাণ যোগ করা হয় added (একটি অ্যারে দেয়, '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: ম্যাট্রিক্সের প্রতিটি সারিতে নিম্নলিখিত ফাংশন চালান run
  • ;@:(([,~#&' '@])@.>): স্ট্রিংয়ের প্রতিটি অক্ষরের আগে প্রদত্ত পরিমাণের স্পেস যুক্ত করুন
  • (50&{.): স্ট্রিংয়ের প্রথম 50 টি অক্ষর নিন
  • ([[i.@]&2e7): একটি ফাংশন যা 0 থেকে 2 * 10 ^ 7 পর্যন্ত তালিকা তৈরি করে এবং তারপরে ফেলে দেয়। এটি আমার মেশিনে সেকেন্ডের প্রায় এক তৃতীয়াংশ সময় নেয়, এর ফলে বিলম্ব হয় causes
  • ((50#LF)&,): স্ক্রিনটি সাফ করতে স্ট্রিংয়ের আগে 50 টি নতুন লাইন যুক্ত করুন
  • echo: আউটপুট স্ট্রিং
  • s (...): ফাংশনে বাম যুক্তি হিসাবে স্ট্রিং দিন

0

এপিএল (70)

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

কীবোর্ড থেকে ইনপুট নেয়, আউটপুটটি ⎕SMউইন্ডোতে থাকে (এটি যদি টার্মিনাল হতে পারে তবে আমার মনে হয় একটি টেক্সট-ভিত্তিক এপিএল ছিল)। উইন্ডোটির আকারটি স্বয়ংক্রিয়ভাবে সনাক্ত হয়ে যায়, আপনি যদি সত্যিই এটির চেয়ে 50 পরিবর্তন করতে 1↓⎕SDচান 50

ব্যাখ্যা:

  • 1↓⎕SD,1↓3⍴⍨⍴D←⍞: স্ট্রিং পড়ুন এবং এতে স্টোর করুন D। প্রতিটি চরিত্রের আগে কতটি সাদা স্পেস যুক্ত করতে হবে তা বর্ণনা করে একটি ভেক্টর তৈরি করুন, এটি প্রথম অক্ষর ( 1↓⎕SD) এর আগে পর্দার প্রস্থ এবং (অন্যান্য 1↓3⍴⍨⍴D) এর আগে 3) 3

  • ⎕DL÷8: এক সেকেন্ডের 1/8 তম অপেক্ষা করুন

  • P←⍵-{⍵×~×⍺}\×⍵: ডান আর্গুমেন্টে ভেক্টরে, বাম দিকের ননজারো আইটেমটি থেকে 1 টি বিয়োগ করুন এবং নতুন ভেক্টরটিকে P তে সঞ্চয় করুন
  • ,/D{⍺,⍨⍵⍴⍕⍬}¨P: ডি-র প্রতিটি চরিত্রের জন্য, পি-তে দেওয়া সাদা জায়গার পরিমাণটির উপসর্গ করুন
  • ⎕SM∘←1,⍨1,⍨: উপরের সারির বামতম কলামে স্ক্রিনে প্রদর্শন করুন
  • 0∨.≠P:∇P: পি তে যদি কোনও ননজারো উপাদান থাকে তবে পি দিয়ে পুনরাবৃত্তি করুন

0

পাওয়ারশেল , 129 বাইট

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

এটি অনলাইন চেষ্টা করুন!

এই স্ক্রিপ্টটি জোয়ের স্ক্রিপ্টের বিপরীতে যুক্তিগুলি থেকে ফাঁকা স্থান সরিয়ে দেয় না ।

TIOআউটপুটটি সঠিকভাবে প্রদর্শন করে না। পাওয়ারশেল কনসোলের সাহায্যে আপনি স্ক্রোলিং মার্কেইন পাবেন।


0

05 এ বি 1 ই , 42 বাইট

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

অনলাইনে চেষ্টা করুন (ঘুম ছাড়া)। দ্রষ্টব্য: আমার স্থানীয়ভাবে 05AB1E ইনস্টল করা নেই, সুতরাং \rট্রিকটি কাজ করে কিনা আমি 100% নিশ্চিত নই (তাত্ত্বিকভাবে এটি কাজ করা উচিত)। Tio সালে \rপরিবর্তে নতুন লাইন হিসাবে ব্যাখ্যা আছে। এছাড়াও, টিআইও লেগ্যাসি সংস্করণটি ব্যবহার করে, কারণ .eনতুন টিআইও সংস্করণে অক্ষম করা হয়েছে (যদিও প্রোগ্রামটি পূর্ববর্তী এবং 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.