জীবনের নিয়ম পরিবর্তন করুন


15

লাইফ-এর মতো সেলুলার অটোমেটন হ'ল সেলুলার অটোমেটন যা কনওয়ের গেম অফ লাইফের অনুরূপ, এতে তারা একটি (তাত্ত্বিকভাবে) অসীম বৃহত বর্গক্ষেত্র গ্রিডে কাজ করে, যেখানে প্রতিটি কোষের ঠিক 8 টি প্রতিবেশী থাকে এবং 2 টি রাজ্যের মধ্যে একটি, যথা জীবিত এবং মৃত ।

তবে, এই লাইকের মতো সংস্করণগুলি এক গুরুত্বপূর্ণ উপায়ে পৃথক: প্রদত্ত ঘরের জীবিত হয়ে উঠার নিয়ম এবং পরবর্তী প্রজন্মের কাছে বেঁচে থাকার জন্য প্রদত্ত একটি ঘরের নিয়ম।

উদাহরণস্বরূপ, ক্লাসিক গেম অফ লাইফ নিয়মটি ব্যবহার করে B3/S23যার অর্থ একটি নতুন জন্মের জন্য 3 টি জীবন্ত কোষ লাগে এবং বেঁচে থাকার জন্য 2 বা 3 জীবিত প্রতিবেশী হয়। এই চ্যালেঞ্জের জন্য, আমরা ধরে নেব যে প্রতিবেশীরা নিজেকে অন্তর্ভুক্ত করে না, তাই প্রতিটি ঘরে যথাযথ 8 প্রতিবেশী থাকে।

আপনার কাজটি একটি শুরুর কনফিগারেশন, একটি জন্ম নিয়ম, একটি বেঁচে থাকার নিয়ম এবং ইতিবাচক পূর্ণসংখ্যার (প্রজন্মের সংখ্যা পরিচালিত হওয়া) দেওয়া সম্ভব, সংক্ষিপ্ততম কোডটিতে প্রদত্ত প্রজন্মের সংখ্যার জন্য এই নিয়মগুলি ব্যবহার করে লাইফ-এর মতো অটোমেটনের অনুকরণ করুন ulate । প্রারম্ভিক কনফিগারেশনটি বর্গ ম্যাট্রিক্স / 2-মাত্রিক অ্যারে বা মাল্টলাইন স্ট্রিং হবে, আপনি চয়ন করতে পারেন। অন্যদের যেকোন যুক্তিসঙ্গত ফর্ম্যাট এবং পদ্ধতিতে দেওয়া যেতে পারে।

উদাহরণস্বরূপ, জন্মের নিয়ম যদি 12345678(যে কোনও জীবিত প্রতিবেশী) হয় তবে বেঁচে থাকার নিয়মটি ছিল 2357এবং প্রারম্ভিক কনফিগারেশন ছিল

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

পরবর্তী দুটি প্রজন্ম হবে

Generation 1:           Generation 2:

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

প্রদত্ত প্রজন্মের সংখ্যা 10 হলে আউটপুটটি কিছুটা লাইন বরাবর হবে

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

ইনপুট ম্যাট্রিক্সের প্রদত্ত সীমার বাইরে ঘটে যাওয়া পরিবর্তনগুলি আপনাকে হ্যান্ডেল করতে হবে না, তবে ম্যাট্রিক্সের বাইরের সমস্ত কোষ মরা শুরু করে। অতএব, ইনপুট ম্যাট্রিক্স যে কোনও আকারের হতে পারে, আপনার ভাষা যে সর্বাধিক মান সমর্থন করতে পারে to আপনাকে প্রজন্মের মধ্যে বোর্ড আউটপুট দিতে হবে না।

এটি একটি তাই সংক্ষিপ্ততম কোডটি জয়ী।

পরীক্ষার মামলা

এগুলি B/Sব্যবহৃত বিধি নির্দেশ করতে স্বরলিপি ব্যবহার করে

B2/S2, generations = 100কনফিগারেশন:

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

আউটপুট:

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

B1357/S2468, generations = 12কনফিগারেশন:

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

আউটপুট:

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

আপনার যদি আরও পরীক্ষার কেস উত্পন্ন করার দরকার হয় তবে আপনি এই দুর্দান্ত সিমুলেটরটি ব্যবহার করতে পারেন । বোর্ডের আকার সীমাবদ্ধ করার বিষয়টি নিশ্চিত করুন


সিমুলেশন টেরয়েডাল হয়?
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগল্ফার নং, যেমন ম্যাট্রিক্স (তাত্ত্বিকভাবে) আকারে অসীম
কেয়ার্ড কোইনরিঙ্গিংহ

এছাড়াও, আমরা কি প্রদত্ত ম্যাট্রিক্সটি বর্গক্ষেত্র ধরে নিতে পারি?
এরিক দি আউটগল্ফার

2
@ এরিকথ আউটগল্ফার "অসীম বৃহত স্কোয়ার গ্রিড"
কায়ার্ড কোইনারিংহাহিং

তবে এটি বলে না যে আপনি ধরে নিতে পারেন যে ... সম্পাদনা করবে
এরিক দ্য আউটগোল্ফার

উত্তর:


9

এমএটিএল , 24 23 বাইট

xx:"tt3Y6Z+1Gm<8M2Gmb*+

ইনপুটগুলি হ'ল:

  • জন্ম নিয়ম সহ অ্যারে
  • বেঁচে থাকার নিয়মের সাথে অ্যারে
  • প্রজন্মের সংখ্যা
  • ;সারি বিভাজক হিসাবে ব্যবহার করে প্রাথমিক সেল কনফিগারেশন সহ ম্যাট্রিক্স ।

এটি অনলাইন চেষ্টা করুন! অথবা পরীক্ষার কেসগুলি দেখুন: 1 , 2

আরও কয়েকটি বাইটের জন্য আপনি ASCII শিল্পের বিবর্তনটি দেখতে পাবেন ।

ব্যাখ্যা

xx      % Take two inputs implicitly: birth and survival rules. Delete them
        % (but they get copied into clipboard G)
:"      % Take third input implicitly: number of generations. Loop that many times
  tt    %   Duplicate twice. This implicitly takes the initial cell configuration
        %   as input the first time. In subsequent iterations it uses the cell 
        %   configuration from the previous iteration
  3Y6   %   Push Moore neighbourhood: [1 1 1; 1 0 1; 1 1 1]
  Z+    %   2D convolution, maintaining size
  1G    %   Push first input from clipboard G: birth rule
  m     %   Ismember: gives true for cells that fulfill the birth rule
  <     %   Less than (element-wise): a cell is born if it fulfills the birth rule
        %   *and* was dead
  8M    %   Push result of convolution again, from clipboard M
  2G    %   Push second input from clipboard G: survival rule
  m     %   Ismember: gives true for cells that fulfill the survival rule
  b     %   Bubble up the starting cell configuration
  *     %   Multiply (element-wise): a cell survives if it fulfills the survival
        %   rule *and* was alive
  +     %   Add: a cell is alive if it has been born or has survived, and those
        %   are exclusive cases. This produces the new cell configuration
        % Implicit end loop. Implicit display

ইনপুটগুলির ক্রম পরিবর্তন করে আপনি কি বাইটগুলি সংরক্ষণ করতে পারেন? xxশুরুতে আমার কাছে একটু অযথা মনে হয় ...
এরিক Outgolfer

@ EriktheOutgolfer- কে দেখতে পাচ্ছি না কীভাবে। আমাকে প্রথম দুটি মুছতে হবে পরে সেগুলি বেশ কয়েকবার পুনরায় ব্যবহার করতে হবে (একটি পুনরাবৃত্তির জন্য একটি), এবং অন্য ইনপুটগুলি ইতিমধ্যে এখনই অন্তর্নিহিত
লুইস মেন্ডো

ওহ তাই ইনপুটগুলি "মুছে ফেলা" কোনও ধরণের ইনপুট তালিকায় এগুলি যুক্ত করে?
এরিক দি আউটগল্ফার

পুনঃটুইট এমএটিএল ইনপুটটি ইন্টারেক্টিভ, এর অর্থ প্রোগ্রামটি কতটা ইনপুট রয়েছে তা আগাম জানে না। এখানে, খালি স্ট্যাক থেকে মোছার ফলে ইনপুট সুস্পষ্টভাবে নেওয়া হবে। একবার নেওয়া হয়ে গেলে, প্রতিটি ইনপুট ক্লিপবোর্ড জি-তে অনুলিপি করা হয় এবং সেগুলি পরে পুনরুদ্ধার করা যায়।
লুইস মেন্ডো

3

ওল্ফ্রাম ভাষা (গণিত) , 144 122 বাইট

CellularAutomaton[{Tr[2^#&/@Flatten@MapIndexed[2#+2-#2[[1]]&,{#2,#3},{2}]],{2,{{2,2,2},{2,1,2},{2,2,2}}},{1,1}},#,{{#4}}]&

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

ব্যবহারের উদাহরণ:

%[RandomInteger[1, {10, 10}], {2, 3}, {3}, 5]

একটি শুরু হিসাবে 10x10 র‌্যান্ডম গ্রিড ব্যবহার করে, 2 বা 3 প্রতিবেশীর সাথে বাঁচে, 3 প্রতিবেশীর সাথে জন্ম হয়, 5 পুনরাবৃত্তিতে প্লটের ফলাফল হয়।


বিল্টিনটি খুব খারাপ মাত্র এক মাত্রিক (আমি ভুল হলে আমাকে সংশোধন করি)
জাকারি

আমি 9-প্রতিবেশী সম্পূর্ণবাদী নিয়মের সাথে অন্তর্নির্মিত "সেলুলারআউটম্যাটন" ব্যবহার করছি। বেশিরভাগ কোড বেঁচে থাকা / জন্মের ইনপুটগুলিকে একটি নিয়ম সংখ্যায় রূপান্তর করে ts
কেলি লোডার

1

আর , 256 বাইট

function(x,B,S,r){y=cbind(0,rbind(0,x,0),0)
n=dim(y)[1]
z=c(1,n)
f=function(h){w=-1:1
b=h%%n+1
a=(h-b+1)/n+1
'if'(a%in%z|b%in%z,0,sum(x[w+b,w+a])-x[b,a])}
while(r){x=y
for(i in 1:n^2){u=f(i-1)
y[i]=u%in%B
y[i]=(y[i]&!x[i])|(x[i]&(u%in%S))}
r=r-1}
y[-z,-z]}

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

দুঃখের বিষয়, এটি আমি যেমন আশা করেছি তেমন গল্ফ লাগছে না।

ইনপুট : একটি আর ম্যাট্রিক্স এবং চ্যালেঞ্জের পরামিতি। আউটপুট : আর প্রজন্মের পরে ম্যাট্রিক্স।

সীমানা পরিচালনা করতে অ্যালগরিদম মেট্রিক্সকে জিরো দিয়ে প্যাড করে। তারপরে, পুনরাবৃত্তভাবে: 1 ম) এটি জন্ম নিয়ম প্রয়োগ করে এবং 2 য়) এটি পূর্ব-বিদ্যমান কোষগুলিকে হত্যা করে যা বেঁচে থাকার নিয়মটি পাস করেনি। ফেরত দেওয়ার সময় প্যাডিং সরানো হয়।


সুন্দর বাইট গণনা!
জিউসেপে

আমি এটি 217 বাইটে পেতে পেরেছি তবে আমরা যদি আরও একটি গল্ফ খুঁজে পাই তবে আমরা এটি পেতে পারি 216যা কমপক্ষে একটি কিউব ...
জিউসেপ

1

পাইথন 2 , 156 149 146 বাইট

lambda R,g,c:g and f(R,g-1,[[`sum(sum(l[y+y/~y:y+2])for l in c[x+x/~x:x+2])-c[x][y]`in R[c[x][y]]for y,_ in e(c)]for x,_ in e(c)])or c
e=enumerate

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

ইনপুট নেয়:

  • Rules: [birth,survial]তালিকা হিসাবে বিধি string। উদাঃ ( ['135','246'])
  • generations: int
  • configration: 1/0বা 2 এর স্কোয়ার 2D অ্যারেTrue/False

2d অ্যারে প্রদান করে True/False

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