DEV Community

Discussion on: Daily Challenge #114 - Speed Control

Collapse
 
aminnairi profile image
Amin • Edited

Elm

import List exposing (map, maximum)


type alias GpsCoordinate =
    Float


type alias GpsSection =
    ( GpsCoordinate, GpsCoordinate )


type alias GpsTime =
    Int


type alias GpsSpeed =
    Float


type alias GpsAverageSpeed =
    Int


toGpsSections : List GpsCoordinate -> List GpsSection
toGpsSections list =
    case list of
        first :: second :: rest ->
            ( first, second ) :: toGpsSections (second :: rest)

        _ ->
            []


toGpsSpeed : GpsTime -> GpsSection -> GpsSpeed
toGpsSpeed gpsTime ( firstCoordinate, secondCoordinate ) =
    (secondCoordinate - firstCoordinate) * 3600.0 / toFloat gpsTime


toGpsAverageSpeed : GpsTime -> List GpsCoordinate -> GpsAverageSpeed
toGpsAverageSpeed gpsTime gpsCoordinates =
    gpsCoordinates
        |> toGpsSections
        |> map (toGpsSpeed gpsTime)
        |> maximum
        |> Maybe.withDefault 0.0
        |> floor

Playground

Here.