র্যান্ডম ওয়াকার প্রিন্টার


24

এমন একটি প্রোগ্রাম বা ফাংশন আঁকুন যা ওয়াকারের লোকেশনে STDOUT nএকটি বিন্দু যুক্ত স্ট্রিংগুলিতে (এক ধাপের জন্য প্রতিটি) .একবারে লিখবে । প্রোগ্রামটিতে প্রতি sসেকেন্ডে একটি লাইনও লিখতে হবে (বা sপ্রতিটি লাইনের পরে সেকেন্ড অপেক্ষা করতে হবে )।

এলোমেলো পদক্ষেপ হ'ল একটি পাথের গাণিতিক আনুষ্ঠানিককরণ যা র্যান্ডম স্টেপস ( উইকি ) এর উত্তরসূরি সমন্বিত থাকে , যেমন প্রতিটি নতুন পদক্ষেপ শেষ ধাপ প্লাস একটি নতুন মান হবে, সুতরাং যে কোনও tপদক্ষেপের মানটি সমস্ত এলোমেলো মানগুলির যোগফল is আইআর প্লাস প্রাথমিক মান আগে।

প্রোগ্রামটির 2 টি ইনপুট নেওয়া উচিত এবং আউটপুটে কেবল ফাঁকা স্থান " "এবং বিন্দু ব্যবহার করা হবে "."। ওয়াকারের শুরু মানটি 20এমন হবে যে 19 স্পেসের পরে আউটপুট বিন্দু হওয়া উচিত।

                  . #19 spaces then a dot

প্রতিটি নতুন পদক্ষেপের মান হ'ল ওয়াকারের শেষ মান হবে এর মধ্যে একটি [-2-1,0,1,2](20% সুযোগ)। নতুন অবস্থানটি মুদ্রণের পরে প্রোগ্রামটির sকয়েক সেকেন্ড অপেক্ষা করা উচিত এবং পরবর্তী ধাপে যেতে হবে। পদক্ষেপটি যদি ওয়াকারের পরিসীমা বহির্মুখী হয় তবে 1 to 40এটি কেবল উপেক্ষা করা উচিত এবং ওয়াকারের অবস্থান একই থাকে। স্পেসের সংখ্যা সর্বদা 0 থেকে 39 পর্যন্ত একটি সংখ্যা থাকবে।

উদাহরণ

#input
Mywalk(s = 0.1, n = 30)

#output
                     .
                    .
                      .
                        .
                          .
                           .
                            .
                          .
                         .
                          .
                           .
                            .
                           .
                          .
                           .
                           .
                         .
                         .
                          .
                            .
                           .
                          .
                           .
                           .
                           .
                         .
                          .
                         .
                          .
                          .

বিবেচ্য বিষয়

  • আপনি কোনও যুক্তিসঙ্গত ফর্ম্যাট হিসাবে ইনপুট নিতে পারেন

  • সংক্ষিপ্ততম কোডটি জয়ী

  • আপনার প্রোগ্রামটি কেবলমাত্র পূর্ণসংখ্যার হিসাবে সেকেন্ড গ্রহণ করে তা ঠিক আছে


2
আমি ধরে নিলাম nধাপের সংখ্যা কি?
ASCIIThenANSI

হ্যাঁ, আমি স্পষ্ট করে দিয়েছি, ধন্যবাদ।
মুতাদোর

আমি মনে করি আপনার বলা উচিত যে পরিসীমাটি হ'ল 1 to 40, কারণ স্থানগুলির সংখ্যা সর্বদা position-1
জিওকাভেল

@ জোকাভেল যে আরও ভাল, স্থির!
মুতাদোর

10
একটি প্রোগ্রাম আঁকো ??? ;-)
ডিজিটাল ট্রমা

উত্তর:


6

পাইথ, 39

J19VEK+.d0QW<.d0K)+*d=JhtS[Z39-+O5J2)\.

sইনপুট প্রথম লাইন nহিসাবে এবং দ্বিতীয় হিসাবে লাগে । কমান্ড লাইনে কাজ করে তবে অনলাইন অনুবাদকের সাথে নয়। আমার প্রথম পাইথ প্রোগ্রাম! গল্ফিং টিপস প্রশংসা করা হয়।


পাইথ স্বাগতম! আমি দেখতে পাচ্ছি শুধুমাত্র গল্ফিং টিপটি হ'ল আপনি ব্যবহার করতে পারেন Qএবং Eদুটি ইনপুট পরিবর্তে hQএবং eQযদি আপনি নতুন লাইনে ইনপুটগুলি আলাদা করেন তবে।
isaacg

13

মতলব, ১১২

মূল ধারণাটি সম্ভাব্য পরবর্তী অবস্থানগুলির একটি তালিকা তৈরি করছে এবং তারপরে অভিন্নভাবে তাদের একটি অঙ্কন করবে drawing আমরা উদাহরণস্বরূপ যদি $ l = 1 position অবস্থানে থাকি তবে সম্ভাব্য পদক্ষেপগুলি [-1,0,1,2,3]অবশ্যই আমরা যদি এটি বেছে নিই -1তবে এটি অবৈধ এবং আমাদের একই অবস্থানে থাকতে হবে। আমরা কেন বর্তমান অবস্থানের সাথে অবৈধ অবস্থানগুলিকে প্রতিস্থাপন করব [1,0,1,2,3], এবং তারপরে এলোমেলোভাবে এই আপডেট হওয়া তালিকা থেকে একটি উপাদান বেছে নিয়েছি।

ওপি আমাদের জিজ্ঞাসা করেছিল প্রোগ্রামটি আঁকতে , সুতরাং আমরা এখানে যাচ্ছি:

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

প্রতিলিপি:

function c(n,s);
l=19;                             %initialize position
for k=1:n;                          
    disp([ones(1,l)*32,'.']);     %print the line
    z=(-2:2)+l;                   %get vector of possible next steps (for l=1 we get [-1,0,1,2,3])
    z(z<0)=l;                     %prune invalids: here we just replace the the invalid positions with the current position
    z(z>39)=l;                    %   this ensures the same behaivour as staying in the same spot when going outside of the range
    l=z(randi(5));                %draw random sample of those
    pause(s);
end

1
-1 ম্যাথজ্যাক্সকে অ-ম্যাথজ্যাক্স পরিবেশে ব্যবহার করে;)
ও'ব্রায়েন

2
ওও আপনি জানেন, লেটেক্সে যে সমীকরণগুলি লিখিত হয় না ঠিক তেমন বিশ্বাসযোগ্য নয়, সেগুলি এমনকি সত্য নাও হতে পারে! নিরাপদ দিকে থাকা ভাল।
flawr

3
আঁকা প্রোগ্রামগুলি বাইটের চেয়ে কালি পরিমাণে পরিমাপ করা উচিত ...
ড্যারাল হফম্যান

8

পার্ল, 136 128 116 106 101 90 86

$p=19;map{say$"x$p.".";sleep $ARGV[0];$x=rand(5)+$p-2;$p=$x>0&&$x<40?$x:$p}1..$ARGV[1]

পূর্ণসংখ্যা হতে সেকেন্ডের প্রয়োজন।

সাথে চালাও perl <filename> <second delay> <number of steps>

এখানে আরও গল্ফিংয়ের সম্ভাবনা থাকতে পারে, যদিও সত্যই, আমি অবাক হয়েছি এটি এতদূর পেয়েছে। (আসুন, বাশ জবাবটি হারাতে আরও 6 টি বাইট ...)

পরিবর্তনগুলি

  • বিনাবিহীন বন্ধনীগুলি সরিয়ে এবং এআরজিভি বানান করে 8 বাইট সংরক্ষণ করা হয়েছে (এটি আসলে সেভাবে খাটো হয়)
  • সরিয়ে 12 আরো বাইট সংরক্ষিত $sএবং $nএবং শুধু সাধারণ ব্যবহার $ARGV[0]এবং$ARGV[1]
  • অন্য 10 বাইট সংরক্ষিত যখন আমি ব্যবহার করতে পারে উপলব্ধি $"এবং বিশেষভাবে সংজ্ঞায়িত করতে না হলেই ভাল হত $uযেমন $undef
  • টার্নারি পুনরায় সাজিয়ে আরও কীভাবে $xব্যবহার করা হয় এবং এর mapপরিবর্তে ব্যবহার করে আরও 5 বাইট সংরক্ষণ করা হয়েছে for
  • 11 বাইট সেকেন্ডকে আর দশমিক হিসাবে গ্রহণ না করে সংরক্ষণ করা হয়েছে (চ্যালেঞ্জের অনুমান অনুযায়ী এটি ঠিক আছে))
  • sayপরিবর্তে ব্যবহার করে আরও 5 বাইট সংরক্ষণ করা হয়েছে print

6

পাইথন 2, 124 119 বাইট

@ জেনার্ন এবং @ স্টিভ একার্ট: আপনার উত্তরটি মন্তব্য করার মতো যথেষ্ট খ্যাতি আমার নেই তবে এখানে আপনার সংস্করণটি সংক্ষিপ্ত করে দেওয়া হয়েছে। কাজটি হ'ল একটি প্রোগ্রাম বা কোনও ফাংশন অঙ্কন করা , যাতে f(s,x)আপনি ব্যবহার করে বেশ কয়েকটি বিট সংরক্ষণ করতে পারেন, পাশাপাশি আপনি max(0,min(x,39))অতিরিক্ত ifধারাটি এড়াতেও ব্যবহার করতে পারেন । এটি নীচে পেয়েছেন:

import time,random as r
def f(s,x):
 n=19
 while x:print' '*n+'.';time.sleep(s);n=max(0,min(n+r.randint(-2,2),39));x-=1

5

বাশ, 81

for((s=20;i++<$1;t=s,s+=RANDOM%5-2,s=s<0|s>39?t:s)){
printf %${s}s.\\n
sleep $2
}

সম্পাদনা করুন: যদি পদক্ষেপটি ওয়াকারকে 1 থেকে 40 এর পরিসরের বাইরে নিয়ে যায় তবে এটি কেবল এড়ানো উচিত এবং ওয়াকারের অবস্থান একইভাবে সঠিকভাবে পরিচালিত থাকে

কমান্ড-লাইন বিকল্প থেকে ইনপুট উদাহরণ:

$ ./randwalk.sh 5 0.5
                    .
                     .
                    .
                  .
                 .
$ 

4

রুবি, 84

def w(s,n)q=19;n.times{puts ' '*q+'.';sleep s;q+=rand(5)-2;q=[[q,0].max,39].min};end

4

পাইথন 2.7, 198 162 143 133

import time,random as r;p=20;s=0;d=input();w=input()
while s<d:
 print' '*p+'.';s+=1;p=max(1,min(p+r.randint(-2,2),40));time.sleep(w)

স্ক্রিপ্টটির সাথে কল করার সময় python script.py, প্রথম ইনপুটটি পদক্ষেপের পরিমাণ, দ্বিতীয় ইনপুটটি ধাপগুলির মধ্যে সময় হয় (ভাসমান বা ইনট গ্রহণ করে)। উন্নতির জন্য কোন পরামর্শ?

সম্পাদনাগুলি

  • এখন ব্যবহারের কারণে 36 বাইট সংরক্ষণ করেছেন print ' '*p+'.', @ কর্সক্লাউস হো হো হো ধন্যবাদ
  • ট্যাব ইন্ডেন্টগুলি অপসারণ করে আরও 19 বাইট ডাউন করুন, সেগুলিকে একটি স্থান বা ;যেখানে সম্ভব সেখানে প্রতিস্থাপন করুন
  • @ ব্রুস_ফোর্ড আইডিয়া সহ 10 বাইট কম ধন্যবাদ p=max(1,min(p+r.randint(-2,2),40))(আপনার উত্তর সম্পর্কে আমিও মন্তব্য করতে পারি না, তবে ধন্যবাদ; এটি সম্পূর্ণরূপে অনুলিপি করতে চাই না)

পাইথনে, আপনি কেবল ' '*pস্ট্রিংটির পুনরাবৃত্তি করতে যেতে পারবেন না ?
corsiKa

আসলে হ্যাঁ, এটা জানতেন না। এখন সম্পাদনা করা হচ্ছে, ধন্যবাদ

4

প্রক্রিয়াজাতকরণ, 150 147

void w(int n,int s){int x=20,i,y,c=0;for(;c<n;c++){x+=y=int(random(5)-2);if(x>40||x<0)x-=y;for(i=1;i<x;i++)print(" ");println(".");delay(s*1000);}}

ব্যবহার:

void setup() {
    w(10,1);
}

দ্রষ্টব্য: প্রকার কারণে 1000পরিবর্তন করা যায় না 1e3


3

লুয়া, 140 বাইট

দ্রষ্টব্য: এই প্রোগ্রামটির জন্য লুয়াস্কট প্যাকেজ দরকার।

require"socket"p=19 for i=1,arg[2]+0 do print((" "):rep(p)..".")p=p+math.random(-2,2)p=p<0 and 0 or p>39 and 39 or p socket.sleep(arg[1])end


3

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

(s,n)=>(t=setTimeout)(c=`console.log(" ".repeat(p)+".");p+=m=Math.random()*5|0;p-=p>41|p<2?m:2;--i&&t(c,d)`,d=s*1e3,p=19,i=n)

ব্যাখ্যা

(s,n)=>
  (t=setTimeout)(                     // set inital timeout
    c=`                               // c = code for timeout to execute
      console.log(" ".repeat(p)+"."); // print the current line
      p+=m=Math.random()*5|0;         // move walker 0 - 4 positions to the right
      p-=p>41|p<2?                    // if walker was moved out of bounds (2 - 41 instead
                                      //     of 0 - 39 because the random move of 0 - 4 to
                                      //     the right has not had the 2 subtracted yet)
        m:                            // undo the move
        2;                            // else subtract 2 to make the move -2 to 2
      --i&&t(c,d)                     // while we have steps remaining schedule next one
    `,
    d=s*1e3,                          // d = milliseconds to wait between steps
    p=19,                             // p = position of walker (0 indexed)
    i=n                               // i = steps remaining (needed to make n global)
  )

পরীক্ষা


3

k4, 61 টি অক্ষর

f:{y{-1((y:1|40&y+-2+*1?5)#" "),".";."\\sleep ",$x;y}[x]\20;}

নমুনা রান:

  f[.1]30
                      .
                    .
                    .
                   .
                   .
                  .
                  .
                   .
                   .
                     .
                    .
                  .
                  .
                    .
                   .
                   .
                 .
                .
               .
               .
              .
            .
          .
         .
         .
          .
            .
              .
              .
                .

3

গণিত, 122 117 বাইট

$RecursionLimit=∞;If[#2>0,Print[Indent[a=Min[#3+RandomInteger@{-2,2},39]~Max~0],"."];Pause@#;#0[#,#2-1,a]]&[##,19]&

পুনরাবৃত্তি বেনামে ফাংশন, নির্দিষ্ট ক্রমে ইনপুট নেয়। সম্ভবত আরও গল্ফ করা যেতে পারে।


2

পাইথন 3, 154 বাইট

import time
from random import*
w=int(input())
z=int(input())
g=19
c=6
s=" "
while c:
    c-=1
    s+=s
while z:
    z-=1
    if -1<g<40:
        print(s[:g]+'.')
    time.sleep(w)
    g+=randint(-2,2)

সর্বাধিক প্রয়োজনীয় দৈর্ঘ্যের চেয়ে বড় স্পেসের স্ট্রিং তৈরি করুন, তারপরে সেই স্ট্রিংটি কেবল 'জি' সূচীতে প্রিন্ট করুন, তারপরে একটি 'মুদ্রণ করুন। পরিসর [-2: 2] এর এলোমেলো মান দ্বারা ছ বৃদ্ধি করে শেষ করুন এবং পুনরাবৃত্তি করুন।

যদি কেউ সেই ভয়ঙ্কর ইনপুট ব্লকটি আমাকে গল্ফ করতে সহায়তা করতে পারে তবে আমি এটির প্রশংসা করব।


গল্ফ ইনপুট, ব্যবহার sys.argvকরবেন না কেন ?
ASCIIThenANSI

1
এছাড়াও, পরিবর্তে while z:, কেন ব্যবহার for i in range(1,z)করবেন না ?
ASCIIThenANSI

আমি কৌতূহলী, আপনি কীভাবে পেলেন যে এটি 154 বাইট? bytesizematters.com একটি আলাদা গণনা দেয় (এমনকি যদি আপনি হোয়াইট স্পেস গণনা অক্ষম
করেও

@ এসসিথেনানসি: হুম ... আমি প্রাথমিক কল sys.argvএবং আমদানির সময়টি যোগ করার পরে আমি কীভাবে কোনও বাইট সংরক্ষণ করতে পারি তা দেখতে পাচ্ছি না। এমনকি cতারপরে হ্রাসের ঘোষণা করার জন্য অতিরিক্ত লাইন দিয়েও cএবং zআমার গণনা অনুসারে এটি এটি করা এখনও সস্তা।
স্টিভ একার্ট

@ পি 1 এক্সেল: আমি শ্বেত স্পেসগুলি লাইনের অভ্যন্তরীণভাবে গণনা করেছি, কেবল শীর্ষস্থানীয় বা শ্বেত স্পেসগুলি অনুসরণ করে না। এমন কোনও আলাদা স্কোরিং মান আছে যা সম্পর্কে আমি অবগত নই?
স্টিভ একার্ট

1

সি ফান্টেশন, 114

s=20,i,t;w(int n,float f){for(;i++<n;t=s,s+=rand()%5-2,s=s<0||s>39?t:s,usleep((int)(f*1e6)))printf("%*c.\n",s,0);}

আমার বাশ উত্তরের প্রত্যক্ষ অনুবাদ

সম্পূর্ণ পরীক্ষার প্রোগ্রাম:

s=20,i,t;w(int n,float f){for(;i++<n;t=s,s+=rand()%5-2,s=s<0||s>39?t:s,usleep((int)(f*1e6)))printf("%*c.\n",s,0);}

int main (int argc, char **argv) {
  w(10, 0.2);
  return 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.