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

Codewars骰子统一面最小旋转次数代码优化求助

解决方案

首先明确核心规则:

  • 当前面与目标面一致:0次旋转
  • 当前面是目标面的对立面:2次旋转
  • 其他情况:1次旋转

你之前只选出现次数最多的面作为目标,忽略了一种情况:某些出现次数较少的面,加上所有骰子转到它的总旋转成本,反而比选出现次数最多的面更低。比如骰子数组[1,1,6,2,2],选1的总旋转次数是4,选2的总旋转次数是3,后者更优。

正确的思路是遍历所有6个可能的目标面,计算每个目标面对应的总旋转次数,最后取最小值。

修改后的JavaScript代码

function minRotations(dice) {
  // 定义对立面映射
  const opposites = {1:6, 6:1, 2:5, 5:2, 3:4, 4:3};
  let minTotal = Infinity;
  
  // 遍历所有6个可能的目标面
  for (let target = 1; target <= 6; target++) {
    let total = 0;
    for (let face of dice) {
      if (face === target) {
        total += 0;
      } else if (face === opposites[target]) {
        total += 2;
      } else {
        total += 1;
      }
    }
    // 更新最小总次数
    if (total < minTotal) {
      minTotal = total;
    }
  }
  
  return minTotal;
}

代码说明

  1. 用对象opposites存储每个面的对立面,方便快速查询
  2. 初始化最小总次数为无穷大,确保第一次计算的总次数能覆盖它
  3. 循环遍历1到6的所有面作为目标,逐个计算总旋转成本
  4. 每次计算完一个目标面的成本后,和当前最小值比较,保留更小的数值
  5. 最终返回最小的总旋转次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:18:11