Learn Functional Programming by Building a Spreadsheet - Step 25

Tell us what’s happening:

help me please!
i try to appaly the tenery syntax as it demanded , that’s what i got in console after testing my code : 1. You should use the return keyword.
2. You should call your isEven() function after your return keyword.
3. You should pass your length variable to your isEven() call.
4. You should use ternary syntax to check the truthiness of your isEven() call.
5. If the ternary is truthy, you should call your average() function.
6. You should pass an array to your average() function.

Your code so far

<!-- 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: 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);
    })
  })
}
/* 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;
}

Your browser information:

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

Challenge Information:

Learn Functional Programming by Building a Spreadsheet - Step 25

i recall doing this too but they actually wanted to not change the middle value here and instead use the Math.ceil in the new code only.

now i tried another solution without modifying the middle variable , here how i tried :
const median = nums => {
const sorted = nums.slice().sort((a, b) => a - b);
const length = sorted.length;
const middle = length / 2;

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

still not working , could you help ? thanks

why did you use Math.floor?

i got what you mean , i just tried to do it in another way but when i return to the instruction it never asked to substract one from the variable value and show the current value as the next value but it ask me to present the current value and add one to show the next value !!
i got it , thanks for helping me :pray: