You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

根据参与次数计算奖牌数量 解决44次以上计数结果异常问题

参与次数奖励应用问题

基础奖励规则

  • 10次参与 = 1枚铜牌
  • 20次参与 = 1枚铜牌、1枚银牌
  • 30次参与 = 1枚铜牌、1枚银牌、1枚金牌

奖励规则以10次为单位无限循环:

  • 40次参与 = 2枚铜牌、1枚银牌、1枚金牌
  • 50次参与 = 2枚银牌、2枚银牌、1枚金牌
  • 60次参与 = 2枚金牌、2枚铜牌、2枚金牌

进度展示规则

每个等级的1-9次参与显示进行中状态,每满10次进入下一个等级:1次对应10%进度,9次对应90%进度,不显示100%,直接跳转至下一级。

问题说明

目前当前等级进度条、当前等级完成百分比、目标等级图标展示均正常,仅存在奖牌计数异常问题:各等级奖牌计数仅在参与次数≤44时准确,从第45次开始结果异常。

相关代码

const DENOMINATOR = 10;

const clamp = (value: number, min: number, max: number): number => {
    return Math.min(Math.max(value, min), max);
}

const calculateAwardsByEntryCount = (count: number) => {
  const maxLevels = 3 * DENOMINATOR;
  const modulus = count % maxLevels;
  const currentLevel = Math.max(0, Math.floor(modulus / DENOMINATOR) - 1);
  const nextLevel = Math.min(3, currentLevel + 1);
  const prestige = Math.ceil((count + 1) / maxLevels);
  const progress = ((modulus - DENOMINATOR * nextLevel) / DENOMINATOR) * 100;

  let bronze = 0;
  let silver = 0;
  let gold = 0;

  if (count >= DENOMINATOR) {
    bronze = count <= maxLevels ? 1 : Math.floor(modulus / (DENOMINATOR - 1)) * prestige;
  }

  if (count >= DENOMINATOR * 2 && bronze > 0) {
    silver = count <= maxLevels ? 1 : clamp(Math.ceil(modulus / (DENOMINATOR * 2 - 1)) * prestige, 0, bronze + 1);
  }

  if (count >= DENOMINATOR * 3 && silver > 0) {
    gold = count <= maxLevels ? 1 : clamp(Math.ceil((modulus / (DENOMINATOR * 3 - 1)) * prestige), 0, silver + 1);
  }

  return {
    achieved: {bronze, silver, gold},
    currentLevel,
    nextLevel,
    progress,
  }
}

console.log(calculateAwardsByEntryCount(45));

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:27:04