I have the following array of Hash, which include heart_rate
value.
My need is to find the higher and lower values for a period, when my user increase or decrease his heart_rate
[ #<
track_point_id: 0,
heart_rate: 85,
date: "2020-12-15 12:06:51"
>,
#<
track_point_id: 1,
heart_rate: 85,
date: "2020-12-15 12:07:52"
>,
#<
track_point_id: 2,
heart_rate: 85,
date: "2020-12-15 12:08:53"
>,
#<
track_point_id: 3,
heart_rate: 100,
date: "2020-12-15 12:09:54"
>,
#<
track_point_id: 4,
heart_rate: 105,
date: "2020-12-15 12:10:55"
>,
...
#<
track_point_id: 100,
heart_rate: 102,
date: "2020-12-15 12:35:51"
>,
#<
track_point_id: 101,
heart_rate: 100,
date: "2020-12-15 12:36:52"
>,
#<
track_point_id: 102,
heart_rate: 99,
date: "2020-12-15 12:37:53"
>,
#<
track_point_id: 103,
heart_rate: 98,
date: "2020-12-15 12:38:54"
>,
#<
track_point_id: 104,
heart_rate: 97,
date: "2020-12-15 12:39:55"
>]
What I need to extract is the best Max Heart Rate Increase values, and the Max Heart Rate Decrease values
Let's call this array of Hash points
What I should probably start from is doing this
heart_rate = 0
bestIncrease = []
bestDecrease = []
points.each do |point|
climb += point[:heart_rate] - (lastPoint[:heart_rate] or 0)
heart_rate += point[:heart_rate]
if climb > 0
bestIncrease << [
start_id: firstPoint[:track_point_id],
end_id: point[:track_point_id],
heart_rate: (point[:track_point_id]-firstPoint[:track_point_id]/numberOfDifferencePoints
]
else
bestDecrease << [
start_id: firstPoint[:track_point_id],
end_id: point[:track_point_id],
heart_rate: point[:track_point_id]-firstPoint[:track_point_id]/numberOfDifferencePoints
]
climb -= climb
end
end
This code of course does not work at all.
- I need to find for some 2 minutes segment, which segments give me the higher
heart_rate
average values bestIncrease
- I need to find for some 2 minutes segment, which segments give me the lower
heart_rate
average values bestDecrease
- I need to be sure every segment do not overlap with each others
- I need to sort each segments by their best heart_rate values
I'm trying to find the good logic to achieve this, but I'm not sure to be able to find the overlapped segments
Any help would be much appreciate