1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】Codewar(JavaScript)勉強記録 2

Posted at

Codewar を使い始めたので自分用アウトプット記録。2

3. Sum of positive

配列を受け取って、正の数だけ足して合計を返す。

// [1, -4. 7, 12] => 1 + 7 + 12 = 20
// []  => 0

1-1. Brute Force

配列の中身を一つ一つループで確認して、プラスのときのみ足す。

Time Complexity: O(N)

ループで一個ずつ確認する処理。

Space Complexity: O(1)

function positiveSum(arr) {
  // check parameter
  if (arr.length === 0) {
    return 0;
  }
  // create sum constant
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] > 0) {
      sum += arr[i];
    }
  }
  return sum;
}

Best Practice 参考

function positiveSum(arr) {
  // check if current is bigger than 0, then add
  return arr.reduce((a, b) => a + (b > 0 ? b : 0), 0);
}

reduce()メソッド:要素を一つ一つ見てって各ステップ毎に、現在の値をそれまでのステップでの合計に足してく。

戻り値: reducerコールバック関数を実行した結果。

const arr = [1, 2, 3, 4];
const reducer = (prevVal, currVal) => prevVal + currVal;

// 1 + 2 + 3 + 4
console.log(arr.reduce(reducer)); // 10
// 5 + 1 + 2 + 3 + 4
console.log(arr.reduce(reducer, 5)); // 15
function positiveSum(arr) {
  // filterメソッドで0より大きいのだけフィルタし、reducerで足してく
  return arr.filter((num) => num >= 0).reduce((prev, curr) => prev + curr, 0);
}

4. Mubmling

以下を吐き出す関数を作る。

accum("abcd") -> "A-Bb-Ccc-Dddd"
accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
accum("cwAt") -> "C-Ww-Aaa-Tttt"

// The parameter of accum is a string which includes only letters from a..z and A..Z.

4-1. Brute Force

返す文字列を保存する変数を作る。
文字を一つずつループでチェック。
  まず大文字にして保存
  インデックスの数だけ小文字にして保存 (別のループ)

Time Complexity: O(N^2)

ループで一個ずつ確認する処理。

Space Complexity: O(1)

function accum(s) {
  let str = '';
  for (let i = 0; i < s.length; i++) {
    for (let j = 0; j < i + 1; j++) {
      if (j === 0) {
        const upperS = s[i].toUpperCase();
        str += upperS;
      } else {
        const lowerS = s[i].toLowerCase();
        str += lowerS;
      }
    }
    str += '-';
  }
  str = str.substring(0, str.length - 1);
  return str;
}

Best Practice 参考

Time Complexity は結局同じ?難しい...

function accum(s) {
  return s.split('').map((c, index) => (c.toUpperCase() + c.toLowerCase().repeat(index))).join('-');
}

//accum("abcd") -> "A-Bb-Ccc-Dddd"
Split -> string to array
// 'abcd' -> ['a','b','c','d']
map(charとindex) -> a 0, b 1, c 2, d 3
charを大文字にする
charを小文字にしてそれをindexの回数repeatし-でarrayからStringにする

メソッド

  • split('') -> string to array
  • repeat(num) -> num の数だけ repeat した string を返す
  • join('-') -> array to string
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?