अब तक आप सभी कोनवे सीक्वेंस (उर्फ 'लुक-एंड-सी-सीक्वेंस) से परिचित होना चाहिए :
1
11
21
1211
111221
312211
etc
आप शुरुआती बिंदु के रूप में किसी भी मनमानी संख्या से भी शुरू कर सकते हैं। आज्ञा देना f(s)अगला तत्व है। अब हर दिए के लिए sहम पा सकते हैं f(s)। रिवर्स उतना तुच्छ नहीं है: यह yपूर्ववर्ती को खोजने के लिए हर संभव नहीं है sजैसे कि f(s) = y। जैसे y = 1हम किसी पूर्ववर्ती को नहीं ढूंढ सकते। लेकिन अगर yएक है यहां तक कि आप इसे अंक जो एक पूर्ववर्ती में से हर एक भाग का वर्णन के जोड़े में विभाजित कर सकते हैं लंबाई:
513211 divides in 51,32,11
so: 51 comes from 11111
32 comes from 222
11 comes from 1
put together: 111112221
तो इस तरह से हम हर लंबाई के लिए एक अद्वितीय पूर्ववर्ती को परिभाषित कर सकते हैं y।
नोट : 'पूर्ववर्ती' को sइस तरह परिभाषित करना आम तौर पर संतुष्ट नहीं करता है f(s) = y।
लक्ष्य
एक फ़ंक्शन / प्रोग्राम स्निपेट लिखें जो इनपुट के रूप में अंकों की एक स्ट्रिंग को स्वीकार करता है
- यदि इनपुट स्ट्रिंग की लंबाई विषम है, तो कॉनवे अनुक्रम के अगले तत्व की गणना करता है
- ऊपर परिभाषित करता है, तो इनपुट स्ट्रिंग लंबाई है इनपुट स्ट्रिंग के पूर्ववर्ती की गणना करता है और भी ।
बाइट्स में सबसे छोटा कोड जीतता है।
हाल ही के प्रश्न, लुक-एंड-सीक्वेंस पर आधारित हैं:
11111111111111होगा? आपकी कल्पना के अनुसार, यह होगा 1111111। इसके लिए एक उचित उत्तर को परिभाषित करने के लिए आपको अपने विनिर्देश को संशोधित करना चाहिए।
11111111111111का कोई पूर्ववर्ती नहीं है। यह एक अवैध इनपुट है।
513111विभाजित होता है51,32और11?