https://bfe.dev/ja はFrontEnd版のLeetCode、GAFAの面接を受けるなら練習した方がいいかなと。
以下は自分の練習記録です。
BFE.dev#23. sum()を実装するをみてみよう
問題
以下の条件を満たす前提でsum()
を実装してください。
const sum1 = sum(1)
sum1(2) == 3 // true
sum1(3) == 4 // true
sum(1)(2)(3) == 6 // true
sum(5)(-1)(2) == 6
分析
上記の用件からわかること
-
sum()
は引数を受けるfunctionを返す -
sum()
では渡した引数を全部足して、1を繰り返す - type coercionで、function == numberは可能。
valueOf
かtoString
を実装する必要
Let's code
まずfunctionを返す部分を作りましょう。引数の和を一時的に保存するために、2番目の引数にしたらいい。
function sum(num, currentSum = 0) {
const newCurrentSum = num + currentSum
const func = function(arg) {
return sum(arg, num + currentSum)
}
return func
}
最後にvalueOf
を入れれば完成
function sum(num, currentSum = 0) {
const newCurrentSum = num + currentSum
const func = function(arg) {
return sum(arg, num + currentSum)
}
func.valueOf = () => newCurrentSum
// below also works
// func.toString = () => newCurrentSum.toString()
return func
}
通った!
もし興味あれば、 BFE.devでやってみましょう https://bigfrontend.dev/ja/problem/create-a-sum