জেকব এর এএসসিআইআই মই অ্যানিমেট করুন


23

শিশুদের বিজ্ঞান যাদুঘরে আপনি জ্যাকব এর মই দেখেছেন । আপনি যদি তাদের দেখতে কেমন তা জানেন না তবে উইকিমিডিয়া কমন্সে বেশ কয়েকটি চিত্র এবং ভিডিও উদাহরণ রয়েছে । বৈদ্যুতিন গ্যাজেটের একটি অ্যানিমেটেড ASCII সংস্করণ তৈরি করা আজ চ্যালেঞ্জ। শেষ পর্যন্ত, এটি এর মতো কিছু দেখতে হবে:

LadderGIFExample


মই নির্মাণ

এখানে 6 মাপের উচ্চতা ( এইচ ) সহ একটি মইয়ের মূল আকারটি রয়েছে :

6   \            /
5    \          /
4     \        /
3      \      /
2       \    /
1        \  /
0         ¯¯

বাম দিকে সংখ্যাগুলি কেবল এই উদাহরণের জন্য সারি সংখ্যা নির্দেশ করে এবং আউটপুটে অন্তর্ভুক্ত করা উচিত নয়। আমরা এর সংখ্যার ( আর ) দ্বারা প্রদত্ত সারিতে উল্লেখ করব । সারি 0 নীচে ¯¯। প্রতিটি সারির 1 থেকে এইচ পর্যন্ত চারটি অংশ রয়েছে:

  • একটি স্পেস (ইউ + 0020) বারবার ( এইচ - আর ) বার হয়েছে
  • একটি পিছনে স্ল্যাশ \(U + 005C)
  • একটি স্পেস (ইউ + 0020) বারবার (2 * আর ) বার হয়েছে
  • একটি ফরোয়ার্ড স্ল্যাশ /(U + 002F)

উভয় স্ল্যাশ ম্যাক্রোন ¯(ইউ + 00 এফ) দ্বারা প্রতিস্থাপন ব্যতীত 0 সারিটি অভিন্ন । প্রতিটি লাইনের শেষে বা মইয়ের নীচে শ্বেত স্পেস অনুসরণ করা ঠিক আছে। শীর্ষস্থানীয় সাদা স্থান নয়।


আর্ক নির্মাণ

মইটি তৈরি হয়ে গেলে, আপনি বাম এবং ডানদিকের মধ্যে অর্ক তৈরি করতে পারেন। একটি তোরণ পুরোপুরি এক সারির মধ্যে থাকে এবং শীর্ষস্থান \এবং পিছনের মধ্যবর্তী স্থানগুলি প্রতিস্থাপন করে /। অতএব, সারি 2 এর চকে 4 টি অক্ষর থাকবে, সারি 3 এর 6 টি থাকবে 6 এবং আরও প্রতিটি চাপটি নীচের বিধিগুলি ব্যবহার করে রচনা করা হয়:

  • কেবলমাত্র অনুমোদিত অক্ষরগুলি _/¯\(U + 005F, U + 002F, U + 00AF, U + 005C)
  • একটি মসৃণ চেহারা নিশ্চিত করার জন্য, যে কোনও ¯বা /একটি অনুসরণ করতে হবে ¯or\
  • একটি মসৃণ চেহারা নিশ্চিত করার জন্য, যে কোনও _বা \একটি অনুসরণ করতে হবে _or/
  • উপরে দুটি নিয়ম মইয়ের প্রান্তগুলিতেও প্রযোজ্য
  • কার্যকরভাবে উপরে তিনটি নিয়ম মানে চাপ প্রথম অক্ষরের হতে হবে _বা /শেষ অক্ষরের হওয়া আবশ্যক _অথবা \( \¯\_//উভয় প্রান্ত অবৈধ কিন্তু \_/¯\/ঠিক আছে)
  • প্রদত্ত বিন্দুতে প্রতিটি মঞ্জুরিপ্রাপ্ত চরিত্রের জন্য একটি শূন্যের সুযোগ থাকতে হবে
  • প্রতিটি চাপ অন্য প্রতিটি চাপ থেকে পৃথক

অ্যানিমেশন

একক আর্কের জীবনটি তৈরি করা হয় এটি সারি 1 এ শুরু করে এবং এটি শীর্ষে না পৌঁছানো পর্যন্ত একবারে এক সারি উপরে "সরিয়ে" রেখে is IE, প্রথমে সারি 1 এ একটি চাপ তৈরি করুন, তারপরে এটিকে আবার স্পেসে সেট করুন এবং সারি 2 এ একটি চাপ তৈরি করুন, এবং আরও অনেক কিছু। ( এন ) প্রদর্শনের জন্য বেশ কয়েকটি আর্ক দেওয়া হয়েছে, নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করে একবারে সেই অনেক আরকের একের পুরো জীবনটি দেখান:

  • যে কোনও সময়ে কেবল একটি জীবন্ত "জীবিত" হওয়া উচিত। পরবর্তী চাপটি বর্তমানের শীর্ষে না পৌঁছানো এবং তারপরে নির্বাচিত হওয়া অবধি শুরু করা যায় না।
  • তোরণ জীবনের প্রতিটি সারি ঠিক এক ফ্রেমের জন্য দেখানো উচিত shown
  • নতুন আরক শুরুর আগে একটি বেসিক সিঁড়ি (কোনও চাপ না দিয়ে) থাকা উচিত (প্রথম চাপের আগে alচ্ছিক)
  • অ্যানিমেশনটিতে এন আর্কের পুরো জীবন দেখাতে হবে । যদি এন = 0 হয় তবে এটি বন্ধ না হওয়া অবধি চিরতরে এলোমেলো করে দেওয়া উচিত।
  • যদি এন > 0 হয়, আপনি এখনও অ্যানিমেশনটি চিরতরে লুপ করতে পারেন তবে এটি অবশ্যই একই বার্তাগুলির লুপ হতে হবে over (এই পোস্টের শীর্ষে জিআইএফ উদাহরণটিতে এইচ = 6 এবং এন = 3 রয়েছে তবে এটি চিরকালের জন্য লুপ হয়))
  • অ্যানিমেশনটি জায়গায় জায়গায় হওয়া উচিত। এটি হ'ল, প্রতিটি ফ্রেমের সম্পূর্ণরূপে পরবর্তী ফ্রেমটি ওভাররাইট করা উচিত এবং একই স্থানে থাকা উচিত।
  • প্রতিটি ফ্রেমের দৈর্ঘ্য আপনি যা চান তা হতে পারে তবে এটি কোনও মানুষের দ্বারা এটিকে দেখার জন্য উপযুক্ত করে তোলে (IE, আপনার সাধারণ জ্ঞানটি ব্যবহার করুন: 0.01s / ফ্রেম এবং 30s / ফ্রেম উভয়ই অগ্রহণযোগ্য))

ইনপুট আউটপুট

  • ইনপুট এবং আউটপুট যে কোনও মানক বিন্যাসে থাকতে পারে
  • আপনি একটি জিআইএফ রফতানি করতে পারবেন, স্ক্রিনে পাঠ্য লিখতে পারবেন, প্রতিটি ফ্রেমের জন্য একক ফাইল আউটপুট, বা অন্য কোনও যুক্তিসঙ্গত উপায়ে করতে পারেন
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • মই এইচ উচ্চতা ধনাত্মক পূর্ণসংখ্যা হবে
  • এন দেখানোর জন্য আর্কসের সংখ্যাটি একটি অ-নেতিবাচক পূর্ণসংখ্যা হবে
  • আপনার পছন্দ অনুযায়ী যে কোনও আদেশে H এবং N উভয়ই ইনপুট হিসাবে নেওয়া হয় (দয়া করে আপনার উত্তরে ক্রমটি অন্তর্ভুক্ত করুন)

জয়ের শর্ত

এটি তাই সংক্ষিপ্ততম কোডটি জয়ী।

স্যান্ডবক্স


1
অর্কটি কি তার কেন্দ্রের দ্বারা প্রতিসম তৈরি হতে পারে? আমি নিয়মে
এটিতে

আমি কি কনসোলে একে অপরের পরে প্রতিটি ফ্রেম মুদ্রণ করতে পারি?
টিফিল্ড

@ ডেডপোসাম আমি ভাবছিলাম যে আপনি খুব বজ্র-y দেখতে পাবেন না তা সত্ত্বেও আপনি সঠিক ছিলেন তবে দুটি নিয়মের সংমিশ্রণে এটি প্রকৃতপক্ষে অনুমোদিত নয়: the first character in the arc must be _ or / and the last character must be _ or \ এবং There must be a non-zero chance for each allowable character to occur at a given point। প্রতিসম হওয়ার জন্য, প্রথম এবং শেষ উভয় চরিত্রই _প্রতিটি একক সময় হতে হবে যার অর্থ শূন্যতার সম্ভাবনা রয়েছে /or বা `\` is
ইঞ্জিনিয়ার টোস্ট

@ টিফিল্ড যতক্ষণ না প্রতিটি ফ্রেম স্ক্রিনে একই স্থানে প্রদর্শিত হবে, হ্যাঁ। এর অর্থ আপনাকে প্রতিবার কনসোলটি সাফ করতে হবে (বা যদি সম্ভব হয় তবে নীচে স্ক্রোল করুন)।
ইঞ্জিনিয়ার টোস্ট

2
ম্যাক্রন প্রয়োজনীয়তার অর্থ কিউব্যাসিক প্রতিযোগিতা করতে পারে না? এটি ব্যবহার করে CP437 , যা কোড বিন্দু 0xAFহয় »
DLosc

উত্তর:


5

পাইথন 2 , 287 271 270 276 275 বাইট

import time,random
r,n=input()
c=n*-~r or-r
while c:
 c-=1;L=[list(' '*i+'\\'+'  '*(r-i)+'/')for i in range(r)];x=c%-~r;time.sleep(1);y=x+1;exec"L[x][y]=random.choice('\xaf/\_'[L[x][y-1]in'\_'::2][y==2*r-x:]);y+=1;"*2*(r-x)
 for l in['']*99+L+[' '*r+'\xaf'*2]:print''.join(l)

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

টিওতে পর্দা সাফ করে না, তবে কনসোলে কাজ করে।

এর জিআইএফ চলছে:

এখানে চিত্র বর্ণনা লিখুন


কিছুটা স্নিগ্ধ তবে আপনি এর print'\n'*99পরিবর্তে ব্যবহার করতে পারেন os.system('cls')এবং osআমদানিটি হারাতে পারেন । এখনও টিআইওতে কাজ করে না তবে উইন্ডোজ এবং লিনাক্স উভয় কনসোলগুলিতে কাজ করে।
এলপেড্রো

1
নতুন
আরক

5
আমি মনে করি আপনি ম্যাক্রনগুলির পরিবর্তে হাইফেনগুলি (U + 002D) ব্যবহার করছেন (U + 00AF)। আমি মনে করি না এটি ঠিক করার জন্য এটি আপনার বাইট সংখ্যা বাড়িয়ে তুলবে। এছাড়াও, @ ওয়াস্টল হিসাবে উল্লেখ করা হয়েছে, আরকেসের মধ্যে কোনও খালি মই ফ্রেম নেই।
ইঞ্জিনিয়ার টোস্ট

নীচের সারিটিতে ম্যাক্রন ব্যবহার করা হয় তবে আরকগুলি তা করে না
ইঞ্জিনিয়ার টোস্ট

1
@ ইঞ্জিনিয়ারস্টাস্ট এখনই ঠিক করা হয়েছে :)
টিফিল্ড

4

জাভাস্ক্রিপ্ট (ES6), 245 বাইট

f=(o,h,n,i=0)=>(o.innerText=[...Array(h+1)].map((_,j)=>` `.repeat(j)+(j<h?`\\${[...Array(w--*2)].map((_,k)=>h+~j-i?` `:k>w*2|Math.random()<.5?s[s=t,1]:s[s=`¯\\`,0],s=t=`/_`).join``}/`:`¯¯`),w=h).join`
`,(++i<h||--n)&&setTimeout(f,250,o,h,n,i%h))
Height: <input type=number min=1 value=6 id=h><br>Arcs: <input type=number min=0 value=3 id=n><br><input type=button value=Go! onclick=f(o,+h.value,+n.value)><pre id=o></pre>

বাইট গণনাটি আইএসও -8859-1 এনকোডিং ধরেছে।


A=x=>[...Array(x)].map;শুরুতে সংজ্ঞা দিয়ে এবং উভয় ব্যবহারের পরিবর্তে এটি 242 এ কমিয়ে আনা সম্ভব ।
বেরি 12

@ বেরি 12 আপনি ফিরতে পারবেন না map, এটি কেবল একটি সম্পত্তি Array.prototypeএবং এর নিজস্ব কোনও ব্যবহার নেই। আমি সংস্করণগুলি চেষ্টা করার চেষ্টা করেছি তবে সেগুলি 245 বাইটের চেয়ে বেশি সময় ধরে বেরিয়ে এসেছিল।
নীল

3

সি (জিসিসি) , 406 বাইট

#define p(X) printf(X),usleep(999)
#define x(X) do{s[X]=0;p(s);s[X]=' ';}while(0)
char c[2][2]={95,47,92,'¯'};R;i;j;k;a(){char s[2]={92,0};for(j=0;j<2*R-1;++j,p(s))*s=c[*s<50][rand()%2];*s=c[*s<50][0];p(s);}f(H,N){char s[99];for(i=0;i<99;++i)s[i]=' ';p("\e[s");for(i=0;;++i){i%=(N?N:i+1);srand(i^H^N);for(k=1;k<H;++k){for(R=H;--R;){x(H-R+1);p("\\");if(R==k)a();else x(2*R);p("/\n");}x(H);p(" ¯¯\n\e[u");}}}

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

বর্ণনা:

#define p(X) printf(X),usleep(999)              // Define p to printf(p) + delay
#define x(X) do{s[X]=0;p(s);s[X]=' ';}while(0)  // Define x(X) to print X spaces
                                                // This uses a string s full of
                                                // spaces and adds the null
                                                // terminator where approrpiate
char c[2][2]={95,47,92,'¯'};                    // 2d array of 'next arc' options
R;i;j;k;                                        // Variables
a(){                                            // a() -> print arc for row R
    char s[2]={92,0};                           // s is a string of next char
                                                // initialize to backslash
    for(j=0;j<2*R-1;++j                         // loop over each character
            ,p(s))                              // printing s each time
        *s=c[*s<50][rand()%2];                  // set s to the next arc char
    *s=c[*s<50][0];                             // set s to the 'first' arc char
                                                // note that in definition of c
                                                // first means appropriate as
                                                // final character before /
    p(s);}                                      // print the last character
f(H,N){                                         // f(H,N) -> print jacob ladder
    char s[99];for(i=0;i<99;++i)s[i]=' ';       // this is the space string for x
    p("\e[s");                                  // ANSI terminal save position
    for(i=0;;++i){i%=(N?N:i+1);                 // loop i->N (or i->INT_MAX if N=0)
        srand(i^H^N);                           // seed random with i XOR H XOR N
        for(k=1;k<H;++k){                       // for each row (bottom to top)
            for(R=H;--R;){                      // for each row (top to bottom)
                x(H-R+1);p("\\");               // print left "    \"
                if(R==k)                        // if on the arc row
                    a();                        // print the arc
                else x(2*R);                    // otherwise print spaces
                p("/\n");}                      // finish off the row
            x(H);p(" ¯¯\n\e[u");}}}             // print bottom line and move back

দ্রষ্টব্য: কেবলমাত্র এক্সটারমে সত্যই কাজ করে ... অনেক টার্মিনাল এমুলেটর কেবল পজিশ / সংরক্ষণ পুনরায় সমর্থন করে না।
লাম্বদাবেটা

নীচের সারিটি 0 সারি এবং কেবল দুটি ম্যাক্রন রয়েছে। এটা হয় না \--/। এটি সম্ভবত একটি সহজ সমাধান। আপনি কি এক্সটার্মে কাজ করে এর একটি জিআইএফ ক্যাপচার এবং পোস্ট করতে সক্ষম হন?
ইঞ্জিনিয়ার টোস্ট

দুর্ভাগ্যক্রমে আমার কাছে এটি করার সরঞ্জামগুলির অভাব রয়েছে (কেবলমাত্র কাজের সময় নির্ধারিত সময়ে চলমান)। আমি সঠিক সারি 0 দিয়ে আপডেট করব তবে এটি একটি সহজ ফিক্স।
লাম্বদাবেটা

অবৈধ: নতুন
আরক

কে = 1 থেকে কে = 0 স্থির করে যা ... 0 বাইট ব্যয়। শীঘ্রই আপডেট হবে।
লাম্বদাবেতা

2

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

filter c{Param($h,$n)if($n-eq0){$n=-1}for($x=0;$x++-ne$n;){($h..1)|%{$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
$r="Get-Random"
$i=0
$z=-join((0..(($h-$_)*2))|%{$i=switch($i%3){0{&$r 0,1}default{&$r 2,3}}"_/¯\"[$i]})+"_\\_"[$i]
$l[$_-1]=($l[$_-1]).Substring(0,$_)+"$z/"
cls
$l
Sleep -m 250}}}

এটি অনলাইন চেষ্টা করুন! $argsসুন্দর খেলতে পারা যায় নি , সুতরাং লিঙ্কটি কনসোলটি সাফ না করে ফাংশনটিতে কল করে।

Ungolfed

filter c{
    Param($h,$n)
    if($n -eq 0){$n=-1} # inelegant swap to allow for an infinite loop. 
                        # Curse you zero-indexing!
    for($x=0;$x++-ne$n;)
    {
        ($h..1) | % {         
            $l=(($h..1)|%{ # (( double paren is needed to induce each line 
                           # as a new array element
                "$(" "*($h-$_))\$(" "*$_*2)/" # offset by total height. 
                                              # N spaces + rung + N*2 spaces + rung
            })+"$(" "*$h)¯¯" # last line is the floor of the ladder

            $r="Get-Random" # shorter to declare once and execute with & operator

            $i=0 # initialize $i so we choose only _ or / for the first char

            $z=-join( # build an electric ZAP!
                (0..(($h-$_)*2))|%{                    
                    $i = switch($i%3) { # choose next char based on previous selection
                        0{&$r 0,1}
                        default{&$r 2,3}
                    }    
                    "_/¯\"[$i]
                }
            )+"_\\_"[$i] # final char is \ or _ to rejoin the ladder        
            $l[$_-1]=($l[$_-1]).Substring(0,$_)+"$z/" # select one rung of the ladder 
                                                      # append an electric ZAP!                
            cls # clear the console
            $l  # display the ladder
            Sleep -m 250
        }
    }
}

এটি একটি ছোট জিনিস, তবে নীচের সারিটি ম্যাক্রনগুলির পরিবর্তে হাইফেন। এটি একটি শূন্য-বাইট পরিবর্তন$l=(($h..1)|%{"$(" "*($h-$_))\$(" "*$_*2)/"})+"$(" "*$h)¯¯"
ইঞ্জিনিয়ার টোস্ট

1
! \ (° _o) / ops উফ! ম্যাক্রনগুলিতে অদলবদল: পি
পিটার ভ্যান্ডিভিয়ার

1
আমি পাওয়ারশেলটি খুব ভাল জানি না, তবে আপনি বেশিরভাগ নতুন-লাইনগুলি সরাতে পারেন। এছাড়াও for($x=0;$x-ne$n;$x++)হতে পারে for($x=0;$x++-ne$n;)। আমি এটি 324 বাইট (321 অক্ষর) এ পেয়েছিলাম । মধ্যে golfing জন্য টিপস <সমস্ত ভাষা> এবং PowerShell মধ্যে golfing জন্য টিপস পাশাপাশি মাধ্যমে পড়া আকর্ষণীয় হতে পারে।
কেভিন ক্রুইজসেন

1
sleep 1কিছুটা সাশ্রয় করে (এটি ডিফল্ট-সেকেন্ডগুলির চেয়ে বেশি) তবে বেশ ধীর হলেও এখনও যুক্তিসঙ্গত - sleep -m 99বেশ দ্রুত কিন্তু যুক্তিসঙ্গত। আপনি যা পছন্দ করেন তার উপর নির্ভর করে 5/1 বাইট সঞ্চয় করে। কেভিন এর প্রয়াস না করতেন কিন্তু functionকরার filterএকটি বিনামূল্যে বাইট ভাল হয়।
ভেসকাঃ

1

রুবি , 293 বাইট

m={}
"   __/\\_/¯¯\\/¯\\".chars.each_slice(3){|e|u,*v=e;m[u]=v}
a=->l,c{l<1?"/":(d=m[c].sample;c+a[l-1,d])}
n=gets.to_i
h=gets.to_i
o=0
while o<n||n<1
h.times{|i|puts (0...h).map{|j|" "*j+"\\"+a[2*(h-j),i==h-j-1?["_","/"].sample: " "]}*"\n";puts" "*h+"¯¯";sleep(0.3);puts"\n"*99}
o+=1
end

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

আমি উইন্ডোতে রয়েছি তাই এটি কনসোলটি সাফ করতে কেবল "\ n" মুদ্রণ করে। 2 টি আর্গুমেন্ট nএবং hস্টিডিনে দুটি লাইন হিসাবে গ্রহণ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.