Learn Functional Programming by Building a Spreadsheet - Step 25

Tell us what’s happening:

Describe your issue in detail here.

Your code so far

// step 25 , i’m not able understand could you please help with how to do this

<!-- file: index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" href="./styles.css" />
    <title>Functional Programming Spreadsheet</title>
  </head>
  <body>
    <div id="container">
      <div></div>
    </div>
    <script src="./script.js"></script>
  </body>
</html>
/* file: styles.css */
#container {
  display: grid;
  grid-template-columns: 50px repeat(10, 200px);
  grid-template-rows: repeat(11, 30px);
}

.label {
  background-color: lightgray;
  text-align: center;
  vertical-align: middle;
  line-height: 30px;
}
/* file: script.js */
const isEven = num => num % 2 === 0;
const sum = nums => nums.reduce((acc, el) => acc + el, 0);
const average = nums => sum(nums) / nums.length;


// User Editable Region

const median = nums => {
  const sorted = nums.slice().sort((a, b) => a - b);
  const length = sorted.length;
  const middle = Math.ceil(length / 2 - 1);
  
return isEven(length)
  ? average([sorted[middle], sorted[middle + 1]])
  : sorted[middle]; 
};


// User Editable Region


const range = (start, end) => Array(end - start + 1).fill(start).map((element, index) => element + index);
const charRange = (start, end) => range(start.charCodeAt(0), end.charCodeAt(0)).map(code => String.fromCharCode(code));

window.onload = () => {
  const container = document.getElementById("container");
  const createLabel = (name) => {
    const label = document.createElement("div");
    label.className = "label";
    label.textContent = name;
    container.appendChild(label);
  }
  const letters = charRange("A", "J");
  letters.forEach(createLabel);
  range(1, 99).forEach(number => {
    createLabel(number);
    letters.forEach(letter => {
      const input = document.createElement("input");
      input.type = "text";
      input.id = letter + number;
      input.ariaLabel = letter + number;
      container.appendChild(input);
    })
  })
}

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36

Challenge Information:

Learn Functional Programming by Building a Spreadsheet - Step 25

You appear to have created this post without editing the template. Please edit your post to Tell us what’s happening in your own words.

1 Like

hello and welcome to fcc forum :slight_smile:

  • for “odd” block needs to use “round off” method, as mentioned in instructions

happy coding :slight_smile:

2 Likes

can you help me with the code ?
that will be very helpful

1 Like
  • use “Math.ceil()” for “middle” in “falsy”

happy coding :slight_smile:

1 Like

thank you very much for the help :smiling_face_with_three_hearts:

1 Like

return isEven(length)
? average([sorted[middle], sorted[middle + 1]])
: Math.ceil(sorted[middle]);

I used Math.ceil() but it still says " If the ternary is false, you should return the value of sorted at the middle index. Use Math.ceil() to round the middle value up."

Thanks.

2 Likes

I found the solution:
return isEven(length)
? average([sorted[middle], sorted[middle + 1]])
: sorted[Math.ceil(middle)];

3 Likes

you should put this as a spoiler alert for solution, happy coding :slight_smile:

2 Likes

Hello, I think freeCodeCamp has an incorrect solution for this step. Since the index of the array start from zero, we should use middle - 1 as index to find the actual middle number. The correct solution should be:
return isEven(length)
? average([sorted[middle-1], sorted[middle]])
: sorted[Math.floor(middle)];

Let me know your thoughts.

1 Like

You are right in case the middle variable is only the result of this: length / 2


But if you see what the middle variable’s value is, you will see this: length / 2 - 1

So here you are already subtracting one which will point to the first element of the two middle elements in case the length is even. And to point to the second element of the middle elements, you just add one to the middle variable.

1 Like

Got it. Thanks for your help.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.