Encontrando permutações de um número usando o script bash

0

É possível escrever um script bash que tenha um número de 4 dígitos como um argumento de linha de comando e produza todas as permutações desse número usando apenas o bash puro?

    
por user3479901 05.12.2016 / 18:47

1 resposta

0

É possível. Aqui está uma função que fará o que você está pedindo.

function permutate {
    if [ "${#1}" = 1 ]; then
        echo "${2}${1}"
    else
        for i in $(seq 0 $((${#1}-1)) ); do
            pre="${2}${1:$i:1}"
            seg1="${1:0:$i}"
            seg2="${1:$((i+1))}"
            seg="${seg1}${seg2}"
            permutate "$seg" "$pre"
        done
    fi
}

Execute assim:

$ permutate 1234

Funciona usando recursão. Cada chamada para a função pega um caractere da string e passa o restante para si mesmo recursivamente. Portanto, se a entrada for 1234, ela será dividida em um prefixo e o restante no segmento quatro vezes da seguinte forma: 1 234 2 134 3 124 4 123 . Os três segmentos de caracteres recebem o mesmo tratamento, depois os dois segmentos de caracteres e, em seguida, a recursão pára quando o segmento é apenas um caractere.

    
por 05.12.2016 / 19:29