জীবন: সৃষ্টি নাকি বিবর্তিত?


17

স্কয়ার গেম অফ লাইফ গ্রিডের অবস্থা দেওয়া, এটি নির্ধারণ করুন এটি পূর্ববর্তী কোনও রাজ্য থেকে বিকশিত হতে পারে বা কেবল তৈরি করা যেত। অর্থাৎ, রাজ্যটি "ইডেনের উদ্যান" রাজ্য কিনা তা চিহ্নিত করুন ।

ইনপুট

রাজ্যগুলির একটি বর্গ গ্রিড, যেখানে 1 টি "জীবিত" এবং 0 টি "মৃত" নির্দেশ করে। আপনি চাইলে 0 এবং 1 এর পরিবর্তে যে কোনও দুটি পৃথক প্রতীক বেছে নিতে পারেন।

গ্রিডের পাশের দৈর্ঘ্য শূন্য হবে না তবে এটি কোনও প্রাকৃতিক সংখ্যা 1 <= N <= 20 হতে পারে।

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

ইনপুটটি সারি সীমাবদ্ধ স্ট্রিং বা একক স্ট্রিং আকারে থাকতে পারে। আপনি যদি চান, আপনি পাশের দৈর্ঘ্য বা গ্রিডের ক্ষেত্রটি অতিরিক্ত ইনপুট (গ্রিডের আগে বা পরে) হিসাবে নিতে পারেন।

গ্রহণযোগ্য ইনপুট ফর্ম্যাটগুলি:

010,101,010

010101010

010
101
010
3 010101010

আউটপুট

"তৈরি করা" যদি কোনও পূর্ববর্তী রাষ্ট্র (ইনপুট গ্রিডের চেয়ে বড় রাষ্ট্রগুলি সহ) না থাকে যা পরবর্তী প্রজন্মের ইনপুট স্থিতিতে নিয়ে যায়।

"বিবর্তিত" যদি সেখানে অন্ততপক্ষে সম্ভব পূর্বের একটি রাষ্ট্র (ইনপুট গ্রিডের চেয়ে বড় রাষ্ট্রগুলি সহ) থাকে যা পরবর্তী প্রজন্মের ইনপুট স্থিতিতে নিয়ে যায়।

আপনি চাইলে আপনি "তৈরি" এবং "বিবর্তিত" পরিবর্তে যে কোনও দুটি পৃথক স্ট্রিং বা সংখ্যা ব্যবহার করতে পারেন।

নোট করুন যে সম্ভাব্য পূর্ববর্তী অবস্থাটি ইনপুট থেকে আলাদা হওয়া উচিত নয়। কোনও রাষ্ট্রের যদি পরবর্তী প্রজন্ম হিসাবে নিজেকে থাকে তবে তা বিবর্তিত হিসাবে বিবেচনা করা উচিত।

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

010
101
010 Evolved

0101110100
0010101001
1011100110
0101111101
1001001111
1111001001
1011111010
0110011101
1001010100
0010111010 Created

তৈরি টেস্ট কেসটি আকিম ফ্লেমেনক্যাম্পের গেম অফ লাইফ পৃষ্ঠা থেকে নেওয়া হয়েছে ।

বিঃদ্রঃ

এই চ্যালেঞ্জটি লেখার জন্য ট্রাইকোপ্লাক্সকে ধন্যবাদ এবং আমি এখান থেকে এটি গ্রহণ করেছি


6
কোন জটিলতার সীমাবদ্ধতা? আকারের ইনপুট- mদ্বারা- n, যদি আমি সমস্ত সম্ভাব্য 2^(m*n)প্রাথমিক অবস্থাগুলি পরীক্ষা করি তবে প্রোগ্রামের জটিলতা বড় হবে তবে ফলাফলটি ইনপুটটির সাথে মেলে কিনা তা পরীক্ষা করেই সমস্যাটি সমাধান করে
লুইস মেন্ডো

ইনপুট জন্য লুইস? 20 বাই 20. প্রোগ্রামের জন্য? না
ক্রিস্টোফার

2
আমি এটি গল্ফ করতে আর্স করা যাবে না, কিন্তু এখানে সেজেম্যাথে বান্ডিল করা অফ-শেল্ফ ইন্টিজার প্রোগ্রামিং সলভার ব্যবহার করে একটি কার্যকর বাস্তবায়ন is
orlp

আমি ধরে নিয়েছি যে পূর্ববর্তী রাজ্যটি (যদি বিদ্যমান থাকে) ইডেনের রাজ্য হয় কিনা তা বিবেচ্য নয়?
হাইপারনিউট্রিনো

@ হাইপার নাপ! কেবলমাত্র আপনি যা পান
ক্রিস্টোফার

উত্তর:


3

জাভা- 1254 বাইট- একটি খুব দুর্বল সমাধান

import java.util.Arrays;
public class z{
static boolean u=1>0,v=0<1;
public static void main(String[] a){
int y=a.length,x=a[0].length();Boolean[][] l=new Boolean[x][y];for(int i=0;i<a.length;i++){l[i]=m(a[i]);}
Boolean[] n=new Boolean[x*y];for(int i=0;i<n.length;i++){n[i]=v;}
while(n.length==x*y){Boolean[][] o=new Boolean[x][y];for(int i=0; i<n.length;i++){o[i%x][i/x]=n[i];}
n=p(n);o=q(o,x,y);int r=0;for(int i=0;i<x*y;i++){if(o[i%x][i/x]&&l[i%x][i/x])r++;}
if(r==x*y){System.out.println("evolved");return;}}System.out.println("created");}
public static Boolean[][] q(Boolean[][] o,int bx,int by){Boolean[][] s=new Boolean[bx][by];for(int x=0; x<bx; x++){for(int y=0;y<by;y++){
int t=0;for(int tx=-1;tx<2;tx++){for(int ty=-1;ty<2;ty++){if(ty+y<0||ty+y>by-1||tx+x<0||tx+x>bx-1)continue;if(o[tx+x][ty+y]){t++;}}}
if(t>1&&t<4){s[x][y]=u;}else{s[x][y]=v;}}}return s;}
public static Boolean[] p(Boolean[] b){boolean w=u;Boolean[] x=new Boolean[b.length];for(int i=0;i<b.length;i++){if(w&&b[i]){x[i]=u;w=u;}else if(b[i]||w){x[i]=u;w=v;}else{x[i]=v;w=v;}
}if(w){x=Arrays.copyOf(x,x.length+1);x[x.length]=u;}return x;}
public static Boolean[] m(String s){Boolean[] x=new Boolean[s.length()];for(int i=0;i<s.length();i++){x[i]=s.charAt(i)=='1';}return x;}}

এটি কমান্ড লাইনের মাধ্যমে ইনপুট নেয়।

এর মানে কি

এখানে কোনও অভিনব ট্রিকস নেই, কেবল একটি নিষ্ঠুর শক্তি সমাধান। এটি এক্স, ওয়াইয়ের প্রতিটি সম্ভাব্য প্রারম্ভিক বোর্ডের মধ্য দিয়ে যায় এবং গেম অফ লাইফ অ্যালগরিদমের মাধ্যমে একবার এটি পুনরুক্ত করে এবং ইনপুট বোর্ডের বিপরীতে এটি পরীক্ষা করে। এটি খুব দীর্ঘ সময় নেয়, কারণ আকারের প্রতিটি বোর্ডের y দ্বারা 2 ^ (x * y) সম্ভাব্য সংমিশ্রণ থাকে। 4x5 বোর্ড চালাতে 10 মিনিট সময় লেগেছে। মূর্খতা নির্বোধ কিছু যে এটি চেয়ে সহজ।

যদি এটি সম্ভব হয় যে এটি একটি বিবর্তিত বোর্ড ছিল তবে এটি "বিবর্তিত" প্রিন্ট করে এবং যদি এটি বিকশিত না হতে পারে তবে এটি "তৈরি" মুদ্রণ করে।


নিস! আমি সম্মত হই যে এটি সময়ের জটিলতার জন্য অত্যন্ত দরিদ্র তবে ওহে, এ পর্যন্ত এটিই একমাত্র (চঞ্চল নয়) এটি সম্ভবত অনুগ্রহ পাবে! ধরে নিচ্ছি অর্ল্পটি অনুকূলিত পোস্ট করেছে না :)
হাইপারনিউটারিনো

2
@ হাইপার নিউট্রিনো "আপনি এই রাউন্ডটি জিতেছিলেন, তবে আমার গর্তটি আমার কাছে আছে" " - ফিলিপ জে ফ্রাই
tuskiomi

অভিনন্দন, এই সমাধানটি অনুগ্রহ করে! :)
হাইপারনিউট্রিনো

@ হাইপারনিট্রিনো আমি জানি এটি চতুর নয়, এবং সম্ভবত আপনি যা খুঁজছেন তা নয়, এবং আমি আশা করি যে এটি সহজেই পরা যায় এমন একটির সাথে অন্য সমাধানগুলি অনুপ্রাণিত করতে পারে, তবে আমি আশা করি এটি যথেষ্ট ভাল ছিল।
tuskiomi

1
এছাড়াও -1 গল্ফ করা হয়নি (হাহা মজা করে আপনি একটি +1 পেয়েছেন তবে তবুও তুচ্ছ গল্ফ তৈরি করা যেতে পারে);)
হাইপারনিউটারিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.