Calculating with Functions( 用函数计算)打卡

题目:

这次我们要使用函数编写计算并获取结果。让我们看一些例子:

seven(times(five())); // must return 35
four(plus(nine())); // must return 13
eight(minus(three())); // must return 5
six(dividedBy(two())); // must return 3
要求:

每个数字必须有一个函数,范围从0(“零”)到9(“ 9”)
以下每个数学运算必须具有一个函数:加,减,乘,除(divided_by在Ruby和Python中)
每次计算仅由一个操作和两个数字组成
最外层的函数代表左操作数,最内层的函数代表右操作数
除法应为整数除法。例如,应返回2,而不是2.666666…:
eight(dividedBy(three()));

我的题解

   function zero(x) {
    if(x === undefined)
    return 0
    else{
        str = 0 + x;
        return  Math.floor(eval("str="+str))
    }
}
function one(x) {
    if(x === undefined)
    return 1
    else{
        str = 1 + x;
        return  Math.floor(eval("str="+str))
    }
}
function two(x) {
    if(x === undefined)
    return 2
    else{
        str = '2' + x;
        return  Math.floor(eval("str="+str))
    }
}
function three(x) {
    if(x === undefined)
    return 3
    else{
        str = '3' + x;
        return Math.floor(eval("str="+str))
    }
}
function four(x) {
    if(x === undefined)
    return 4
    else{
        str = '4' + x;
        return  Math.floor(eval("str="+str))
    }
}
function five(x) {
    if(x === undefined)
    return 5
    else{
        str = '5' + x;
        return  Math.floor(eval("str="+str))
    }
}
function six(x) {
    if(x === undefined)
    return 6
    else{
        str = '6' + x;
        return  Math.floor(eval("str="+str))
    }
}
function seven(x) {
    if(x === undefined)
    return 7
    else{
        str = '7' + x;
        return  Math.floor(eval("str="+str))
    }
}
function eight(x) {
    if(x === undefined)
    return 8
    else{
        str = '8' + x;
        return  Math.floor(eval("str="+str))
    }
}
function nine(x) {
    if(x === undefined)
    return 9
    else{
        str = '9'+ x;
        return  Math.floor(eval("str="+str))
    }
}

function plus(x) {
    return '+'+x
}
function minus(x) {
    return '-'+x
}
function times(x) {
    return '*'+x
}
function dividedBy(x) {
    return '/'+x
}
复制代码

思路

  1. 应为调用时是eight(dividedBy(three()))这一种形式,同一个函数做出了不同的响应,判断做出什么响应,我是通过是否有参数传入来判断的。所有每一个数字函数都有if else判断
  2. 将eight(dividedBy(three()))整个式子转化为算数表达式。例如:
    eight(dividedBy(three()))->eight(dividedBy(3))->eight(/3)->8/3->return 2
  3. 最后返回时去除浮点数就可以了
  4. 当然上面有很多重复的代码还可以优化。

大神的做法

var n = function(digit) {
    return function(op) {
      return op ? op(digit) : digit;
    }
  };
  var zero = n(0);
  var one = n(1);
  var two = n(2);
  var three = n(3);
  var four = n(4);
  var five = n(5);
  var six = n(6);
  var seven = n(7);
  var eight = n(8);
  var nine = n(9);
  
  function plus(r) { return function(l) { return l + r; }; }
  function minus(r) { return function(l) { return l - r; }; }
  function times(r) { return function(l) { return l * r; }; }
  function dividedBy(r) { return function(l) { return l / r; }; }
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享