Давайте сначала создадим тестовый файл.
text =<<~END
Line1: 10:36
Line2: 12:42
Line3: 14:24
Line4: 18:16
END
FName = 'test.txt'
File.write(FName, text)
#=> 52
Теперь прочитайте файл и вычислите нужное значение в минутах.Я предполагаю, что, как в примере, длительности времени не уменьшаются, и в этом случае чистое число минут неотрицательно.
IO.foreach(FName).with_index.sum do |s,i|
_, hrs, mins = s.split(/: */).map(&:to_i)
mins += 60*hrs
i.even? ? -mins : mins
end
#=> 358 (minutes)
См. IO :: foreach (который возвращает перечислитель, когда, как здесь, ему не был дан блок), Перечислитель # with_index , Перечислимый # sum , String # split и Массив # карта .Регулярное выражение /: */
гласит: «соответствовать двоеточию, за которым следует ноль или более (*
) пробелов.
Чтобы вернуть часы и минуты ([5, 58]
), измените end
на end.divmod(60)
.См. Integer # divmod .