7 lines
1.1 KiB
JavaScript
7 lines
1.1 KiB
JavaScript
function create(candidates){return{round:1,pool:candidates.slice(),pairIndex:0,winners:[],eliminated:[],decisions:[]};}
|
|
function current(state){if(state.pool.length===1)return null;return[state.pool[state.pairIndex],state.pool[state.pairIndex+1]||null];}
|
|
function choose(state,winner){var pair=current(state);if(!pair||!pair[1])throw new Error('invalid bracket pair');var loser=pair[0].id===winner.id?pair[1]:pair[0];state.winners.push(winner);state.eliminated.unshift(loser);state.decisions.push({round:state.round,left_id:pair[0].id,right_id:pair[1].id,winner_id:winner.id});state.pairIndex+=2;if(state.pairIndex<state.pool.length){if(!state.pool[state.pairIndex+1]){state.winners.push(state.pool[state.pairIndex]);state.pairIndex+=1;}if(state.pairIndex<state.pool.length)return false;}state.pool=state.winners;state.winners=[];state.pairIndex=0;state.round+=1;return state.pool.length===1;}
|
|
function ranking(state){return state.pool.concat(state.eliminated).map(function(item){return item.id;});}
|
|
module.exports={create:create,current:current,choose:choose,ranking:ranking};
|
|
|