javascript - Codewars Kata - 4th Kyu - Codewars 风格排名系统 - “+1 问题”
问题描述
心想这个kata会很爽,休息一下就轻松回到js。我错了大声笑。因此,kata 的 URL 包含所有逻辑和数学信息,我将把必要的放在下面。
网址: https ://www.codewars.com/kata/51fda2d95d6efda45e00004e/train/javascript
代码:
class User {
constructor() {
this.rank = -8;
this.progress = 0;
this.rankTable=[-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8];
this.rankIndicator=0;
}
incProgress(rankOfActivity) {
if (rankOfActivity == 0 || rankOfActivity > 8 || rankOfActivity < -8) throw new error("Rank input out of range");
if (rankOfActivity <= this.rank - 2) return;
let diff = this.rankTable.indexOf(rankOfActivity)-this.rankTable.indexOf(this.rank);
if (diff==0) this.progress+=3;
else if(diff==-1) this.progress+=1;
else if(this.rank!=8){
this.progress+= 10*diff*diff;
while(this.progress>=100 && this.rank<8){
this.progress-=100;
this.rankIndicator++;
this.rank=this.rankTable[this.rankIndicator];
}
}
if (this.rank==8) this.progress=0;
}
}
完成排名比用户低一级的活动将获得 1 分
看到之后,我的观点是:如果活动排名和用户排名之间的差异是 -1 ,例如:
用户的排名为 -2(rankTable 数组中的索引 6)
活动排名为 -3(rankTable 数组中的索引 5)
差异将是 5-6 = -1
所以它应该加起来 1 点进度,看起来它没有这样做,我无法弄清楚为什么它没有加起来。
这里有一堆错误表明它发生在任何等级上。
应用 -1 等级后,进度预计为 21,但实际上是 20
应用 3 级后,进度预计为 61,但实际上是 60
应用 8 级后,进度预计为 51,但实际上是 50
解决方案
//...
//if (rankOfActivity <= (this.rank - 2)) return;
//bug
let diff = (this.rankTable.indexOf(rankOfActivity)) - (this.rankTable.indexOf(this.rank));
if (diff <=-2)return;//
//fixed
//...
就个人而言,我不喜欢数组并indexOf
在这里使用。使用 [0 到 15] 的排名计数器会好一些。
推荐阅读
- python - Python SQL 查询执行
- javascript - MUI 输入不允许 oninput 属性
- postman-testcase - 邮递员如何使用正则表达式读取隐藏字段的值
- python - 将一个元素转换为一个元素的元组/列表/集合/字符串的简洁通用方法
- makefile - Vasp 6.2.1 未编译
- c# - 重置后球轨迹完全相同(Unity)
- reactjs - react-hook-form 触发后如何删除 onSubmit 数据负载?
- python - “NoneType”对象没有“发送”属性
- javascript - 如何在 JavaScript 中跟踪鼠标移动
- javascript - 有没有办法在 javascript 中使用 keras.pad_sequences?