シェルスクリプトを使用したソートまたは結合

シェルスクリプトを使用したソートまたは結合

毎日数字がファイルに追加されます。たとえば、1000、2000、2560、5356など、その月末日までに最大30/31の数字を表すことができます。 5560のような乱数を渡すとき、この5560は合計5560の2つ、3つ、4つ、または5つの数字の組み合わせになることができるシェルスクリプトを作成したいと思います。この数字は任意の順列または組合せにすることができます。これらすべての数字は、合計が渡された乱数5560と同じように印刷されなければなりません。

私が考えることができる可能な解決策は次のとおりです。

  1. ファイルを繰り返し、すべての値を配列に保存します。
  2. 中かっこを使用した配列要素の結合

答え1

加算は交換可能です。したがって、特定の組み合わせの合計は、同じ数の順列の合計に等しくなります。

これにより時間が節約されます。 31個の数字{2,3,4,5}を同時に組み合わせる数は次のとおりです。ただ206,336、順列 {2,3,4,5} の数は 21,172,380 です。

コンポジションは再帰ソリューションに適していますが、シェルでの実行は迷惑であったり、禁止されたりする可能性があります。awk解決策を考えてみますか?

ファイル内のすべての数値が一意ですか? (3 + 3)= 6の場合、3を並べ替えることができるので、2つの(同じ)組み合わせがあります。

関連情報