У меня есть функция, где я ввожу уровень, и он возвращает XP:
это получено из формулы Runescape 1-99:
function experience($L) {
$a=0;
for($x=1; $x<$L; $x++) {
$a += floor($x+300*pow(2, ($x/7)));
}
return floor($a/4);
}
это означает:
level 54 would return 150872 XP.
Но как бы я пошел наоборот, чтобы ввести 150872 и вернуть 54?
и каков путь, когда xp может быть 150873, но его уровень 54 все еще может вернуться?
Как бы я подошел?
Предпочтения:
experience(152439) -> 54
Одно неэффективное, но простое решение — просто непрерывно вызывать функцию опыта в цикле, увеличивая уровень каждый раз, пока вы не достигнете уровня, который возвращает значение опыта выше того, который вы ищете, а затем вернуть уровень до этого:
function level($experience) {
$returned = 0;
$level = 0;
while ($returned <= $experience) {
$level++;
$returned = experience($level);
}
return $level - 1;
}
Демо-версия: http://sandbox.onlinephpfunctions.com/code/820d659feb28a00dd87a21d01bd2414cbc66d300
Других решений пока нет …