पृष्ठभूमि
क्रमपरिवर्तन की समता , के रूप में विकिपीडिया द्वारा परिभाषित किया गया , इस प्रकार है:
क्रमपरिवर्तन के संकेत या हस्ताक्षर को sgn (and) दर्शाया जाता है और +1 के रूप में परिभाषित किया जाता है यदि − सम है और even1 यदि odd विषम है।
क्रमपरिवर्तन का संकेत स्पष्ट रूप से व्यक्त किया जा सकता है
sgn (N) = (−1) ^ N (σ)
जहाँ N (in) (में व्युत्क्रमों की संख्या है।
वैकल्पिक रूप से, क्रमपरिवर्तन के उत्पाद में एक विघटन, के संकेत को इसके अपघटन से परिभाषित किया जा सकता है
sgn (m) = (−1) ^ m
जहां मी अपघटन में प्रत्यारोपण की संख्या है।
आप में से जो अपने गणित में ग्रीक वर्णमाला के सूप के शौकीन नहीं हैं, मैं कोशिश करूँगा और परिभाषा को एक उदाहरण (विकिपीडिया से चुराया गया) के साथ थोड़ा सरल करूँगा।
उदाहरण
इनपुट ऐरे पर विचार करें {1, 2, 3, 4, 5}, और इसे क्रमबद्ध करने दें, आइए बताते हैं {3, 4, 5, 2, 1}। मूल क्रम से इसकी क्रमपरिवर्तन तक प्राप्त करने के लिए, आपको सूचकांकों को स्वैप करना चाहिए 0और 2, 1और 3फिर, 2और 4। हालांकि यह एक अनूठा समाधान नहीं है, समता अच्छी तरह से परिभाषित है, इसलिए यह सभी मामलों के लिए काम करता है।
चूंकि इसमें 3 स्वैप की आवश्यकता होती है, इसलिए हम इस क्रमचय को oddसमता के साथ लेबल करते हैं । जैसा कि आप उम्मीद कर सकते हैं, एक क्रमपरिवर्तन के लिए एक समान राशि की आवश्यकता होती है जिसे evenसमता कहा जाता है ।
चुनौती
आपकी चुनौती क्रमबद्धता की समता निर्धारित करने के लिए यथासंभव कम बाइट्स में एक कार्यक्रम लिखना है। आपका कार्यक्रम या समारोह होना चाहिए:
- तर्क के रूप में स्वीकार करें, दो इनपुट सरणियों (या तार) एक क्रमपरिवर्तन से पहले और बाद में एक सेट का प्रतिनिधित्व करते हैं।
- क्रमपरिवर्तन को देखते हुए
eयाoविषम के लिए चरित्र को वापस या प्रिंट करें । - मान लेना चाहिए कि सरणियों या तारों के सभी सूचकांकों में अद्वितीय मूल्य हैं।
परीक्षण के मामलों
मान लिया गया कि आपने एक समारोह घोषित किया है f:
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"
यह कोड-गोल्फ है , बाइट्स जीत में सबसे छोटा कार्यक्रम!
[10], [10] -> e(शून्य ट्रांस्पोज़िशन) : के लिए कुछ सुझाव यहां दिए गए हैं । [10 30 20], [30 20 10] -> e(दो प्रत्यारोपण)। [10 30 20 40], [30 20 40 10] -> o(तीन बदलाव)