var input = 10000; var elves = []; for(var i = 0; i < input; i++){ elves[i] = true; } var i = 0; var count = elves.length; while(count > 1){ if(!(count%1000)) console.log(count) var toRemoveAhead = Math.floor(count/2); var pos = i; var passed = 0; while(passed < toRemoveAhead){ pos = (pos + 1)%(elves.length); if(elves[pos]){ passed++; } } elves[pos] = false; count--; i = (i+1)%(elves.length); while(elves[i] == false){ i = (i+1)%(elves.length); } } console.log(elves.indexOf(true) + 1);