代码战争卡塔 - 第4名 - 代码战争风格排名系统 - "+1 problem"



我认为这个卡塔会很酷,休息后很容易回到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(等级表数组中的索引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
//...

就我个人而言,我不喜欢array和indexOf在这里使用。使用[0到15]的秩计数器会更好一些。

最新更新