код ruby ​​для определения чисел с самоописанием - проблема со статусом выхода - PullRequest
2 голосов
/ 29 июня 2011

Я написал приведенный ниже фрагмент кода в Ruby, который читает файл (файл имеет несколько чисел в каждой строке). Нижеприведенный фрагмент кода определяет, является ли число самоописывающим числом или нет?

Предполагается, что приведенный ниже фрагмент кода будет выдавать 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 ]

2 голосов
/ 30 июня 2011

По умолчанию, если во время выполнения вашего скрипта не возникает исключений или вы не выходите с определенным кодом, код выхода вашего приложения будет равен 0. Я думаю, что это стандартно для каждого языка программирования.

Например, чтобы проверить это в Windows:

c:\> ruby my_script.rb
c:\> echo %errorlevel%
0

И в системах Unix:

$ ruby my_script.rb
$ echo $?
0

Итак, если в ваших сценариях не произойдет ничего неожиданного, проблеманаходится (как вы узнали сами) на стороне сервера.

1 голос
/ 28 сентября 2011
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 будет обрабатываться как '123 \ n' для ruby, поскольку чтение строки является строкой.

**> теперь нам не нужно оценивать пустую строку, а также при проверке

Строка, которую мы должны удалить / n с помощью .gsub (/ [\ n] + /, "") ... **

Так что в вашем случае вы можете попробовать использовать array.gsub (/ [\ n] + /, "")

...