werewolf-core
Version:
Are you a WEREWOLF?
67 lines (66 loc) • 1.82 kB
JavaScript
;
var extend = require('extend');
exports.VOTERESULT_CHOSEN = 'chosen';
exports.VOTERESULT_MULTI = 'multi';
exports.VOTERESULT_NONE = 'none';
function initVoteBox() {
return {};
}
exports.initVoteBox = initVoteBox;
function addVote(box, obj) {
box[obj.from] = extend({}, obj);
}
exports.addVote = addVote;
function countVotes(box) {
var cnt = {};
for (var fromid in box) {
var _a = box[fromid], to = _a.to, num = _a.num, priority = _a.priority;
if (cnt[to] == null) {
cnt[to] = {
from: 'DUMMY',
to: to,
num: num,
priority: priority,
};
}
else {
cnt[to].num += num;
if (priority > cnt[to].priority) {
cnt[to].priority = priority;
}
}
}
var ids = Object.keys(cnt);
ids.sort(function (a, b) { return cnt[b].num - cnt[a].num || cnt[b].priority - cnt[a].priority; });
if (ids.length === 0) {
return {
result: exports.VOTERESULT_NONE,
ids: ids,
};
}
else if (ids.length === 1) {
return {
result: exports.VOTERESULT_CHOSEN,
ids: ids,
};
}
else {
var top_1 = cnt[ids[0]];
var chosen = [];
for (var _i = 0, ids_1 = ids; _i < ids_1.length; _i++) {
var id = ids_1[_i];
var c = cnt[id];
if (c.num === top_1.num && c.priority === top_1.priority) {
chosen.push(id);
}
else {
break;
}
}
return {
result: chosen.length === 1 ? exports.VOTERESULT_CHOSEN : exports.VOTERESULT_MULTI,
ids: chosen,
};
}
}
exports.countVotes = countVotes;