Ruby on rails 如何根据点查找和更新相应的级别?

Ruby on rails 如何根据点查找和更新相应的级别?,ruby-on-rails,algorithm,data-structures,Ruby On Rails,Algorithm,Data Structures,我正在创建一个类似于游戏的rails应用程序。所以它有点和层次。例如:要成为一级,用户必须获得至少100分,而对于二级,用户必须达到二级,用户必须获得200分。每10个级别后级别差异会发生变化,即每10个级别之间的差异始终会在10个级别后发生变化。我的意思是一级和二级的分数差是100,十一级和十二级的分数差是150,以此类推。级别没有上限 现在我的问题是,假设一个用户的总分是3150分,刚刚更新到3155分。找到当前级别并在需要时进行更新的最佳解决方案是什么 我可以使用while循环得到一个解决

我正在创建一个类似于游戏的rails应用程序。所以它有点和层次。例如:要成为一级,用户必须获得至少100分,而对于二级,用户必须达到二级,用户必须获得200分。每10个级别后级别差异会发生变化,即每10个级别之间的差异始终会在10个级别后发生变化。我的意思是一级和二级的分数差是100,十一级和十二级的分数差是150,以此类推。级别没有上限

现在我的问题是,假设一个用户的总分是3150分,刚刚更新到3155分。找到当前级别并在需要时进行更新的最佳解决方案是什么

我可以使用while循环得到一个解决方案,并在其中再次循环,这将在^2上给出一个结果。我需要更好的

我认为这段代码有效,但我不确定这是否是最好的方法

def get_水平点 差值=100 总和=0 级别=-1 当前_级别=0 而水平是负的吗? 10.3倍于我| 当前_级别+=1 和=差 如果点>总和 下一个 elsif points我写了一个get_points函数,应该不难。然后在此基础上得到_级函数,其中需要求解二次方程才能找到高值,然后计算低值

如果你有任何问题,请告诉我

检查输出

!/usr/bin/env蟒蛇3 输入数学 def get_Points级别: 高=级别+1//10 低=水平+1%10 高点=250*high*high+750*high 3+high*high//2*500 低点=100+50*高*低 返回低点+高点 def get_水平点: 二次方程 a=250 b=750 c=-分 d=b*b-4*a*c x=-b+math.sqrtd/2*a 高=整数倍 剩余=点数-250*高*高+750*高 低=余数//100+50*高 电平=高*10+低 返回水平 def主: 对于范围为0,40的l: printf'{l:3d}{get_pointsl-1:5d}..{get_pointsl-1}' 对于标高,l,r in 1, 100, 199, 2, 200, 299, 9, 900, 999, 10, 1000, 1149, 11, 1150, 1299, 19, 2350, 2499, 20, 2500, 2699, : 对于范围内的p,r+1:in[l,r] 断言get_levelp==level,f'{p}{l}' 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 主要的
为什么设置a=250和b=750的值?你能给我解释一下吗

让我们写出每10个级别以及各点之间的差异:

lvl - pnt  (+delta)
 10 - 1000 (+1000 = +100 * 10)
 20 - 2500 (+1500 = +150 * 10)
 30 - 4500 (+2000 = +200 * 10)
 40 - 7000 (+2500 = +250 * 10)
除以500 10个级别*50个差异变化,并从2开始接受算术级数:

 10 - 2  (+2)
 20 - 5  (+3)
 30 - 9  (+4)
 40 - 14 (+5)
对于等于以下值的标高=k*10,使用“获取点”公式:

sum(x for x in 2..k+1) * 500 =
(2 + k + 1) * k / 2 * 500 = 
(3 + k) * k * 250 = 
250 * k * k + 750 * k

现在我们有了点,希望找到最大高点,这样点>=250*high^2+750*high,即。E250*高^2+750*高-对于101点,函数返回级别2。我是否正确理解必须返回从100到199(含100到199)的级别1?是的,您是正确的,因为级别将从1开始,而不是0为什么设置a=250和b=750的值?你能给我解释一下吗?谢谢你太棒了!!我将尝试将其转换为ruby代码。如果我遇到什么问题,我会再问你