You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codewars十分钟步行问题代码异常求助,求排查逻辑问题

十分钟步行问题代码逻辑排查

我正在解决十分钟步行问题,当前代码无法正常运行,不清楚实现逻辑哪里出错了。

题目描述:你生活在道路呈完美网格布局的Cartesia城,某次赴约提前了十分钟,于是决定散步。城市为市民提供的步行生成APP每次会返回一个由单字符字符串组成的方向数组(例如['n', 's', 'w', 'e']),每个方向代表走一个街区,耗时1分钟。请实现一个函数,判断APP给出的步行路线是否恰好耗时10分钟且能回到起点,满足则返回true,否则返回false。
注意:输入始终是包含'n'、's'、'e'、'w'的有效非空数组。

我的代码:

function isValidWalk(walk) {
  if(walk.length > 10 || walk.length < 10){
    return false
  }else (walk.splice(0,5).join('') == walk.splice(5,5).map(x=>{
    if(x =='s'){
      return 'n'
    }else if(x=='n'){
      return 's'
    }
    else if(x=='w'){
      return'e'
    }
    else if(x=='e'){
      return 'w'
    }
  }).join(''))
    return true
}

问题分析

  • splice方法误用导致数组破坏
    splice是直接修改原数组的方法,执行walk.splice(0,5)取出前5个元素后,原walk数组只剩下后5个元素。此时再执行walk.splice(5,5),因数组长度仅为5,索引5超出范围,会返回空数组,后续的map转换和字符串比较完全失效。

  • 核心判断逻辑错误
    else分支里的比较语句没有与return绑定,不管比较结果是true还是false,后续的return true都会无条件执行,等于直接忽略了判断逻辑。而且你的思路(前5步和后5步反向相等)本身就不成立——回到起点只需要n和s的数量相等、e和w的数量相等,和步数的前后顺序无关,比如有效路线['n','n','s','s','e','e','w','w','n','s']就不满足前5步与后5步反向相等的条件,但确实能回到起点。

修正后的代码

方案一:计数法(性能更优)

function isValidWalk(walk) {
  if (walk.length !== 10) return false;
  
  let north = 0, south = 0, east = 0, west = 0;
  
  for (const dir of walk) {
    switch(dir) {
      case 'n': north++; break;
      case 's': south++; break;
      case 'e': east++; break;
      case 'w': west++; break;
    }
  }
  
  return north === south && east === west;
}

方案二:filter简洁写法

function isValidWalk(walk) {
  return walk.length === 10 &&
         walk.filter(d => d === 'n').length === walk.filter(d => d === 's').length &&
         walk.filter(d => d === 'e').length === walk.filter(d => d === 'w').length;
}

内容的提问来源于stack exchange,提问作者Sarkhan Hadjibayov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:08:25