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');
}