1D गेम-ऑफ-लाइफ-ईश मॉडल का अनुकरण करें


12

यह सवाल सिर्फ कोड-समीक्षा पर ट्रेंड हुआ और मुझे लगा कि आप इसे कोडगॉल्फ चुनौती के रूप में अनुकूलित कर सकते हैं:

आपको एक्स घरों की एक गैर-खाली सूची दी गई है, जिसे बूलियन के रूप में दर्शाया गया है। प्रत्येक दिन, घर आसन्न लोगों के साथ प्रतिस्पर्धा करते हैं। 1 एक "सक्रिय" घर का प्रतिनिधित्व करता है और 0 एक "निष्क्रिय" घर का प्रतिनिधित्व करता है। यदि किसी दिए गए घर के दोनों तरफ के पड़ोसी या तो सक्रिय हैं या दोनों निष्क्रिय हैं, तो वह घर अगले दिन निष्क्रिय हो जाता है। अन्यथा यह सक्रिय हो जाता है।

def get_state_as_pos(thelist, pos):
    if thelist[pos-1] == thelist[pos+1]:
        return 0
    else:
        return 1

उदाहरण के लिए, अगर हमारे पास पड़ोसियों का एक समूह था [0, 1, 0] तो घर पर [1] 0 हो जाएगा क्योंकि घर दोनों के बाईं और दाईं ओर दोनों निष्क्रिय हैं। दोनों सिरों पर स्थित कोशिकाएं विपरीत दिशा में भी जांच करती हैं, इसलिए इंडेक्स 0 पर पड़ोसी इंडेक्स length-1और इंडेक्स 1 पर हैं और इसके विपरीत। सेल अपडेट करने के बाद भी, आपको दूसरों को अपडेट करते समय इसकी पूर्व स्थिति पर विचार करना होगा ताकि प्रत्येक सेल की राज्य जानकारी एक साथ अपडेट हो जाए।

फ़ंक्शन राज्यों की संख्या और कई चरणों को लेता है और दिए गए चरणों की संख्या के बाद घरों की स्थिति का उत्पादन करना चाहिए।

    input: states = [1, 0, 0, 0, 0, 1, 0, 0], steps = 1
   output should be [0, 1, 0, 0, 1, 0, 1, 1]

    input: states = [1, 1, 1, 0, 1, 1, 1, 1], steps = 2
intermediate state= [0, 0, 1, 0, 1, 0, 0, 0]
   output should be [0, 1, 0, 0, 0, 1, 0, 0]


    input: states = [1], steps=1
    output: states= [0]

हालाँकि, आप जिस सूची को पसंद करते हैं, उसे लें और परिणामी सूची को डिफ़ॉल्ट I / O के माध्यम से आउटपुट करें । मानक खामियों को मना किया जाता है। यह कोडगॉल्फ है, बाइट्स जीत में सबसे छोटा जवाब!


8
सेल्युलर ऑटोमेटा के लिए +1। यह नियम 90 नहीं है, हालांकि?
HighlyRadioactive

2
क्या पहले टेस्ट केस में परिणाम नहीं आना चाहिए [0, 1, 0, 0, 1, 0, 1, 1]?
टीफ़ेल्ड सेप

4
@jaaq मैं प्राथमिक सेलुलर ऑटोमेटा नियम (प्रत्येक चरण या पीढ़ियों के बीच परिवर्तन का) # 90 का उल्लेख कर रहा हूं। वोल्फ्राम में "नियम 90" टाइप करें | अल्फा |
हाईलीरेडियोएक्टिव

12
STDOUT के माध्यम से परिणामी सूची का उत्पादन : यह केवल हमारे डिफ़ॉल्ट I / O विधियों पर भरोसा करने के लिए अत्यधिक अनुशंसित है ।
अरनुलद

5
@ अंजाम इतना अधिक संयोग नहीं है जितना कि हर मानक 1 डी सेलुलर ऑटोमेटा के लिए एक नियम # है। ऐसा इसलिए है क्योंकि 3 बिट्स में 8 संभावित राज्य हैं (बाएं पड़ोसी, स्व, सही पड़ोसी) और यदि आप कहते हैं कि उन राज्यों में से प्रत्येक के लिए एक दिया घर चालू या बंद होगा, जो कि 8 सच्चे / झूठे मान हैं जो पूरी तरह से बाइट के लिए मैप करने के लिए होता है। इस प्रकार नियम # 0-255 को बाइट की अभिव्यक्ति के लिए इन नियमों में से किसी का वर्णन करने के लिए शॉर्टहैंड के रूप में इस्तेमाल किया जा सकता है, बाइट में स्थिति के आधार पर 8 स्थितियों में से प्रत्येक में / बंद राज्य के परिणामस्वरूप घर हो सकता है। कुछ नियमों को उल्लेखनीय माना जाता है जैसे कि 90, इस प्रकार मान्यता :)
लूनिन

जवाबों:


8

05AB1E , 14 13 10 9 6 बाइट्स

शैगी के जाप समाधान के आधार पर

F©Á®À^

इसे ऑनलाइन आज़माएं!

F                  # repeat n times:
 ©Á                #  the list, rotated right
   ®À              #  the list, rotated left
     ^             #  xor (vectorizes)

अनावश्यक रूप से चतुर 9 बाइट समाधान:

F¥DO.øü+É

इसे ऑनलाइन आज़माएं!

F                  # repeat n times:
                   #  (examples given for the initial state [0, 1, 1, 0, 1])
 ¥                 #  deltas of the list ([1, 0, -1, 1])
  D                #  duplicate
   O               #  sum (1)
    .ø             #  surround ([1, 1, 0, -1, 1, 1])
      ü+           #  pairwise addition ([2, 1, -1, 0, 2])
        É          #  modulo 2 ([0, 1, 1, 0, 0])




2

जाप -mh , ११ १०बाइट्स

मैं / ओ राज्यों के सिंगलटन 2 डी सरणियों के रूप में।

VÇí^Zé2)é

कोशिश करो

VÇí^Zé2)é     :Implicit input of integer U=steps & array V=[states]
VÇ            :Modify the last element Z in V
  í           :Interleave with
    Zé2       :  Z rotated right twice and
   ^          :  Reduce each pair by XOR
       )      :End interleave
        é     :Rotate right once
              :Repeat U times and implicitly output V

2

रेटिना , 51 बाइट्स

1A`
"$+"{`(.).*(.)
$2$&$1
(.)(?=.(\1|(.)))?
$#2*$#3

इसे ऑनलाइन आज़माएं! पहली पंक्ति पर चरणों की संख्या 0और 1दूसरी पंक्ति पर s और s का एक स्ट्रिंग लेता है । स्पष्टीकरण:

1A`

इनपुट से चरणों की संख्या हटाएं।

"$+"{

उस नंबर को दोहराएं।

`(.).*(.)
$2$&$1

रैपिंग का अनुकरण करने के लिए दूसरे छोर पर अंतिम अंकों की प्रतिलिपि बनाएँ।

(.)(?=.(\1|(.)))?
$#2*$#3

XOR ऑपरेशन करें।


2

एपीएल (Dyalog विस्तारित) , 12 बाइट्स SBCS

पूरा कार्यक्रम। राज्यों की श्रेणी के लिए स्टड और फिर चरणों की संख्या के लिए संकेत। प्रिंट करने के लिए प्रिंट।

1(⌽≠⌽⍢⌽)⍣⎕⊢⎕

इसे ऑनलाइन आज़माएं!

कंसोल से मूल्यांकन इनपुट प्राप्त करें (राज्यों की सरणी)

 उस पर, लागू करें ...

1(... )⍣⎕ निम्नलिखित टैकिट फ़ंक्शन, इनपुट नंबर की संख्या, हर बार 1बाएं तर्क के रूप में:

⌽⍢⌽ दाएं तर्क को उल्टा करते समय 1 कदम छोड़ें (यानी एक कदम दाएं घुमाएं)

⌽≠ XOR ने तर्क के साथ 1 चरण को छोड़ दिया





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