जीवन: बनाया या विकसित?


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)प्रारंभिक अवस्थाओं का परीक्षण करता हूं, तो कार्यक्रम की जटिलता बड़ी होगी, लेकिन यह समस्या को हल करके जांचता है कि क्या परिणाम इनपुट से मेल खाता है
लुइस मेंडू

@Luis इनपुट के लिए? 20 बाई 20. कार्यक्रम के लिए? नहीं
क्रिस्टोफर

2
मैं इसे गोल्फ के लिए तैयार नहीं कर सकता, लेकिन यहाँ एक कुशल कार्यान्वयन है, जो एक ऑफ-द-शेल्फ पूर्णांक प्रोग्रामिंग सॉल्वर का उपयोग करके SMMath में बंडल किया गया है।
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;}}

यह कमांड लाइन के माध्यम से इनपुट लेता है।

यह क्या करता है

यहां कोई फैंसी ट्रिक नहीं, बस एक क्रूर बल समाधान है। यह X, Y के हर संभव शुरुआती बोर्ड से होकर गुजरता है और गेम ऑफ़ लाइफ एल्गोरिथम के माध्यम से इसे पुन: प्रदर्शित करता है और इसे इनपुट बोर्ड के खिलाफ जाँचता है। यह बहुत लंबा समय लेता है, क्योंकि y द्वारा आकार x के प्रत्येक बोर्ड में 2 ^ (x * y) संभव संयोजन होते हैं। 4x5 के बोर्ड को चलाने में लगभग 10 मिनट का समय लगा। मूर्खतापूर्ण तरीके से किसी ऐसी चीज के लिए जो इसके मुकाबले सरल है।

यदि यह संभव है कि यह एक विकसित बोर्ड था, तो यह "विकसित" प्रिंट करता है, और यदि इसे विकसित नहीं किया जा सकता है, तो यह "बनाया गया" प्रिंट करता है।


अच्छा! मैं मानता हूं कि यह समय की जटिलता के लिए बहुत खराब है, लेकिन हे, यह एकमात्र (गैर-प्लेजराइज्ड) एक अब तक का है, तो शायद यह इनाम मिलेगा! मान लिया जाए कि orlp अनुकूलित को एक पोस्ट नहीं करता है :)
HyperNeutrino

2
@ हेपरन्यूट्रिनो "आपने यह राउंड जीता, लेकिन मेरे पास मेरा छेद है।" - फिलिप जे। फ्राई
तुस्कीमी

बधाई हो, यह समाधान भरपूर है! :)
हाइपरएन्यूट्रीनो

@ हायपरनेटिनो मुझे पता है कि यह चतुर नहीं है, और शायद वह नहीं है जो आप खोज रहे हैं, और मैं इस आसानी से बीट करने वाले के साथ अन्य समाधानों को प्रेरित करने की उम्मीद कर रहा था, लेकिन मुझे आशा है कि यह काफी अच्छा था।
tuskiomi

1
यह भी -1 गोल्फ नहीं है (सिर्फ मजाक कर रहे हैं कि आपको एक +1 मिला है, लेकिन फिर भी, तुच्छ
गोल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.