रन-लंबाई एन्कोडिंग में चक्र


26

कुछ बाइनरी अनुक्रम पर विचार करें , उदाहरण के लिए, 1और 2:

1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1 ...

चलिए लिखते हैं कि रन की लंबाई:

1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 1 ...
_  _  ____  ____  _  _  _  ____
1, 1, 2,    2,    1, 1, 1, 2,   ...

इस मामले में हम एक और बाइनरी अनुक्रम प्राप्त करते हैं। बेशक, यह गारंटी नहीं है (जैसे अगर हमने प्रक्रिया को दोहराया, तो तीसरा रन होगा 3), लेकिन मान लें कि हम करते हैं।

अब सवाल यह है कि क्या हम एक ऐसा क्रम खोज सकते हैं जो इस प्रकार की रन-लंबाई एन्कोडिंग को कई बार लागू करने से हमें मूल अनुक्रम वापस दे सके? 1 की एक चक्र-लंबाई (यानी इस परिवर्तन का एक निश्चित बिंदु) के लिए, हम ओल्डेनबर्गर-कोलाकोस्की अनुक्रम (OEIS प्रविष्टि A0000002 ) पाते हैं :

1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, ...

(वास्तव में एक और उपाय है: हम अग्रणी को भी छोड़ सकते हैं 1।)

लंबाई -2 के चक्र के बारे में क्या? यह भी संभव है! निम्नलिखित दो क्रम रन लंबाई की एक-दूसरे की सूची है:

1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, ...
2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, ...

(ये OEIS प्रविष्टियाँ A025142 और A025143 हैं । यह एकमात्र समाधान है।)

क्या हम लंबाई 3 का चक्र पा सकते हैं? निश्चित रूप से, यहां प्रत्येक अनुक्रम अगले की रन-लंबाई एन्कोडिंग है (और तीसरा वाला पहले की रन-लंबाई एन्कोडिंग है):

1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, ...
1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, ...
2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, ...

इस मामले में एक अन्य समाधान है। यह पता चला है कि हम हर चक्र की लंबाई के लिए ऐसा चक्र पा सकते हैं। वास्तव में, लंबाई एन के विभिन्न चक्रों की संख्या OEIS प्रविष्टि A001037 द्वारा दी गई है (यह एक चक्र में किस क्रम को सबसे पहले माना जाता है, की मनमानी पसंद नहीं गिना जा रहा है)।

मजेदार तथ्य: जैसा कि यह प्रतीत नहीं होता है, यह चुनौती जटिल मानचित्र का अध्ययन करने से प्रेरित थी f(z) = z - 1/z। जो कोई भी यह पता लगाता है कि इस चुनौती से उस नक्शे का क्या लेना-देना है।

चुनौती

एक चक्र की लंबाई k > 0और एक अनुक्रम लंबाई को देखते हुए n > 0, अलग-अलग (अनंत) द्विआधारी अनुक्रमों के पहले nशब्दों को आउटपुट करते हैं kजो उपरोक्त रन-लंबाई परिवर्तन के तहत एक चक्र बनाते हैं। यदि कई चक्र मौजूद हैं, तो आप उनमें से किसी एक को आउटपुट कर सकते हैं। यह आप पर निर्भर है कि किस क्रम में चक्र को शुरू करना है, और किस दिशा में चक्र जाता है (इसलिए आप या तो उन्हें ऐसे आउटपुट कर सकते हैं कि प्रत्येक अनुक्रम अगले का वर्णन करता है, या ऐसा है कि प्रत्येक अनुक्रम पिछले एक का वर्णन करता है, चक्रीय रूप से)।

आप STDIN (या निकटतम विकल्प), कमांड-लाइन तर्क या फ़ंक्शन तर्क के माध्यम से इनपुट ले रहे हैं और STDOUT (या निकटतम विकल्प), फ़ंक्शन रिटर्न मान या फ़ंक्शन (आउट) पैरामीटर के माध्यम से परिणाम लिख सकते हैं।

आउटपुट किसी भी सुविधाजनक, अस्पष्ट, नेस्टेड सूची प्रारूप में हो सकता है, जैसे कि बाहरी आयाम है kऔर आंतरिक आयाम है n

मानक नियम लागू होते हैं।

अतिरिक्त उदाहरण

यहाँ कुछ उदाहरण हैं। लेकिन जैसा कि मैंने कहा, समाधान अद्वितीय नहीं हैं, इसलिए आपके अपने समाधान भिन्न हो सकते हैं और फिर भी सही हो सकते हैं। शायद ये आपको एक समाधान के साथ आने में मदद करेंगे। प्रत्येक उदाहरण k nअनुक्रमों के बाद होता है, जैसे कि प्रत्येक पंक्ति अगले (चक्रीय रूप से) का वर्णन करती है:

4 20
1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2
2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1
2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1
1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1

5 6
2, 2, 1, 2, 2, 1
1, 1, 2, 2, 1, 2
2, 1, 2, 2, 1, 1
1, 1, 2, 1, 1, 2
2, 1, 2, 2, 1, 2

8 20
2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2
1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1
2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2
2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2
1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1
2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2
1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1
2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1

13 50
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2
2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1
1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1
1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1
1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1
1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1
1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 1

ध्यान दें कि पिछले दो आउटपुट में सभी लाइनें अलग-अलग नहीं हैं, हालांकि वे अंततः nबड़े पैमाने पर होते हैं।

संबंधित सवाल


1
क्या हम जनरेटर की सूची तैयार कर सकते हैं?
कैलकुलेटर

@CatsAreFluffy नहीं, माफ करना। (शायद अगली बार ...)
मार्टिन एंडर

जवाबों:


6

CJam (41 बाइट्स)

{Ma*{1:Bm<{1+ee{(1&B^)+}%e~A<0:B;}%}@:A*}

यह एक अनाम फ़ंक्शन है जो ऑर्डर में स्टैक पर इनपुट लेता है n kऔर स्टैक पर आउटपुट छोड़ता है। ऑनलाइन डेमो

मूल विचार एक लिंडन शब्द कॉलम के साथ शुरू करना है [2 1 1 1 ...]और यह इस आधार पर सही रूप से विस्तारित होता है कि प्रत्येक पंक्ति के प्रारंभिक तत्व और वैकल्पिकता को जानने के बाद हम लंबाई डिकोड को चला सकते हैं और अधिक तत्व प्राप्त कर सकते हैं।


3

हास्केल, 72 बाइट्स

~(a:b)?c=c:[c|a>1]++b?(3-c)
k!n=take k$take n<$>last(k!n)?2:map(?1)(k!n)

डेमो:

*Main> 4!20
[[2,1,1,2,2,1,2,2,1,2,1,1,2,1,1,2,2,1,2,1],[1,1,2,1,2,2,1,1,2,1,1,2,2,1,2,2,1,2,1,1],[1,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,2],[1,2,2,1,2,1,1,2,1,2,2,1,1,2,1,1,2,1,2,2]]

1
अच्छा काम, अंत में! :) क्या आप उन लोगों के लिए एक स्पष्टीकरण जोड़ना चाहेंगे जो हास्केल नहीं हैं? :)
मार्टिन एंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.