3.4. Поиск игрока с одинаковым количеством очков
Работа над заданием
Задание принимается автоматически после нажатия на кнопку «Задание готово»
Онлайн игра «Удар легенд» имеет ранговый режим, при котором игроки соревнуются между собой. Игрок может попасть в одну из пяти лиг в зависимости от счёта: чем номер лиги выше, тем лучше. Перед тем, как попасть в лигу, игроки должны отыграть пять калибровочных игр, а до завершения пятой они не знают, на какое место и какую лигу претендуют. Аналитики хотят добавить в экран завершения игры новую опцию: показывать игрока с точно таким же рейтингом, как у текущего игрока в момент калибровки. Таким образом, игроки будут примерно представлять, в какую лигу и в какое её место они попадут после калибровки.
Каждый из игроков в рейтинге представлен следующим объектом:
{
"login": "LuckyWasTaken",
"leaguePoints": 9001
}
А сам рейтинг — массив из лиг, которые тоже представляют собой массивы с игроками (это объекты, описанные выше). Например, вот таблица со счётами четырех игроков, по два в каждой лиге
[
[
{
"login": "stypeano",
"leaguePoints": 23
},
{
"login": "rstrazir",
"leaguePoints": 42
}
],
[
{
"login": "kinerber",
"leaguePoints": 322
},
{
"login": "eridarma",
"leaguePoints": 1337
}
]
]
Тогда, если по окончании одного из матчей у игрока 322 очка, на экране завершения игры мы должны показать, что он — претендент в начало второй лиги.
Ваша задача — реализовать функцию для поиска по таблице лидеров, которая на вход принимает количество очков и непосредственно таблицу, а возвращает объект:
{
"league": 1,
"placement": 1,
}
Где league
— это номер лиги (осторожно, люди считают с единицы, в отличие от индексации массива), а placement
— место в лиге (с конца, ведь лучшие игроки в массиве лиги идут после худших).
То есть если игрок набрал при калибровке 322 очка, то функция должна вернуть:
{
"league": 2,
"placement": 2,
}
Естественно, в настоящей таблице могут быть миллионы игроков (по крайней мере, аналитики надеются на такой успех), поэтому и поиск должен работать максимально оптимальным образом!
Реализуйте функцию в любом удобном для вас редакторе кода и сравните получившийся результат с функцией в следующей демонстрации. Помните, что количество лиг и количество людей в каждой из них в настоящих данных может быть любым.
Можете использовать данные из этого раздела в качестве тестовых
[
[
{
"login": "stypeano",
"leaguePoints": 4
},
{
"login": "rstrazir",
"leaguePoints": 45
},
{
"login": "cathead",
"leaguePoints": 143
},
{
"login": "cavernous",
"leaguePoints": 324
}
],
[
{
"login": "ConspiracyLil",
"leaguePoints": 356
},
{
"login": "CzarStories",
"leaguePoints": 568
},
{
"login": "GottaSaiyan",
"leaguePoints": 598
},
{
"login": "Mountaintrid",
"leaguePoints": 785
}
],
[
{
"login": "Rectionom",
"leaguePoints": 930
},
{
"login": "JoshChase",
"leaguePoints": 931
},
{
"login": "DreamLess",
"leaguePoints": 956
},
{
"login": "BlondiePlanet",
"leaguePoints": 1045
}
],
[
{
"login": "Breakingbing",
"leaguePoints": 1056
},
{
"login": "Goldenelox",
"leaguePoints": 1130
},
{
"login": "SaiyanBroadway",
"leaguePoints": 1432
},
{
"login": "BoostScooby",
"leaguePoints": 1476
}
]
]