我在Ruby中编写了以下代码片段来读取文件(该文件在每行上都有一些数字)下面的代码片段确定该数字是否为self-describing number?
如果数字是自描述数字,则下面的代码段应该产生1;如果数字不是自描述数字,则输出为0。
代码似乎在我的本地计算机上工作正常但是当我将其提交给接受这些问题解决方案的在线挑战时,它要求退出状态为0.
所以,我最后添加了这一行:
system(exit 0)
但是我对此问题的解决方案仍然因为退出状态而失败。快速bash命令如下:
jasdeep:code$ ./self-def.rb myfile.txt ; echo $?
在输出结束时返回0 - 这意味着程序在退出状态为0时正在退出。
我对退出状态做错了吗?
#!/usr/local/bin/ruby
filename = ARGV[0]
file = File.new(filename, "r")
while (line = file.gets)
array = line.scan(/./)
new_array = Array.new
array.length.times do |var|
new_array << array.count(var.to_s).to_s
end
if new_array.eql? array
puts "1"
else
puts "0"
end
end
file.close
答案 0 :(得分:2)
默认情况下,如果在执行脚本期间没有出现异常,或者您没有使用某个代码退出,则应用程序的退出代码将为0.我认为这是每种编程语言的标准。
例如,要在Windows上进行测试:
c:\> ruby my_script.rb
c:\> echo %errorlevel%
0
在Unix系统上:
$ ruby my_script.rb
$ echo $?
0
因此,如果您的脚本中没有意外的事情发生,那么问题是(正如您自己发现的那样)服务器端。
答案 1 :(得分:1)
class SelfDescribe
def check_desc str
length = str.length - 1
q = []
str.each_char do |c|
q << c
end
is_self_desc = 0
for i in 0..length
count = str.count(i.to_s)
if(count == q[i].to_i)
is_self_desc = 1
else
is_self_desc = 0
end
end
is_self_desc
end
obj = SelfDescribe.new()
file = ARGV[0]
File.open("#{file}", 'r') do |f1|
while line = f1.gets
unless(line.eql?"\n")
puts obj.check_desc(line.gsub(/[\n]+/, "") )
end
end
end
end
我写的这段代码在网站上制作了一个100CE。 PS:当从文件中逐行读取整数时,它们在末尾包含一个回车符.eg 123将被ruby视为'123 \ n',因为行读取是字符串。
**指现在我们不必评估空白行,也可以在检查
时我们应该使用.gsub(/ [\ n] + /,“”)来剥离/关闭... **
所以在你的情况下你可以尝试使用array.gsub(/ [\ n] + /,“”)