आपको इनपुट एक greyscale इमेज के रूप में दिया जाता है। आपका कार्य कॉनवे के गेम ऑफ लाइफ में एक स्थिर या लूपिंग पैटर्न ढूंढना है जो इनपुट इमेज को जितना संभव हो उतना करीब से देखता है।
आपका आउटपुट या तो स्टिल इमेज हो सकता है या किसी फॉरमेट में लूपिंग एनीमेशन हो सकता है जिसे जिफ़ में बदला जा सकता है। आउटपुट छवि आयाम इनपुट के समान होना चाहिए, और इसमें केवल काले और सफेद पिक्सेल होने चाहिए।
यदि आउटपुट एक एनीमेशन है, तो प्रत्येक फ्रेम को एक सेल प्रति पिक्सेल के साथ, गेम ऑफ लाइफ के नियमों के अनुसार पिछले एक से उत्पन्न किया जाना चाहिए। एनीमेशन को लूप करना होगा, जिसमें पहले फ्रेम को समान नियमों द्वारा अंतिम फ्रेम से उत्पन्न किया जाएगा।
अगर आउटपुट स्टिल इमेज है, तो गेम-ऑफ-लाइफ रूल्स को लागू करना उसी इमेज को प्रोड्यूस करना है। इसका मतलब यह है कि किसी भी 'जिंदा' सेल में तीन या दो से कम 'जिंदा' पड़ोसी नहीं हो सकते हैं, और किसी भी 'मृत' सेल में तीन 'जिंदा' पड़ोसी नहीं हो सकते हैं। (ध्यान दें कि यह मूल रूप से ऊपर वर्णित एनीमेशन के समान है, लेकिन केवल एक फ्रेम के साथ।)
अतिरिक्त नियम और स्पष्टीकरण:
आप (या आपका कार्यक्रम) यह चुन सकते हैं कि क्या 'जीवित' कोशिकाओं को सफेद और 'मृत' को काले रंग के रूप में दर्शाया जाता है, या इसके विपरीत। यही है, आप इसे या तो हार्ड-कोड कर सकते हैं या आपका प्रोग्राम इसे इनपुट इमेज के आधार पर चुन सकता है। (लेकिन यह एनीमेशन के हर फ्रेम के लिए समान होना चाहिए।)
सीमा की स्थिति समय-समय पर होनी चाहिए, जिसका अर्थ है कि सबसे दाहिने स्तंभ पर कोशिकाओं में बाएं स्तंभ पर पड़ोसी हैं, आदि।
एनिमेशन के लिए, फ्रेम दर आपके (या आपके कार्यक्रम) पर निर्भर है; मुझे लगता है कि ग्रे पिक्सल्स को सन्निकट करने के लिए फास्ट फ्रेम रेट अच्छी तरह से काम करेंगे।
कृपया अपने उत्तर में एम्बेडेड कम से कम दो परिणाम पोस्ट करें। यदि आप नीचे दी गई सभी इनपुट छवियों से परिणाम पोस्ट कर सकते हैं, तो यह बेहतर है।
यदि छोटे आवश्यक फ़ाइल आकार के साथ gifs प्राप्त करने के लिए यह आवश्यक है तो परीक्षण छवियों को स्केल करना स्वीकार्य है। यदि आप बड़ी फ़ाइलों के साथ लिंक करना चाहते हैं, तो यह ठीक है। यदि आप दिखावा करना चाहते हैं, तो कुछ उच्च-रिज़ॉल्यूशन स्रोत फ़ाइलों को खोजने के लिए स्वतंत्र महसूस करें।
कृपया अपने कोड में बहुत सारे नियंत्रणीय मापदंडों से बचने की कोशिश करें - यह सबसे अच्छा है यदि आपके प्रोग्राम का एकमात्र इनपुट छवि है। अपवाद यह है कि यदि आप एनीमेशन फ़्रेम की संख्या को नियंत्रित करने के लिए एक पैरामीटर रखना चाहते हैं, क्योंकि यह फ़ाइल आकार को प्रभावित करेगा।
इनपुट और आउटपुट फ़ाइलों के प्रारूप को बदलने के लिए आप बाहरी कार्यक्रमों का उपयोग कर सकते हैं, और / या आउटपुट फ्रेम को एनीमेशन में संकलित कर सकते हैं यदि आप चाहते हैं। (यह फ़ाइल-स्वरूप-हैंडलिंग चुनौती नहीं है।)
यह लोकप्रियता-प्रतियोगिता है , इसलिए सबसे अधिक वोटों के साथ जवाब जीत जाता है।
यहाँ परीक्षण छवियों का एक चयन है, ज्यादातर इस साइट पर अन्य प्रश्नों से लिया गया है। (यह संभव है कि मैं बाद में अतिरिक्त "बोनस" इनपुट छवियों को जोड़ दूंगा।)
बस चीजों को शुरू करने के लिए, यहां पायथन 2 में एक बहुत ही गूंगा संदर्भ प्रयास है, जो इस तथ्य का लाभ उठाता है कि चार वर्गों का एक ब्लॉक गेम ऑफ लाइफ में एक स्थिर संरचना है। यह सिर्फ 4 के कारक द्वारा इनपुट छवि को बचाता है, फिर एक ब्लॉक खींचता है यदि संबंधित पिक्सेल 0.5 से अधिक गहरा हो।
from skimage import io
from skimage import transform
import sys
img = io.imread(sys.argv[1],as_grey=True)
source = transform.resize(img, [i/4 for i in img.shape])
img[:]=1
for x in xrange(source.shape[0]):
for y in xrange(source.shape[1]):
if source[x,y]<0.5:
img[x*4, y*4] = 0
img[x*4+1, y*4] = 0
img[x*4, y*4+1] = 0
img[x*4+1, y*4+1] = 0
io.imsave(sys.argv[2], img)
यहाँ उदाहरण कोड से कुछ आउटपुट हैं। मुझे यकीन है कि बहुत बेहतर परिणाम संभव हैं।