क्या ऐरे को अनफिल्ड किया जा सकता है?


15

पृष्ठभूमि

बहुत कुशल कार्ड हैंडलर एक ऐसी तकनीक के लिए सक्षम होते हैं जिसके तहत वे आधे में पूरी तरह से एक डेक काटते हैं, फिर पूरी तरह से कार्ड को इंटरलेव करते हैं। यदि वे एक सॉर्ट किए गए डेक के साथ शुरू करते हैं और लगातार पंक्ति में 52 बार इस तकनीक का प्रदर्शन करते हैं, तो डेक को क्रमबद्ध क्रम में बहाल किया जाएगा। आपकी चुनौती कार्डों के एक डेक को पूर्णांक सरणी में लेना है और यह निर्धारित करना है कि क्या इसे केवल फेर फेरों का उपयोग करके सॉर्ट किया जा सकता है।

परिभाषा

गणितीय रूप से, एक फेरस फेरल 2 n तत्वों (किसी भी सकारात्मक पूर्णांक n ) पर एक क्रमपरिवर्तन है जो तत्व i (1-अनुक्रमित) को 2 i (mod 2 n +1) की स्थिति में ले जाता है। हम विषम-लंबाई सूचियों को संभालने में भी सक्षम होना चाहते हैं, इसलिए उस स्थिति में, सूची के अंत में एक तत्व जोड़ें (एक जोकर, यदि आपके पास एक काम है) और फ़ार उपरोक्त के रूप में नई सूची में फेरबदल करते हैं, लेकिन अनदेखा करें सूची के आदेश की जाँच करते समय जोड़ा गया डमी तत्व।

लक्ष्य

एक प्रोग्राम या फ़ंक्शन लिखें जो पूर्णांक और रिटर्न की एक सूची लेता है या एक सत्य को आउटपुट करता है यदि कुछ संख्या में फेरस फेरबदल के कारण उस सूची को निंदनीय क्रम में क्रमबद्ध किया जाएगा (भले ही वह संख्या शून्य हो - छोटी सूचियों को एक सत्य देना चाहिए)। अन्यथा, वापसी या एक झूठा उत्पादन।

उदाहरण

[1,1,2,3,5,8,13,21]  => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True

स्कोरिंग

यह इसलिए बाइट्स जीत में सबसे छोटा स्रोत है।


किसी भी साथी कार्ड हैंडलर के साथ भ्रम से बचने के लिए, यह ध्यान दिया जाना चाहिए कि फ़ार फेरबदल दो प्रकार के होते हैं। एक में फेरबदल और एक बाहर फेरबदल । यहाँ वर्णित विधि इन-शफल है। दिलचस्प बात यह है कि अपने मूल क्रम में एक डेक को वापस करने के लिए केवल 8 आउट-शफ़ल लगते हैं। अधिक जानकारी
ब्रेनसेल

क्या यह सिर्फ "इन-शफ़ल एन + 1 बार नहीं है और देखें कि क्या रास्ते की कोई भी सूची" क्रमबद्ध है?
lirtosiast

वास्तव में n समय पर्याप्त है, क्योंकि इसे करने के लिए 2n बार सभी संभावित क्रमपरिवर्तन खोजने की गारंटी है, लेकिन आपको पहले n में कम से कम आरोही या अवरोही क्रम मिलेगा।
क्विंटोपिया


1
पहला तत्व हमेशा पहली स्थिति में नहीं रहता है?
यूमेल

जवाबों:


3

पायथ - 26 25 24 बाइट्स

कई बार फ़ार फेरबदल लागू करने और सभी परिणामों को रखने के लिए संचयी कम का उपयोग करता है। फिर, यह इसके माध्यम से मैप करता है और जांचता है कि क्या वे सॉर्टिंग के तहत अनियंत्रित हैं, तो जांच के लिए योग का उपयोग करता है क्या कोई भी सत्य है। सकारात्मक या शून्य देता है।

smSI-db.usC_c2NQsC.tc2Qb

टेस्ट सूट


3

MATL , 41 बाइट्स

itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx

आउटपुट 1या है 0

व्याख्या

i              % get input array
tn2\           % is size odd?
?              % if that's the case
  YNh          % concat NaN at the end
]              % end if
tn             % get size of input array
t1+:           % vector 1:n+1, where n is input size, so loop will be entered even with []
"              % for loop
  x[]2e!PY)    % delete result from previous iteration and do the shuffling
  ttZN~)       % remove NaN, if there's any
  tS=A         % check if array is sorted
  t.           % copy the result. If true, break loop
]              % end for
wx             % remove unwanted intermediate result

उदाहरण

>> matl itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx
> [1,1,2,3,5,8,13,21]
1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.