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:
function checkSpeed(speed){
...
}
below are different solutions:
my solution
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)
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
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 :)