क्या यह फेरबदल है?


19

कल मैंने यह सवाल राइफल फेरबदल के बारे में पूछा । ऐसा लगता है कि कल का सवाल थोड़ा कठिन था इसलिए यह सवाल एक संबंधित लेकिन बहुत आसान काम है।

आज आपको यह निर्धारित करने के लिए कहा जाता है कि क्या क्रमपरिवर्तन वास्तव में एक राइफल फेरबदल है। राइफल फेरबदल की हमारी परिभाषा हमारे अंतिम प्रश्न से अनुकूलित है:

फेरबदल का पहला हिस्सा विभाजन है। विभाजन में कार्ड के डेक को दो में विभाजित करें। दो उपखंड निरंतर, पारस्परिक रूप से अनन्य और संपूर्ण होने चाहिए। वास्तविक दुनिया में अपने विभाजन को जितना संभव हो उतना करीब बनाना चाहते हैं, हालांकि इस चुनौती में यह एक विचार नहीं है, सभी विभाजन जो कि पतित हैं (एक विभाजन खाली है) समान विचार के हैं।

उनके विभाजन के बाद, कार्ड को इस तरह से एक साथ जोड़ दिया जाता है कि कार्ड उस विभाजन के भीतर अपने सापेक्ष क्रम को बनाए रखते हैं जिसका वे सदस्य हैं । उदाहरण के लिए, यदि कार्ड डेक में कार्ड बी से पहले है और कार्ड और बी एक ही विभाजन में हैं, तो कार्ड को अंतिम परिणाम में कार्ड बी से पहले होना चाहिए , भले ही उनके बीच कार्ड की संख्या बढ़ गई हो। यदि A और B अलग-अलग विभाजनों में हैं, तो वे किसी भी क्रम में हो सकते हैं, चाहे उनका प्रारंभिक क्रम अंतिम परिणाम में हो।

प्रत्येक राइफल फेरबदल को कार्ड के मूल डेक के क्रमपरिवर्तन के रूप में देखा जा सकता है। उदाहरण के लिए क्रमपरिवर्तन

1,2,3 -> 1,3,2

एक व्याकुल फेरबदल है। यदि आप डेक को ऐसे ही विभाजित करते हैं

1, 2 | 3

हम देखते हैं कि हर कार्ड में 1,3,2विभाजन के हर दूसरे कार्ड के लिए समान सापेक्ष क्रम है। 2अभी भी है 1

दूसरी ओर निम्नलिखित क्रमपरिवर्तन एक राइफल फेरबदल नहीं है।

1,2,3 -> 3,2,1

हम इसे सभी दो (गैर-तुच्छ) विभाजनों के लिए देख सकते हैं

1, 2 | 3
1 | 2, 3 

कार्ड की एक जोड़ी है जो उनके सापेक्ष आदेशों को बनाए नहीं रखते हैं। पहले विभाजन में 1और 2उनके क्रम को बदलते हैं, जबकि दूसरे विभाजन में 2और 3उनके क्रम को बदलते हैं।

कार्य

किसी भी उचित विधि के माध्यम से क्रमचय को देखते हुए, यह निर्धारित करें कि क्या यह एक वैध राइफल फेरबदल का प्रतिनिधित्व करता है। आपको "हाँ, यह एक राइफल फेरबदल है" और "नहीं, यह राइफल फेरबदल नहीं है" के लिए दो अलग-अलग निरंतर मूल्यों का उत्पादन करना चाहिए।

यह इसलिए उत्तर बाइट में कम बाइट के साथ बेहतर स्कोर किए जाएंगे।

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

1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False

1
क्या आउटपुट असंगत हो सकता है, लेकिन हमारी भाषा में सत्य / मिथ्या है? जैसे (अजगर, जहां, पूर्णांक के बीच केवल 0 मिथ्या है) 0मिथ्या के लिए, लेकिन सत्य के लिए कोई पूर्णांक [1, +∞)?
श्री एक्सकोडर

1
@ Mr.Xcoder मुझे सच्चाई / झूठे मूल्य पसंद नहीं हैं क्योंकि वे अच्छी तरह से परिभाषित करने के लिए कठिन हैं। उत्तर वर्तमान नियमों से चिपके रहना चाहिए।
गेहूं जादूगर

सुझाए गए परीक्षण का मामला: [3,1,4,2,5]
अर्जन जोहानसन

9
इस बारे में क्षमा करें, लेकिन [2,3,6,1,4,5]:।
अर्जन जोहानसन

1
क्या हम इनपुट के [0, ..., n-1]बजाय इसकी अनुमति ले सकते हैं [1, ..., n]?
डेनिस

जवाबों:


8

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

पूर्णांक के एक सरणी के रूप में इनपुट लेता है। एक बूलियन देता है।

([x,...a],y)=>a.every(z=>z+~x?y?z==++y:y=z:++x)

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

कैसे?

इनपुट सरणी एक वैध राइफल फेरबदल है अगर इसमें लगातार पूर्णांक के दो अलग-अलग इंटरेक्टेड अनुक्रम होते हैं।

चुनौती नियमों को निर्दिष्ट है कि हम एक दिया जाता है क्रमचय का [1 ... एन] । इसलिए हमें अतिरिक्त रूप से यह जांचने की आवश्यकता नहीं है कि इन अनुक्रमों की क्रमबद्ध संघ वास्तव में इस तरह की सीमा में परिणत होती है।

हम का उपयोग एक काउंटर x के लिए शुरू एक [0] और एक काउंटर y शुरू में अपरिभाषित।

A में प्रत्येक प्रविष्टि z के लिए , दूसरा 2 से शुरू होता है:

  • हम जांचते हैं कि क्या z x + 1 या y + 1 के बराबर है । यदि हाँ, तो हम संबंधित काउंटर को बढ़ाते हैं।
  • Else: यदि y अभी भी अपरिभाषित है, तो हम इसे z से आरंभ करते हैं ।
  • और अधिक: हम परीक्षण को विफल करते हैं।


5

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

sओपी उदाहरणों में पूर्णांकों की सूची लेता है और रिटर्न देता है Bool

s p=or[f(<x)p++f(>=x)p<[1..]|x<-p]
f=filter

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

यह काम किस प्रकार करता है

  • सूची की समझ प्रत्येक तत्व xको pबदले में जांचती है और जांचती है कि क्या यह फेरबदल के दूसरे विभाजन का पहला तत्व हो सकता है। अगर कोई चेक था तो orवापस Trueकरता है True
  • बँटवारा यह करता है कि विभाजन (साथ filter) pतत्वों में छोटे और बड़े (या इसके बराबर) तत्वों में x, समवर्ती, और जाँच कर अगर परिणामी सूची है [1..length p], अर्थात् क्रम में तत्व।
  • परिणामी सूची की जाँच यह देखने के लिए की जाती है कि क्या [1..length p]परिणाम अनंत सूची से कड़ाई से छोटा है [1..] == [1,2,3,etc.], जो किसी भी क्रमपरिवर्तन के लिए समान परिणाम देता है।

5

जेली , 13 6 बाइट्स

ỤIṢḊRẠ

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

वैकल्पिक संस्करण, चुनौती को पोस्ट करता है, 5 बाइट्स

Ụ>ƝSỊ

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

यह काम किस प्रकार करता है

ỤIṢḊRẠ  Main link. Argument: A (permutation of [1, ..., n])

Ụ       Grade up; sort the indices of A by their respective values.
        For shuffles, the result is the concatenation of up to two increasing
        sequences of indices.
 I      Compute the forward differences.
        In a shuffle, only one difference may be negative.
  Ṣ     Sort the differences.
   Ḋ    Dequeue; remove the first (smallest) difference.
    R   Range; map each k to [1, ..., k].
        This yields an empty array for non-positive values of k.
     Ạ  All; check if all resulting ranges are non-empty.


4

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

o~cĊ⟨⊆⊇⟩?

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

विधेय सफल होता है यदि इनपुट एक राइफल फेरबदल का प्रतिनिधित्व करता है और विफल हो जाता है यदि ऐसा नहीं होता है, तो अन्य चीजों के बीच अर्थ है कि यदि विधेय पूरे कार्यक्रम के रूप में चलाया जाता है तो सफलता प्रिंट होगी true.और विफलता प्रिंट होगी false.। इनपुट को किसी भी प्रकार की वस्तुओं की एक सूची के रूप में लिया जाता है और इसकी व्याख्या करता है जैसे कि खुद को क्रमबद्ध करने के लिए।

   Ċ         Some length-two list
 ~c          which concatenated
o            is the input sorted
    ⟨        satisfies the condition that its first element
     ⊆       is an ordered not-necessarily-contiguous sublist
        ?    of the input
      ⊇      which is an ordered superlist of
       ⟩     the list's second element.

मुझे ऐसा लग रहा है कि आत्मा में कुछ है, ⊆ᵐजिसे चार-बाइट "सैंडविच" निर्माण के स्थान पर काम करना चाहिए ⟨⊆⊇⟩


1
मुझे लगता है कि आप पीपीसीजी जवाब में सैंडविच का उपयोग करने वाले पहले व्यक्ति हैं (और यह एक सुंदर सममित है :))
घातक


2

रूबी , 35 बाइट्स

->l{l.any?{|a|l&[*1..a]|l==l.sort}}

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

कैसे?

  • l & [*1..a] | lएक चौराहे और फिर एक संघ लागू होता है: पहले के तत्वों मिलता lहैं कि <=aऔर फिर से शेष तत्वों को जोड़ने के lआदेश को बदलने के बिना। यदि एक संख्या है जिसे हम ढूंढ रहे हैं, तो यह ऑपरेशन छँटाई के समान है l


2

अजगर, 5 बाइट्स

}SQy+

परीक्षण सूट

}SQy+

    +QQ  concatenated two copies of the (implicit) input
   y     all subsequences of it
}        contain an element equaling
 SQ      the input list sorted 

जाँचता है कि क्या दोहरी इनपुट सूची में अनुवर्ती के रूप में स्वयं का एक सॉर्ट किया गया संस्करण है।

1 बाइट के लिए एर्गिक आउटरीक के लिए धन्यवाद, इसके +QQबजाय निहित इनपुट का बेहतर लाभ उठा रहा है *2Q


5 बाइट्स }SQy+:। इसका विस्तार होता जाता है }SQy+QQ
एलिक्जेलर

@EriktheOutgolfer एक अच्छा, धन्यवाद।
xnor

1

अजगर , 9 बाइट्स

!t-.+xLQS

परीक्षण सूट।

सहेजे गए 3 बाइट्स isaacg के लिए धन्यवाद ।

अजगर , 14 बाइट्स

}SQm.nS.Tcd2./

यहाँ यह कोशिश करो! या सभी परीक्षण मामलों को सत्यापित करें।

आउटपुट Trueऔर Falseक्रमशः राइफल-शफल और गैर-राइफल-शफल के लिए।

कैसे?

} SQm.nS.Tcd2./ ~ पूर्ण कार्यक्रम। STDIN से इनपुट पढ़ता है और STDOUT को आउटपुट देता है।

            । / ~ इनपुट के सभी डिवीजनों को डिसऑइंटमेंट सब्सट्रिंग्स (पार्टीशन) में लौटाएं।
   m ~ एक चर d का उपयोग करके उपरोक्त मानचित्र।
         सीडी 2 ~ चॉप डी दो-तत्व सूचियों में।
       .T ~ औचित्यपूर्ण स्थानान्तरण, अनुपस्थिति की अनदेखी।
      एस ~ सॉर्ट (शाब्दिक रूप से)।
    .n ~ दीप- समतल।
} ~ जाँच करें कि क्या उपरोक्त में शामिल है ...
 SQ ~ सॉर्ट किए गए इनपुट।

इसके अलावा, 2 और बाइट्स <#0द्वारा प्रतिस्थापित किया जा सकता है -
इसहाक

ओह @isaacg हाँ facepalm धन्यवाद। संपादित। संपादित।
श्री एक्सकोडर



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