Простенький код, симулирующий очередь в кинотеатр. Нужно выяснить, хватит ли кассиру купюр в 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]))