Daniel Viglione
Daniel Viglione

Reputation: 9457

working with exponentiation of time

I have a string as follows:

"00:48:22" 

From right to left, I am working with a power of 60, because I want to get the total number of seconds from hours, minutes, seconds.

This is what I have tried:

clock
=> "00:48:22" 
i = 0
result = clock.split(":").reverse.reduce(0) do |acc, segment|
  acc += segment.to_i + (60 ** i)
  i += 1
  acc
end
 => 3731 

The result is off. It should be 2902. Any idea what I am doing wrong?

Upvotes: 0

Views: 37

Answers (3)

Cary Swoveland
Cary Swoveland

Reputation: 110725

require 'date'

d = Date.today
(Time.new(d.year,d.month,d.day,*str.split(':').map(&:to_i))-d.to_time).to_i
  #=> 2902 

Upvotes: 0

Aetherus
Aetherus

Reputation: 8898

Your algorithm is a little messy and error prone. This will give you the right answer:

clock = '00:48:22'
clock.split(':').map(&:to_i).reduce(0) do |acc, segment|
  acc * 60 + segment
end

Upvotes: 2

steenslag
steenslag

Reputation: 80075

You are adding where you should be multiplying

acc += segment.to_i * (60 ** i)

Upvotes: 1

Related Questions