順列組み合わせ JavaScript(ES2015)
順列組み合わせ JavaScript(ES2015):
https://qiita.com/higuma/items/5af4e62bdf4df42ce673
を参考にJavaScript(ES2015)での順列組み合わせ関数を作成したのでメモとして残しておく。
以下の
https://qiita.com/higuma/items/5af4e62bdf4df42ce673#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A7%A3%E8%AA%AC
https://qiita.com/s-katsumasa/items/7b8ce83df22467f74c51
にも書いてあるが、Rubyの場合
instance method Array#permutation (Ruby 2.5.0)
https://docs.ruby-lang.org/ja/latest/method/Array/i/permutation.html
https://qiita.com/higuma/items/5af4e62bdf4df42ce673
を参考にJavaScript(ES2015)での順列組み合わせ関数を作成したのでメモとして残しておく。
以下の
コードの解説
の再帰処理の流れが非常に参考になった。https://qiita.com/higuma/items/5af4e62bdf4df42ce673#%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A7%A3%E8%AA%AC
メイン
// pre: 1st half of array // post: 2nd half of array const permutation = ({ result = [], pre = [], post, n = post.length }) => { if (n > 0) { post.forEach((_, i) => { const rest = [...post]; const elem = rest.splice(i, 1); permutation({ result, pre: [...pre, ...elem], post: rest, n: n - 1}); }); } else { result.push(pre); } return result; }; const array = [0, 1, 2, 3]; const results = permutation({ post: array }); console.log(results); const results2 = permutation({ post: array, n: 2 }); console.log(results2);
結果
[ [ 0, 1, 2, 3 ], [ 0, 1, 3, 2 ], [ 0, 2, 1, 3 ], [ 0, 2, 3, 1 ], [ 0, 3, 1, 2 ], [ 0, 3, 2, 1 ], [ 1, 0, 2, 3 ], [ 1, 0, 3, 2 ], [ 1, 2, 0, 3 ], [ 1, 2, 3, 0 ], [ 1, 3, 0, 2 ], [ 1, 3, 2, 0 ], [ 2, 0, 1, 3 ], [ 2, 0, 3, 1 ], [ 2, 1, 0, 3 ], [ 2, 1, 3, 0 ], [ 2, 3, 0, 1 ], [ 2, 3, 1, 0 ], [ 3, 0, 1, 2 ], [ 3, 0, 2, 1 ], [ 3, 1, 0, 2 ], [ 3, 1, 2, 0 ], [ 3, 2, 0, 1 ], [ 3, 2, 1, 0 ] ]
[ [ 0, 1 ], [ 0, 2 ], [ 0, 3 ], [ 1, 0 ], [ 1, 2 ], [ 1, 3 ], [ 2, 0 ], [ 2, 1 ], [ 2, 3 ], [ 3, 0 ], [ 3, 1 ], [ 3, 2 ] ]
参考
https://qiita.com/s-katsumasa/items/7b8ce83df22467f74c51にも書いてあるが、Rubyの場合
Array#permutation
があるが、JSでは同等のものはなさそう。instance method Array#permutation (Ruby 2.5.0)
https://docs.ruby-lang.org/ja/latest/method/Array/i/permutation.html
コメント
コメントを投稿