用于确定自描述数字的ruby代码 - 退出状态的问题

时间:2011-06-29 14:27:44

标签: ruby algorithm exit status

我在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

2 个答案:

答案 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] + /,“”)