डेवनपोर्ट-सांचेज़ेल अनुक्रम उत्पन्न करें


11

पृष्ठभूमि

एक डेवनपोर्ट-Schinzel अनुक्रम दो सकारात्मक पूर्णांक पैरामीटर dऔर n। हम दिए गए मापदंडों के लिए सभी डेवनपोर्ट-सिनचिज़ल दृश्यों के सेट को निरूपित करेंगे DS(d,n)

सम्मिलित 1करने के लिए प्राकृतिक संख्याओं के सभी अनुक्रमों पर विचार करें n, जो संतुष्ट हैं:

  • अनुक्रम में कोई दो लगातार संख्याएं समान नहीं हैं।
  • इससे अधिक लंबाई की कोई परवर्ती (जरूरी नहीं कि लगातार) हो d, जो दो अलग-अलग संख्याओं के बीच वैकल्पिक हो।

आइए Lऐसे अनुक्रम की अधिकतम लंबाई को निरूपित करें (दिया dऔर n)। फिर, DS(d,n)लंबाई के साथ इस तरह के सभी दृश्यों का सेट है L

कुछ उदाहरण मदद कर सकते हैं। चलो d = 4, n = 3। इन बाधाओं के साथ सबसे लंबे समय तक संभव अनुक्रम हैं L = 8। तो निम्नलिखित में से एक सदस्य है DS(4,3):

[1, 2, 1, 3, 1, 3, 2, 3]

कोई समान संख्या नहीं हैं और लंबाई के वैकल्पिक विकल्प हैं 4, लेकिन अब नहीं हैं:

 1  2  1           2
 1  2        1     2
 1        3  1  3
 1        3  1        3
    2     3        2  3
    2           3  2  3
       1  3  1  3
       1  3  1        3

निम्नलिखित उदाहरण में नहीं हैं DS(4,3):

[1, 2, 2, 3, 1, 3, 2, 3]  # Two consecutive 2's.
[1, 2, 1, 3, 1, 3, 2, 1]  # Contains alternating subsequences of length 5.
[1, 2, 1, 3, 1, 3, 2]     # Longer valid sequences for d = 4, n = 3 exist.

अधिक जानकारी के लिए MathWorld और OEIS और उनके द्वारा सूचीबद्ध संदर्भ देखें।

चुनौती

दो सकारात्मक पूर्णांकों को देखते हुए, nऔर d, किसी भी डेवनपोर्ट-सिनचिज़ेल अनुक्रम को उत्पन्न करते हैं DS(d,n)। ध्यान दें कि ये आम तौर पर अद्वितीय नहीं हैं, इसलिए किसी भी एकल परिणाम को आउटपुट करें।

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

आप आउटपुट के लिए किसी भी सुविधाजनक, अस्पष्ट स्ट्रिंग या सूची प्रारूप का उपयोग कर सकते हैं।

यह कोड गोल्फ है, इसलिए सबसे छोटा सबमिशन (बाइट्स में) जीतता है।

अनुक्रम लंबाई

चूंकि अनुक्रम अद्वितीय नहीं हैं, इसलिए इस चुनौती में व्यक्तिगत उदाहरणों के लिए बहुत उपयोग नहीं है। हालांकि, दो सामान्य वैधता समस्याएं किसी भी आउटपुट के लिए जांचना काफी आसान है, इसलिए मुख्य सवाल यह है कि क्या अनुक्रम की लंबाई सही है (या अब एक वैध अनुक्रम है)। इसलिए, यहाँ दिए गए 1 के L लिए एक सूची है dऔर n:

 \ 
 d\n 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
   \-----------------------------------------------------------
 1 | 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 2 | 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
 3 | 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
 4 | 1  4  8 12 17 22 27 32 37 42 47 53 58 64 69 75 81 86 92 98
 5 | 1  5 10 16 22 29 ...
 6 | 1  6 14 23 34 ...
 7 | 1  7 16 28 41 ...
 8 | 1  8 20 35 53 ...
 9 | 1  9 22 40 61 ...
10 | 1 10 26 47 73 ...

आपको इस तालिका की किसी भी जानकारी को अपने सबमिशन में हार्डकोड नहीं करना चाहिए।

1 यह तालिका 1994 से है, इसलिए तब से और अधिक प्रगति हो सकती है, लेकिन मुझे संदेह है कि कोई भी जमा समय की उचित मात्रा में इस तालिका में भी बड़ी प्रविष्टियों को संभालने में सक्षम होगा।

जवाबों:


2

अजगर 2: 172

from itertools import*
d,n=input();S=[[1]]
for s in S:
 for v in range(1,n+1):
  if(v!=s[-1])*all(w[2:]!=w[:-2]for w in combinations(s+[v],d+1)):S.append(s+[v])
print S[-1]

इनपुट केवल प्रारूप में है 4, 3

मैं पुनरावृति से सभी अनुक्रम बनाता हूं, जो 1दो गुणों से शुरू और संतुष्ट करते हैं, और उन्हें स्टोर करते हैं S। चूंकि मैं उन्हें क्रमबद्ध क्रम में बनाता हूं (लंबाई द्वारा क्रमबद्ध [और मूल्यों द्वारा]), अंतिम प्रविष्टि को डेवनपोर्ट-सिनचिन्जेल-अनुक्रम होना चाहिए। अच्छे तथ्य का उपयोग करता है, कि आप इसे संलग्न करते समय एक सूची पर पुनरावृत्त कर सकते हैं।


यदि आप पहले से ही python2 का उपयोग कर रहे हैं, तो आप एक टैब में एक बाइट को जोड़ सकते हैं (जिसे मैं दो स्थान मानता हूं)। यदि मैं गलत हूं तो मुझे सही करों।
ज़ाचारि
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.