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