একটি বুদ্বুদ-মোড়ানো সিমুলেটর তৈরি করুন


23

বুদ্বুদ-মোড়ক সর্বাধিক স্তরের বিনোদন। প্রত্যেকেই তাতে একমত হতে পারে।

এখন, আপনি এমনকি কম্পিউটারগুলি বুদ্বুদ-মোড়কে উপভোগ করবেন।

চশমা

আপনাকে দুটি ডাব্লু এবং এইচ দেওয়া হবে (প্রতিটি প্রতিক্রিয়া অনুসারে প্রস্থ এবং উচ্চতা)

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

প্রতিটি বুদ্বুদ-মোড়ানো সমস্ত ঘর পূর্ণ দিয়ে শুরু হয়।

উদাহরণস্বরূপ, একটি 4 * 6 বুদ্বুদ-মোড়ানো শুরু হয়:

O_O_
_O_O
O_O_
_O_O
O_O_
_O_O

এবং প্রতিটি ধাপে, একটি এলোমেলো সেল-পপ সেল হয় pop উদাহরণস্বরূপ,

O_O_
_O_O
O_X_
_O_O
O_O_
_O_O

সমস্ত কক্ষগুলি পপ করার পরে প্রোগ্রামটি শেষ হওয়া উচিত। ওরফে।

X_X_
_X_X
X_X_
_X_X
X_X_
_X_X

উদাহরণ

(4,6)
(5,5)
(6,2)
(10,10)
(7,9)

আমরা ব্যবহার করতে পারি 1এবং 0পরিবর্তে Oএবং X?
পাভেল

1
নিডজ বুবলিজ প্লিজ সাহায্য পাঠান
ক্রিস্টোফার

3
(1,1)কারও পক্ষে বুদবুদ না থাকা গ্রহণযোগ্য (যেমন টপ-বাম "সেল" সর্বদা আন্ডারস্কোর থাকে)?
জোনাথন অ্যালান

1
@ জোনাথান অ্যালান হ্যাঁ
ম্যাথু রোহ

1
@ কেভিন ক্রুজসেন এটি একটি সম্পূর্ণ প্রোগ্রাম হতে হবে না।
ম্যাথু রোহ

উত্তর:


7

সি (উইন্ডোজ), 260 248 বাইট

#import<windows.h>
i,j,l,r;b(w,h){char*s=malloc(l=w*h+h);for(i=h;i--;*s++=10)for(j=w;j--;*s++=i%2^j%2?79:45);*(s-1)=0;s-=l;for(srand(time(0));j>system("cls")+puts(s)-2;j>-1?s[j]=88:0)for(Sleep(1000),r=rand(),j=-2,i=r+l*2;--i-r;j=s[i%l]==79?i%l:j);}

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


নোট করুন যে থ্রেড লাইব্রেরিতে একটি ঘুমের কার্য রয়েছে যা সি ++ 11 এ অন্তর্ভুক্ত রয়েছে।
ম্যাথু রোহ

@ মাথেররোহ ইয়েপ, তবে এটি সংক্ষিপ্ত, এবং এটি system("cls")উইন্ডোজ-নির্দিষ্টও, সুতরাং কোডটি থ্রেড লাইব্রেরির সাথে বেশি পোর্টেবলও না হবে। এবং সি ++ সহ আমারও অন্তর্ভুক্ত করা প্রয়োজন iostreamবা cstdio
স্টেডিবক্স

বিটিডব্লিউ আপনার পর্দাটি পুনরায় সেট করার দরকার নেই। এটি এটি খাটো করে তুলবে।
ম্যাথু রোহ

5

পাইথন 3 , 222 220 বাইট

এটি আমার প্রথমবারের উত্তর দেওয়া, সুতরাং দয়া করে বিনয়ী হন (এবং আমি যে ভুলগুলি করেছি তা নির্দেশ করুন)

import time,random as t
def f(c,r):
 p=print;a='0_'*c;d=((a[:c]+'\n'+a[1:c+1]+'\n')*r)[:-~c*r]
 for i in[1]*((r*c+r%2*c%2)//2):
  p(d);k=1
  while d[k]!='0':k=t.randrange(len(d))
  d=d[:k]+'X'+d[k+1:];time.sleep(1)
 p(d)

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

কিভাবে এটা কাজ করে:

  1. একসাথে প্রচুর '0 _' এর চেইন করুন
  2. '0_0 _... Chop n' এবং '_0_0 ... \ n' অংশগুলিতে টুকরো টুকরো করে কাটা
  3. সূচীতে চরটি '0' না হওয়া পর্যন্ত এলোমেলো সূচকগুলি তৈরি করুন
  4. উত্পন্ন সূচকটিতে চরের সাথে একটি নতুন স্ট্রিং তৈরি করুন একটি 'এক্স' দিয়ে প্রতিস্থাপন করা হয়েছে (নন-মিউটেবল স্ট্রিংয়ের জন্য আপনাকে পাইথন!)
  5. পুনরাবৃত্তি r*c+r%2*c%2বার: r*cপ্যাটার্নে বুদবুদ রয়েছে, যদি না r এবং c উভয়ই অদ্ভুত থাকে তবে এই ক্ষেত্রে রয়েছে r*c+1

1
পিপিসিজিতে আপনাকে স্বাগতম!
অ্যাডমবর্কবার্ক

1
এটি বরং গৌণ তবে আপনার প্রস্থ এবং উচ্চতা বিপরীত। দুর্দান্ত উত্তর যদিও! (কেবল এটিকে পরিবর্তন করুন f(c,r)এবং আপনি ভাল থাকবেন)।
রাসার

@ আরসার ওউফস, আপনাকে ধন্যবাদ!
নীল

4

এমএটিএল , 37 বাইট

:!i:+o`T&Xxt3:q'_OX'XEcD2y1=ft&v1Zr(T

উপরের-বাম কোণটি সর্বদা একটি আন্ডারস্কোর (চ্যালেঞ্জের দ্বারা অনুমোদিত)।

স্ক্রিনটি পর্যায়ক্রমে সাফ হয়ে গেছে। আমি স্ক্রিনটি সাফ না করে একটি বাইট সংরক্ষণ করতে পারি, তবে এটি আরও ভাল দেখাচ্ছে।

প্রোগ্রামটি সমস্ত পর্যায় প্রদর্শিত করার পরে একটি ত্রুটি ( ডিফল্টরূপে অনুমোদিত ) দিয়ে প্রস্থান করে

এমএটিএল অনলাইন এ চেষ্টা করুন ! (যদি এটি কয়েক সেকেন্ড পরে কাজ না করে তবে দয়া করে পৃষ্ঠাটি রিফ্রেশ করুন এবং আবার চেষ্টা করুন)।


4

গণিত (145 বাইট)

বেনামী ফাংশন, উচ্চতা এবং ইনপুট হিসাবে প্রস্থ লাগে (যাতে - যে যদি একটা সমস্যা, প্রতিস্থাপন {##}সঙ্গে {#2,#}একটি অতিরিক্ত 2 বাইট কোড মাঝখানে)।

কোড:

Monitor[Do[Pause@1,{i,NestList[RandomChoice@StringReplaceList[#,"O"->"X"]&,""<>Riffle["_"["O"][[Mod[#+#2,2]]]&~Array~{##},"
"],Floor[##/2]]}],i]&

ব্যাখ্যা:

  • ""<>Riffle[Array["_"["O"][[Mod[#+#2,2]]]&,{##}],"\n"] "_" গুলি এবং "ও" এর একটি অ্যারে তৈরি করে এবং তারপরে নতুন লাইনের মধ্যে স্ট্রিংজয়িং দিয়ে প্রাথমিক, অবিরত বাবল-মোড়ানো তৈরি করে।
  • NestList[RandomChoice@StringReplaceList[#,"O"->"X"]&,..., Floor[##/2]]"এক্স" দিয়ে প্রতিস্থাপন করতে বার বার "ও" এর মধ্যে একটি বেছে নিন, যতবার "ও" গুলি রয়েছে (যা তল [প্রস্থ * উচ্চতা / ২]] - "জোনাথন অ্যালানকে" _ "রাখার ধারণার জন্য ধন্যবাদ উপরের বাম কোণে "ও" এর পরিবর্তে ", অন্যথায় এটি এর Ceilingপরিবর্তে হবে এবং এভাবে আরও 2 বাইট হবে)।
  • Monitor[Do[Pause@1,{i,...}],i]তোলে i, 1 সেকেন্ড প্রত্যেকের জন্য কপি করে প্রিন্ট তালিকা আমরা শুধু হিসাব মান গ্রহণ করা, এবং পরিবর্তনশীল i

উদাহরণ আউটপুট:

গণিতের জিআইএফ পপিং বাবল-মোড়ক


3

জেলি , 30 29 বাইট

=”OTX
+þ⁹++µị⁾_OYµṄœS1”XǦµÐL

উদাহরণ রান

প্রোগ্রামটি যুক্তিগুলির সাথে লিঙ্কটিকে ডায়াড হিসাবে কল করে এবং তারপরে একটি বার্তা দিয়ে প্রস্থান করে (যার জন্য কোডটি çṛ“\'=ṙMḋḌẓ(ėo»)

সামান্য পার্থক্য: নিচের ডানদিকে "সেল" সর্বদা একটি বাবল হতে হবে (বদলে শীর্ষ-বাম প্রশ্নে উদাহরণ মত), এই তা নিশ্চিত করার জন্য যখন সমস্ত বুদবুদ র্যান্ডম পছন্দ আয় 0 popped যা হবে "X"এ তালিকার শেষ - এর পরিবর্তে মানটির কোনও পরিবর্তন হয় না এবং লুপটি ভেঙে দেয়।

দ্রষ্টব্য: স্ক্রিনটি সাফ করে না (নির্দিষ্ট করা হয়নি, এবং আমি কীভাবে এটি করব তা নিশ্চিত নই)।

কিভাবে?

=”OTX - Link 1, choose a random O index or 0: string   e.g. "_O_\nX_O"
 ”O   - "O"
=     - equals (vectorises over the string)            e.g. [0,1,0,0,0,0,1]
   T  - truthy indexes                                 e.g. [2,7]
    X - random choice (if empty this returns 0)

+þ⁹++µị⁾_OYµṄœS1”XǦµÐL - Main link: w, h              e.g. 3, 2
                        - left argument (implicit), w  e.g. 3
  ⁹                     - right argument, h            e.g. 2
 þ                      - outer product with
+                       -     addition                 e.g. [[2,3,4],[3,4,5]]
                        - left argument (implicit), w  e.g. 3
   +                    - add                          e.g. [[5,6,7],[6,7,8]]
                        - right argument (implicit), h e.g. 2
    +                   - add                          e.g. [[7,8,9],[8,9,10]]
     µ                  - monadic chain separation
       ⁾_O              - "_O"
      ị                 - index into (1-based & mod)   e.g. [['_','O','_'],['O','_','O']]
                        -     note: the additions above assure the last entry is an 'O'.
          Y             - join with line feeds         e.g. ['_','O','_','\n','O','_','O']
           µ        µ   - monadic chain separations
                     ÐL - loop until the results are no longer unique:
            Ṅ           -     print with a trailing line feed and yield
             œS1        -     sleep for 1 second and yield
                   ¦    -     apply to index
                  Ç     -         given by calling the last link (1) as a monad 
                        -                 (a random O index or 0 if none exists)
                ”X      -         an "X"  (      ... which will be an X already)

@ It এটি লিখে রেখেছেন।
জোনাথন অ্যালান

2

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

object B{
  def main(a: Array[String]):Unit={
    val v=false
    val (m,l,k,r,n)=(()=>print("\033[H\033[2J\n"),a(0)toInt,a(1)toInt,scala.util.Random,print _)
    val e=Seq.fill(k, l)(v)
    m()
    (0 to (l*k)/2-(l*k+1)%2).foldLeft(e){(q,_)=>
      val a=q.zipWithIndex.map(r => r._1.zipWithIndex.filter(c=>
        if(((r._2 % 2) + c._2)%2==0)!c._1 else v)).zipWithIndex.filter(_._1.length > 0)
      val f=r.nextInt(a.length)
      val s=r.nextInt(a(f)._1.length)
      val i=(a(f)._2,a(f)._1(s)._2)
      Thread.sleep(1000)
      m()
      val b=q.updated(i._1, q(i._1).updated(i._2, !v))
      b.zipWithIndex.map{r=>
        r._1.zipWithIndex.map(c=>if(c._1)n("X")else if(((r._2 % 2)+c._2)%2==0)n("O")else n("_"))
        n("\n")
      }
      b
    }
  }
}

কিভাবে এটা কাজ করে

অ্যালগরিদম প্রথমটি 2D সিকোয়েন্সটি ভুয়া মান সহ পূরণ করে। এটি নির্ধারিত করে যে কমান্ড লাইনটি যুক্ত আর্গুমেন্টের উপর ভিত্তি করে কতগুলি পুনরাবৃত্তি (খোলা বাক্স) বিদ্যমান It এটি উপরের সীমা হিসাবে এই মানটির সাথে একটি ভাঁজ তৈরি করে। ভাঁজের পূর্ণসংখ্যার মানটি অ্যালগরিদমকে কতগুলি পুনরাবৃত্তির জন্য চালানো উচিত তা গণনা করার উপায় হিসাবে কেবল স্পষ্টভাবে ব্যবহৃত হয়। পূর্বে তৈরি ভরাট ক্রমটি হ'ল ভাঁজটির জন্য শুরুক্রম। এটি তাদের Cooresponding indecies সহ মিথ্যা মানগুলির একটি নতুন 2D ক্রম উত্পন্ন করতে ব্যবহৃত হয়।

উদাহরণ স্বরূপ,

[[false, true],
 [true, false],
 [true, true]]

পরিণত হবে

[[(false, 0)], [(false, 1)]]

নোট করুন যে সমস্ত তালিকার সম্পূর্ণ সত্য (0 দৈর্ঘ্য রয়েছে) ফলাফল তালিকা থেকে বাদ দেওয়া হয়েছে। এরপরে অ্যালগরিদম এই তালিকাটি নেয় এবং বহিরাগতের তালিকায় একটি এলোমেলো তালিকা চয়ন করে। এলোমেলো তালিকাটি আমরা বেছে নিলাম এলোমেলো সারি হিসাবে বেছে নেওয়া হয়েছে। সেই এলোমেলো সারি থেকে, আমরা আবার একটি এলোমেলো সংখ্যা, একটি কলাম সূচক পাই। একবার আমরা এই দুটি এলোমেলো সূচকগুলি খুঁজে পেলে আমরা 1000 মাইল সেকেন্ডের জন্য যে থ্রেডটি রেখেছি তা ঘুমাই।

আমরা ঘুমানোর পরে, আমরা পর্দা সাফ করি এবং আমাদের তৈরি trueএলোমেলিক সূচকগুলিতে আপডেট হওয়া একটি মান সহ একটি নতুন বোর্ড তৈরি করি।

এটি সঠিকভাবে মুদ্রণ করতে, আমরা mapমানচিত্রের সূচী সহ এটি ব্যবহার করি এবং জিপ করি যাতে আমাদের প্রসঙ্গে। আমরা কিনা আমরা একটি মুদ্রণ উচিত ক্রম সত্য মান ব্যবহার Xবা পারেন একটি Oবা _। পরবর্তীটি চয়ন করতে, আমরা সূচক মানটি আমাদের গাইড হিসাবে ব্যবহার করি।

আকর্ষণীয় বিষয়গুলি লক্ষ্য করুন

এটি কোনও Oবা একটি মুদ্রণ করা উচিত কিনা তা নির্ধারণের জন্য _, শর্তসাপেক্ষ ((r._2 % 2) + c._2) % 2 == 0ব্যবহৃত হয়। r._2বর্তমান সারি সূচকে c._2উল্লেখ করে বর্তমান কলামটি বোঝায়। যদি কোনও একটি বিজোড় সারিতে থাকে, r._2 % 2তবে 1 হবে, সুতরাং c._2শর্তাধীন এক এক করে অফসেট করুন । এটি নিশ্চিত করে যে বিজোড় সারিগুলিতে কলামগুলি ইচ্ছামত 1 দ্বারা সরানো হয়েছে।

স্ট্রিংটি মুদ্রণ করা "\033[H\033[2J\n", আমি পড়ে থাকা কিছু স্ট্যাকওভারফ্লো উত্তর অনুসারে, স্ক্রিনটি সাফ করে। এটি টার্মিনালে বাইট লিখছে এবং এমন কিছু মজার স্টাফ করছে যা আমি সত্যিই বুঝতে পারি না। তবে আমি এটি সম্পর্কে সবচেয়ে সহজ উপায় বলে মনে করেছি। যদিও এটি ইন্টেলিজ আইডিইএর কনসোল এমুলেটরটিতে কাজ করে না। আপনাকে এটি নিয়মিত টার্মিনাল ব্যবহার করে চালাতে হবে।

এই কোডটি প্রথম দেখলে এটি দেখতে অন্য একটি সমীকরণ দেখতে অদ্ভুত মনে হতে পারে (l * k) / 2 - (l * k + 1) % 2। প্রথমত, চলক নামগুলি ডিমেস্টাইফাই করা যাক। lপ্রোগ্রামটিতে পাস করা প্রথম যুক্তিগুলিকে kবোঝায় যখন দ্বিতীয়টি বোঝায়। এটি অনুবাদ করতে (first * second) / 2 - (first * second + 1) % 2,। এই সমীকরণের লক্ষ্যটি হল সমস্ত এক্স এর ক্রম পেতে প্রয়োজনীয় পরিমাণে পুনরাবৃত্তির পরিমাণ নিয়ে আসা। আমি প্রথমবার এটি করেছি, আমি ঠিক তা (first * second) / 2বোধগম্য করেছিলাম । nপ্রতিটি সাবলিস্টে প্রতিটি উপাদানগুলির জন্য , n / 2বুদবুদগুলি আমরা পপ করতে পারি। যাইহোক, ইনপুটগুলির সাথে ডিল করার সময় এটি বিরতি দেয়(11 13)। আমাদের দুটি সংখ্যার গুণাগুণ গণনা করতে হবে, এমনকি যদি এটি এমনকি হয় এমনকি এটি বিজোড় করে তোলে এবং এমনকি এটি বিজোড় হয়, এবং তারপরে এটি 2 দিয়ে মোডটি নেয় তবে এটি কাজ করে কারণ সারি এবং কলামগুলি বিজোড় হয় যাতে একটি কম পুনরাবৃত্তির প্রয়োজন হয় চূড়ান্ত ফলাফল পেতে।

mapএর পরিবর্তে ব্যবহার করা হয় forEachকারণ এতে কম অক্ষর রয়েছে।

যে জিনিসগুলি সম্ভবত উন্নত করা যেতে পারে

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

বর্তমানে কোডটি দুটি পাসে চলে। প্রথমটি একটি নতুন বোর্ড তৈরি করে যখন দ্বিতীয় পাসটি প্রিন্ট করে। আমি মনে করি যে যদি এই দুটি পাসকে এক পাসে একত্রিত করা হয় তবে এটি কয়েকটা বাইট সংরক্ষণ করতে পারে।

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


1

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

document.write(`<pre id=o></pre>`)
setInterval(_=>{(a=o.innerHTML.split(/(O)/))[1]?a[Math.random()*~-a.length|1]=`X`:0;o.innerHTML=a.join``},1e3)
f=(w,h)=>o.innerHTML=[...Array(h)].map((_,i)=>`O_`.repeat(w+h).substr(i,w)).join`
`
<div oninput=f(+w.value,+h.value)><input id=w type=number min=1><input id=h type=number min=1>


প্রস্থটি কক্ষের শর্তাবলী নয় - ফাঁকা (আন্ডারলাইন) স্পেস সহ।
ম্যাথু রোহ

@ ম্যাথরোহো দুঃখিত, উচ্চতার জন্য এটি ঠিক করার কথা মনে আছে তবে আমি প্রস্থটি পরীক্ষা করতে ভুলে গেছি।
নীল

হুম .. এই অংশটি `${`_O`.repeat(w).slice(w)} ${`O_`.repeat(w).slice(w)}কি একরকম করা যায় না ? সম্ভবত প্রথমে নির্ধারণ করার জন্য একটি বুলিয়ান-পতাকা _Oবা O_, এবং তারপরে এটি করবেন .repeat(w).slice(w)?
কেভিন ক্রুইজসেন

1
@ কেভিন ক্রুজসেন আমি দ্রুত বগফিক্সের কারণে 16 বাইট হারিয়েছি যা আমার তখন গল্ফ করার সময় ছিল না। আমি এর পরে অন্য চেহারা নিয়েছি এবং 17 বাইট সাশ্রয় করেছি,
নীল

1

পাইথন - 290 বাইট

এর আগে আমি এর মধ্যে একটিও কখনও করিনি - সুতরাং যে কোনও গঠনমূলক সমালোচনা প্রশংসিত হবে :)

এখানে মূল কৌশলটি বিরক্তিকরভাবে নেস্টেড তালিকা বোঝার জন্য। আমি পপগুলির মধ্যে একটি নতুন লাইন না রেখে কয়েকটি অক্ষর সংরক্ষণ করতে পারি তবে এটি দেখতে দেখতে কুৎসিত।

r=range
q=print
import random as n,time
def f(H,W):
    def p(b):
        q("\n".join(["".join(["O"if(i,j)in b else"X"if(i,j)in X else"_"for j in r(H)])for i in r(W)]));time.sleep(1);q()
    b=[(i,h)for h in r(H)for i in r(h%2,W,2)];n.shuffle(b);X=[]
    while len(b)>0:
        p(b);X+=[b.pop()]
    p(b)

হাই, পিপিসিজিতে আপনাকে স্বাগতম! চ্যালেঞ্জ নিতে ছিল wএবং hপরিবর্তে একটি হার্ডকোডেড থাকার, (stdin মাধ্যমে একটি ফাংশন ইনপুট, বা অনুরূপ কিছু হিসাবে) ইনপুট হিসাবে H=4 W=6। এছাড়াও, যদিও আমি পাইথনে কখনই প্রোগ্রামিং করি নি, আমি মনে করি আপনি আপনার বর্তমান কোডে কিছু স্পেস গল্ফ করতে পারেন। পাইথনে গল্ফিংয়ের টিপস আরও কীভাবে আরও গল্ফ করা যায় সে সম্পর্কে আপনাকে ধারণা দেওয়ার জন্য এটি পড়তে আগ্রহী হতে পারে। উপভোগকর তোমার থাকা! :)
কেভিন ক্রুইজসেন

এছাড়াও, আপনার মন্তব্য সম্পর্কে: " আমি পপগুলির মধ্যে একটি নতুন লাইন না রেখে কয়েকটি চরিত্রকে বাঁচাতে পারতাম তবে এটি কেবল কুশ্রী দেখায় " "বাস্তব জীবনের প্রোগ্রামিংয়ে এটি যতই কুৎসিত বা কতটা না করানো যায় না কেন, কোডগল্ফ হিসাবে সংরক্ষণের বিষয়ে নয় যতটা সম্ভব বাইট খাটো এবং কৃপণতা ভাল, ভাল। ;)
কেভিন ক্রুইজসেন

@ কেভিন ক্রুইজসেন আমার উপরের পাইথন 3 এর কেবলমাত্র এটি ডাব্লু, এইচ এর কার্যকারিতা হিসাবে রয়েছে?
আর্য


1
ঠিক আছে - আমি এখন এটি এইচ এবং ডাব্লু এর একটি ফাংশন করেছি।
আর্য

1

কাঠকয়লা , 49 46 39 বাইট (নন-কেপটিং)

UONNO_¶_OAKAαA№αOβHWψβ«A§α§⌕AαO‽βXA№αOβ

বাগাড়ম্বরপূর্ণ

Oblong(InputNumber(), InputNumber(), "O_\n_O")
Assign(PeekAll(), a)
Assign(Count(a, "O"), b)
RefreshWhile (k, b) {
    AssignAtIndex(a, AtIndex(FindAll(a, "O"), Random(b)), "X")
    Assign(Count(a, "O"), b)
}

1

এপিএল (ডায়ালগ) , 61 59 বাইট

⎕←m'O_'[2|-/¨⍳⎕]
(b/,m)[?+/b'O'=,m]←'X'
DL 1
2/⍨'O'∊⎕←m

⎕← আউটপুট
m←মিটার , যেখানে মি হয়
'O_'[... ] এই অক্ষরগুলি দ্বারা ... ইন্ডেক্স
2| বিভাজন-বাকি-হোয়েন-বিভক্ত-বাই-দুই
-/¨ প্রতিটি মধ্যে পার্থক্য
 সব স্থানাঙ্ক (সূচকের) আকৃতি একটি অ্যারের মধ্যে
 সাংখ্যিক ইনপুট (সারি এবং কলামের সংখ্যা )

(... )[... ]←'X' এক ধার্য চরিত্র এক্স ...
b/ ফিল্টার-by- (সংজ্ঞায়িত করা)
,m raveled মি, বিশেষভাবে ... উপাদান
? সীমার এক একটি র্যান্ডম উপাদান (শয়নকামরা সংখ্যা)
+/ এর সমষ্টি
b← , যেখানে হয়
'O'= বুলিয়ান যেখানে চিঠি সমান জন্য
,mকরছি raveled

⎕DL 1ডিএল এক সেকেন্ড

→2 লাইন 2 যান
/⍨ (শয়নকামরা দ্বারা ফিল্টার) যদি
'O'∊ কিনা চিঠি একজন সদস্য
⎕←m যদি outputted মান, যেখানে যদি outputted মান মি

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


১.0.০ সংস্করণ থেকে এটি খাটো হবে:

{0::→⋄'X'@(⊂(?∘≢⊃⊢)⍸'O'=⍵⊣⎕DL 1)⊢⎕←⍵}⍣≡'O_'[2|-/¨⍳⎕]


1

পাইথন 3, 1958 বাইট tes

import time,random
def f(w,h):
 a=bytearray(b'0-'*w*h);b=[*range(0,w*h,2)];random.shuffle(b);
 while 1:print(*(a.decode()[w*i:w*i+w]for i in range(h)),sep='\n');a[b.pop()]=88;time.sleep(1)

ব্যবহার bytearrayএবং decodeslicing চেয়ে খাটো বলে মনে হয় এবং একটি স্ট্রিং একটি লা reassembling a[:i]+'X'+a[i+1:]

import time,random
def f(w,h):
 x=[*range(1,h*w,2)];random.shuffle(x)
 while 1:
  for i in range(w*h):
   print('-X0'[(i%w%2!=i//w%2)+(i in x)],end='\n'[i%w<w-1:])
  print();time.sleep(1);x.pop()

0

জাভা 7, 317 বাইট

void c(int w,int h)throws Exception{String r="";int x=0,j=0,i;for(;j++<h;x^=1,r+="\n")for(i=0;i<w;r+=(i+++x)%2<1?"_":"O");for(System.out.println(r);r.contains("O");System.out.println(r=r.substring(0,x)+'X'+r.substring(x+1))){Thread.sleep(1000);for(x=0;r.charAt(x)!='O';x=new java.util.Random().nextInt(r.length()));}}

ব্যাখ্যা:

void c(int w, int h) throws Exception{                     // Method with two integer parameters (throws Exception is required for the Thread.sleep)
  String r = "";                                           //  String we build to print
  int x=0, j=0, i;                                         //  Some temp values and indexes we use
  for(; j++<h;                                             //  Loop over the height 
      x^=1,                                                //    After every iteration change the flag `x` every iteration from 0 to 1, or vice-versa
      r += "\n")                                           //    And append the String with a new-line
    for(i=0; i<w;                                          //   Inner loop over the width
        r += (i++ + x)%2 < 1 ? "_" : "O")                  //    Append the String with either '_' or 'O' based on the row and flag-integer
    ;                                                      //   End inner width-loop (implicit / no body)
                                                           //  End height-loop (implicit / single-line body)
  for(                                                     //  Loop
    System.out.println(r);                                 //   Start by printing the starting wrap
    r.contains("O");                                       //   Continue loop as long as the String contains an 'O'
    System.out.println(r=                                  //   Print the changed String after every iteration
        r.substring(0,x)+'X'+r.substring(x+1))){           //    After we've replaced a random 'O' with 'X'
      Thread.sleep(1000);                                  //   Wait 1 second
      for(x=0; r.charAt(x) != 'O';                         //   Loop until we've found a random index containing still containing an 'O'
          x = new java.util.Random().nextInt(r.length()))  //    Select a random index in the String
      ;                                                    //   End loop that determines random index containing 'O' (implicit / no body)
  }                                                        //  End loop
}                                                          // End method

পরীক্ষার জিআইএফ (4,6)

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


0

পার্ল, 148 বাইট

146 বাইট কোড + -plপতাকা।

$_=O x($x=$_+1);s/O\K./_/g;for$i(1..($y=<>)){$b.=($i%2?$_:_.s/.$//r).$/}}print$_="\e[H$b";while(/O/){$r=0|rand$y*$x+3;s/.{$r}\KO/X/s||redo;sleep 1

এটি চালানোর জন্য:

perl -ple '$_=O x($x=$_+1);s/O\K./_/g;for$i(1..($y=<>)){$b.=($i%2?$_:_.s/.$//r).$/}}print$_="\e[H$b";while(/O/){$r=0|rand$y*$x+3;s/.{$r}\KO/X/s||redo;sleep 1' <<< "6
4"

0

ম্যাটল্যাব (আর ২০১201 বি), ১2২ বাইট

কোড:

x=input('');m=[eye(x(2),x(1)) ''];m(:)='O';m(1:2:end,2:2:end)='_';m(2:2:end,1:2:end)='_';o=find(m=='O');r=o(randperm(nnz(o)));disp(m);for i=r';pause(1);m(i)='X';disp(m);end

সুপারিশ সর্বদা স্বাগত! এটি অনলাইন চেষ্টা করুন!

প্রোগ্রাম আউটপুট:

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

ব্যাখ্যা:

x = input( '' );                    % Input
m = [ eye( x( 2 ), x( 1 ) ) '' ];   % Character Matrix
m( : ) = 'O';                       % Fill Matrix with "Bubbles"

m( 1:2:end, 2:2:end ) = '_';        % Alternate Spaces Between Bubbles (Part 1)
m( 2:2:end, 1:2:end ) = '_';        % Alternate Spaces Between Bubbles (Part 2)

o = find( m == 'O' );               % Index Bubble Locations
r = o( randperm( nnz( o ) ) );      % Randomize Bubble Locations

disp( m );                          % Display Initial Bubble Wrap Phase

for i = r'
    pause( 1 );                     % Pause for 1 Second
    m( i ) = 'X';                   % Pop Bubble
    disp( m );                      % Display Subsequent Bubble Wrap Phase
end
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.