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

Github自动评分系统输出匹配却报错的Ruby程序问题求助

问题排查与解决方案

核心问题:二进制输出的分隔符不匹配

你的代码中二进制输出行存在关键错误:

puts "Binary: #{binary.reverse.join(" " " ")}"

Ruby会自动拼接相邻的字符串字面量," " " "等价于" "(两个空格),这导致二进制位之间用两个空格分隔,而系统预期的是单个空格(如你给出的预期输出1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1)。这是自动评分系统判定输出不匹配的直接原因。

次要优化点

  1. prime?方法返回值不规范
    当前prime?方法在判断为质数时返回数字本身,虽然Ruby会将非零整数视为true,但方法名是prime?,语义上应该返回布尔值,建议修改为:
def prime?(number)
  return false if number < 2 
  (2..Integer.sqrt(number)).none? { |divisor| number % divisor == 0 }
end

用none?方法更简洁,且明确返回布尔值,逻辑更清晰。

  1. 求和逻辑简化
    当前求和代码可以用Ruby内置的sum方法简化:
sum = primes.sum

替代手动循环累加的写法,更简洁高效。

修正后的完整代码

# frozen_string_literal: true

def set_number(index1, index2)
  Array(index1..index2)
end

def prime?(number)
  return false if number < 2 
  (2..Integer.sqrt(number)).none? { |divisor| number % divisor == 0 }
end

def decimal_to_binary(number)
  number = number.to_i
  return [0] if number == 0

  binary = []
  while number != 0
    binary << (number % 2).to_s
    number = number / 2
  end
  binary
end

index1, index2 = gets.chomp.split.map(&:to_i)
array = set_number(index1, index2)

puts "Range: #{index1}-#{index2}"

primes = array.select { |x| prime?(x) }
sum = primes.sum

puts "Sum: #{sum}"

binary = decimal_to_binary(sum)
puts "Binary: #{binary.reverse.join(" ")}"

额外注意事项

如果修正后仍有问题,检查换行符差异:本地Windows环境默认换行符是\r\n,而Github Autograding运行在Linux环境,使用\n作为换行符。可以确保代码中没有手动添加多余的换行,依赖Rubyputs的默认行为即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30