Один и тот же код дает разные результаты на Windows и Linux в Ruby - PullRequest
1 голос
/ 24 декабря 2010

Я только начинаю рубин. Итак, подумал, чтобы попробовать некоторые проблемы, размещенные в Интернете. (вот проблема на codechef ) Я написал следующий фрагмент кода:

def h(n)
    if n==0
        value = 0
    else
        c_n = $number[n-1].to_i
        value = ( h(n-1) * $A + c_n ) % $B
    end
    value
end

n, $A, $B, G = gets.scan(/\d+/).map! { |x| x.to_i }

(1..10**n).to_a.each {|x|
    $number = x.to_s.rjust(n, '0')
    if ( G == h(n) )
        puts $number
        break
    end
}

Я скомпилировал его в Windows со значениями ввода: 3 11 111 92

Вывод на Windows был, как и ожидалось: 084 Но на машине Linux это: 032

В чем может быть причина? Есть ли в данном фрагменте кода что-нибудь, что будет иметь значение?

1 Ответ

0 голосов
/ 24 декабря 2010

Благодаря комментарию Накилона. Я получил ответ.

"string"[1] = "t" в рубине 1,9 но в рубине "string"[1] = 116

Итак, в ruby ​​1.9:

c_n = $number[n-1].to_i

необходимо заменить на ruby ​​1.8 следующим образом:

c_n = $number.split("")[n-1].to_i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...