परिचय
N तत्वों के साथ एक सूची के लेक्सोग्राफिक क्रमपरिवर्तन को 0 से n तक गिना जा सकता है ! - 1. उदाहरण के लिए, 3! = 6 क्रमपरिवर्तन (1,2,3)
होगा (1,2,3)
, (1,3,2)
, (2,1,3)
, (2,3,1)
,(3,1,2)
, (3,2,1)
।
जब किसी सूची में एक क्रमपरिवर्तन लागू किया जाता है, तो इसके तत्वों को क्रमबद्धता में संख्याओं के समान क्रम में आदेश दिया जाता है। उदाहरण के लिए, पैदावार (2,3,1)
को l = (a,b,c)
पैदावार पर लागू करना (l[2],l[3],l[1]) = (b,c,a)
।
क्रमपरिवर्तन के व्युत्क्रम को इस ऑपरेशन को उलटने वाले क्रमपरिवर्तन के रूप में परिभाषित किया जाता है, अर्थात क्रमपरिवर्तन को लागू करना और फिर इसका उलटा (या इसके विपरीत) सरणी को संशोधित नहीं करता है। उदाहरण के लिए, प्रतिलोम (2,3,1)
है (3,1,2)
, जो कि (b,c,a)
पैदावार के लिए लागू होता है (a,b,c)
।
इसके अलावा, क्रमपरिवर्तन के लिए लागू एक क्रमपरिवर्तन का व्युत्क्रम ही पूर्णांक 1 ... n पैदा करता है । उदाहरण के लिए, आवेदन (3,1,2)
करना(2,3,1)
पैदावार के(1,2,3)
।
अब हम फंक्शन रिवाइंड ( x ) को इंडेक्स x के साथ क्रमपरिवर्तन के व्युत्क्रम क्रमांक के रूप में परिभाषित करते हैं । (यह A056019 है यदि आप रुचि रखते हैं तो ।)
सूचकांक के साथ एक क्रमपरिवर्तन के बाद से मैं केवल पिछले संशोधित करता कश्मीर सूची के आइटम iff 0 ≤ मैं < कश्मीर !, हम सूची के शुरू करने के तत्वों के किसी भी संख्या को प्रभावित किए बिना जोड़ सकते हैं revind ( मैं )। इसलिए सूची की लंबाई परिणाम को प्रभावित नहीं करती है।
चुनौती
आपका काम रिवाइंड ( x ) लागू करना है । आप एक पूर्ण कार्यक्रम या फ़ंक्शन लिखेंगे जो एकल nonnegative पूर्णांक x लेता है को इनपुट / तर्क और आउटपुट / एकल nonnegative पूर्णांक के रूप में परिणाम देता है।
इनपुट और आउटपुट 0-अनुक्रमित या 1-अनुक्रमित हो सकते हैं, लेकिन यह उनके बीच सुसंगत होना चाहिए।
अनुक्रमणिका द्वारा क्रमपरिवर्तन उत्पन्न करने वाले बिल्डरों, क्रमपरिवर्तन के सूचकांक को वापस करते हैं या पाते हैं कि व्युत्क्रम क्रमपरिवर्तन पर प्रतिबंध है। (बिल्ट जो सभी क्रमपरिवर्तन उत्पन्न करते हैं या अगले क्रमपरिवर्तन की अनुमति है।)
मानक कोड-गोल्फ नियम लागू होते हैं।
उदाहरण
नीचे दिए गए उदाहरण 0-अनुक्रमित हैं।
Input Output
0 0
1 1
2 2
3 4
4 3
5 5
6 6
13 10
42 51
100 41
1000 3628
2000 3974
10000 30593
100000 303016
संदर्भ कार्यान्वयन (पायथन 3)
def revind(n):
from math import factorial
from itertools import permutations, count
l = next(filter(lambda x: factorial(x) > n, count(1)))
pms = list(permutations(range(l)))
return [k for k in range(len(pms)) if tuple(pms[n][i] for i in pms[k]) == pms[0]][0]
(a,b,c)
बेहद अस्पष्ट है। एक व्युत्क्रम क्रमपरिवर्तन क्या है, इसकी उचित व्याख्या शामिल करें।
Ụ
(ग्रेड अप) होता है जो एक सरणी के सूचकांकों को उनके संबंधित मूल्यों द्वारा क्रमबद्ध करता है। यह 1,…, n के क्रमपरिवर्तन को पलटने के लिए होता है , लेकिन यह अन्य क्रमपरिवर्तन के लिए काम नहीं करता है। है एक वर्जित निर्मित? Ụ