Daily Code 76 | Speed Limit
Tags: javascript, daily
Published: 2024-07-10 07:08:51

hi everyone! after a longer break i am back again with a small daily exercise. it’s simple but i think the different solutions are interesting. why don’t you give it a try as well? 😄

# task

use javascript to write a function that determines the result of you driving at certain speeds:

- speed limit: 120km/h (result: 'ok')
- for every 5km/h above speed limit you get 1 point (result: 'x points'
- if you get more than 12 points your licence is suspended (result: 'license suspended')

template:

```jsx
function checkSpeed(speed){
  ...
}
```

below are different solutions:

# my solution

```jsx
let speed = 130;
console.log(checkSpeed(speed));

function checkSpeed(speed) {
  const speedLimit = 120;
  const kmPerPoint = 5;
  const points = Math.floor((speed - speedLimit) / kmPerPoint)
  if (points <= 0) return 'ok';
  if (points >= 12) return 'License suspended'
  if (points == 1) return '1 point'
  return `${points} points`
}
```

# teacher solution (code with mosh)

```jsx
checkSpeed(125);

function checkSpeed(speed) {
  const speedLimit = 120;
  const kmPerPoint = 5;

  if (speed < speedLimit + kmPerPoint)
    console.log('Ok');
  else {
    const points = Math.floor((speed - speedLimit) / 5)
    if (points >= 12)
      console.log('License suspended');
    else
      console.log('Points', points)
  }
}
```

# chatgpt solution

```jsx
function checkSpeeding(speed) {
  const speedLimit = 120;
  const pointsPerExcessKm = 1;
  const pointsThreshold = 12;
  
  if (speed <= speedLimit) {
      return 'ok';
  } else {
      const excessSpeed = speed - speedLimit;
      const points = Math.floor(excessSpeed / 5) * pointsPerExcessKm;
      
      if (points > pointsThreshold) {
          return 'license suspended';
      } else {
          return `${points} points`;
      }
  }
}

// Example usage:
console.log(checkSpeeding(130)); // Output: '2 points'
console.log(checkSpeeding(140)); // Output: '4 points'
console.log(checkSpeeding(160)); // Output: 'license suspended'
console.log(checkSpeeding(115)); // Output: 'ok'
```

# conclusion

i am actually surprised that i like my solution better than the ones from mosh and chatgpt. feels much simplere and more straight forward. or am i missing something?

Some thongs when I compare the solutions:

- mosh
    - instead of console.logging the function output, he just logs directly inside of the function. i don’t particularly like that because it causes him to repeat the console.log statement several times and it causes the function to not return anything.
    - i think the `if (speed < speedLimit + kmPerPoint) console.log('Ok');` is really unintuitive. to me it’s much more logical to just give the ‘ok’ if points are 0 (hence I do it like that in my solution)
- chatgpt
    - i really like the ‘example usage’ in the end. looks like there is again a lot of repeated code with all these log statements but still that’s something i also want to do going forward
    - chatgpt took an extra step to calculate the excessSpeed, which i just combined all in my points calculation. i think it’s a great approach to always do only one calculation per step to make things clearer, so that’s something i want to do as well going forward.
    - surprisingly chatgpt does not give the desired results from 121-124km/h (it should be ‘ok’ since there are no points), but i guess that should have been more clearly specified in the task, since 0 points can also be seen as a valid result in these cases.
    
    it’s a very simple exercise but still some nice learnings from me here. did you try it? how do you feel about these solutions? would love to hear your thoughts :)