You need to enable JavaScript to run this app. JavaScript实现机器人模拟器:如何在指令遍历中添加x,y坐标计算
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现机器人模拟器:如何在指令遍历中添加x,y坐标计算

机器人模拟器坐标同步计算实现

现有代码的核心问题

  • 指令遍历循环中完全没有处理A(前进)指令的分支,x、y虽然初始化为0,但全程没有被修改过
  • 连续写了两个return语句,第一个return d执行后,后面的坐标返回逻辑永远不会触发
  • 仅通过计数器算出了朝向,没有建立「当前朝向」和「坐标位移」的对应关系,就算补了前进逻辑也不知道该对x还是y做加减
  • 换行校验的位置错误,把判断首字符是否为换行的逻辑放在循环内反复执行,属于无效冗余

具体改造步骤

  1. 将入参校验逻辑挪到函数最开头,进入循环前先判断入参合法性,不符合要求直接返回null
  2. 预先定义四个基础方向和对应位移的映射关系,避免写大量重复的if判断:
    • 朝向North前进:y坐标+1
    • 朝向East前进:x坐标+1
    • 朝向South前进:y坐标-1
    • 朝向West前进:x坐标-1
  3. 优化转向计数逻辑,原来分正负计数器写两套判断的写法太冗余,直接在计算时通过模4归一将计数器值锁定在0-3范围,同时规避JS原生负数取模的坑:左转时计数器减1,计算时补4再取模;右转时计数器加1再取模
  4. 在循环中补全A指令的处理分支:遇到前进指令时,根据当前计数器对应的方向,把对应位移叠加到x、y坐标上即可,不需要额外二次遍历指令
  5. 删掉冗余的重复return,最后按照要求的格式拼接结果字符串返回

修正后的可运行代码

function robotSimulator(param){
    // 入参校验
    if(!param || param[0] === "\n") return null;

    let counter = 0; // 方向索引:0=North、1=East、2=South、3=West
    let x = 0;
    let y = 0;

    // 预定义每个方向对应的位移偏移
    const directionMap = [
        { name: "North", dx: 0, dy: 1 },
        { name: "East", dx: 1, dy: 0 },
        { name: "South", dx: 0, dy: -1 },
        { name: "West", dx: -1, dy: 0 }
    ];

    for(let i = 0; i < param.length; i++){
        const cmd = param[i];
        if(cmd === 'L'){
            // 补4是为了避免负数取模异常,把值固定在0-3区间
            counter = (counter - 1 + 4) % 4;
        } else if(cmd === 'R'){
            counter = (counter + 1) % 4;
        } else if(cmd === 'A'){
            // 前进指令触发时同步更新坐标
            const currentDir = directionMap[counter];
            x += currentDir.dx;
            y += currentDir.dy;
        }
    }

    const finalBearing = directionMap[counter].name;
    return `x: ${x} y:${y} bearing:${finalBearing}`;
}

// 测试指令"LLRAA",预期输出x: -2 y:0 bearing:West
console.log(robotSimulator("LLRAA"));
console.log(robotSimulator("RRLLL"));

实现效果

整个流程顺着指令遍历同步计算坐标,没有额外性能损耗;连续转向、多轮绕圈的场景也不会因为计数器越界算错方向,完全匹配题目给出的规则示例输出。


内容的提问来源于stack exchange,提问作者Asante Michael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 08:36:04