순열 그룹 작업


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 개의 원소의 순열을 만든다 .

예를 들어 (a, b, c)에 적용된 (1, 0, 2)는 (b, a, c)를 산출하므로 (2, 1, 0)에 적용된 (1, 0, 2)는 (1, 2)를 산출합니다 , 0).

세 개의 정수 인수를 취하는 프로그램을 작성하십시오 : n, p1 및 p2; p1과 p2를 n 개의 요소 순열로 해석합니다. 첫 번째를 두 번째에 적용합니다. 해당 정수를 출력합니다. 예를 들면 다음과 같습니다.

$ ./perm.sh 3 2 5
3

답변:


7

J, 30

나는 이것의 우아함을 좋아한다.

[: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 10 2 1의해 정렬 1 2 0(= 2 1 0)

잘 했어. 나는 A.어제 문서를 들여다 보았지만 질문 O :-)
JB

@JB : JB + J가없는 이유가 궁금합니다 ... :)
Eelvex

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]))로
대체하십시오.

거칠게 들려서 죄송합니다. 조언을 해 주려고했지만 포맷 문제가 없어져서 편집 시간이 다 된 것 같습니다.
steenslag

ARGV.map{|x|x.to_i}-> $*.map &:to_i다른 문자 몇 개를 저장합니다. 그리고 두 번째 줄을로 바꿀 수 있습니다 l=[*[*0...n].permutation].
Ventero

문제 없습니다, 조언을 주셔서 감사합니다.
david4dev

@ Ventro : 나는 이것들을 좋아한다. [* [* 0 ... n] .permutation] 나를 웃게 만들었습니다.
steenslag

2

파이썬 2.6, 144 자

import sys
from itertools import*
n,p,q=map(int,sys.argv[1:])
R=range(n)
P=list(permutations(R))
print P.index(tuple(P[q][P[p][i]] for i in R))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.