Руби выводит не вывод в реальном времени - PullRequest
3 голосов
/ 10 мая 2011

У меня возникли некоторые проблемы на Project Euler .Один из вопросов:

Основными коэффициентами 13195 являются 5, 7, 13 и 29. Какой самый большой главный фактор числа 600851475143?

У меня естькакой-то код написан ... и он работает:

class Integer

  def primeFactors
  load('/home/arseno/ruby/lib/prime.rb')
  a = []

    for i in (1..self)
      div = self.to_f/i.to_f
      if((div==div.to_i)&&(Prime.prime?(i)))
        a << i
      end
    end
  a
  end
end

puts 13195.primeFactors

Выходы:

5
7
13
29

Пока все хорошо!Теперь, когда я вместо этого вставил 600851475143, мой терминал зависает (вполне справедливо, что он вычисляет много всего!) Итак, я попытался сделать puts i в цикле / if, чтобы я захватилвыводить, пока он повторяется ... в реальном времени.

Но, поместив этот puts i в цикл, Ruby не выводит переменную на протяжении всей итерации;вместо этого он сохраняет значения в каком-то буфере и сбрасывает их, когда вычисление завершено.

Эта конкретная проблема требует, чтобы Ruby вычислял вечность (он работает в течение 10 минут), я подозреваю, чтонаходится в преобразованиях с плавающей точкой.

Почему Ruby (мой терминал?) удерживает значения до конца вычислений?Могу ли я увидеть значения в режиме реального времени, поскольку вместо этого они находят их?У вас есть лучший способ сделать это?

1 Ответ

12 голосов
/ 10 мая 2011

Попробуйте добавить STDOUT.sync = true.Вы также можете попробовать STDOUT.flush после puts.Дополнительная информация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...