দূষণের শেষ পর্যায়ে


10

5x5 প্রাপকের ভিতরে একটি ভাইরাস রয়েছে। যেহেতু আমরা জানি যে এটি কীভাবে এর দূষণের প্রচার করে, আপনার মিশনটি দূষণের শেষ পর্যায়ে আউটপুট করা।

প্রাপক

এটি 5x5 এর দ্বিমাত্রিক অ্যারে হিসাবে উপস্থাপিত হবে:

0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1

এর 1অর্থ এমন একটি অবস্থান যেখানে ভাইরাসটি ইতিমধ্যে দূষিত হয়ে গেছে এবং এমন 0একটি অবস্থান দূষিত নয়।

ভাইরাস কীভাবে ছড়িয়ে পড়ে

  1. একটি দূষিত অবস্থান পরিষ্কার হতে পারে না।
  2. যদি তার সংলগ্ন অবস্থানগুলির কমপক্ষে দুটি (উত্তর, পূর্ব, দক্ষিণ এবং পশ্চিম কোষ) দূষিত হয় তবেই একটি পরিষ্কার অবস্থানটি পরবর্তী পর্যায়ে দূষিত হবে।
  3. দূষণের শেষ পর্যায়ে যখন আরও পরিষ্কার কোষগুলি দূষিত করা যায় না তখন ঘটে।

নমুনা

দূষকের প্রথম পর্যায় হিসাবে প্রাপক বর্ণিত প্রাপক হিসাবে ব্যবহার করা, দ্বিতীয় পর্যায়ে হবে:

0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1

দূষণের 3 মঞ্চটি হ'ল:

0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

দূষণের 4 মঞ্চটি হ'ল:

0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

এবং মঞ্চ 5 (এই উদাহরণস্বরূপ, শেষটি হবে):

0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

চ্যালেঞ্জ

দূষণের এক পর্যায়ে ইনপুট হিসাবে দেওয়া, আপনার দূষণের শেষ পর্যায়ে আউটপুট করা উচিত।

আপনি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে অনুমতি দেওয়া হয়। আপনি ইনপুটটিকে অ্যারে / তালিকা হিসাবে, পৃথক সংখ্যা হিসাবে বা স্ট্রিং হিসাবে নিতে পারেন। আপনার ভাষার সাথে মানানসই সর্বোত্তম উপায় চয়ন করে।

বাইটের সংক্ষিপ্ত উত্তরটি জিতল!

আর একটি পরীক্ষার মামলা

Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1

Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1

Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0

Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0

Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0

1
1 0 1আউটপুট কিভাবে ঘটতে পারে? কেন্দ্রটি শূন্যটি কি দুটি 1এস সংলগ্ন নয় ?
লিন

@ লিন .. আমি আপডেট করেছি;) ... এর জন্য দুঃখিত
সরানো হয়েছে

1
আপনি 1 0 0 1 0 \ 0 0 1 0 1 \ 0 0 0 0 0 \ 1 0 0 0 0 \ 0 0 1 0 0একটি পরীক্ষা কেস হিসাবে যুক্ত করতে পারেন ?
কনর ও ব্রায়ান

@ CᴏɴᴏʀO'Bʀɪᴇɴ। ধন্যবাদ যুক্ত করা হয়েছে
সরানো হয়েছে

2
এখন পর্যন্ত সমস্ত পরীক্ষার ক্ষেত্রে কেবল সম্পূর্ণ সারি এবং কলামগুলি খালি শেষ আছে finish আমি প্রস্তাব দেব 0 1 0 0 0 \ 0 0 0 0 1 \ 0 0 1 0 0 \ 1 0 0 0 0 \ 0 0 0 1 0, যা অপরিবর্তিত থাকে।
xnor

উত্তর:


12

যেহেতু এটি মূলত আমি আপনাকে দেওয়া সেলুলার অটোমেটনের কথা বলছি ..

গলি কুইক লাইফ বিধি, 10 বাইট

01234/234V

নিয়মটি ইনপুট করুন, গ্রিডটি গলিতে পেস্ট করুন, রান প্যাটার্ন করুন। ফলস্বরূপ প্যাটার্নটি আউটপুট।

ব্যাখ্যা:

01234 Survive on any number of neighbors
     /234 Born on >2 neighbors
         V Only directly adjacent neighbors count

অথবা আপনি যদি পুরো রুলওডার নিয়মটিতে জিদ করেন, 89 বাইট:

@RULE X
@TABLE
n_states:2
neighborhood:vonNeumann
symmetries:permute
011001
011101
011111

নিয়মের নাম হল এক্স, আগের মতো একই পদক্ষেপ।



1
গলি কুইক লাইফ B3/S23যা কিছু করতে পারে তা অনুকরণ করতে পারে! ... তবে এর কঠোর ইনপুট ফর্ম্যাট নেই (যেমন পুরো প্রোগ্রামটি ইনপুটটিতে অন্তর্ভুক্ত করা হয় (আপনি কীভাবে এটি করবেন?))। তবে কেন মজা লাগল ??
ক্যালকুলেটরফলাইন

ঠিক আছে, আমাদের কেবল এমন একটি প্রশ্নের অপেক্ষা করতে হবে যা সেলুলার অটোমেটনের দীর্ঘমেয়াদী আচরণে উত্সাহিত হয়!
ক্যালকুলেটরলাইন

1
বৈধতা সম্পর্কে আমার কিছু সন্দেহ আছে। গলি যদি কেবল চূড়ান্ত ফলাফল প্রদর্শন করে তবে তা ঠিক হবে তবে এটি মধ্যবর্তী ফলাফলগুলিও প্রদর্শন করবে (আমি ভুল না হলে)
লিটারোসিয়াস্ত

1
পুনঃটুইটগুলি
lirtosiast

5

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

s=' '*6+input()
exec"s=s[1:]+('1'+s)[sum(s[i]<'1'for i in[-6,-1,1,6])>2or'/'>s];"*980
print s[6:]

এটি অনলাইনে চেষ্টা করুন । ইনপুটটি প্রতিটি লাইনে নিউলাইন দ্বারা সীমিত করে একটি উদ্ধৃত স্ট্রিং হিসাবে নেওয়া হয়। 980অনুকূল নয় এবং 35 কম একাধিক যেহেতু এটা এই প্রোগ্রাম দৈর্ঘ্যের উপর কোন প্রভাব রয়েছে তার সাথে প্রতিস্থাপিত হতে পারে, আমি সর্বনিম্ন নিরাপদ উপরের পাঠকদের জন্য একটি ব্যায়াম যেমন আবদ্ধ সংকল্প ত্যাগ করেছে।


ইনপুটটির আশেপাশে উদ্ধৃতিগুলি দরকার এবং escaped n নিউলাইনগুলি এড়িয়ে গেছে।
ক্যালকুলেটরফলাইন

@ ক্যাটস আরেফ্লুফি আমি বিশ্বাস করি আইডিয়ন লিঙ্কটি ইতিমধ্যে পরিষ্কার করে দিয়েছে কীভাবে ইনপুট নেওয়া হয়।
xsot

ইনপুটটি প্রতিটি সারিতে \ n s দ্বারা সীমিত করে একটি উদ্ধৃত স্ট্রিং হিসাবে নেওয়া হয়।
ক্যালকুলেটরফলাইন

ঠিক আছে, আমি এটিকে সম্পাদন করব যাতে এটি কম দুষ্প্রাপ্য হয়।
xsot 3

3

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

একটি ক্রিয়া হিসাবে যা সংখ্যার বা স্ট্রিংগুলির বিন্যাস হিসাবে ইনপুট গ্রহণ করে।

নীল থেকে -2 বাইট ( yস্ট্রিং রূপান্তর সহ অ্যাসাইনমেন্টের সংমিশ্রণ )

-২ বাইট (পরিবর্তনশীল অপসারণ j)

f=x=>(y=x.map((z,i)=>~(i%5&&x[i-1])+~(i%5<4&x[i+1])+~x[i-5]+~x[i+5]<-5|z))+[]==x?y:f(y)
<!-- Snippet demo with array <-> string conversion for convenience -->
<textarea id="input" cols="10" rows="5">0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1</textarea>
<button id="submit">Run</button>
<pre id="output"></pre>
<script>
strToArray=x=>x.match(/\d/g)
arrayToStr=x=>([]+x).replace(/(.),(.),(.),(.),(.),*/g, '$1 $2 $3 $4 $5\n')
submit.onclick=_=>output.innerHTML=arrayToStr(f(strToArray(input.value)))
</script>


(y=...)+''==xপরিবর্তে লিখে 2 বাইট সংরক্ষণ করুন (y=...),y+''==x
নীল

2

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

tn:"t5Bt!=~2X53$Y+1>Y|

এটি ভাষার বর্তমান সংস্করণে (15.0.0) কাজ করে।

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

ইনপুট ফর্ম্যাটটি: সেমিকোলন দ্বারা পৃথক করা সারিগুলির সাথে 2 ডি অ্যারে। সুতরাং চারটি পরীক্ষার ক্ষেত্রে নিম্নলিখিত ইনপুট রয়েছে:

[0 0 0 0 1; 0 0 0 0 1; 0 0 0 1 1; 0 0 1 1 1; 0 1 1 1 1]

[1 1 0 0 1; 0 0 0 0 0; 0 1 0 0 1; 0 0 0 0 0; 1 0 0 0 1]

[1 0 0 0 0; 0 1 0 0 0; 0 0 1 0 0; 0 0 0 1 0; 0 0 0 0 1]

[1 0 0 1 0; 0 0 1 0 1; 0 0 0 0 0; 1 0 0 0 0; 0 0 1 0 0]

ব্যাখ্যা

এটি বারবার নিম্নলিখিত মাস্কের সাহায্যে ইনপুট অ্যারের 2D কনভোলজেশন সম্পাদন করে, যা কোন প্রতিবেশীকে দূষিত হিসাবে গণ্য করে তা সংজ্ঞায়িত করে:

0 1 0
1 0 1
0 1 0

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

2 এর একটি প্রান্তিক রূপটি আউটপুটটিতে প্রয়োগ করা হয় এবং ফলাফলটি মূল ইনপুট সহ উপাদান অনুসারে ORed হয়।

চূড়ান্ত অবস্থা পৌঁছেছে তা নিশ্চিত করতে এটি অবশ্যই যথেষ্ট পরিমাণে করা উচিত। একটি সাধারণ মাপদণ্ড যা এটি পূর্ণ করে: হ'ল ইনপুট অ্যারেতে প্রবেশের সংখ্যার চেয়ে বহুগুণ পুনরাবৃত্তি (এটি পরীক্ষার ক্ষেত্রে 25 বার)।

t          % get input 2D array implicitly. Duplicate
n:"        % repeat as many times as elements in the input array
  t        %   duplicate array
  5B       %   number 5 in binary: row vector [1 0 1] 
  t!       %   duplicate and transpose into column
  =~       %   compare for inequality with broadcast. Gives desired mask
  2X53$Y+  %   2D convolution. Output has same size as input 
  1>       %   true for elements equal or greater than 2
  Y|       %   element-wise OR with previous copy of the array
           % end loop. Implicitly display

1

টিআই-বেসিক, 151 বাইট

Prompt [A]
[A]→[B]
Lbl 0
[B]→[A]
For(Y,1,5
For(X,1,5
DelVar ADelVar BDelVar CDelVar D
If Y>1:[A](Y-1,X→A
If Y<5:[A](Y+1,X→B
If X>1:[A](Y,X-1→C
If X<5:[A](Y,X+1→D
max(A+B+C+D≥2,[A](Y,X→[B](Y,X
End
End
If [A]≠[B]:Goto 0
[B]

ইনপুট হিসাবে [[1,0,0,1,1][1,0,0,0,0]...]


1
আমি মনে করি আপনি এটি প্রায় 100 বাইটে পেতে পারেন। প্রথম টিপ: একটি Repeatলুপ ব্যবহার করুন ।
lirtosiast

1

লুয়া, 236 বাইট

s=arg[1]u=s.sub while p~=s do p=s s=s:gsub("(%d)()",function(d,p)t=0 t=t+((p-2)%6>0 and u(s,p-2,p-2)or 0)t=t+(p-7>0 and u(s,p-7,p-7)or 0)t=t+(p+5<30 and u(s,p+5,p+5)or 0)t=t+(p%6>0 and u(s,p,p)or 0)return t>1 and 1 or d end)end print(s)

কমান্ড লাইনে ইনপুট গ্রহণ করে এবং উত্তর পাওয়ার জন্য লুয়ার স্ট্রিং ম্যানিপুলেশন ব্যবহার করে।

Ungolfed:

s=arg[1]
u=s.sub
while p~=s do
    p=s
    s=s:gsub("(%d)()", function(d, p)
                 t=0
                 t=t+((p-2)%6>0 and u(s,p-2,p-2)or 0)
                 t=t+(p-7>0 and u(s,p-7,p-7)or 0)
                 t=t+(p+5<30 and u(s,p+5,p+5)or 0)
                 t=t+(p%6>0 and u(s,p,p)or 0)
                 return t>1 and 1 or d
    end)
end
print(s)

1

এপিএল, 76 72 70 বাইট

{⍵∨1<¯1 ¯1↓1 1↓↑+/(1 0)(¯1 0)(0 ¯1)(0 1){⍺[1]⊖⍺[2]⌽⍵}¨⊂¯1⊖¯1⌽7 7↑⍵}⍣≡

এটি যা করে তা হল: ম্যাট্রিক্সকে 7x7 এককে প্রসারিত করুন, তারপরে আমাদের যুক্তিটি (ওমেগা) কেন্দ্র করুন। এই ম্যাট্রিক্স থেকে 4 "শিশু" ম্যাট্রিকস তৈরি করুন, প্রত্যেকে আলাদা আলাদা দিকে (উপরে / নীচে / বাম / ডানদিকে) স্থানান্তরিত করুন, তাদের একসাথে যুক্ত করুন (সুতরাং আমরা প্রতিবেশীদের সংখ্যা পেয়েছি), ফ্রেমটি ড্রপ করুন (আবার ফিরে যেতে 5x5 ম্যাট্রিক্স)। বা "পুরানো" একের সাথে এই নতুন ম্যাট্রিক্সটি নিশ্চিত করা যায় যে আমরা প্রক্রিয়াতে কোনও কোষ ফেলেছি না (অর্থাত্ প্রান্তে)। তারপরে, ⍣≡একটি নির্দিষ্ট-পয়েন্টের মানটিতে সংমিশ্রণটি ব্যবহার করুন ।

{⍵∨1<¯1 ¯1↓1 1↓↑+/(1 0)(¯1 0)(0 ¯1)(0 1){⍺[1]⊖⍺[2]⌽⍵}¨⊂¯1⊖¯1⌽7 7↑⍵}⍣≡
                                                             7 7↑⍵    ⍝ Expand the matrix
                                                       ¯1⊖¯1⌽         ⍝ Center the original matrix
                  (1 0)(¯1 0)(0 ¯1)(0 1){⍺[1]⊖⍺[2]⌽⍵}¨⊂               ⍝ Construct 4 child matrices, each offset from the original one by the values on the left of {}
                +/                                                    ⍝ Sum each matrix into one giant matrix
               ↑                                                      ⍝ Mix
     ¯1 ¯1↓1 1↓                                                       ⍝ Transform the 7x7 matrix back to a 5x5 matrix
   1<                                                                 ⍝ Check which elements are smaller than 1
 ⍵∨                                                                   ⍝ "Or" this matrix and the generated matrix
{                                                                 }⍣≡ ⍝ Find the fixpoint

উদাহরণ (বিবেচনা ফাংশন নির্ধারিত হয়েছিল contaminate):

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