एक चक्रीय टैग प्रणाली एक दो प्रतीक वर्णमाला (मैं इस्तेमाल करेंगे से मिलकर एक छोटे से, ट्यूरिंग-पूर्ण कम्प्यूटेशनल मॉडल है {0,1}
), एक सीमित, के अरिक्त चक्रीय सूची प्रस्तुतियों कि उन दो प्रतीकों से मिलकर बनता है, और एक असीम शब्द जो भी होते हैं उन दो प्रतीकों।
प्रत्येक चरण पर:
- शब्द में पहला तत्व हटा दिया गया है
- अगर यह
0
वर्तमान उत्पादन छोड़ दिया गया था - यदि यह
1
वर्तमान उत्पादन था तो शब्द के अंत में जोड़ा जाता है । - अगला उत्पादन सक्रिय हो जाता है। यदि यह अंतिम उत्पादन था, तो पहले वाले पर वापस जाएं।
शब्द खाली हो जाने पर सिस्टम रुक जाता है।
एक उदाहरण (विकिपीडिया से):
Productions: (010, 000, 1111)
Initial word: 11001
Generation Production Word (before) Word (after)
0 010 11001 → 1001010
1 000 1001010 → 001010000
2 1111 001010000 → 01010000
3 010 01010000 → 1010000
4 000 1010000 → 010000000
5 1111 010000000 → 10000000
6 010 10000000 → 0000000010
7 000 0000000010 → 000000010
8 1111 000000010 → 00000010
9 010 00000010 → 0000010
आपका कार्य, यदि आप इसे स्वीकार करना चुनते हैं, तो एक प्रोग्राम या फ़ंक्शन लिखना है:
- प्रस्तुतियों की एक सूची,
- प्रारंभिक शब्द, और
- एक पीढ़ी,
और उस पीढ़ी में शब्द प्रिंट या वापस करता है ।
उदाहरण के लिए,
cyclic_tag(
prod=[[0,1,0],[0,0,0],[1,1,1,1]],
word=[1,1,0,0,1],
gen=4) => [1,0,1,0,0,0,0]
कार्यान्वयन विवरण:
वर्णमाला कोई मायने नहीं रखती। आप उपयोग कर सकते हैं
0
और1
,True
औरFalse
,T
औरNIL
,A
औरB
, या यहाँ तक1
और0
, या जो कुछ भी कहीं भी आप के साथ, जब तक कि आप संगत कर रहे हैं हो सकता है। सभी इनपुट और आउटपुट को एक ही वर्णमाला का उपयोग करना चाहिए, और आपको यह इंगित करना होगा कि आप0
क्या और किस लिए उपयोग कर रहे हैं1
।शब्द की लंबाई सैद्धांतिक रूप से अनबाउंड होनी चाहिए। यानी, आप अधिकतम शब्द लंबाई हार्डकोड नहीं कर सकते हैं। यदि मैं आपके प्रोग्राम को एक आदर्श कंप्यूटर पर असीम मेमोरी के साथ चलाता हूं, तो आपका प्रोग्राम सैद्धांतिक रूप से इसका उपयोग करने में सक्षम होना चाहिए। (आप अपने दुभाषिया / संकलक की सीमाओं की उपेक्षा कर सकते हैं।)
यदि दिए गए सिस्टम तक पहुंचने से पहले दिया गया सिस्टम रुक जाता है, तो आपको खाली शब्द वापस करना होगा या प्रिंट करना होगा।
खाली उत्पादन मौजूद है, और आपको इसे संभालने में सक्षम होना चाहिए। यदि आप एक पूर्ण कार्यक्रम लिखते हैं, तो आपका I / O भी इसे संभालने में सक्षम होना चाहिए।
संपादित करें : मैंने मूल रूप से पीढ़ी के 0
लिए इनपुट शब्द ही होने का इरादा किया था , और पीढ़ी 1
पहले चरण का परिणाम थी। यानी, मैंने आपके लिए पहले वाले कॉलम को वापस करने का इरादा किया था । हालांकि , जैसा कि मैंने यह बताते हुए पर्याप्त स्पष्ट नहीं किया है, मैं दोनों विकल्पों को स्वीकार करूंगा ; प्रत्येक पीढ़ी के लिए आप पहले या बाद वाले कॉलम में मान वापस कर सकते हैं । आपको यह बताना होगा कि यदि आप ऐसा कर रहे हैं, तो आप कॉलम के बाद चल रहे हैं। आपको यह भी अनुरूप होना चाहिए कि आप किस कॉलम को चुनते हैं।
मैं अब (10/27/2014) से एक हफ्ते में सबसे छोटे कोड का पुरस्कार दूंगा।