每一张谱面(记作 χ \chi χ )都可能有其对应的谱面定数,大致代表其难度。这是一个正实数,但我们约定俗成地认为它是定点数,即只有一位小数。为方便起见,我们将其值记作 C ( χ ) C(\chi) C ( χ ) 。
服务端数据库中将存储其真实值的十倍 ,即存储一个整数。特殊地,若此值设定为负数,则认为此谱面不参与潜力值计算,这是本服务端的外加特性。
玩家游玩某谱面 χ \chi χ 后,可上传一次成绩(记作 x x x )。此时有击打计数:大 Pure 数量 x 0 x_0 x 0 、总 Pure 数量 x 1 x_1 x 1 、Far 数量 x 2 x_2 x 2 、Lost 数量 x 3 x_3 x 3 ,则单次游玩分数为:
S ( x ) = x 1 + x 2 / 2 x 1 + x 2 + x 3 × 1 0 7 + x 0 S(x) = \frac{x_1 + x_2 / 2}{x_1 + x_2 + x_3} \times 10^7 + x_0 S ( x ) = x 1 + x 2 + x 3 x 1 + x 2 /2 × 1 0 7 + x 0
注意有约束条件 x 0 ⩽ x 1 x_0 \leqslant x_1 x 0 ⩽ x 1 、∀ x i ∈ Z + \forall x_i \in \mathbb{Z}^+ ∀ x i ∈ Z + 和 ∑ i = 1 3 x i = N ( χ ) \sum_{i=1}^{3} x_i = N(\chi) ∑ i = 1 3 x i = N ( χ ) ,其中 N ( χ ) N(\chi) N ( χ ) 为总物量。显然分数存在上界 S ( x ) ⩽ 1 0 7 + N ( χ ) S(x) \leqslant 10^7 + N(\chi) S ( x ) ⩽ 1 0 7 + N ( χ ) ,即理论值 。
服务端会校验击打计数计算而得的分数与上传分数是否一致,并检查部分约束条件。
根据玩家单次游玩成绩 S ( x ) S(x) S ( x ) 和谱面定数 C ( χ ) C(\chi) C ( χ ) ,可以按照分段线性关系计算得出单次潜力值:
R ( x , χ ) = { C ( χ ) + 2 , S ( x ) ⩾ 1 0 7 C ( χ ) + 1 + S ( x ) − 9.8 × 1 0 6 2 × 1 0 5 , 9.8 × 1 0 6 ⩽ S ( x ) < 1 0 7 C ( χ ) + S ( x ) − 9.5 × 1 0 6 3 × 1 0 5 , L ( χ ) ⩽ S ( x ) < 9.8 × 1 0 6 0 , S ( x ) < L ( χ ) R(x, \chi) = \begin{cases} C(\chi) + 2, \ S(x) \geqslant 10^7 \\ C(\chi) + 1 + \frac{S(x) - 9.8 \times 10^6}{2 \times 10^5}, \ 9.8 \times 10^6 \leqslant S(x) < 10^7 \\ C(\chi) + \frac{S(x) - 9.5 \times 10^6}{3 \times 10^5}, \ L(\chi) \leqslant S(x) < 9.8 \times 10^6 \\ 0, \ S(x) < L(\chi) \end{cases} R ( x , χ ) = ⎩ ⎨ ⎧ C ( χ ) + 2 , S ( x ) ⩾ 1 0 7 C ( χ ) + 1 + 2 × 1 0 5 S ( x ) − 9.8 × 1 0 6 , 9.8 × 1 0 6 ⩽ S ( x ) < 1 0 7 C ( χ ) + 3 × 1 0 5 S ( x ) − 9.5 × 1 0 6 , L ( χ ) ⩽ S ( x ) < 9.8 × 1 0 6 0 , S ( x ) < L ( χ )
注意到单次潜力值不允许为负值,则存在可获得非负单次潜力值的分数下限 L ( χ ) = [ 95 − 3 C ( χ ) ] × 1 0 5 L(\chi) = [95 - 3 C(\chi)] \times 10^5 L ( χ ) = [ 95 − 3 C ( χ )] × 1 0 5 。显然,上述单次潜力值函数 R [ S ( x ) , C ( χ ) ] R[S(x), C(\chi)] R [ S ( x ) , C ( χ )] 是分数的连续函数。
单次分数与潜力值计算器 SPURE: PURE: FAR: LOST: 谱面定数:
分数: 0.0
单次潜力值: 0 + 0.000 = 0.000
世界排名得分: (0.00% + 0.00%) × 0 = 0.00000
相关信息
本小节的公式全部来自这个视频 的作者等人,请查阅以获得更多信息,不保证此公式完全正确。
根据玩家单次游玩成绩 x x x 和谱面定数 C ( χ ) C(\chi) C ( χ ) ,可以计算得出单次的世界排名得分:
W ( x , χ ) = N C ( χ ) [ W sp ( x , χ ) + W score ( x , χ ) ] , W sp ( x , χ ) = max [ 0 , min ( 0.095 , x 0 N ( χ ) − 0.9 ) ] , W score ( x , χ ) = 28.5 max [ 0 , min ( 0.01 , 1 0 − 7 S ( x , χ ) − 0.99 ) ] . \begin{aligned} W (x, \chi) &= N C(\chi) [W_{\text{sp}}(x, \chi) + W_{\text{score}}(x, \chi)] , \\ W_{\text{sp}}(x, \chi) &= \max \left[ 0, \min \left(0.095, \frac{x_0}{N(\chi)} - 0.9 \right) \right] , \\ W_{\text{score}}(x, \chi) &= 28.5 \max \left[0, \min \left(0.01, 10^{-7} S(x, \chi) - 0.99 \right) \right] . \end{aligned} W ( x , χ ) W sp ( x , χ ) W score ( x , χ ) = NC ( χ ) [ W sp ( x , χ ) + W score ( x , χ )] , = max [ 0 , min ( 0.095 , N ( χ ) x 0 − 0.9 ) ] , = 28.5 max [ 0 , min ( 0.01 , 1 0 − 7 S ( x , χ ) − 0.99 ) ] .
式中:N N N 为任意正常数,这不会影响世界排名,目前无法得知具体数值;S ( x , χ ) S(x, \chi) S ( x , χ ) 是单次游玩分数;N ( χ ) N(\chi) N ( χ ) 为谱面的总物量;x 0 x_0 x 0 为成绩 x x x 的大 Pure 数量。可以看出,得分分为两部部分:大 Pure 得分 W sp W_{\text{sp}} W sp 和分数得分 W score W_{\text{score}} W score 。这两部分均为线性依赖,且有上下界截断,即低于某比例则没分、高于某比例则满分。另外,分数得分的满分是大 Pure 得分的满分的三倍。
将所有 FTR 难度及以上 谱面的用户最好成绩的世界排名得分求和,可得到一个世界排名总分,用户的世界排名就按照此总分从大到小排序。
用户的总潜力值由两部分构成:Best 30 的潜力值之和与 Recent Top 10 的潜力值之和。二者相加后除以 40 得到总潜力值,即对被选出的 40 个成绩计算平均潜力值。
顾名思义,Best 30 是最好的 30 个成绩,即所有不同谱面的最好成绩中单次潜力值排前 30 的成绩。
Recent Top 10 是最近的最佳的 10 个成绩,它会从最近的 30 个成绩,即 Recent 30 中去挑选。其唯一挑选要求是 10 个成绩的谱面是不同的 ,而最佳的意思是,在这个挑选要求下,能从 Recent 30 中挑选出的 10 个成绩的潜力值之和最大 。显然,这个挑选组合必然存在,且不一定唯一,但得到的最大潜力值之和是唯一的。
Recent 30 名义上是最近的 30 个成绩,但实际上有微妙的区别。它只是一个类似队列的成绩组合,基本遵循先进先出原则,外加一些特殊规则。服务端目前采用的所有规则如下:
队列容量为 30 个成绩,先进先出 ,即加入新成绩的时候,队列中最旧的成绩会被舍弃。 队列出入操作会尽量保证 不同谱面数量大于等于 10:如包括新成绩的不同谱面数量大于 10,则正常舍弃最旧成绩;否则,将包括新成绩的 31 个成绩进行统计,筛选其中有重复成绩的谱面,再在其中舍弃最旧的成绩。 当困难模式 Track Lost、分数大于等于 9.8 × 1 0 6 9.8 \times 10^6 9.8 × 1 0 6 、分数超过服务端当前最佳成绩时(包括初见)时,此次新成绩的提交会保护 Recent Top 10 的总潜力值不下降。其逻辑为:在满足第二条规则的基础上筛选出队列中的可舍弃成绩,在可舍弃成绩中找到比新成绩的单次潜力值低的成绩中的最低的 进行舍弃(最低成绩有多个则选择其中最旧的),无法找到符合要求的成绩则舍弃本次新成绩。