এএসসিআইআই অ্যানিমেটেড তুষার দৃশ্য


22

ASCII আর্টের যে কোনও অংশকে অ্যানিমেটেড তুষার দৃশ্যে পরিণত করার জন্য সবচেয়ে সংক্ষিপ্ত প্রোগ্রামটি লিখুন যা পতিত তুষার থেকে শুরু হয় ( নন-গল্ফড জাভাস্ক্রিপ্ট উদাহরণ সর্বশেষে আপডেট করা হয়েছে ২০১১-১১-১৯ )।

ইনপুট স্পেসিফিকেশন : আপনার প্রোগ্রামটি অবশ্যই স্থান, অ্যাসিরিস্টস এবং নিউলাইনগুলির স্বেচ্ছাসেবী সংমিশ্রণগুলি গ্রহণ করতে হবে। ইনপুটটিতে প্রতি লাইনে সর্বাধিক 23 টি লাইন এবং 80 টি অক্ষর থাকবে। কোনও খালি লাইন থাকবে না, তবুও লাইনগুলিতে কেবল সাদা স্থান থাকতে পারে। একটি একক পেছনের নতুন লাইন অন্তর্ভুক্ত করা হবে এবং অবশ্যই তা উপেক্ষা করা উচিত।

আউটপুট : আপনার অপারেটিং সিস্টেমের পাঠ্য কনসোল বা টার্মিনাল এমুলেটরটির ব্যবহারকারী নিজে নিজে প্রোগ্রাম শেষ না করা পর্যন্ত আউটপুট এএসসিআইআই অক্ষর (স্পেস, অ্যাসিরিটস) এবং নিয়ন্ত্রণ কোড (ক্যারেজ রিটার্ন, লাইনফিডস, এএনএসআই এস্কেপ কোড ইত্যাদি)। যদি আপনার অপারেটিং সিস্টেমটি সেটিংটি মঞ্জুরি দেয় তবে আপনি টার্মিনাল উইন্ডোটি 80x24 অক্ষর হিসাবে ধরে নিতে পারেন।

বিধি :

  • অ্যানিমেশন অবশ্যই মসৃণ এবং দ্রুত হতে হবে (15 fps পছন্দসই)।
  • তুষার ঘনত্ব 5% থেকে 15% এর মধ্যে হতে হবে।
  • তুষারের একাধিক স্ক্রিন আর প্রতি সেকেন্ডে স্ক্রোল করতে পারে না। (এর অর্থ হ'ল কোনও এক দ্বিতীয় সময়কালে নতুন তুষার 24 লাইনের বেশি আর যোগ করা যাবে না))
  • স্ক্রিনের শীর্ষে প্রবেশের সাথে তুষার অবশ্যই কোনও স্পষ্ট নিদর্শন প্রদর্শন করবে না; এটি অবশ্যই এলোমেলো লাগবে।
  • প্রোগ্রামটি শুরু হওয়ার সাথে সাথে যত তাড়াতাড়ি সম্ভব স্ক্রিনের সমস্ত সারি পূরণ করতে হবে; পর্দার স্বতন্ত্র সারিগুলির প্রাথমিক ভরাট অবশ্যই দর্শকের কাছে সুস্পষ্ট হওয়া উচিত নয়।
  • ইনপুট ASCII আর্টের নীচের বাম কোণটি অবশ্যই পর্দার নীচে বাম কোণে থাকতে হবে (আরও স্পষ্টতার জন্য চিত্র 1)।
  • ASCII শিল্পের ভিতরে বা এর অধীনে অঞ্চলটি স্থায়ীভাবে তারকাচিহ্ন দ্বারা ভরাট করা উচিত নয়। তবে, অস্ট্রিস্কগুলি এই অঞ্চলে স্ক্রোল করতে পারে (তবে এটির প্রয়োজন নেই)।
  • ইনপুট প্রদর্শিত না হওয়া ছাড়া স্ক্রিনের নীচে বা বিদ্যমান তুষার শীর্ষে তুষার জমে উঠবে না।
  • উপরের স্থানগুলির আগে নিম্ন স্থানগুলি অবশ্যই পূরণ করা উচিত, কারণ বিপরীত ক্রমে শূন্যস্থান পূরণ করা ক্রিসমাস ট্রি অ্যানিমেশনটিকে আমার আসল কোডের আউটপুট থেকে খুব আলাদা দেখায়। (2011-12-20 যোগ করা হয়েছে)

শুভ ছুটির দিন!

চিত্র 1: একটি 80x24 স্ক্রিনের লেবেলযুক্ত অঞ্চল

---------------------------New snow added on this line--------------------------
                                                                             |
                                                                             |
----------------------------------------------------------+                  |
                                                    ****  |                  |
    Snow MUST fall  Snow MAY fall ---------------->  **** |                  |
    through this    through these          ****      **** |  Snow MUST fall  |
    area.           areas of a              ****     **** |  through this    |
                    completed   \--------->  ****     ****|  area.           |
        ASCII art   scene.    \     ***        ****   ****|                  |
          area         \       \   *******      ****  ****|                  |
                        \       \    ********     ***  ***|  (ALL CAPS terms |
      (located in        \       \-->   *********  ***    |  have standard   |
       lower left         \     *******     ******  MAY   |     RFC 2119     |
       corner of           \    *************  **   fall  |    meanings.)    |
       screen)              \        ***********    here  |                  |
                         *** +--->          ****  ***     |                  |
                         *** | ****************   ***     |                  |
  | Snow MUST fall       *** | ****************   ***     |                  |
  | through this         *** +--->                ***     |                  |
  | area.                *** | ****************   ***     |                  |
--+---------------------+*** +--->                ***+----+------------------+--
  |   Snow MUST NOT     |****************************|      Snow MUST NOT    |
  V  accumulate here.   |****************************|     accumulate here.  V

উদাহরণ ইনপুট

কোড গল্ফ ব্যানার

 ******   *******  ********  ********     ******    *******  **       ******** 
**    ** **     ** **     ** **          **    **  **     ** **       **       
**       **     ** **     ** **          **        **     ** **       **       
**       **     ** **     ** ******      **   **** **     ** **       ******   
**       **     ** **     ** **          **    **  **     ** **       **       
**    ** **     ** **     ** **          **    **  **     ** **       **       
 ******   *******  ********  ********     ******    *******  ******** **       

ওভারফ্লো লোগো স্ট্যাক করুন

                                                    ****
                                                     ****
                                           ****      ****
                                            ****     ****
                                             ****     ****
                                    ***        ****   ****
                                   *******      ****  ****
                                     ********     ***  ***
                                        *********  ***
                                *******     ******
                                *************  **
                                     ***********
                         ***                ****  ***
                         ***   ****************   ***
                         ***   ****************   ***
                         ***                      ***
                         ***   ****************   ***
                         ***                      ***
                         ****************************
                         ****************************

ক্রিসমাস ট্রি

                                        *
                                       ***                           *
                *                     *****                         ***
               ***                   *******           *           *****
              *****                 *********         ***            *
                *                  ***********       *****
                       *          *************     *******
        *             ***        ***************       *               *
       ***           *****      *****************                     ***
      *****         *******    *******************                   *****
     *******           *      *********************                 *******
    *********                           *                          *********
        *                                                              *

1
তৃতীয় ক্রিসমাস গাছটি ভেঙে গেছে।
ববি

দুর্দান্ত চ্যালেঞ্জ! আমি মনে করি সহজ রেফারেন্সের জন্য নিয়মগুলি গণনা করা উচিত, এবং আমি তৃতীয় এবং ষষ্ঠ নিয়মটি বুঝতে পারি না ...
হলভাবো

@ হালভাবো আমি এই দুটি নিয়ম স্পষ্ট করে দিয়েছি, পরে একটি লেবেলযুক্ত চিত্র যুক্ত করে।
স্ট্যান্ড করুন

স্পষ্টকরণের অনুরোধ: নিউ-লাইনটি কি 80-চর সর্বাধিক লাইনের দৈর্ঘ্যের অন্তর্ভুক্ত, অথবা এটি সর্বোচ্চ 80 অক্ষর প্লাস নিউলাইন? (আমি
উত্তরটি

উত্তর:


5

পার্ল, 196/239 অক্ষর

chomp(@p=(@f=($"x80)x24,<>)[-24..-1]);{@s=(join("",map rand>.1?$":"*",1..80),@s);if(@s>23){$t=$f[$_],print$_?$/:"\e[H",($f[$_]|=$s[$_]&$p[$_])|($s[$_]&=~$t^$f[$_])for 0..23;select"","","",.1}redo}

এই সমাধানটি আপনার জেএস উদাহরণ থেকে পৃথক হয়েছে যে নিচেটি নীচের দিকের চেয়ে উপরে থেকে নীচে ভরাট করা হয়েছে, তবে আমি এটি ঠিক আছে বলে ধরে নিয়েছি কারণ আপনি নিয়মে এটি সম্পর্কে কিছু বলেননি।

\eআক্ষরিক ESC চরিত্রের পরিবর্তে একটি তুচ্ছ 1-চর হ্রাস পাওয়া যায় তবে কোডটি পড়া এবং সম্পাদনা করা আরও কঠিন করে তোলে।


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

chomp(@p=(@q=@f=($"x80)x24,<>)[-24..-1]);{@s=(join("",map rand>.1?$":"*",1..80),@s);if(@s>23){my$q;$q[-1-$_]=($q|=$p[-$_]&~$f[-$_])for@a=0..23;print$_?$/:"\e[H",($f[$_]|=$s[$_]&$p[$_]&~$q[$_])|($s[$_]&=~$f[$_])for@a;select"","","",.1}redo}

($s[$_]&=~$f[$_])স্রেফ পরিবর্তে $s[$_]11 টি অক্ষর বাঁচতে পারে পতনশীল তুষারটিকে প্যাটার্নের ভরাট অংশগুলি দিয়ে যেতে দেওয়া (যা উদাহরণটির সাথে মিলছে না, তবে উদাহরণটি বাস্তবায়নের সাথে নয়)।


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

প্রথমত, আমার সমাধানটির উপর ভিত্তি করে একটি বড় কৌশলটি হ'ল ASCII অক্ষর কোডগুলি যেভাবে সাজানো হয়েছে তার কারণে, কোনও জায়গার জন্য ASCII কোডের 1-বিটগুলি কোডের জন্য কোডগুলির মধ্যে একটি উপসেট হতে পারে তারকাচিহ্ন।

সুতরাং, নিম্নলিখিত এক্সপ্রেশন সত্য: " " & "*" eq " "এবং " " | "*" eq "*"। এটি হ'ল পৃথক অক্ষরের উপর লুপ না করে দৃশ্যের স্থির এবং চলমান অংশগুলিকে একত্রিত করার জন্য আমাকে বিটওয়াইজ স্ট্রিং ক্রিয়াকলাপগুলি ব্যবহার করতে দেয়।

সুতরাং, উপায় যে এর বাইরে, এর কোড যেতে হবে। এটির একটি গলিত সংস্করণ এখানে:

chomp(@p = (@f = ($" x 80) x 24, <ARGV>)[-24..-1]);
{
    @s = (join('', map((rand > 0.1 ? $" : '*'), 1..80)), @s);
    if (@s > 23) {
        foreach (0 .. 23) {
            $t = $f[$_];
            print( $_ ? $/ : "\e[H" );
            print( ($f[$_] |= $s[$_] & $p[$_]) | ($s[$_] &= ~$t ^ $f[$_]) );
        }
        select '', '', '', 0.1;
    }
    redo;
}

প্রথম লাইনটি অ্যারেগুলি সেট করে @f("নির্দিষ্ট" জন্য) এবং @p("প্যাটার্নের জন্য")। @fডিসপ্লেটির স্থির অংশটি তৈরি করবে এবং এতে ফাঁকা জায়গা ছাড়া আর কিছুই থাকবে না, যখন @pসরাসরি প্রদর্শিত হবে না, এতে ইনপুট প্যাটার্ন রয়েছে; অ্যানিমেশনটি যতই এগিয়ে যায়, @fঅবশেষে ঠিক দেখতে না পাওয়া পর্যন্ত আমরা আরও বেশি সংখ্যক তারা যুক্ত করব @p

বিশেষত, প্রতিটি 80 টি স্পেসের 24 টি স্ট্রিং @f = ($" x 80) x 23সেট @fকরে। ( $"এটি একটি বিশেষ পার্ল ভেরিয়েবল যাটির ডিফল্ট মানটি কেবল একটি স্থান হিসাবে ঘটে)) আমরা এরপরে এই তালিকাটি পঠন করব <>, পঠন অপারেটরটি ব্যবহার করে এটিতে ইনপুট লাইনগুলি যুক্ত করব , এই সম্মিলিত তালিকার শেষ 24 টি লাইন নিন এবং এটি নির্ধারণ করুন @p: এটি হ'ল @pফাঁকা লাইনগুলির সাথে প্যাড করার একটি কমপ্যাক্ট উপায় যাতে প্যাটার্নটি যেখানে দেখা উচিত সেখানে উপস্থিত হয়। অবশেষে, আমরা chompযে @pকোনও নতুন লাইনগুলি সরাতে ইনপুট লাইনগুলিতে প্রবেশ করি যাতে তারা পরে সমস্যা না ঘটায়।

এখন, আসুন প্রধান লুপটি দেখুন। এটি দেখা যাচ্ছে যে এর {...;redo}চেয়েও বেশি while(1){...}বা এমনকি অসীম লুপটি লেখার একটি ছোট উপায় for(;;){...}, বিশেষত যদি আমরা এর আগেও সেমিকোলনটি বাদ দিতে পারি redoকারণ এটি অবিলম্বে কোনও ifব্লক অনুসরণ করে ।

মূল লুপের প্রথম লাইনটি অ্যারের সাথে পরিচয় করিয়ে দেয় @s("তুষারপাতের জন্য" অবশ্যই), যেখানে এটি 90% স্পেসের এলোমেলো ৮০-অক্ষরের স্ট্রিং এবং প্রতিটি পুনরাবৃত্তির উপর 10% নক্ষত্রপুঞ্জকে আগেই সরবরাহ করে। (কয়েকটি অক্ষর সংরক্ষণ করার জন্য, আমি আসলে @sঅ্যারের শেষের বাইরে অতিরিক্ত লাইনগুলি কখনই পপ করি না , সুতরাং এটি দীর্ঘ এবং দীর্ঘতর হতে থাকে Event অবশেষে এটি প্রোগ্রামটি বন্ধ করে দেবে কারণ অ্যারে স্মৃতিতে ফিট হওয়ার জন্য খুব বেশি দীর্ঘ হয়ে যায়, তবে এটি বেশিরভাগ লোকেরা এই অ্যানিমেশনটি দেখে তার চেয়ে অনেক বেশি সময় নেবে pop@s;the এর আগে একটি বিবৃতি যুক্ত করা selectঠিক করে দেয় এটি সাত অক্ষরের ব্যয়ে at)

মূল লুপের বাকী অংশটি একটি ifব্লকে আবৃত থাকে , যাতে @sঅ্যারে কমপক্ষে 24 টি লাইন থাকে তবে এটি কেবল চলে । অনুমানের সাথে মেনে চলার এটি একটি সহজ উপায়, যার জন্য পুরো প্রদর্শনটি শুরু থেকেই ঝরতে থাকা তুষারে ভরাট হওয়া প্রয়োজন এবং বিটওয়াইজ অপারেশনটিকে কিছুটা সহজ করে তোলে।

এরপরে একটি foreachলুপ আসে যা গল্ফযুক্ত সংস্করণে আসলে একটি for 0..23সংশোধনকারী সহ একটি একক বিবৃতি । যেহেতু লুপের সামগ্রীটির সম্ভবত কিছু ব্যাখ্যা প্রয়োজন, তাই আমি এটি আরও নীচে আনপ্যাক করতে যাচ্ছি:

foreach (0 .. 23) {
    print $_ ? $/ : "\e[H";     # move cursor top left before first line, else print newline
    $t = $f[$_];                # save the previous fixed snowflakes
    $f[$_] |= $s[$_] & $p[$_];  # snowflakes that hit the pattern become fixed 
    $s[$_] &= ~$t ^ $f[$_];     # ...and are removed from the moving part
    print $f[$_] | $s[$_];      # print both moving and fixed snowflakes ORed together
}

প্রথমত, $_পারলে ডিফল্ট লুপের পাল্টা ভেরিয়েবলটি যদি অন্য কোনও ভেরিয়েবল নির্দিষ্ট না করা হয়। এখানে এটি 0 থেকে 23, অর্থাৎ ডিসপ্লে ফ্রেমের 24 লাইনের উপরে চলে। অ্যারে $foo[$_]দ্বারা সূচকযুক্ত উপাদানটি নির্দেশ করে ।$_@foo

ডি-গল্ফযুক্ত লুপের প্রথম লাইনে, আমরা হয় একটি নিউলাইন মুদ্রণ করি (সুবিধাজনকভাবে $/বিশেষ ভেরিয়েবল থেকে প্রাপ্ত ) বা যখন $_0 এর সমান হয় "\e[H", যেখানে \eESC চরিত্রটি বোঝায়। এটি একটি এএনএসআই টার্মিনাল নিয়ন্ত্রণ কোড যা কার্সারটিকে স্ক্রিনের উপরের বাম কোণে নিয়ে যায়। প্রযুক্তিগতভাবে, আমরা এটি বাদ দিতে পারি যদি আমরা একটি নির্দিষ্ট পর্দার আকার ধরে থাকি তবে আমি এটিকে এই সংস্করণে রেখেছি কারণ এর অর্থ এটি অ্যানিমেশন চালানোর জন্য আমার টার্মিনালের আকার পরিবর্তন করতে হবে না।

উপর $t = $f[$_]লাইন, আমরা শুধু বর্তমান মান সংরক্ষণ $f[$_]একটি "সাময়িকভাবে" পরিবর্তনশীল (অত: পর এ $t) আগের সম্ভাব্য পরবর্তী লাইন, যেখানে পরিবর্তন $s[$_] & $p[$_]তুষার পাত এবং ইনপুট প্যাটার্ন ছেদ (, bitwise এবং) দেয়, এবং |=অপারেটর ওআর এটি স্থির আউটপুট লাইনে $f[$_]

তার নীচের লাইনে, $t ^ $f[$_]পূর্বের এবং বর্তমান মানগুলির বিটওয়াইজ এক্সওর দেয় , $f[$_]আমরা পূর্ববর্তী লাইনে পরিবর্তিত বিটগুলির একটি তালিকা, যদি থাকে তবে এবং ইনপুট স্ট্রিংগুলির যে কোনও ~একটিকে আউটপুটকে উপেক্ষা করে । সুতরাং, আমরা যা পাই তা হ'ল বিটমাস্কে সমস্ত বিট 1 সেট করা বাদে আমরা কেবল $f[$_]আগের লাইনে যুক্ত করেছি। সেই বিটমাস্কের উপরে $s[$_]ওঠা সেগুলি থেকে এই বিটগুলি সরিয়ে দেয়; ফলস্বরূপ, এর অর্থ হ'ল যখন একটি ঝরতে থাকা তুষারকণা স্থির প্যাটার্নের কোনও গর্তে পূর্ণ হয়, তখন এটি তুষারপাতের পতন থেকে সরে যায়।

শেষ print $f[$_] | $s[$_]অবধি , (যা গল্ফড সংস্করণে দুটি পূর্ববর্তী দুটি রেখা একসাথে ORing দ্বারা প্রয়োগ করা হয়েছে) কেবল বর্তমান লাইনে স্থির এবং চলমান তুষার ত্বকের ইউনিয়ন (বিটওয়াইস ওআর) প্রিন্ট করে।

আরও একটি জিনিস ব্যাখ্যা করতে বাকি select '', '', '', 0.1রইল অভ্যন্তরীণ লুপের নীচে। পার্লের 0.1 সেকেন্ড ঘুমানোর জন্য এটি কেবল একটি ক্লুজি উপায়; কিছু নির্লজ্জ historicalতিহাসিক কারণে, স্ট্যান্ডার্ড পার্ল sleepকমান্ডের এক-সেকেন্ড রেজোলিউশন রয়েছে, এবং মডিউল sleepথেকে Time::HiResআরও ভাল আমদানি করা 4-আরগ আপত্তি করারselect চেয়ে আরও বেশি অক্ষর নেয় ।


সামান্য ত্রুটি রয়েছে বলে মনে হচ্ছে: 24 তম লাইনটি ব্যবহৃত হয় না এবং ASCII শিল্পের নীচের লাইনটি 23 তম লাইন। উপরের অংশগুলি পূরণ করার আগে এবং এটি সত্যিই নিম্ন স্থানগুলি পূরণ করা উচিত, যদিও আমি প্রাথমিকভাবে এটি নির্দিষ্ট করেছিলাম না।
প্লিজ স্ট্যান্ড

@ প্লিজস্ট্যান্ড: say2 টি অতিরিক্ত অক্ষরের বিনিময়ে আমি সমস্ত 24 টি লাইন (এবং ঘটনাক্রমে মুক্তি পেয়েছি ) ব্যবহার করার জন্য কোডটি পরিবর্তন করেছি । আমি মনে করি না আমি খুব সহজেই ফিল অর্ডারটি পরিবর্তন করতে পারি, যদিও; আমার বাস্তবায়ন মূলত এর সাথে আবদ্ধ।
ইলমারি করোনেন

দুর্দান্ত ব্যাখ্যা! আমি আশা করি আমি আবার এই প্রবেশে ভোট দিতে পারব।
ডিলন কাওয়ার

@PleaseStand: আমি আসলে হয়নি একটি নীচে আপ ভর্তি সংস্করণ, যা এখন প্রায় কাছাকাছি আপনার জাতীয় উদাহরণ হিসাবে একই দেখায় করতে পরিচালনা করে; এটি টপ-ডাউন একের চেয়ে কিছুটা দীর্ঘ, তবে এখনও পর্যন্ত অন্যান্য এন্ট্রিগুলির চেয়ে ছোট।
ইলমারি করোনেন

3

এইচটিএমএল এবং জাভাস্ক্রিপ্ট, 436 অক্ষর

এটি ইনপুটটিতে প্রস্তুত করুন:

<body onload="for(a=[],b=[],c=document.body.firstChild,e=c[H='innerHTML'].split(N='\n'),f=e.length-1,g=24,h=g-f;f--;)for(X=80;X--;)b[80*(h+f)+X]='*'==e[f][X];for(setInterval(F='for(y=24;y--;)for(x=80;x--;)if(a[w=80*y+x]){d=1;if(b[w])for(d=0,z=y+1;24>z;++z)b[s=80*z+x]&&!a[s]&&(d=1);d&&(a[w]=0,a[w+80]=1)}for(x=80;x--;).1>Math.random(i=0)&&(a[x]=1);for(t=\'\';1920>i;++i)t+=\'* \'[+!a[i]],79==i%80&&(t+=N);c[H]=t',67);g--;)eval(F)"><pre>

এটি প্রতিটি উদাহরণের জন্য চালিত দেখুন: কোড গল্ফ , স্ট্যাক ওভারফ্লো লোগো , ক্রিসমাস ট্রি । ইন্টারনেট এক্সপ্লোরার ব্যবহারকারীদের এই জমাটি সঠিকভাবে কাজ করার জন্য 9 সংস্করণ চালানো উচিত এবং "ডকুমেন্ট মোড "টিকে" আই 9 মানক "(F12 বিকাশকারী সরঞ্জাম ব্যবহার করে) এ সেট করতে হবে correctly


1
সব 3 কি ভাঙা লাগছে? পেস্টাল.আর.অর্গ
শো.এফপি?

1

পাইথন, 299 অক্ষর

এটি 80 টি চর সীমাতে নিউলাইন অন্তর্ভুক্ত রয়েছে ধরে নিলে এটি নিয়ম মেনে চলতে হবে।

import random,sys,time
C=1920
v=_,x=' *'
a=['']*C
f=lambda n:[random.choice(e*9+x)for e in _*n]
for e in sys.stdin:a+="%-80s"%e
a=a[-C:]
s=f(C)
while 1:
 z=0;t=''
 for e in s:
    t+=v[x<a[z]or e>_]
    if(e>_<a[z])>(x in a[z+80::80]):a[z]='+'
    t+=z%80/79*'\n';z+=1
 print t;s=f(80)+s[:-80];time.sleep(.1)

যদি ইনপুটটিতে এমন কোনও লাইন থাকে যা ঠিক ৮০ টি অক্ষর (প্লাস নিউলাইন) দীর্ঘ হয় তবে আপনার আউটপুট স্ক্রু হয়ে যাবে। আমি প্লিজস্ট্যান্ডকে ঠিক আছে কিনা তা পরিষ্কার করতে বলেছি।
ইলমারি করোনেন

এটি কারণ আমি প্রতি 80-চওড়া প্রশস্ত লাইনের শেষে একটি নতুন লাইন অন্তর্ভুক্ত করি। বিবরণটি এখানে অস্পষ্ট, যেহেতু এটি নির্দিষ্ট করে যে নতুনলাইনগুলি অবশ্যই অন্তর্ভুক্ত করা উচিত, তবে এটির একটিও টার্মিনালটি ৮০ টি চওড়া প্রশস্ত হতে পারে (এক্ষেত্রে কেউ নিউলাইনগুলি বাদ দিতে পারে এবং স্বয়ংক্রিয় মোড়কের উপর নির্ভর করতে পারে)।
হলভাবো

আমি মনে করি যে আসল সমস্যাটি হ'ল আপনি 80 অক্ষরে ইনপুট লাইনগুলি প্যাড করার আগে নতুন লাইনগুলি কেটে ফেলবেন না, যাতে একটি 80-চার্স-প্লাস-নিউলাইন ইনপুটটি আসলে 81 টি অক্ষর যুক্ত করে aতাই ইনডেক্সিংকে মিস করে। আমি এটা চেষ্টা করে, এবং এটি প্রতিস্থাপন মত দেখায় %eসঙ্গে %e.rstrip()6 সমস্যা সংশোধন করা হয়েছে লাইনে। (অবশ্যই, একটি সংক্ষিপ্ত
সংশোধনও

আপনি যদি ৮১ টি চর লাইন সমর্থন করতে চান তবে কেবল সংখ্যা পরিবর্তন করুন এবং এটি ঠিক কাজ করে। যতদিন আপনি প্রতি লাইনে 100 অক্ষর অধীনে থাকার, এটা গৃহস্থালির কাজ গণনা :-) পরিবর্তন করবে না
hallvabo

আমি যদি আপনার কোডটি 81-চর লাইনগুলি ব্যবহার করার জন্য পরিবর্তন করি তবে এটি একটি 80-কলামের টার্মিনালে সঠিকভাবে চলবে না, এখন এটি কি হবে? আপনি ৮০-কলামের আউটপুট ঠিকঠাক উত্পাদন করছেন, এটি ঠিক যে আপনি ৮০-কলামের ইনপুট সঠিকভাবে গ্রহণ করছেন না । এটি ব্যবহার করে দেখুন: প্রতিটিগুলিতে 80 টি অ্যাসিরিস্ক সহ কয়েকটি লাইন দিয়ে একটি ইনপুট ফাইল তৈরি করুন এবং দেখুন কী ঘটে। এটি এমন কঠিন হওয়া উচিত নয়: আমার সমাধানটি ঠিক এটি পরিচালনা করে।
ইলমারি করোনেন

0

জাভা, 625 টি অক্ষর

import java.io.*;import java.util.*;class s extends TimerTask {int _c,_k;char _i[],_o[];boolean _b[];public s(String f) throws IOException {_i=new char[23*80];_o=new char[80];_b=new boolean [23*80];BufferedReader br = new BufferedReader(new FileReader(f));while (br.read(_i,_c++*80,80)!=-1);} public void run(){_k=--_k<0?_c:_k;for(int i=0;i<80;_b[_k*80+i]=Math.random()>0.9?true:false,i++);for(int m=0;m<_c;m++){for(int n=0;n<80;_o[n]=_b[(_k+m)%_c*80+n]?'*':_i[m*80+n],n++);System.out.println(_o);}}public static void main(String[] a) throws IOException{Timer timer=new Timer();timer.scheduleAtFixedRate(new s(a[0]),0,500);}}

জাভাতে একটি সহজ সমাধান।


ভাল লাগছে, তবে আমি মনে করি না আপনি এই অনুমানের সাথে সম্মতি দিচ্ছেন। বিশেষত, আপনি গোড়া থেকে পুরো প্যাটার্নটি দেখান - নমুনা ডেমোর মতো এটি "ধসে পড়া তুষার থেকে তৈরি হয় না"। (স্বীকারোক্তি হিসাবে, এই প্রশ্নের আরও ভাল ব্যাখ্যা করা যেতে পারে it কী করা উচিত তা বোঝার জন্য আপনার সত্যিকারের ডেমোটি দেখতে হবে)) এছাড়াও, আপনার ফ্রেমরেটটি খুব ধীর গতির, আপনি কোনও তুষার-ভরা স্ক্রিন দিয়ে শুরু করবেন না, আপনি মনে করছেন প্রদত্ত উদাহরণগুলির চেয়ে আলাদাভাবে একটি ইনপুট ফর্ম্যাট ধরে নিচ্ছেন এবং আপনার সত্যিকারের ফ্রেমের মধ্যে কার্সারের অবস্থানটি পুনরায় সেট করা "\033[H"উচিত (মুদ্রণটি এটি করা উচিত)।
ইলমারি করোনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.