Нахождение перестановок числа с помощью bash-скрипта

938
user3479901

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

0
Вы пытались это решить? glenn jackman 7 лет назад 0
Я пробовал в C, используя для перестановки строк. Но любопытно поступить в bash с номерами. user3479901 7 лет назад 0
Пожалуйста, посмотрите на: [Что я должен делать, когда кто-то отвечает на мой вопрос?] (Http://superuser.com/help/someone-answers) Cyrus 7 лет назад 0

1 ответ на вопрос

0
virtex

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

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

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

$ permutate 1234 

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

Вот это да. Спасибо, дорогой. Работает . Мне нужно улучшить логику оболочки user3479901 7 лет назад 0
Можем ли мы отсортировать вывод (cat) в другой файл user3479901 7 лет назад 0
Конечно, просто используйте команду сортировки, например, так: `permutate 1234 | sort> output.txt` virtex 7 лет назад 0
не по теме, но спрашиваю вас, заранее спасибо. Как использовать эту команду bash в функции языка c execl (). Команда bash: `ls -lR /path/to/dir/*.jpg | wc -l` Мне нужно использовать эту команду в программе c. Любая помощь? user3479901 7 лет назад 0
@ user3479901, если вы используете execl, вы должны сделать это: `execl (" / bin / bash "," -c "," ls -lR /path/to/dir/*.jpg | wc -l ", NULL)` , Однако, если вы хотите захватить выходные данные команды оболочки, попробуйте использовать `popen ()`. virtex 7 лет назад 0

Похожие вопросы