codewars: Beginner Series #3 Sum of Numbers


に質問
Given two integers a and b, which can be positive or negative, find the sum of all the integers between including them too and return it. If the two numbers are equal return a or b.
Note: a and b are not ordered!
解釈:整数aとbを受け入れて、2つの数を含む2つの数字の間の和を求める.2つの数が等しい場合、整数aまたはbが返されます.aおよびbは負の値をとることができ、aの値はbより大きくすることができる.
GetSum(1, 0) == 1   // 1 + 0 = 1
GetSum(1, 2) == 3   // 1 + 2 = 3
GetSum(0, 1) == 1   // 0 + 1 = 1
GetSum(1, 1) == 1   // 1 Since both are same
GetSum(-1, 0) == -1 // -1 + 0 = -1
GetSum(-1, 2) == 2  // -1 + 0 + 1 + 2 = 2
私が作った答え
    function getSum(a, b, c=0){
        if (a <= b){
            for(i=a; i<=b; i++){
                c += i;
            } return c;
        } else if(a > b){
            for(i=b; i<=a; i++){
                c += i;
            } return c;
        }
    }

    getSum(1,5); //15
    getSum(4,1); //10
    getSum(2,2); //2
  • 最初はelse ifを使用してaとbの値が同じ場合を作成したが、すぐに最初のif文に含めることができ、コードが破棄されることに気づいた.
  • 他人の答え
    const GetSum = (a, b) => {
      let min = Math.min(a, b),
          max = Math.max(a, b);
      return (max - min + 1) * (min + max) / 2;
    }
  • パラメータを受け取ったとき、Math.min, Math.max APIを知っていても、彼が書いた戻り値の公式が分からないので書けないかもしれません.
  • console.log(Math.min(2, 3, 1));
    // expected output: 1
    
    console.log(Math.min(-2, -3, -1));
    // expected output: -3
    
    const array1 = [2, 3, 1];
    
    console.log(Math.min(...array1));
    // expected output: 1
  • MDNで検索し、上記のようにMath.minは最小値を返し、パラメータが数値でない場合はNaNを出力する.Math.maxは逆です