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

Turing编码挑战得分计算代码未通过:请求排查隐藏Bug

编码挑战代码Bug排查

题目要求

给定字符串列表ops作为输入,需执行以下操作:

  • 若元素为整数(字符串形式),则记录该整数;
  • 若元素为字符'C',则移除最后一条记录的元素;
  • 若元素为字符'D',则将最后一条记录的元素翻倍并记录;
  • 若元素为字符'+',则将最后两条记录的元素相加并记录;
    最终返回所有记录的总和。

示例输入输出

  • 输入:
ops = ["5", "2", "C", "D", "+"]
  • 输出:30

待排查的Ruby代码

def score_calculator
    scores = []
    ops.each do |rec|
        scores << rec.to_i if rec.is_a?(Integer)
        scores << scores.last(2).sum if rec == '+'
        scores << (scores.last.to_i * 2) if rec = 'D'
        scores.pop if rec == 'C'
    end
    return scores.sum
end

隐藏Bug分析

你的代码存在三个关键问题:

  1. 整数判断逻辑完全错误:
    ops数组中的所有元素都是字符串类型,rec.is_a?(Integer)永远返回false,导致所有数字元素都无法被添加到scores数组中。正确的做法是判断字符串是否能转换为有效整数,比如使用rec.to_i.to_s == rec(适用于非负整数),或者正则rec.match?(/^-?\d+$/)(兼容负数),确认后再将其转为整数加入scores。

  2. 赋值操作误用作相等判断:
    处理'D'的条件中,rec = 'D'是赋值语句,会把rec强制设为'D',同时该表达式始终为真,导致每次循环都会执行这条翻倍逻辑,完全破坏了正常流程。必须改为相等判断rec == 'D'。

  3. 分支逻辑未做互斥处理:
    当前代码使用多个独立的if语句,而非互斥的if-elsif链或case语句,可能导致同一元素触发多个分支(虽然题目输入不会出现这种情况,但逻辑上不严谨)。使用互斥分支能确保每个元素只执行对应的处理逻辑。

修正后的代码示例

def score_calculator(ops)
    scores = []
    ops.each do |rec|
        if rec.to_i.to_s == rec
            scores << rec.to_i
        elsif rec == '+'
            scores << scores.last(2).sum
        elsif rec == 'D'
            scores << scores.last * 2
        elsif rec == 'C'
            scores.pop
        end
    end
    scores.sum
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:07:22