🎉

BFE.dev解答記録 #23. sum()を実装する

2020/09/30に公開

https://bfe.dev/ja はFrontEnd版のLeetCode、GAFAの面接を受けるなら練習した方がいいかなと。
以下は自分の練習記録です。

Alt Text

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 

分析

上記の用件からわかること

  1. sum() は引数を受けるfunctionを返す
  2. sum() では渡した引数を全部足して、1を繰り返す
  3. type coercionで、function == numberは可能。valueOftoStringを実装する必要

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
}

通った!

Alt Text

もし興味あれば、 BFE.devでやってみましょう https://bigfrontend.dev/ja/problem/create-a-sum

Discussion