Take a Ten Minute Walk

链接

CodeWar-Take a Ten Minute Walk

题目

你住在Cartesia城,这边所有的路都是完美符合格子的。你比预定时间早到了10分钟,所以你决定趁此机会散散步。这个城市给市民提供了一个手机上的步行规划的APP。每次你按下按钮,它会给你发送一个单字母的字符串组成的数组,来代表步行的方向,比如说[‘n’,‘s’,‘w’,‘e’]。你知道你穿过一个城市区块需要1分钟,所以创建一个方法,当这个app给你提供的步行方案正好花费10分钟,并且将你送回起始点时返回true。否则返回false。

注:数组不会为空

我的思路及实现

function isValidWalk(walk) {
  var N = 0, W = 0;
  if (walk.length == 10) {
      walk.forEach(function(val, i, arr){
        switch (val) {
          case 'n':
            N++;
            break;
          case 's':
            N--;
            break;
          case 'w':
            W++;
            break;
          case 'e':
            W--;
            break;
        }
      });
      if (N == 0 && W == 0) {
        return true;
      }
  }
  return false;
}

Best Practice

function isValidWalk(walk) {
  var dx = 0
  var dy = 0
  var dt = walk.length

  for (var i = 0; i < walk.length; i++) {
    switch (walk[i]) {
      case 'n': dy--; break
      case 's': dy++; break
      case 'w': dx--; break
      case 'e': dx++; break
    }
  }

  return dt === 10 && dx === 0 && dy === 0
}
function isValidWalk(walk) {
  function count(val) {
    return walk.filter(function(a){return a==val;}).length;
  }
  return walk.length==10 && count('n')==count('s') && count('w')==count('e');
}