Мне нужен сценарий Bash, который получит массив с n элементами в качестве входных данных и вернет силовую схему этого массива.Bash: Найти Powerset массива
Так array=(a, b, c, d)
выход должен быть
a
ab
abc
abcd
abd
ac
acd
b
bc
bcd
c
cd
d
Обратите вниманием, что ни один элемент не должен повторяться (ааЪ, АПЗ, Абы не действительны), и что а такие же, как CBA (порядок не важен).
Каждое решение для подобных проблем, которое я нашел, дает либо фиксированную длину (комбинацию длины 2 или 3), либо позволяет повторять (например, aacd) даже для других языков (не то, что я могу многое сделать с другими языками ...)
Я пришел с этим:
string='a b c d'
read -a array <<< "$string"
count="${#array[@]}"
level=0
for ((level = 0; level < $count; level++)); do
for ((i = $level; i < $count; i++)); do
output+=" ${array[$i]}"
echo $output
done
output=''
done
и мой выход
a
a b
a b c
a b c d
b
b c
b c d
c
c d
d
это отсутствуют некоторые элементы, такие как AC, AD, абд ...
Любые идеи?
Это больше напоминает Powerset чем перестановок. – melpomene
Нужно ли быть в Баше? В Python есть очень простой способ сделать это. – pzp
_ "abc - это то же самое, что и cba (порядок не важен)." _ Тогда это _not_ a [перестановка] (https://en.wikipedia.org/wiki/Permutation). Возможно, вы ищете [комбинации] (https://en.wikipedia.org/wiki/Combination)? – John1024