WhiteBachelor
@WhiteBachelor
Начинающий веб-программист.

Какая-то ошибка в логике... Почему в массиве элемента нет, а JS считает, что есть?

Простенький код, симулирующий очередь в кинотеатр. Нужно выяснить, хватит ли кассиру купюр в 25, 50 и 100,чтобы дать всем сдачу. Цена билета: 25. Ответ либо "YES", либо "NO". Синтаксических ошибок вроде нет, и вроде все логично, и я ничего не упускал, но ответ выходит некорректным. В чем дело?
function tickets(peopleInLine, hasMoney = []){
  console.log('begin:', hasMoney)
  if (peopleInLine.length < 1)
    return 'YES';
  switch (peopleInLine[0]){
  case 25:
    hasMoney.push(25);
    break;
  case 50:
    if (hasMoney.some(e => {e === 25})) {
      hasMoney.push(50)
      hasMoney.splice(hasMoney.indexOf(25), 1)
    } else 
        return 'NO';
    break;
  case 100:
    if ( hasMoney.some(e => {e === 25}) && hasMoney.some(e => {e === 50}) ) {
      hasMoney.push(100)
      hasMoney.splice(hasMoney.indexOf(25), 1);
      hasMoney.splice(hasMoney.indexOf(50), 1);
    } else 
        return 'NO';
      break;
  }
  console.log('end', hasMoney)
  if (peopleInLine.length === 1)
    return tickets([], hasMoney);
  return tickets(peopleInLine.slice(1, peopleInLine.length - 1), hasMoney);
}

console.log(tickets([25, 100]))
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как минимум, вы упустили вариант, когда сдачу со 100 можно сдать тремя купюрами по 25.
Гораздо эффективнее вначале посчитать количество купюр каждого номинала и оперировать с трёхэлементным массивом.
Да и без рекурсии можно обойтись, достаточно простого цикла.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы