LANG SELRCT

コードを書く場所についてはこちら

2018年2月13日火曜日

JavaScriptで順列の数を計算する


順列の数の計算をJavaScriptで実現する

n: 個の中から
r: 個を取り出す


順列の公式
  • nPr = n × (n -1) × (n -2) × ... × (n -r + 1)
    = n! / (n - r)!

n個の異なるモノの中からr個を取り出して
取り出した順番で並べる
そのパターンがいくつあるかを計算する

例えば
アメ、チョコ、ガム の3つの選択肢があるとき
2つを取り出して並べるパターンは

アメ、チョコ
アメ、ガム
チョコ、アメ
チョコ、ガム
ガム、アメ
ガム、チョコ

の6パターンある

アメ、チョコ、ガム、キャラメル、グミ、ラムネ、アイス、ケーキの8つの中から6つを取り出すパターンはいくつあるか



nPr = n × (n - 1) × (n - 2) × ... × (n - r + 1) の計算でやる例

コード1.gs
function permutation() {
  var n = 3;
  var r = 2;
  var result = n;
  for(var i = 1; i < r; i++){
    result = result * (n - i)  
  }
  Logger.log(result);
}
意訳
この機能がやること
総数を決める
取り出す数を決める
resultの初期値を総数にしておく
取り出す数の分だけ以下を繰り返す
resultに result × (総数-i)

ログに出す




nPr = n! / (n - r)! 階乗の計算でやる例

コード2.gs
function permutation() {
  var n = 3;
  var r = 2;
  var result = n;
  var numerator = factorial(n);
  var denominator = factorial(n-r);
  var result = numerator / denominator
  Logger.log(result);
}

function factorial(target) {
  var result = 1;
  for(var i = 0; i < target; i++){
    var num = i + 1;
    result = result * num;
  }
  return result;
}
意訳
この機能がやること
総数を決める
取り出す数を決める
resultの初期値を総数にしておく
取り出す数の分だけ以下を繰り返す
resultに result × (総数-i)

ログに出す


この機能がやること
結果の初期値を1にする
対象の数だけ以下を繰り返す
ひとつずつ+1して
resultに掛ける

結果をログに出す




実行結果はどちらも 6 になる


HTML Serviceで作る例



コード.gs
function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}



index.html
<!DOCTYPE html>
<html>
  <body>
    n:<input id="tb_n"><br>
    r:<input id="tb_r"><br>
    <button id="bt">順列</button>
    <input id="tb_result">
    <script>
    var tb_n = document.getElementById("tb_n");
    var tb_r = document.getElementById("tb_r");
    var tb_result = document.getElementById("tb_result");
    var bt = document.getElementById("bt");
    bt.onclick = permutation;
    
    function permutation() {
      var n = tb_n.value;
      var r = tb_r.value;
      var result = n;
      for(var i = 1; i < r; i++){
        result = result * (n-i)  
      }
      tb_result.value = result;
    }

    </script>
  </body>
</html>


関連記事

JavaScriptで階乗の計算をする
http://www.pre-practice.net/2018/02/javascript_13.html


参考

順列
https://ja.wikipedia.org/wiki/%E9%A0%86%E5%88%97