乐趣区

关于javascript:JS-教练我想做习题7

???? 前言

大家好呀,我是毛小悠,能够叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来进步 JavaScript 的能力,一起欢快的做题吧。????????????

以下每道题,二毛我都有尝试做一遍。倡议限时训练,比方限定为半小时,如果半小时内想不进去,能够联合文章开端的参考答案来思考。

求关注求点赞????~~~????????????

???? 题目 1:皮特,面包师

皮特喜爱烤一些蛋糕。他有一些食谱和配料。可怜的是他数学不好。思考到他的食谱,您能帮忙他找出多少个蛋糕能够烘烤?

编写一个函数 cakes(),该函数承受 recipe (object)和可用成分(也是对象),并返回 Pete 能够烘烤的最大蛋糕数(整数)。为简略起见,没有数量单位(例如 1 磅面粉或 200 克糖只是 1 或 200)。对象中不存在的成分能够视为 0。

例子:

// must return 2
cakes({flour: 500, sugar: 200, eggs: 1}, {flour: 1200, sugar: 1200, eggs: 5, milk: 200}); 
// must return 0
cakes({apples: 3, flour: 300, sugar: 150, milk: 100, oil: 100}, {sugar: 500, flour: 2000, milk: 2000}); 

习题代码

function cakes(recipe, available) {// TODO: insert code}

???? 题目 2:Directions Reduction

曾几何时,穿过古老的荒野山区西部,…

批示了一个人从一个点到另一个点的方向。方向为“北”,“南”,“西”,“东”。显然“NORTH”和“SOUTH”相同,“WEST”和“EAST”也相同。

去一个方向,马上回来向相同的方向是不必要的。因为这是狂野的西部,天气顽劣,水少,重要的是要为本人节俭一些能量,否则您可能会口渴而死!

我如何聪慧地穿梭多山的沙漠。

给该女子的批示例子如下(取决于语言):

["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"].or{"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"};or[North, South, South, East, West, North, West]

您能够立刻看到去“北”和而后立刻去“南”是不合理的,最好留在原地!因而,工作是给该人员简化打算。在这种状况下,更好的打算是:

["WEST"]or{"WEST"}or[West]

其余例子:

在那里[“NORTH”, “SOUTH”, “EAST”, “WEST”],方向 ”NORTH” + “SOUTH” 是向北并立刻回到原点。

门路 [“EAST”, “WEST”] 当初变成,”EAST” 并且 ”WEST” 彼此对消,因而最终后果是[](在 Clojure 中为 nil)。

在[“NORTH”,“EAST”,“WEST”,“SOUTH”,“WEST”,“WEST”],“NORTH”和“SOUTH”中,不是间接相同的,然而在缩小“EAST”之后它们变成间接相同的和“WEST”,因而整个门路可简化为[“WEST”,“WEST”]。

工作

编写一个函数 dirReduc,该函数将接管字符串数组并返回删除了不必要方向的字符串数组(W <-> E 或 S <-> N 并排)。

Haskell 版本采纳列出方向 data Direction = North | East | West | South。

当门路简化为空时,Clojure 版本返回 nil。

Rust 版本须要 enum Direction {NORTH, SOUTH, EAST, WEST}。

习题代码

function dirReduc(arr){// ...}

答案

???? 题目 1 的答案

参考答案 1:

function cakes(recipe, available) {return Object.keys(recipe).reduce(function(val, ingredient) {return Math.min(Math.floor(available[ingredient] / recipe[ingredient] || 0), val)
  }, Infinity)  
}

参考答案 2:

const cakes = (needs, has) => Math.min(...Object.keys(needs).map(key => Math.floor(has[key] / needs[key] || 0))
)

参考答案 3:

function cakes(recipe, available) {var numCakes = [];
  
  for(var key in recipe){if(recipe.hasOwnProperty(key)){if(key in available){numCakes.push(Math.floor(available[key] / recipe[key]));
      }else{return 0;}
    }
  }
  
  return Math.min.apply(null, numCakes); 
  
}

参考答案 4:

function cakes(recipe, initial){return Math.floor(Object.keys(recipe).reduce(function(min, key){return Math.min(initial[key] / recipe[key] || 0, min);
   }, Infinity));
}

参考答案 5:

function cakes(recipe, available) {return Math.min(...Object.keys(recipe).map(e => available[e]/recipe[e]>>0));
}

???? 题目 2 的答案

参考答案 1:

function dirReduc(plan) {
  var opposite = {'NORTH': 'SOUTH', 'EAST': 'WEST', 'SOUTH': 'NORTH', 'WEST': 'EAST'};
  return plan.reduce(function(dirs, dir){if (dirs[dirs.length - 1] === opposite[dir])
        dirs.pop();
      else
        dirs.push(dir);
      return dirs;
    }, []);
}

参考答案 2:

function dirReduc(arr) {var str = arr.join(''), pattern = /NORTHSOUTH|EASTWEST|SOUTHNORTH|WESTEAST/;
  while (pattern.test(str)) str = str.replace(pattern,'');
  return str.match(/(NORTH|SOUTH|EAST|WEST)/g)||[];}

参考答案 3:

function dirReduc(arr){var opposite = { "SOUTH":"NORTH", "NORTH":"SOUTH", "WEST":"EAST", "EAST":"WEST"}
  return arr.reduce(function (a, b, i) {opposite[a.slice(-1)] === b ? a.pop() : a.push(b)
    return a
  }, [])
}

参考答案 4:

function isOppo(dir1,dir2) {if (dir1 + dir2 === 'SOUTHNORTH') return true;
    if (dir1 + dir2 === 'NORTHSOUTH') return true;
    if (dir1 + dir2 === 'EASTWEST') return true;
    if (dir1 + dir2 === 'WESTEAST') return true;
    return false;
}
  
function dirReduc(arr){
  var len = arr.length
  for (var i = 0; i < len - 1; i++) {if (isOppo(arr[i], arr[i+1])) {arr.splice(i,2);
      return dirReduc(arr);
    }
  }
  return arr;
}

参考答案 5:

function dirReduc(arr){
  var count = 0;
  for (var i = 0; i < arr.length; i++) {if (arr[i] === "WEST" && arr[i+1] === "EAST" ||
        arr[i] === "EAST" && arr[i+1] === "WEST" ||
        arr[i] === "NORTH" && arr[i+1] === "SOUTH" ||
        arr[i] === "SOUTH" && arr[i+1] === "NORTH") {arr.splice(i, 2);
        count++;
        i--;
    }
  }
  return count === 0 ? arr : dirReduc(arr);
}

???? 后序

本系列会定期更新的,题目会由浅到深的逐步提高。

求关注求点赞 ????~~????????????

能够关注我的公众号:前端毛小悠。欢送浏览

退出移动版