class Queue {
constructor() {
this.items = {}
this.count = 0;
this.firstCount = 0
}
push(el) {
this.items[this.count] = el;
this.count++;
}
del() {
if (this.isEmpty()) {
return undefined
}
const result = this.items[this.firstCount];
delete this.items[this.firstCount];
this.firstCount++;
return result;
}
isEmpty() {
return this.count - this.firstCount === 0
}
peek() {
if (this.isEmpty()) {
return undefined
}
return this.items[this.firstCount]
}
size() {
return this.count - this.firstCount
}
clear() {
this.items = {}
this.count = 0;
this.firstCount = 0
}
toString() {
if (this.isEmpty()) {
return '';
}
let str = `${this.items[this.firstCount]}`;
for (let i = this.firstCount + 1; i < this.count; i++) {
str = `${str},${this.items[i]}`
}
return str;
}
}
function getWinner(list, num) {
const queue = new Queue();
const result = []
for (let i = 0; i < list.length; i++) {
queue.push(list[i])
}
while (queue.size() > 1) {
for (let i = 0; i < num; i++) {
queue.push(queue.del())
}
result.push(queue.del())
}
return {
result,
winner: queue.del()
}
}
const names = ['John', 'Jack', 'Nancy', 'Nana', 'Sasha', 'Rose', 'Yumy', 'Jerry']
const result = getWinner(names, 3);
console.log(result.winner)
console