What is wrong here ( mixed juices)

Hello,

Im trying to solve the second part with this as code :

function numberOfWedges(lime) {
  switch(lime) {
    case 'small' : return 6;
    case 'medium': return 8; 
    case 'large' : return 10; 
  }
}

  
export function limesToCut(wedgesNeeded, limes) {
  let wedges = 0;
  let neededLimes = 0; 
  while (wedges < wedgesNeeded -1 ) {
     neededLimes += 1;
     let lime = limes.shift(); 
     wedges += numberOfWedges(lime)
  }
  return neededLimes
}

but in a case of a zero array of when the array is too short to find the wedget they answer is 1 too big.

Can someone help me to find the culprit ?

You may need to add another condition into the while statement to make sure that neededLimes is not larger than the size of the limes array.

Are you talking about this test?

  test('works if no limes are available', () => {
    expect(limesToCut(10, [])).toBe(0);
  });

Either you can do what glennj has suggested. Or simpler still, you can consider adding a check to handle this as a special case.

In other words: you cannot shift() anything if the array limes is already empty.

still the same problem

` ``
limesToCut > uses up all limes if there are not enough to reach the target


`` 
Error: expect(received).toBe(expected) // Object.is equality

Expected: 7
Received: 8
export function limesToCut(wedgesNeeded,limes){
  let limeUsed=0;
  let totalLimes=limes.length;
  function wedgeCount(size) {
     switch(size){
      case 'small':
        return 6;        
      case 'medium':
        return 8;
      case 'large':
        return 10;
    }
  }
  while(wedgesNeeded>0){
      wedgesNeeded-=wedgeCount(limes[0]);
      limes.shift();
      limeUsed+=1;
  }
  if(limeUsed>totalLimes){
    return totalLimes;
  }
  return limeUsed;
}

Your answer is correct but the total number of elements available are 7 in that array and you are returning 8 as a answer that is why it is not working

Add below “if” construct in your code, before returning actual answer to solve the issue (And don’t forget to refactor variable name)

  if(limeUsed>limes.length){
    return limes.length;      
  } // here, I assume you are returning "limeUsed" variable

Happy coding!