কোড গল্ফ: আপনার নিজস্ব অনুভূমিক পোষা ASCII সাপ


29

কোড গল্ফ: এই চ্যালেঞ্জটি থেকে খুব ভারীভাবে অনুপ্রাণিত হয়েছে আপনার নিজের পোষা প্রাণী ASCII সাপ - আমি ভেবেছিলাম এটিকে আনুভূমিক তৈরি করা জটিলতার অতিরিক্ত স্তর যুক্ত করবে।

অনুভূমিক সাপ উদাহরণ:

            0 0               
  0        0 0 000            
00 0     00       000 0      0
    000 0            0 0   00 
       0                000   

এবং বিধিগুলি হ'ল:

  1. ঠিক পাঁচটি লাইন অক্ষর মুদ্রিত হয়েছে
  2. প্রতিটি লাইন হুবহু 30 টি অক্ষর লম্বা, ফাঁকা জায়গাগুলির সংমিশ্রণ এবং আপনি যে সাপটিকে আপনার সাপ আঁকতে বেছে নিয়েছেন তা সমন্বিত
  3. আপনার সাপ 3 লাইনে শুরু হয়
  4. আপনার সাপ আঁকার জন্য পরবর্তী লাইনটি আপনার বর্তমান রেখা থেকে এলোমেলোভাবে বেছে নেওয়া উচিত, উপরে একটি লাইন (যদি আপনি ইতিমধ্যে 1 লাইনে নেই) বা নীচে একটি লাইন (আপনি যদি ইতিমধ্যে 5 লাইনে না থাকেন)।
    • এই পছন্দগুলি অবশ্যই সমান ওজনযুক্ত হতে হবে। সুতরাং আপনি যদি লাইন 1 এ রয়েছেন, আপনার 1 লাইনে থাকার 50% সুযোগ আছে এবং লাইন 2 এ যাওয়ার 50% সুযোগ রয়েছে you আপনি যদি লাইন 2 এ থাকেন তবে আপনার কাছে লাইন 1, এ যাওয়ার একটি 33% সুযোগ আছে 2% লাইনে থাকার 33% সুযোগ বা 3 লাইনে যাওয়ার 33% সুযোগ
  5. আপনার সাপকে প্রতিটি একক লাইনে দেখার দরকার নেই

5
পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি ভাল প্রথম চ্যালেঞ্জ।
জিউসেপ

স্পষ্টতার জন্য, আমরা যদি প্রান্তে থাকি তবে কি আমাদের অভিন্নভাবে বাছাই করতে হবে (একই লাইনে থাকবে) এবং (আলাদা লাইনে যেতে হবে) বা আমাদের অ-ইউনিফর্ম ওজন থাকতে পারে?
জিউসেপ

এবং প্রান্তগুলি বন্ধ, আমাদের কি একইভাবে উপরে / ডাউন / একই লাইনটি বাছাই করতে হবে?
জিউসেপ

2
মিমি ... কমপক্ষে 5-লাইনের সীমাবদ্ধতা ট্রান্সপোজ সংযুক্ত করে অন্যের কাছ থেকে উত্তরগুলি চুরি করতে বাধা দেয়।
যাদু অক্টোপাস উরন

9
শারীরিকভাবে মনিটরটি 90 by দ্বারা বাইট হিসাবে গণনা করে? : ডি
এরিক ডুমিনিল

উত্তর:


11

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

7 কেট ক্রুইজসনে ধন্যবাদ বাইট সংরক্ষণ করা হয়েছে

5 টি স্ট্রিংয়ের অ্যারে প্রদান করে।

f=(y=2,a=[...'  0  '])=>a[0][29]?a:f(y+=(Math.random()*(y%4?3:2)|0)-!!y,a.map((v,i)=>v+=i-y&&' '))

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

মন্তব্য

f = (                       // given:
  y = 2,                    //   y = current line (0-indexed)
  a = [...'  0  ']          //   a[] = array of 5 lines
) =>                        //
  a[0][29] ?                // if all columns have been processed:
    a                       //   stop recursion and return a[]
  :                         // else:
    f(                      //   do a recursive call with:
      y += (                //     the updated value of y, to which we add -1, 0 or 1:
        Math.random() *     //       pick a random value in [0,1)
        (y % 4 ?            //         if y is neither 0 or 4:
          3                 //             multiply it by 3
        :                   //           else:
          2                 //             multiply it by 2
        ) | 0               //       force an integer value
      ) - !!y,              //     subtract either 0 or 1
      a.map((v, i) =>       //     for each value v at position i in a[]:
        v += i - y && ' '   //       append either '0' if i = y or a space otherwise
      )                     //     end of map()
    )                       //   end of recursive call

আপনি ড্রপ dএবং ((y%4?3:2)|0)-(y>0)-6 বাইট জন্য ব্যবহার করতে পারেন । এটি অনলাইনে চেষ্টা করুন।
কেভিন ক্রুইজসেন

সংশোধন: -7 বাইট। 1মধ্যে new Random(...)অবশ্যই ডিফল্টরূপে অন্তর্নিহিত এসে গেছে .. অনলাইনে চেষ্টা করুন।
কেভিন ক্রুইজসেন

ধন্যবাদ কেভিন ক্রুজসেন! ( !!yপরিবর্তে (y>0)2 আরও বেশি বাইট পরিমাণ সঞ্চয় হয়।)
Arnauld

7

কাঠকয়লা , 28 বাইট

P|   F³⁰«0≡ⅉ²M‽²↑±²M‽²↓M⊖‽³↓

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

P|   

আউটপুট 5 লাইন জোর করতে কিছু প্যাডিং মুদ্রণ করুন।

F³⁰«

30 বার পুনরাবৃত্তি করুন।

0

একটি শূন্য মুদ্রণ করুন (এবং অনুভূমিকভাবে সরান)।

≡ⅉ²M‽²↑

যদি Y- স্থানাঙ্ক 2 হয়, এলোমেলোভাবে 0 বা 1 দ্বারা সরান।

±²M‽²↓

যদি এটি -2 হয়, 0 বা 1 দিয়ে এলোমেলোভাবে নামুন।

M⊖‽³↓

অন্যথায় এলোমেলোভাবে -1, 0 বা 1 দ্বারা সরান।


6

পার্ল, 68 বাইট

perl -E '$%=2;s:$:$n++%5-$%&&$":emg,$%-=!!$%+rand!($%%4)-3for($_=$/x4)x30;say'

এটি মোটেও অনুকূল অনুভব করে না।


5

জেলি , 24 বাইট

3µ’o1r‘«5¥$Xµ30СṬ€o⁶z⁶Y

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

ব্যাখ্যা

3µ'o1r '«5 ¥ $ Xµ30СṬ € o⁶z⁶Y || নীলাডিক পুরো প্রোগ্রাম।
                         ||
3 || 3 থেকে শুরু হচ্ছে ...
 । µ30 || ... 30 বার কার্যকর করুন ...
               С || ... এবং একটি তালিকাতে ফলাফল সংগ্রহ করুন।
  'o1r' «5 ¥ $ X || - | মোনাডিক "সহায়ক" ফাংশন।
  'ও 1 || - | বর্তমান পূর্ণসংখ্যা, হ্রাসকৃত OR 1।
     r এক্স || - | রেঞ্জ থেকে ^ থেকে ... পর্যন্ত এলোমেলো আইটেম ধরুন ...
      '«5 || - | ... সংখ্যা বৃদ্ধি পেয়ে 5 কে ক্যাপড (সর্বোচ্চ ব্যবহার করে)।
         । $ || - | | সিনট্যাক্স উপাদান। গ্রুপিং লিঙ্কের জন্য ব্যবহৃত হয়।
                 । € || প্রতিটি অনর্থক।
                   ও⁶ || যৌক্তিক OR একটি একক স্থান সহ।
                     z⁶ || ফিলার স্পেস সহ স্থানান্তর করুন।
                       ওয়াই || নতুন লাইনের মাধ্যমে যোগদান করুন।


5

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

@ রুটস, @ টার্কসারামা এবং @ মাইপেটলিয়ন বাইট হ্রাস করতে খুব সহায়ক হয়েছে

import random
m=[list(' '*30)for y in range(5)]
l=2
for i in range(1,30):
 m[l][i]=0
 l+=random.randint(~-(l<1),l<4)
for j in m:
  print(*j)

এই চেষ্টা এবং উন্নতি করবে। মজার চ্যালেঞ্জ!


3
31 বাইট সংরক্ষণ l+=random.randint(-1,1) l=0 if l<0 else l l=4 if l>4 else lকরতে পরিবর্তন করুন l+=random.randint(~-(l<1),l<4)
mypetlion

1
আপনার অনেকগুলি স্থান এবং নতুন লাইনের সরিয়ে ফেলতে সক্ষম হওয়া উচিত।
মিঃ এক্সকোডার

1
7 বাইট সংরক্ষণ m=[[' 'for x in R(w)]for y in R(h)]করতে পরিবর্তন করুন m=[list(' '*w)for y in R(h)]
mypetlion

2
পাইথনে, booleanএকটি সাবক্লাস int। সুতরাং Falseজায়গায় ব্যবহার করা যেতে পারে 0এবং Trueপ্রতিস্থাপন করতে পারেন 1~, Bitwise জন্য একটি ইউনারী অপারেটর হয় notএবং -অপারেটর চিহ্ন (সংখ্যাবৃদ্ধি দ্বারা ফ্লিপ -1)। সুতরাং ~-(False)মূল্যায়ণ -1এবং ~-(True)করতে 0. মূল্যায়ণ
mypetlion

1
আপনার প্রাথমিক 0টিকে আপনার লুপের মধ্যে বরাদ্দ করুন এবং অ্যাসাইনমেন্টের পরে l সেট করুন। এটি আপনাকে একটি পুরো লাইন সংরক্ষণ করে ( m[2][0]=0চলে গেছে) এবং লুপের জন্য 2 বাইট ( for i in R(1,30):হয়ে যায় for i in R(30):)। আপনি ০. সেট করার পরে আপনারও এল গণনা করতে হবে এটি আপনাকে 144 বাইটে নিয়ে যাওয়া উচিত।
তুরস্করমা

4

আর , 120 114 বাইট

m=matrix
r=m(" ",30,5)
x=3
for(i in 1:30){r[i,x]=0;x=x+sample(-1:1,1,,m(c(0,rep(1,13)),3)[,x])}
write(r,"",30,,"")

অতিরিক্ত 6 বাইটের জন্য @ জিউস্প্পকে ধন্যবাদ !

সম্ভাব্যতার একটি সারণি নিম্নলিখিতভাবে ব্যবহার করে:

> matrix(c(0,rep(1,13)),3)
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1    1    1    1
[2,]    1    1    1    1    1
[3,]    1    1    1    1    0
Warning message:
In m(c(0, rep(1, 13)), 3) :
  data length [14] is not a sub-multiple or multiple of the number of rows [3]

যেখানে প্রতিটি কলাম একটি মামলার সাথে মিলে যায়, যেমন সর্প 1-এ সর্প রয়েছে তবে কলাম 1 বেছে নেওয়া হয়েছে, যথাক্রমে 0, 1/2 এবং 1/2 বাছাই করার সম্ভাবনা দেয় -1 [নীচে যান], 0 [এখনও থাকুন] এবং 1 [ উপরে যান] ( sampleসম্ভাব্যতাগুলিকে স্বয়ংক্রিয়ভাবে 1 এ স্বাভাবিক করুন), সারি 2 এর কলাম 2 সম্ভাব্যতা দেয় 1/3, 1/3 এবং 1/3, ইত্যাদি ...

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



@ জিউসেপ ধন্যবাদ! এটির
নামকরণের

3

এসওজিএল ভি0.12 , 22 21 বাইট

3ā'∑∫⁵╗ž⁴H1ΧGI5χ⁴-ψ+;

এখানে চেষ্টা করুন!

ব্যাখ্যা:

3                      push 3
 ā                     push an empty array - the canvas
  '∑∫                  30 times do, pushing counter            | stack = 3, [], 1
     ⁵                   duplicate the Y coordinate            | stack = 3, [], 1, 3
      ╗ž                 at those coordinates insert "+"       | stack = 3, ["","","+"]
        ⁴                duplicate from below                  | stack = 3, ["","","+"], 3
         H               decrease                              | stack = 3, [...], 2
          1Χ             maximum of that and 1                 | stack = 3, [...], 2
            G            get the item 3rd from top             | stack = [...], 2, 3
             I           increase it                           | stack = [...], 2, 4
              5χ         minimum of that and 5                 | stack = [...], 2, 4
                ⁴-       subtract from the larger a copy of the smaller value | stack = [...], 2, 2
                  ψ      random number from 0 to pop inclusive | stack = [...], 2, 2
                   +     add those                             | stack = [...], 4
                    ;    and get the array back ontop          | stack = 4, ["","","+"]

                         implicitly output the top item - the array, joined on newlines






2

স্মাইলব্যাসিক, 107 105 103 89 বাইট

FOR I=0TO 29FOR J=0TO 5LOCATE I,J?" 0"[Y+2==J]NEXT
Y=Y+RND(3)-1D=Y/3>>0Y=Y-D-D*RND(2)NEXT
NEXT

এই উত্তরটি ভার্টিকালটির চেয়ে বেশি আকর্ষণীয় কারণ (আক্ষরিক) প্রান্তের কেস রয়েছে।

64 বাইট, প্রিন্টিং স্পেস ছাড়াই:

FOR I=0TO 29LOCATE,Y+2?0;
Y=Y+RND(3)-1D=Y/3>>0Y=Y-D-D*RND(2)NEXT

একই দৈর্ঘ্যের সাথে আমি লাইন 2 এর কয়েকটি বৈচিত্রও পেয়েছি:

Y=Y+RND(3)-1D=Y/3>>0Y=Y-D-D*RND(2)NEXT
Y=Y+RND(3)-1D%=Y/3Y=Y-D%-D%*RND(2)NEXT
Y=Y+RND(3)-1Y=Y-Y DIV 3*(RND(2)+1)NEXT
Y=Y+RND(3)-1Y=Y/3OR.Y=Y-D-D*RND(2)NEXT

Y / 3 এর পূর্ণসংখ্যা বিভাগটি Y বৈধ পরিসরের বাইরে রয়েছে কিনা তা পরীক্ষা করার জন্য, পাশাপাশি চিহ্নটি পাওয়ার জন্য ব্যবহৃত হয়।


2

জাভা 8, 177 170 বাইট

v->{int a[][]=new int[5][30],c=0,r=2;for(;c<30;r+=Math.random()*(r%4>0?3:2)-(r>0?1:0))a[r][c++]=1;String R="";for(int[]y:a){for(int x:y)R+=x<1?" ":"~";R+="\n";}return R;}

-7 বাইটস @ অলিভিগ্রগ্রোয়ারকে ধন্যবাদ ।

ব্যাখ্যা:

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

v->{                // Method with empty unused parameter and String return-type
  int a[][]=new int[5][30],
                    //  Integer-matrix of size 5x30
      c=0,          //  Column, starting at index 0
      r=2;          //  Row, starting at index 2
  for(;c<30;        //  Loop `c` 30 times
      r+=Math.random()*(r%4>0?3:2)-(r>0?1:0))
                    //    After every iteration: change `r` with -1,0,1 randomly
                    //     If `r` is 0: random [0;2)-0 → 0,1
                    //     If `r` is 4: random [0;2)-1 → -1,0
                    //     If `r` is 1,2,3: random [0:3)-1 → -1,0,1
    a[r][c++]=1;    //   Fill the cell at indices `r,c` from 0 to 1
  String R="";      //  Result-String, starting empty
  for(int[]y:a){    //  Loop over the rows of the matrix
    for(int x:y)    //   Inner loop over the individual column-cells of the matrix
      R+=x<1?       //    If the value of the cell is still 0:
          " "       //     Append a space
         :          //    Else (it's 1):
          "~";      //     Append the character
    R+="\n";}       //   After every row, Append a new-line
  return R;}        //  Return the result-String

1
r+=Math.random()*(r%4>0?3:2)-(r>0?1:0)কয়েক বাইট সংরক্ষণ করতে।
অলিভিয়ের গ্রাগোয়ার

@ অলিভিয়ারগ্রোগোয়ার আমি ভেবেছিলাম যে আমি ইতিমধ্যে এটি করে ফেলেছি, তবে দৃশ্যত তা হয়নি। আমি সম্প্রতি এটির অন্য উত্তরে এটি করেছি ..: এস ধন্যবাদ!
কেভিন ক্রুইজসেন

2

সি (জিসিসি) , 134 130 বাইট

r,x,y=3,a[31],m;f(){for(x=0;x<31;x++){m?putchar(x==30?10:a[x]-m?32:48):(a[x]=y);r=rand();y+=y==1?r%2:y==5?-r%2:1-r%3;}++m<6&&f();}

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


পিপিসিজিতে আপনাকে স্বাগতম!
মার্টিন ইন্ডার

ধন্যবাদ! প্রিন্টফের পরিবর্তে পুটচর ব্যবহার করলে 4 বাইট সাশ্রয় হয়।
মাএসসি

1

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

from random import*
i,*a=2,
exec("a+=i,;i+=randint(-(i>0),i<4);"*30)
for x in range(5):print(''.join(' 0'[x==i]for i in a))

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

পূর্ণসংখ্যার একটি অ্যারে তৈরি করুন, তারপরে এটিকে প্রতিটি সারিতে রূপান্তর করুন।

পাইথন 2 , 120 বাইট

from random import*
i=2;a=[]
exec"a+=i,;i+=randint(-(i>0),i<4);"*30
for x in range(5):print''.join(' 0'[x==i]for i in a)

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

পাই 2 এর জন্য, রিডানডেন্ট প্যারেনস এর জন্য execএবং printমুছে ফেলা যায় তবে ২ য় লাইনের বাক্য গঠনটি অবৈধ।

উভয় Outgolfing রড দ্বারা Py2 জমা এবং linemade দ্বারা Py3 জমা


1

রুবি , 98 77 বাইট

->{a=(0..4).map{" "*30}
x=2
30.times{|i|a[x][i]=?@
x+=rand(3-17[x])-30[x]}
a}

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

একটি ল্যাম্বদা স্ট্রিংগুলির একটি অ্যারে ফিরছে।

আমার প্রাথমিক প্ররোচনাটি ছিল কলামগুলি তৈরি করা এবং সেগুলি স্থানান্তরিত করা, তবে কেবল সেই পদক্ষেপটি এড়ানো সহজ।

আমি আরম্ভ করতে চেয়েছিলাম aসঙ্গে [" "*30]*5, কিন্তু যে স্ট্রিং অগভীর কপি করতে হবে, একটি খুব চর্বি, অ পিছল সাপ ফলে।

আমি Dইনক্রিমেন্টের মতো ধ্রুবক ব্যবহার করতে পারতাম (একই বাইট গণনার জন্য), তবে যতবার আমি এটি নির্ধারণ করলাম ততবার রুবি অভিযোগ করতেন। আমি স্থির করেছিলাম যে iমিড-লুপটিকে পুনরায় ব্যবহার করে উপেক্ষা করার জন্য একগুচ্ছ ডিবাগ সতর্কতা অবলম্বন করা উচিত read

আমি এর সাথে কয়েকটা বাইট সংরক্ষণ করতেও পছন্দ করতাম loop{x+=rand(3)-1;(0..4)===x&&break}, তবে এটি কিনারাগুলিতে পক্ষপাতিত্ব ঘটায়: 1/3 অভ্যন্তরে ফিরে যাওয়ার সুযোগ, 1/3 থাকার থাকার সুযোগ এবং 1/3 সুযোগের বাইরে চলে যাওয়ার সুযোগ অবশেষে এলোমেলোভাবে ফিরে আসার কিছুক্ষণ আগে (এটি "থাকুন")

-20 বাইট:Integer#[] সমস্ত 5 পদের জন্য সঠিক চলাফেরার ভারসাম্য নিশ্চিত করে, ছোট কন্ডিশন তৈরি করতে রুবি ব্যবহার করুন । এটি একটি বিশাল সঞ্চয়ের জন্য একটি লুপ-ব্রেক প্যাটার্ন (থামাতে ব্যর্থ হওয়ার ননজারো সম্ভাবনা সহ) প্রতিস্থাপন করে। ধন্যবাদ, এরিক ডুমিনিল !

-1 বাইট: আরম্ভ aসঙ্গে (0..4).mapপরিবর্তে 5.times, এর আবার ধন্যবাদ এরিক Duminil

->{
  a = (0..4).map{ " " * 30 }      # a is the return array: 5 strings of 30 spaces
  x = 2                           # x is the snake position
  30.times{ |i|                   # For i from 0 to 29
    a[x][i] = ?@                  #   The ith position of the xth row is modified
    x += rand(3 - 17[x]) - 30[x]  #   Using bit logic, add rand(2 or 3) - (0 or 1)
  }
  a                               # Return the array of strings
}

দুর্দান্ত শুরু। কোনও অন্তরের প্রয়োজন নেই loop। আপনি rand(2+14[x])-30[x]বা এর সাথে ইনক্রিমেন্ট গণনা করতে পারেন rand -(30[x])..15[x]। সম্ভবত একটি সংক্ষিপ্ত সংস্করণ আছে। তবুও, -20 বাইট খারাপ না! এটি অনলাইন চেষ্টা করুন!
এরিক ডুমিনিল

সাথে 1 বাইট কম x,a=2,(0..4).map{" "*30}এটি অনলাইন চেষ্টা করুন!
এরিক ডুমিনিল

1
বাহ, 30[x]দুর্দান্ত কৌশল! ধন্যবাদ!
benj2240

1

পার্ল 6 , 85 বাইট

.join.say for [Z] ((' ',' ',0,' ',' '),{.rotate(set(0,+?.[0],-?.[4]).pick)}...*)[^30]

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

(' ', ' ', 0, ' ', ' ')লম্ব প্রথম বন্ধনীযুক্ত প্রকাশটি আউটপুটটির প্রথম উল্লম্ব ফালাটি প্রাথমিক উপাদান থেকে উত্পন্ন অলস ক্রম sequ প্রত্যেক ধারাবাহিক ফালা / তালিকা তার কল করে পূর্ববতী এক থেকে উৎপন্ন হয় rotateপদ্ধতি সঙ্গে এলোমেলোভাবে ধারণকারী একটি সেট থেকে মনোনীত অফসেট 0, 1(প্রথম উপাদান অশূন্য হলে), এবং -1(পঞ্চম উপাদান অশূন্য হলে)।

অনুভূমিক স্ট্রিপের ম্যাট্রিক্স [Z]অপারেটরের সাথে স্থানান্তরিত হয় , এটি উল্লম্ব স্ট্রিপগুলির তালিকায় পরিণত হয়, যার প্রতিটিই পরে joinএকক স্ট্রিং এবং এড আউটপুটে আউট হয় say


1

স্কালা, 207 বাইট

val b=Array.fill(150)('.')
def s(y:Int,x:Int)={val r=Random.nextInt(6)
val z=y+(if(y>3)-r%2
else if(y<1)r%2
else r/2-1)
b(z*30+x)='$'
z}
(3/:(0 to 28))(s(_,_))
b.mkString("").sliding(30,30).foreach(println)

নমুনা:

...................$$$...$.$$.
.$$$..............$...$.$.$...
$...$$$..$...$$.$$.....$......
.......$$.$.$..$..............
...........$..................

degolfed:

val buf = List.fill(150)('.').toBuffer
def setRowCol (y:Int, x:Int): Int = {
  val r = Random.nextInt(6)
  val z = y + (
    if (y>3) 
        -(r%2)
    else if (y<1) 
        (r%2)
    else 
        r/2-1
  )
  buf (z * 30 + x) = '$'
  z
}
(3 /: (0 to 28)(setRowCol (_, _))
println 
buf.mkString ("").sliding(30,30).foreach(println)

আমার অনন্য আবিষ্কার - ভাল, আমি এখনও পর্যন্ত অন্যান্য সমাধানগুলি পড়িনি, এটি হল একটি র‌্যান্ডম (6) তৈরি করা যা স্পষ্টতই দুটি র‌্যান্ডম, (২ * 3)। সীমান্ত থেকে দূরে থাকলে, আমি আর / 2 (0,1,2) এবং → (-1,0,1) এর মানগুলি ব্যবহার করি, আমাকে উপরে বা নীচে যেতে বলে। যদি সীমান্তে থাকি তবে আমি অন্য কোনও এলোমেলো চরিত্রের ব্যয়বহুল কল এড়াতে পারি এবং কেবল মডিউল (2) নিতে পারি, সিদ্ধান্ত নিতে, আমার থাকা উচিত বা আমার যাওয়া উচিত।

অন্যান্য সমাধান দেখুন। :)


হ্যাঁ, ভুল নমুনা চিত্র। এটা করে. :)
ব্যবহারকারী অজানা

স্কলা শিলা! ওহ .. কোড গল্ফ .. ভুল ব্যবহারের ক্ষেত্রে এটি উপস্থিত হয় .. হ্যাকের মধ্যে এটি কীভাবে আটকে গেল java?
জাভাদবা

@ জাভাদ্বা: আপনি কি try itলিঙ্কটি ক্লিক করেছেন ? কেভিন ক্রুইজসেন কিছু বয়লারপ্লেট অন্তর্ভুক্ত করেনি, এই কোডটি সংকলন করার জন্য বা এটি জেএসেলের মধ্যে চালানোর জন্য প্রয়োজন, তবে আমার ধারণা এটি গাইডলাইন অনুসারে - একটি মেটা আলোচনা হতে পারে। আপনি যদি চান তবে আপনি দ্বিমূল্য অ্যারেও ব্যবহার করে এই কোডটি হ্রাস করার চেষ্টা করতে পারেন। দ্বিতীয় ধারণাটি হ'ল, শেষের দিকে স্লাইডিং কোডটি কমাতে? কিছু মানচিত্রের পদ্ধতি? প্রিন্টলন লুকিয়ে রেখেছেন কেভিন। - হ্যাঁ, অ্যারে ৮ দ্বারা একটি উন্নতি দেয়
ব্যবহারকারী অজানা

স্কালাকে রিটার্নের টাইপটি অনুমান করা যাক: আরও 4 টি অক্ষর সংরক্ষণ করা হয়েছে।
ব্যবহারকারীর অজানা

সুতরাং এটি এখন জাভা জন্য বলপার্কে
উঠছে

1

পার্ল, 83 101 বাইট

perl -E '$l=3;map{map$s[$_-1].=/$l/?0:" ",1..5;$l-=1-int 3*rand;$l=~y/60/51/}1..30;say for@s'

নতুন: সীমানায় সম্ভাব্যতা সমস্যা ছাড়াই:

perl -E '$l=3;map{map$s[$_-1].=/$l/?0:" ",1..5;$l=int($l<2?1+2*rand:$l>4?6-2*rand:$l-1+3*rand)}1..30;say for@s'

Ungolfed:

$l=3;                             #start line
map{
  map $s[$_-1].=/$l/?0:" ",1..5;  #0 at current char and line, space elsewhere
  $l-=1-int 3*rand;               #up, down or stay
  $l=int( $l<2 ? 1+2*rand
        : $l>4 ? 6-2*rand
        :        $l-1+3*rand )    #border patrol
}
1..30;                            #position
say for@s                         #output result strings/lines in @s

2
আপনার সীমানা টহল প্রান্তে থাকার জন্য 50% এর সঠিক সম্ভাবনা দেয় না।
টন হসপেল

0

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

$a=(,' '*30),(,' '*30),(,' '*30),(,' '*30),(,' '*30);$l=2;0..29|%{$a[$l][$_]=0;$l+=0,(1,($x=1,-1),$x,$x,-1)[$l]|Random};$a|%{-join$_}

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

5 লম্বা লম্বা 30 স্পেস প্রশস্ত 2 ডি অ্যারে তৈরি করে। (বিশেষ দ্রষ্টব্য -। কেউ এই অ্যারের, আমি হবে <3 তোমাকে সারাজীবন আরম্ভ করতে একটি ভাল কার্যকর উপায় সঙ্গে আসা পর্যন্ত করতে পারেন) সেট সাহায্যকারী পরিবর্তনশীল $lথেকে 2(এই জন্য ব্যবহার করা হয় কি লাইন পূর্ববর্তী সাপ সেগমেন্ট ছিল)। তারপরে লুপ 0করুন 29

প্রতিটি পুনরাবৃত্তি, আমরা আমাদের সাপ উপাদান সেট 0। তারপরে আমরা একটি জটিল অ্যারে সূচক করি Get-Randomযা দিয়ে উপরে বা নীচে যাই বা একই থাকি তা নির্বাচন করে। এটি আবার যুক্ত করা হয়েছে $l

অবশেষে, আমরা পাঁচটি উপাদান $aএবং -joinতাদের অভ্যন্তরের উপাদানগুলির প্রতিটি একক স্ট্রিংয়ে লুপ করব । এই পাঁচটি স্ট্রিং পাইপলাইনে রেখে গেছে এবং অন্তর্নিহিত Write-Outputআমাদের নিখরচায় নতুন লাইন দেয়।


0

ক্লোজার, 123 বাইট

এখানে প্যারেনস আসুন:

(let[l(take 30(iterate #(max(min(+(-(rand-int 3)1)%)4)0)3))](doseq[y(range 5)](doseq[x l](print(if(= y x)0" ")))(println)))

অবরুদ্ধ সংস্করণ:

(let [l (take
       30
       (iterate
        #(max
          (min
           (+ (- (rand-int 3) 1) %)
           4)
          0)
        3))]
(doseq [y (range 5)]
  (doseq [x l]
    (print (if (= y x) 0 " ")))
  (println)))

সাপের দেহের বিভিন্ন উচ্চতার একটি তালিকা তৈরি করে তারপরে 0 থেকে 4 পর্যন্ত পুনরাবৃত্তি হয় যখনই কোনও উচ্চতা বর্তমান সারির সাথে মেলে তখন এটি 0 টি মুদ্রণ করে, অন্যথায় ফাঁকা। উচ্চতা সীমানা ছাড়িয়ে না দেওয়া সত্যই বাইটস ব্যয় করে। একটি নতুন লাইন কখন ক্রমযুক্ত তা স্বীকৃতি প্রদান করা উচিত যেমনটি আরও বাইট-নিবিড় intens doseqএক্স এবং ওয়াইসের কার্টেসিয়ান পণ্য তৈরি করে, কেউ সহজেই একটি একক লিখতে পারে তবে কখন নতুন লাইনটি প্রিন্ট করতে হয় তা কেউ জানে না।


0

পাইথন 3 + নপি, 137 132 বাইট

স্বল্পতম পাইথন জমা দেওয়া নয়, সবচেয়ে দীর্ঘ নয় এবং অবশ্যই দ্রুততম নয়।

from pylab import*
j=r_[2,:29]
while any(abs(diff(j))>1):j[1:]=randint(0,5,29)
for i in r_[:5]:print(''.join(' #'[c] for c in j==i))

আপডেটnumpy সাফটি বৈধ প্যাটার্ন হিসাবে পরীক্ষার জন্য 5 টি বাইট সংরক্ষণ করেছে এর ডিফ কমান্ডটি ব্যবহার করে ম্যানুয়ালি পার্থক্য গণনার তুলনায় j[1:]-j[:-1]



0

আর , 95 বাইট

x=3;l=1:5
write(t(replicate(30,{y=ifelse(x-l,' ',0);x<<-sample(l[abs(x-l)<2],1);y})),'',30,,'')

পরবর্তী লাইনটি xসর্বদা লাইনগুলি থেকে নির্বাচিত হয় যা বর্তমান লাইন ( l[abs(x-l)<2]) থেকে 1 এর বেশি দূরে নয় । ব্যবহার replicateএকটি পরিবর্তে forচক্র কিছু ম্যাট্রিক্স আরম্ভের এবং ম্যানিপুলেশন জন্য প্রয়োজন বাইট সংরক্ষণ করে এবং ব্যবহারের প্রয়োজন <<-অপারেটর যখন বিশ্বব্যাপী পরিবর্তনশীল বরাদ্দ x

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


0

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

Y30F©ð5×0®ǝs<DÌŸ4ÝÃΩ}\)ζ»

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

ব্যাখ্যা

Y                           # push the initial value 2
 30F                        # 30 times do
    ©                       # store a copy of the current value in register
     ð5×                    # push 5 spaces: "     "
        0®ǝ                 # insert 0 at the position of the current value
           s<DÌŸ            # push the range [current-1 ... current-1+2]
                4ÝÃ         # keep only numbers in [0 ... 4]
                    Ω       # pick one at random
                     }\     # end loop and discard the final value
                       )ζ   # transpose the list
                         »  # join by newlines
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.