///|
fn states_for_driver(
states : Array[DriverLapState],
driver : String,
) -> Array[DriverLapState] {
let matching : Array[DriverLapState] = []
for state in states {
if state.driver == driver {
matching.push(state)
}
}
matching
}
///|
fn stint_time_ms(states : Array[DriverLapState], start : Int, end : Int) -> Int {
let mut total = 0
for index = start; index <= end; index = index + 1 {
total = total + states[index].lap_time_ms
}
total
}
///|
fn build_stints(
drivers : Array[String],
states : Array[DriverLapState],
) -> Array[Stint] {
let stints : Array[Stint] = []
for driver in drivers {
let driver_states = states_for_driver(states, driver)
let mut start = 0
let mut stint_number = 1
for index = 0; index < driver_states.length(); index = index + 1 {
let current = driver_states[index]
if current.pit || index == driver_states.length() - 1 {
let first = driver_states[start]
stints.push({
driver,
stint_number,
start_lap: first.lap,
end_lap: current.lap,
compound: first.compound,
start_tyre_age_laps: first.tyre_age_laps,
end_tyre_age_laps: current.tyre_age_laps,
lap_count: current.lap - first.lap + 1,
total_time_ms: stint_time_ms(driver_states, start, index),
ended_by_pit: current.pit,
})
start = index + 1
stint_number = stint_number + 1
}
}
}
stints
}