क्रमों को पार करना


11

पार के दृश्य

सकारात्मक पूर्णांक की एक सूची को देखते हुए A, इसे एक बढ़ता हुआ क्रम कहें, यदि प्रत्येक तत्व पिछले एक से अधिक या उसके बराबर है; और इसे घटते क्रम को कहें, यदि प्रत्येक तत्व पिछले वाले से कम या बराबर है।

कुछ बढ़ते क्रम:

[1,2,4,7]
[3,4,4,5]
[2,2,2]
[]

कुछ घटते क्रम:

[7,4,2,1]
[5,4,4,3]
[2,2,2]
[]

एक क्रॉसिंग अनुक्रम एक सूची है जिसे दो असमानताओं के बाद विघटित किया जा सकता है, एक बढ़ता क्रम और दूसरा घटता क्रम।

उदाहरण के लिए, सूची:

[3,5,2,4,1]

एक क्रॉसिंग अनुक्रम है, क्योंकि इसे विघटित किया जा सकता है:

[3,    4  ]
[  5,2,  1]

जहाँ [3,4]बढ़ती हुई परवर्तीता है और [5,2,1]घटती हुई परवर्ती है। हम क्रॉसिंग अनुक्रम के अपघटन के बाद (बढ़ती, घटती) की ऐसी जोड़ी को बुलाएंगे

सूचि:

[4,5,2,1,3]

एक क्रॉसिंग अनुक्रम नहीं है; बढ़ते और घटते क्रम में इसे विघटित करने का कोई तरीका नहीं है।

आपका कार्य एक प्रोग्राम लिखना है / इनपुट को सकारात्मक पूर्णांक की सूची के रूप में लेना है; और यदि यह एक क्रॉसिंग सीक्वेंस है, तो दो सूचियों को उसके किसी एक डिकम्पोजिशन में लौटा दें; या कुछ सुसंगत "गलत" मान यदि सूची क्रॉसिंग अनुक्रम नहीं है।

यह ; प्रत्येक भाषा में सबसे छोटा कार्यक्रम / समारोह विजेता है।

नियम:

  • इनपुट लचीला है।
  • सामान्य खामियों के लिए मना किया जाता है।
  • यदि इनपुट को विघटित करने के कई वैध तरीके हैं, तो आप उनमें से एक या सभी आउटपुट कर सकते हैं।
  • अपघटन के लिए आउटपुट स्वरूपण लचीला है; लेकिन यह दो बाद के बीच के अंतर के बारे में स्पष्ट होना चाहिए।
  • आप यह इंगित करने के लिए किसी सुसंगत आउटपुट मान का उपयोग कर सकते हैं कि इनपुट क्रॉसिंग अनुक्रम नहीं है; किसी भी क्रॉसिंग अनुक्रम के लिए आउटपुट की तुलना में यह बहुत लंबा है। आपको अपने उत्तर में गलत मूल्य निर्दिष्ट करना चाहिए।

परीक्षण के मामलों:

Falseगैर-क्रॉसिंग अनुक्रमों को इंगित करने के लिए उपयोग करना :

[3, 5, 2, 4, 1] => [3, 4], [5, 2, 1]
[3, 5, 2, 4, 4, 1, 1] => [3, 4, 4], [5, 2, 1, 1]

[7, 9, 8, 8, 6, 11] => [7, 8, 8, 11], [9, 6]
[7, 9, 8, 8, 6, 11] => [7, 9, 11], [8, 8, 6] # also valid
[7, 9, 8, 8, 6, 11] => [7, 8, 11], [9, 8, 6] # also valid

[7, 8, 9, 10, 20, 30] => [7, 8, 9, 20, 30], [10]
[7, 8, 9, 10, 20, 30] => [8, 9, 10, 20, 30], [7] # this is also valid

[5, 5, 5] => [5, 5, 5], []

[4, 5, 2, 1, 3] => False
[3, 4, 3, 4, 5, 2, 4] => False

2
संभव डुप्लिकेट । केवल दो अंतर मैं देख रहा हूं कि अन्य चुनौती को इनपुट की लंबाई में बहुपद समय में चलाया जाना चाहिए, और दो बाद के बजाय एक सत्य मूल्य की अनुमति देता है (बाद में खुद को वापस करना होगा, हालांकि 20% बोनस प्राप्त होगा)। अभी भी मेरे लिए एक डुबकी की तरह लगता है, लेकिन मैं इसे हथौड़ा नहीं करूंगा।
केविन क्रूज़सेन

@ केविनक्रूजसेन समय का प्रतिबंध संभवत: अपने आप में पर्याप्त है, ताकि इसे ठगा न जा सके।
निक केनेडी

1
@NickKennedy संभवतः हाँ, यही कारण है कि मैंने इसे हथौड़ा मारने से परहेज किया। :)
केविन क्रूज़सेन

2
सुझाए गए परीक्षण का मामला: [3, 5, 2, 4, 4, 1, 1]। वर्तमान परीक्षण मामले आपको >=/ के साथ दूर होने देते हैं <, जब यह वास्तव में होना चाहिए >=/ <=
ग्रिम्मी

1
@ अरनल्ड: हां, इसका कोई भी मूल्य हो सकता है ("फाल्सी" सिर्फ यह कहना है: यह गलत है कि इनपुट एक क्रॉसिंग अनुक्रम है)।
चास ब्राउन

जवाबों:


1

05AB1E , 15 14 13 बाइट्स

2.Œ.ΔćRšεü@}W

इसे ऑनलाइन आज़माएं या सभी परीक्षण मामलों को मान्य करें

स्पष्टीकरण:

2.Œ                    # all partitions of the input in 2 subsequences
   .Δ                  # find the first partition such that the following gives 1
     ćRš               # reverse the first subsequence
        ε  }           # map each subsequence to
         ü@            # pairwise greater-than
            W          # minimum (1 if all 1s, 0 otherwise)


1

जावास्क्रिप्ट (ईएस 6),  110 105  104 बाइट्स

[[decreasing], [increasing]]1

f=(a,n,b=[[],[]])=>a.some((v,i)=>[...x=b[i=n>>i&1]].pop()*(x.push(v),i-=!i)>v*i)?n>>a.length||f(a,-~n):b

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

कैसे?

n02एलएल

[0][1]मैंn

1मैं=1-1मैं=0

[...x = b[i = n >> i & 1]].pop() * (x.push(v), i -= !i) > v * i

some()


1

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

(([],[])#)
(d,i)#(a:b)=(#b)=<<[(d++[a],i)|all(a<=)d]++[(d,i++[a])|all(a>=)i]
p#_=[p]

(decreasing,increasing)यदि कोई ऐसी जोड़ी नहीं है, तो सभी वैध जोड़े या खाली सूची की सूची लौटाता है ।

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


1

पायथन 3 , 109 107 बाइट्स

def f(l,i=[],d=[]):
 if l:s,*r=l;i and s<i[-1]or f(r,i+[s],d);d and s>d[-1]or f(r,i,d+[s])
 else:print(i,d)

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

फ़ंक्शन मानक आउटपुट के लिए सभी संभव decompositions प्रिंट करता है। यदि कोई संभावित विघटन नहीं हैं, तो कुछ भी मुद्रित नहीं है।

सुधार सुझावों के लिए @Sriotchilism O'Zaic का धन्यवाद।


साइट पर आपका स्वागत है। मैं सुझाव देता हूं कि s<i[-1]इसके बजाय i[-1]>s और इसी तरह से d[-1]<s , दोनों एक बाइट को बचाते हैं।
तदर्थ गार्फ हंटर

सलाह के लिये धन्यवाद। मैंने जवाब अपडेट कर दिया है। क्या उत्तर प्रकाशित करने के लिए यहां कोई कॉपी-पेस्ट करने योग्य टेम्पलेट है?
जोएल

मुझे नहीं पता तुम्हारा क्या मतलब है? TIO का एक टेम्प्लेट है जिसे आप पहले से ही उपयोग कर रहे हैं।
तदर्थ गार्फ हंटर

मैंने केवल TIO पर एक लिंक जेनरेट किया और लिंक को अपनी पोस्ट में जोड़ा। मैंने वहां किसी भी टेम्पलेट का उपयोग नहीं किया। कहाँ है?
जोएल

1
@ जॉयल - टीआईओ पेज के शीर्ष पर एक आइकन है जो कुछ चेन लिंक की तरह दिखता है। उस पर क्लिक करें, और फिर आपको विकल्पों का एक पृष्ठ मिलता है। उनमें से एक है 'कोड गोल्फ सबमिशन'। वह आपकी प्रतिलिपि बफर में स्वरूपित सामान आप चाहते हैं में डाल दिया जाएगा! आपका भी स्वागत है, और अच्छा समाधान!
चास ब्राउन

0

ब्रेकीलॉग , 17 बाइट्स

;Ṣzpᵐz{ℕˢ}ᵐ≤₁ʰ≥₁ᵗ

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

शायद यह गोल्फ के लिए काफी जगह है।


2
आपने इस चुनौती का पहले ही जवाब दे दिया है यहाँ , जहाँ आपने इसे 16 बाइट्स में किया था। ;)
केविन क्रूज़सेन

मैं इस भावना को हिला नहीं सका कि मैंने कुछ ऐसा ही किया था, लेकिन किसी कारण से मेरे मन ने फैसला किया कि इसके बजाय यह होना चाहिए
असंबंधित स्ट्रिंग

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