DEV Community

dev.to staff
dev.to staff

Posted on

8 2

Daily Challenge #114 - Speed Control

In John's car the GPS records every s seconds the distance traveled from an origin point (distances are measured in an arbitrary but consistent unit). For example, below is part of a record with s = 15:
x = [0.0, 0.19, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]

The sections are:
0.0-0.19, 0.19-0.5, 0.5-0.75, 0.75-1.0, 1.0-1.25, 1.25-1.50, 1.5-1.75, 1.75-2.0, 2.0-2.25

We can calculate John's average hourly speed in each section:
[45.6, 74.4, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0]

Given s and x, the task is to return as an integer the floor of the maximum average speed per hour obtained on the sections of x. If x length is less than or equal to 1 return 0 since the car didn't move.

Tests:
1
x = [0.0, 0.02, 0.36, 0.54, 0.72, 0.9, 1.08, 1.26, 1.44, 1.62, 1.8];
s = 17;

2
x = [0.0, 0.01, 0.36, 0.6, 0.84, 1.05, 1.26, 1.47, 1.68, 1.89, 2.1, 2.31, 2.52, 2.73, 2.94, 3.15];
s = 14;

Good luck, you can use (3600 * delta_distance) / s to calculate speed!


This challenge comes from g964 on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!

Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (4)

Collapse
 
peter279k profile image
peter279k

Here is the PHP code snippets:

function gps($s, $x) {
  $hourlySpeed = [];

  $index = 1;
  for (; $index<count($x); $index+=1) {
    $hourlySpeed[] = round(($x[$index] - $x[$index-1]) * 3600 / $s, 1);
  }

  $ans = $hourlySpeed[0];
  $index = 1;
  for (; $index<count($hourlySpeed); $index+=1) {
    if ($hourlySpeed[$index] - $hourlySpeed[$index-1] <= 0) {
      continue;
    }

    if ($ans < $hourlySpeed[$index]) {
      $ans = $hourlySpeed[$index];
    }
  }

  return $ans;
}
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.

Collapse
 
pavi2410 profile image
Pavitra Golchha • Edited

JS

function result(x, s) {
  return Math.floor(
    Math.max(...
      x.reduce((a,b)=>[`${a}-${b}`, b])[0]
      .split(",")
      .map(e=>eval(e))
      .map(e=>Math.abs(e))
      .map(e=>3600*e/s)
    )
  )
}
Collapse
 
qm3ster profile image
Mihail Malo
const bepis = (s, x) => {
  let max = 0
  const lasti = x.length - 1
  let prev = x[0]
  for (let i = 1; i < lasti; i++) {
    const next = x[i]
    const avg = (next - prev) * 3600 / s
    if (avg > max) max = avg
    prev = next
  }
  return Math.floor(max)
}

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay