क्रमपरिवर्तन समूह संचालन


15

N तत्वों और क्रमांक 0 से n -1 के क्रमपरिवर्तन के बीच एक अच्छी तरह से ज्ञात आक्षेप है जैसे क्रमपरिवर्तन और क्रमांक की क्रमबद्ध संख्या समान है। उदाहरण के लिए, n = 3 के साथ:

0 <-> (0, 1, 2)
1 <-> (0, 2, 1)
2 <-> (1, 0, 2)
3 <-> (1, 2, 0)
4 <-> (2, 0, 1)
5 <-> (2, 1, 0)

यह भी अच्छी तरह से जाना जाता है कि n तत्वों के क्रमपरिवर्तन एक समूह (क्रम n का सममित समूह) बनाते हैं - इसलिए, विशेष रूप से, कि n तत्वों के दूसरे क्रमपरिवर्तन के लिए लागू किए गए n तत्वों में से एक क्रमपरिवर्तन n तत्वों के एक क्रम का उत्पादन करता है; ।

उदाहरण के लिए, (1, 0, 2) (ए, बी, सी) पैदावार (बी, ए, सी) पर लागू होता है, इसलिए (1, 0, 2) पैदावार (2, 1, 0) पर लागू होता है (1, 2) , 0)।

एक प्रोग्राम लिखें जो तीन पूर्णांक तर्क लेता है: एन, पी 1, और पी 2; n तत्वों के क्रमपरिवर्तन के रूप में p1 और P2 की व्याख्या करता है; पहले से दूसरे पर लागू होता है; और इसी पूर्णांक आउटपुट। उदाहरण के लिए:

$ ./perm.sh 3 2 5
3

जवाबों:


7

जे, ३०

मुझे इसका लालित्य पसंद है:

[:A.[:{/]A.~/~i.@[

या यह:

13 :'A.{/(i.x)(A.)~/y'

लेकिन वे इस तरह काम करते हैं:

3 f 2 5
3
12 f 8 9
17

तो यह मान्य प्रविष्टि है:

([:A.[:{/i.@{.A.~/}.)".}.>ARGV

कुछ स्पष्टीकरण:

  • 3 A. 0 1 2: 0 1 2(= 1 2 0) का तीसरा क्रमांकन देता है
  • 0 1 2 (A.)~ 3: वही है लेकिन तर्कों के साथ उलट
  • 0 1 2 (A.)~/ 3 4 5 ..."लागू होता है" (A.)~करने के लिए 3 4 5 ..., तो यह देता है 3, 4, 5, ... के क्रमचय 0 1 2
  • A. 1 2 0: 1 2 0(= 3) के क्रमांकन का आदेश देता है
  • i. n: अनुक्रम देता है 0 1 2 ... n-1
  • 1 2 0 { 0 2 1(= ) 0 2 1द्वारा व्यवस्थित करता है1 2 02 1 0

बहुत बढ़िया। मैंने A.कल के लिए प्रलेखन पर एक नज़र डाली, लेकिन कोशिश करने के लिए बहुत थक गया था और प्रश्न O :-) के लिए सही क्रम में इकट्ठा हुआ
JB

@ जेबी: मैं सोच रहा था कि यहां कोई जेबी + जे क्यों नहीं था ... :)
आठवीं

4

रूबी - 77 वर्ण

n,a,b=$*.map &:to_i
l=[*[*0...n].permutation]
p l.index(l[b].values_at *l[a])

अंतिम 3 पंक्तियों को p l.index (l [b] .values_at (* l [a])) से
बदलें

खुरदरी आवाज के लिए क्षमा करें। मैं सलाह देने के लिए था, लेकिन मैं समस्याओं को प्रारूपित करने में हार गया, और जाहिर तौर पर मेरा संपादन समय समाप्त हो गया।
स्टेन्सलैग

ARGV.map{|x|x.to_i}-> $*.map &:to_iएक और कुछ अक्षर बचाता है। और आप दूसरी पंक्ति को बदल सकते हैं l=[*[*0...n].permutation]
वेंटरो

कोई समस्या नहीं, सलाह के लिए धन्यवाद।
david4dev

@ वेंटरो: मुझे ये पसंद है। [* [* ० ... एन] .परिवर्तन] ने मुझे मुस्कुरा दिया।
स्टीनलेग

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