次の文字列を検討してください
abcd
このように2文字順列(デカルト積)を返すことができます
$ echo {a,b,c,d}{a,b,c,d}
aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd
ただし、次のような冗長なエントリを削除したいと思います
ba ca cb da db dc
および無効なエントリ
aa bb cc dd
だから私は残っています
ab ac ad bc bd cd
次の文字列を検討してください
abcd
このように2文字順列(デカルト積)を返すことができます
$ echo {a,b,c,d}{a,b,c,d}
aa ab ac ad ba bb bc bd ca cb cc cd da db dc dd
ただし、次のような冗長なエントリを削除したいと思います
ba ca cb da db dc
および無効なエントリ
aa bb cc dd
だから私は残っています
ab ac ad bc bd cd
誰かがawkの1行でこれを行うと確信していますが、ここにbashの何かがあります:
#!/bin/bash
seen=":"
result=""
for i in "$@"
do
for j in "$@"
do
if [ "$i" != "$j" ]
then
if [[ $seen != *":$j$i:"* ]]
then
result="$result $i$j"
seen="$seen$i$j:"
fi
fi
done
done
echo $result
出力:
$ ./prod.sh a b c d
ab ac ad bc bd cd
$ ./prod.sh I have no life
Ihave Ino Ilife haveno havelife nolife
これは、制限に基づいて、文字に配列を使用して、それを実現するための擬似コードです。
for (i=0;i<array.length;i++)
{
for (j=i+1;j<array.length;j++)
{
print array[i] + array[j]; //concatenation
}
}