[TIL] 2020. 12. 05
6521 ワード
質問の概要:数値入力を受信し、各位置を変換して値を返します。
(問題)関数digpow(n,p)に数字を入力し、各位置にp平方、(p+1)平方、(p+2)平方を加え、各項目を加算します.では、出てきた総和をnで割ったときの整数は戻ります.そうでなければ-1は戻ります.
同じ質問でも、答えがこんなに違うかもしれないことを知っています.私が提案した答えは、
function digPow(n, p){
let arr = [...String(n)].map(el => parseInt(el));
let powArr = [];
for (let i = 0 ; i < arr.length ; i++) {
powArr.push(arr[i] ** (p+i));
}
let result = powArr.reduce((acc, cur) => (acc+cur)) / n;
if (Number.isInteger(result)) {
return result;
}
return -1;
}
// 0. n -> String -> 배열 -> 각 요소를 정수로 전환
// 1. 1stNum ** p
// 2. 2ndNum ** p+1
// 3. 3rdNum ** p+2
// ... finally, return acc / n
上記の問題は以下の部分に分けることができます.解決策から学んだこと
function digPow(n, p) {
var x = String(n).split("").reduce((s, d, i)
=> s + Math.pow(d, p + i), 0)
return x % n ? -1 : x / n
}
この過程で、%演算子が表すBoolean値を再認識しました.
したがって、ソリューションに残りがある場合はtrue;-1、falseの値が返されます.
Reference
この問題について([TIL] 2020. 12. 05), 我々は、より多くの情報をここで見つけました https://velog.io/@from0/TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol