Можно ли написать скрипт bash, который принимает четырехзначное число в качестве аргумента командной строки и производит все перестановки этого числа с использованием только чистого bash?

1 ответ1

0

Возможно. Вот функция, которая будет делать то, что вы просите.

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
}

Запустите это так:

$ permutate 1234

Это работает с помощью рекурсии. Каждый вызов функции берет один символ из строки и рекурсивно передает остаток самому себе. Таким образом, если ввод 1234, он разбивается на префикс и оставшийся сегмент четыре раза, как это: 1 234 2 134 3 124 4 123 . Затем три символьных сегмента обрабатываются одинаково, затем два символьных сегмента, а затем рекурсия останавливается, когда сегмент состоит только из одного символа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .