js 累计积分技术分享算法

34 篇文章 0 订阅
29 篇文章 0 订阅


前端团队的技术分享2周一次,一次2人
为了确定下一次是谁来分享,团队中引入了分享积分制,具体规则为:
每个人都有一个积分,初始值是0。每次分享后所有人摇一轮骰子,点数作为积分累加到各自的积分中,骰子范围是1-12。积分最高的2个人将作为下一次的分享人。为了避免连续分享,某个人分享后他的积分会被清零且跳过本次的摇骰子环节。如果积分最高的人数超过2人,则相同分数的人继续摇骰子,直到决出2个积分最高的人。需要注意的是,这期间摇骰子的积分也同样累积。

请你编写代码模拟这个过程,数据结构和函数组织自由发挥

 

var originArr = [];
var resArr = [];
var first = true;
var chooseCount = 2;
function addScore(arr) {
  for (let index = 0; index < arr.length; index++) {
    arr[index].score += Math.ceil(Math.random() * 12);
  }
  return arr;
}
function sortScore(a, b) {
  return a.score - b.score
}
function statis(maxScore) {
  var arr = [];
  for (let index = originArr.length - resArr.length - 1; index >= 0; index--) {
    if (maxScore <= originArr[index].score) {
      arr.push(originArr[index]);
    }
  }
  console.log('sortstatisArr', arr,resArr.length)
  choose(arr);
}
function choose(sortArr) {
  if (resArr.length >= chooseCount) {
    return resArr;
  } else {
    // if (first) {
    //   first = false;
    //   sortArr = sortArr.sort(sortScore);
    // } else {
    sortArr = addScore(sortArr).sort(sortScore);
    // }
    console.log('sortArr', sortArr)
    // if (chooseCount == 1) {
    //   resArr.push(sortArr[sortArr.length - 1]);
    //   return;
    // }
    if (sortArr.length >= chooseCount) {
      var tempRes = sortArr.slice(sortArr.length - chooseCount);
      var len = tempRes.length;
      console.log('tempRes', tempRes,tempRes[len - 2].score,tempRes[len - 1].score)
      if (tempRes[len - 2].score == tempRes[len - 1].score) {
        console.log('statis', tempRes[len - 2].score)
        statis(tempRes[len - chooseCount].score);
      } else {
        resArr.push(tempRes[len - 1]);
        if (resArr.length >= chooseCount) {
          return resArr;
        } else {
          console.log('statis2', tempRes[len - chooseCount].score)
          statis(tempRes[len - chooseCount].score);
        }
      }
    } else {
      console.log('statis3')
      if (sortArr.length > 0) {
        resArr.push(sortArr[sortArr.length - 1]);
        console.log('statis4', resArr.length)
        if (resArr.length >= chooseCount) {
          return resArr;
        } else {
          choose(sortArr.slice(0, sortArr.length - 1));
        }
      } else {
        return resArr;
      }
    }
  }
}


function startChoose(total) {
  for (let index = 0; index < total; index++) {
    const element = { id: index, score: 0 };
    originArr.push(element)
  }
  choose(originArr);
  // originArr = [{ id: 1, score: 0 }, { id: 2, score: 0 }, { id: 3, score: 0 }, { id: 4, score: 0 }, { id: 5, score: 8 }, { id: 6, score: 8 }, { id: 7, score: 10 }, { id: 8, score: 10 }, { id: 9, score: 10 }];
  // choose(originArr);
  console.log('resArr', resArr)
  console.log('originArr', originArr)
}
function resetChoose() {
  for (const iterator of resArr) {
    iterator.score = 0;
  }
  resArr = [];
  choose(originArr);
  console.log('resArr', resArr)
  console.log('originArr', originArr)
}
//第一次调用这个
startChoose(10)

//以后调用这个
resetChoose();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值