Skip to content

Instantly share code, notes, and snippets.

@masquevil
Last active February 11, 2017 11:43
Show Gist options
  • Save masquevil/f35db0b06f6ed82458b31a2d3a875664 to your computer and use it in GitHub Desktop.
Save masquevil/f35db0b06f6ed82458b31a2d3a875664 to your computer and use it in GitHub Desktop.
计算初音技能的正负数
var con = [
['开始阶段', '结束阶段', '造成伤害时', '受到伤害时'],
['你弃置判定区的一张牌', '你翻回正面', '令一名其他角色交给你一张牌', '令任意角色'],
['回复1点体力', '摸2张牌', '失去1点体力', '弃2张牌']
];
var win = [
[{cur: 1, weight: 1}, {cur: 1, weight: 1}, {cur: 1, weight: 0.5}, {cur: -1, weight: 1}],
[{suit: 1, target: 1, win: 0}, {suit: 1, target: 1, win: 0}, {suit: 0, target: -1, win: 2}, {suit: 0, target: 0, win: 0}],
[{sign: 1, win: 2}, {sign: 1, win: 2}, {sign: -1, win: 2}, {sign: -1, win: 2}]
];
var switcher = [];
var makeChoice = function(switcher){
var choice = [], i, j, k, n, c, positive, target;
var skill, skillGroup = [];
for(i = 0; i < 4; i++) {
for(j = 0; j < 4; j++) {
for(k = 0; k < 4; k++) {
choice.push([i, j, k]);
c = choice[choice.length - 1];
switcher.push('');
skillGroup.push(skill = []);
for(n = 0; n < 3; n++) {
c.push(c.shift());
target = win[1][c[1]].target || win[0][c[0]].cur;
positive = -!~(target * win[1][c[1]].suit * win[2][c[2]].sign) || 1; // 收益的+-
switcher[switcher.length - 1] += (
',' + win[0][c[0]].weight * (
positive * (win[2][c[2]].win + (positive && (win[2][c[2]].sign === -1) ? win[1][c[1]].win : 0))
)
);
skill.push(con[0][c[0]] + con[1][c[1]] + con[2][c[2]]);
}
skill.unshift(switcher[switcher.length - 1] = switcher[switcher.length - 1].slice(1));
}
}
}
skillGroup.forEach(function(skill, m){
console.log(m + '\t' + switcher[m] + ' \t' + skill.slice(1).join(','));
});
console.log("%c 技能收益列表:", "background: #fe7;");
console.log(JSON.stringify(switcher));
return skillGroup;
};
var skillGroup = makeChoice(switcher);
var average = switcher.map(function(v){return v.split(',').reduce(function(pre, cur){return pre + (+cur)}, 0);}).sort();
var max = switcher.map(function(v){return v.split(',').reduce(function(pre, cur){return Math.max(pre, +cur)}, -100);}).sort();
console.log("%c 技能的总收益为:", "background: #fe7;");
average.concat(true).reduce(function(pre, cur){if(pre[0] !== false && pre[0] !== cur){console.log(pre[1] + '个' + pre[0]);pre[1] = 0;} pre[0] = cur; pre[1]++; return pre;}, [false, 0]);
console.log("%c 每个组合的最高收益为:", "background: #fe7;");
max.concat(true).reduce(function(pre, cur){if(pre[0] !== false && pre[0] !== cur){console.log(pre[1] + '个' + pre[0]);pre[1] = 0;} pre[0] = cur; pre[1]++; return pre;}, [false, 0]);
console.log("%c 在 console 中键入 skillGroup[序号] 查看对应序号的技能组合:", "background: #fe7;");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment