freeCodeCamp Challenge Guide: Golf Code

Golf Code


Hints


Problem Explanation

Change the code below // Only change code below this line and above // Only change code above this line.

Ensure that you’re editing the inside of the golfScore function.

You will have to make the function return exactly the same string as shown shown in the table, depending on the value of the parameters par and strokes that are passed to your function.

Hint 1

+number -number can be used to increase or decrease a value.

Hint 2

You use if / else if chains to return different values in different scenarios.

Hint 3

Control the flow of your function based on the tables order of priority - top (highest) to bottom (lowest) to return matching string values.


Solutions

Solution 1 (Click to Show/Hide)
const names = ["Hole-in-one!", "Eagle", "Birdie", "Par", "Bogey", "Double Bogey", "Go Home!"];

function golfScore(par, strokes) {
  // Only change code below this line
  if (strokes == 1) {
    return names[0];
  } else if (strokes <= par - 2) {
    return names[1];
  } else if (strokes === par - 1) {
    return names[2];
  } else if (strokes === par) {
    return names[3];
  } else if (strokes === par + 1) {
    return names[4];
  } else if (strokes === par + 2) {
    return names[5];
  } else {
    return names[6];
  }
  // Only change code above this line
}

// Change these values to test
golfScore(5, 4);

Code Explanation

Since we already have an array defined in the variable names we can take advantage of it and use it for our return statements using indexes (eg: names[0] is the first one). That way, if you ever need to change a specific result you wouldn’t need to look for it inside the function, it’d be at the beginning, in your array.

Solution 2 (Click to Show/Hide)

(Using Multiple Conditional (Ternary) Operators)

const names = ["Hole-in-one!", "Eagle", "Birdie", "Par", "Bogey", "Double Bogey", "Go Home!"];

function golfScore(par, strokes) {
  return strokes === 1
    ? names[0]
    : strokes <= par - 2
    ? names[1]
    : strokes === par - 1
    ? names[2]
    : strokes === par
    ? names[3]
    : strokes === par + 1
    ? names[4]
    : strokes === par + 2
    ? names[5]
    : names[6];
}

Relevant Links

Note that using deeply nested ternaries like this is discouraged in professional code.

103 Likes

I completed it another way, more long winded but shows there is multiple ways to complete probelms!

if (strokes === 1) {
return “Hole-in-one!”;
} else if (strokes === 2) {
return “Eagle”;
} else if (strokes === 3) {
return “Birdie”;
} else if (par === 4 && strokes === 4) {
return “Par”;
} else if (par ===4 && strokes ===5) {
return “Bogey”;
} else if (par ===4 && strokes ===6) {
return “Double Bogey”;
} else if (par >=4 && strokes >=7) {
return “Go Home!”;
} else if (par ===5 && strokes ===5) {
return “Par”;
}

45 Likes

I was able to complete it with a switch (& some help from the community)! Just another way to solve it.

function golfScore(par, strokes) {
// Only change code below this line
var response = “”;
switch(true){
case (strokes === 1):
response = “Hole-in-one!”;
break;
case (strokes <= par -2):
response = “Eagle”;
break;
case (strokes === par -1):
response = “Birdie”;
break;
case (strokes === par):
response = “Par”;
break;
case (strokes === par +1):
response = “Bogey”;
break;
case (strokes === par +2):
response = “Double Bogey”;
break;
case (strokes >= par +3):
response = “Go Home!”;
}

return response;
// Only change code above this line
}

16 Likes

i didn’t know What am I doing at the start. Just was following all the instructions. And got it:

[spoiler]function golfScore(par, strokes) {
// Only change code below this line
if (strokes==1){
return “Hole-in-one!”;
}else if (strokes <= par - 2){
return “Eagle”;
}else if (strokes == par - 1){
return “Birdie”;
}else if (strokes == par){
return “Par”;
}else if (strokes == par + 1){
return “Bogey”;
}else if (strokes == par + 2){
return “Double Bogey”;
}else if (strokes >= par + 3){
return “Go Home!”;
}else{
return “change me!”;
}
// Only change code above this line
}

// Change these values to test
golfScore(4, 7);[/spoiler]

13 Likes

Thanks,

Switch Statement did the job for me

3 Likes

I’ve tried, but I don’t know what I’m doing wrong.
These are the errors I received. Help! :frowning_woman:t5:

9 Likes

This is how I did it:

function golfScore(par, strokes) {
// Only change code below this line

if(strokes <= 1) {
return “Hole-in-one!”;
}else if(strokes <= par-2) {
return “Eagle”;
}else if(strokes <= par-1) {
return “Birdie”;
}else if(strokes <= par) {
return “Par”;
}else if(strokes <= par + 1) {
return “Bogey”;
}else if(strokes <= par + 2) {
return “Double Bogey”;
}else if(strokes >= par + 3) {
return “Go Home!”;
}

return “Change Me”;
// Only change code above this line
}

// Change these values to test
golfScore(4, 7);

6 Likes

I also came up with a different solution. In this way it doesn’t matter what values you put into golfscore it will always validate. Because it will always resolve back to whatever par is - (par == par). What made me think of it is that a par at a golf course is variable. There are par 4s, 5s, and in rare occasions 6s.

In the real world I would have to resolve the <= comparison operators with the Eagle and Birdie statements, because if you were programming a score board you would want them to resolve to less than 2 strokes under par strictly - because that is what an Eagle is (same with Birdie with 1 under). I tried using strict equals operator === but then it wouldn’t pass and screwed up return of “Hole in one.” Don’t know why. Anyway it will pass no matter which values you put into golfscore the way it stands.

function golfScore(par, strokes) {

if (strokes < 2) {
return "Hole-in-one!";
} else if (par == par && strokes <= par-2) {
return "Eagle";
} else if (par == par && strokes <= par-1) {
return "Birdie";
} else if (par == par && strokes === par) {
return "Par";
} else if (par == par && strokes === par+1) {
return "Bogey";
} else if (par == par && strokes === par+2) {
return "Double Bogey";
} else if (par == par && strokes >= par+3) {
return "Go Home!";
} 
  return "Change Me";
}

// Change these values to test
golfScore(4, 14);
11 Likes

Hi T, I was having the exact issue. I think when I changed the golfscore to (4, 1) it solved that issue. In other words a par 4 with 1 stroke is a hole in one. I say, “I think” because as I was having that issue I came up with another solution and can’t be sure I remember what I was doing before. Check out the code I inserted below. You can enter any value in the golfscore and it will validate and resolve each else if statement properly. Run it in the console and check it out.

4 Likes

Thanks for responding. I will try that to see if it works. T

3 Likes

Hi TlanetteRose,

I was having the same exact problem. I tried a couple different things and finally saw it! You and I CAPITALIZED the “O” in the word “One!”. It should be “one!”. change that and you will be allowed to proceed.

9 Likes

Here is my solution .
function golfScore(par, strokes) {
// Only change code below this line

if((strokes == 1)){
return “Hole-in-one!”;
}
else if((strokes == 2)){
return “Eagle”;
}
else if((strokes == 3)){
return “Birdie”;
}
else if(((strokes == 4) || (strokes == 5)) && (strokes == par)){
return “Par”;
}
else if((strokes == 5) && (strokes != par)){
return “Bogey”;
}
else if((strokes == 6)){
return “Double Bogey”;
}
else{
return “Go Home!”;
}
return “Change Me”;
// Only change code above this line
}

// Change these values to test
golfScore(5, 4);

3 Likes

Thank you! That was it. :raising_hand_woman:t6:

5 Likes