class dbQueue{
constructor(){
this.dbqueue = {};
this.startIndex = 0;
this.endIndex = 0
}
isEmpty(){
return this.endIndex === this.startIndex;
}
addFront(val){
this.startIndex --;
this.dbqueue[this.startIndex] = val;
return this.dbqueue;
}
addBack(val){
this.dbqueue[this.endIndex] = val;
this.endIndex++;
return this.dbqueue;
}
removeFront(){
if(!this.isEmpty()){
let front = this.dbqueue[this.startIndex]
delete this.dbqueue[this.startIndex];
this.startIndex++;
return front;
}
return undefined;
}
removeBack(){
if(this.endIndex>0){
let back = this.dbqueue[this.endIndex];
delete this.dbqueue[this.endIndex];
this.endIndex--;
return back;
}
return undefined;
}
peekFront(){
if(this.startIndex>=0) return this.dbqueue[this.startIndex];
}
peekBack(){
if(this.endIndex>=0) return this.dbqueue[this.endIndex];
}
clear(){
this.dbqueue= {};
this.startIndex = 0;
this.endIndex = 0;
}
size(){
return this.endIndex - this.startIndex;
}
toString(){
if(this.isEmpty()) return '';
let result = this.dbqueue[this.startIndex];
for(let i = this.startIndex+1;i<this.endIndex;i++){
result = `@{result},@{this.dbqueue[i]}`;
}
return result;
}
}
function hotPotato(list,num){
let dbqueue = new dbQueue();
for(let i = 0;i<list.length;i++){
dbqueue.addBack(list[i]);
}
let eliminateList = [];
while(dbqueue.size()>1){
for(let i = 0;i<num-1;i++){
dbqueue.addBack(dbqueue.removeFront());
}
eliminateList.push(dbqueue.removeFront());
}
return{
eliminateList:eliminateList,
winner:dbqueue.removeFront()
}
}
let testList = ["anthoy","john","ben","ivy","lila","jeffery"];
console.log(hotPotato(testList,4).winner);
console.log(hotPotato(testList,4).eliminateList);
console.log(null == 0);
console