我的个人解法->
// 判断迁移数组的总和是否为 15
function filcheck(ar) {
return ar.reduce((x, k) => {
return x + k
}, 0) === 15;
}
function entrance() {
// 定义原数据数组
var constArr = [3, 5, 7];
// 定义初始迁移数据数组
var arrReserver = [0, 0, 0];
// 奇偶数定义 回合制玩家判断
var odvar = 0;
// 循环判断条件
while (!filcheck(arrReserver)) {
// 当数组中的所有元素已被移除后直接跳出循环
if (arrReserver.length === 1) break;
// 生成数组中的随机下标
var arrIdx = Math.floor(Math.random() * (constArr.length));
// 两数组同位置上元素的偏差 代表还剩多少物件
var bxa = constArr[arrIdx] - arrReserver[arrIdx];
// 当剩余数量为 0 时 移除该行
if (bxa === 0) {
constArr.splice(arrIdx, 1);
arrReserver.splice(arrIdx, 1);
continue;
}
// 迁移数据数组对应行数量添加
arrReserver[arrIdx] += Math.floor((Math.random() * (bxa)) + 1);
// 代表玩家本身
odvar++;
}
// 利用回合制进行判断是哪位玩家失败
return odvar % 2 === 0 ? "player1" : "player2";
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.