2016-06-05 2 views
2

"eval"및 "seq"명령을 사용하여 bash에서 순열을 만들어야합니다. 그래서 나는 같은 숫자를 포함 할 수있는 순열을 만들어야 만합니다. 그런 다음 어떻게 든 그것을 필터해야합니다.N을 사용하여 bash에서 순열을 만드는 방법! 입력?

선생님은 두 사이클/마침표를 사용해야한다고 말했습니다. 그러나 나는 그것을 어떻게하는지 모른다.

입력은 같은 것입니다 :

3 

출력해야한다 : 누군가가 나를 도울 수 있다면

123 
132 
213 
231 
312 
321 

하는 것은, 그것은 좋은 것입니다!

편집 : 나는 이러한 명령으로 작업을 수행하는 방법을 알고 싶어 , 내 친구는 다음과 같이 내게했다 : 선생님이 나에게 말했다 http://pastebin.com/wM2U1SuT 의 너무 좋은,이 수준에 ... 내가 그것을해야되지 않았다 seq와 eval은 그다지 좋지 않습니다. 두 번째 문제는 입력이 3과 같이 123이 아니라 3이되었다는 것입니다. ...

+0

무엇 특히 당신이 알고 싶어? 지금까지 어떤 코드를 작성 했습니까? –

+1

게시 된 예제에서 무엇보다 먼저 '평가'를 가르치면 교사의 우선 순위가 심각하게 의심됩니다. – chepner

+0

어떻게 든 도와 주실 수 있습니까? :/ – hategrip

답변

1

만약 누군가의 호기심을 heres 솔루션 :

input=3 
for i in $(eval echo " {1..$input}{1..$input}{1..$input} "); do 
    OK=yes 
    for pos1 in $(seq 0 $((x,1))); do 
     for pos2 in $(seq 0 $((x,1))); do 
      if [ $pos1 != $pos2 ]; then 
       if [ ${i:$pos1:1} == ${i:$pos2:1} ]; then 
        OK=no 
       fi 
      fi 
     done 
    done 
    if [ $OK = yes ]; then 
     echo $i 
    fi 

done 
1

이것은 순열 문제이므로 일부 다른 사람이 찾은 것 같습니다.
test 3 :
출력 :

perm() { 
    local items="$1" 
    local out="$2" 
    local i 
    [[ "$items" == "" ]] && echo "$out" && return 
    for ((i=0; i<${#items}; i++)) ; do 
     perm "${items:0:i}${items:i+1}" "$out${items:i:1}" 
    done 
} 

test() { 
    local number="$1" 
    local iniitem="$(seq -s' ' 1 ${number} | sed -n 's/ //g;p')" 
    perm "$iniitem" 
} 

그런 다음이 같은 기능을 사용할 수 있습니다 : 당신은이 같은 코드를 작성할 수 있습니다, 답 답을 통해 그래서 Generating permutations using bash

를 볼 수 있습니다

123 
132 
213 
231 
312 
321 
+0

답변을 주셔서 감사합니다,하지만 그 명령을 사용해야합니다. : 하지만 아주 친절하니 – hategrip

+0

은'eval'과'seq' 만 사용하고 다른 명령은 쓸 수 없습니까?'123'을 입력하려면'perm 123'을 사용할 수 있습니다. – zhenguoli

+0

eval과 seq yes .. 그리고 두 사이클/마침표, 다른 하나. 그는 "반복적 인"순열을 말했고, 필터는 .. 그리고 입력은 다음과 같이 하나의 숫자 여야합니다 : 4, 출력은 1234, 1243, 1342, 1324 등. – hategrip

1

나는 이것이 OP가 원하는 seq + eval 솔루션이 아니라는 것을 알고 있지만 앞으로 누군가가 대안을 찾고있는 경우에 대비하여 ,

$ cat tst.awk 
function generate(n,A, i) { 
    if (n == 1) { 
     output(A) 
    } 
    else { 
     for (i=0; i<(n-1); i++) { 
      generate(n-1, A) 
      swap(A, (n%2?0:i), n-1) 
     } 
     generate(n-1, A) 
    } 
} 

BEGIN{ 
    if (n>0) { 
     for (i=1; i<=n; i++) { 
      A[i-1] = i 
     } 
     generate(n, A) 
    } 
} 

function output(a, i,g) {g=length(a); for (i=0;i<g;i++) printf "%s%s",a[i],(i<(g-1)?"":ORS)} 
function swap(a,x,y, t) {t=a[x]; a[x]=a[y]; a[y]=t } 

$ awk -v n=3 -f tst.awk | sort 
123 
132 
213 
231 
312 
321 

내가 아닌 일반적인 AWK 1 제로 어레이 시작 포함 최대한 the Wikipedia article 명명 다른 규칙에 붙어 : AWK 작성된 the Wikipedia article on Heap's Algorithm에 기재된 generate() 함수 N 구현에서는 이러한 문제를 해결하기 위하여 그 기사와 awk 코드를 쉽게 비교할 수 있습니다.

관련 문제