freeCodeCamp/guide/english/certifications/javascript-algorithms-and-d.../basic-javascript/golf-code/index.md

6.4 KiB

title
Golf Code

:triangular_flag_on_post: Remember to use Read-Search-Ask if you get stuck. Try to pair program :busts_in_silhouette: and write your own code :pencil:

:checkered_flag: Problem Explanation:

In the game of golf each hole has a par meaning the average number of strokes a golfer is expected to make in order to sink the ball in a hole to complete the play. Depending on how far above or below par your strokes are, there is a different nickname.

Your function will be passed par and strokes arguments. You've to return the correct string according to this table which lists the strokes in order of priority; top (highest) to bottom (lowest):

Strokes Return
1 "Hole-in-one!"
<= par - 2 "Eagle"
par - 1 "Birdie"
par "Par"
par + 1 "Bogey"
par + 2 "Double Bogey"
>= par + 3 "Go Home!"

par and strokes will always be numeric and positive.

  • 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.

:speech_balloon: Hint: 1

+number -number can be used to increase or decrease a parameter in your condition.

try to solve the problem now

:speech_balloon: Hint: 2

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

try to solve the problem now

:speech_balloon: 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.

try to solve the problem now

Spoiler Alert!

warning sign

Solution ahead!

:beginner: Basic Code Solution:

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 {
    return "Go Home!";
  }
  // Only change code above this line
}
// Change these values to test
golfScore(5, 4);

Code Explanation:

  • Compare the parameters par and strokes to return appropriate string values.
  • if / else if chain is used for flow control.
  • String "Go Home!" is returned for every condition where strokes is greater than or equal to par + 3.

Alternative code solution:

var 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);

·Run at repl.it

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.

:sunflower: Intermediate Code Solution:

(Using Multiple Conditional (Ternary) Operators)

    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] : 
      (strokes >= par + 3) ? names[6] : 
      "Change Me";
    }

:rocket: Run Code

Resources