Предисловие
Это интересный вопрос, который может быстро увеличиться в объеме.
В то время как количество игроков у вас является «фиксированным» значением, предполагаемое время - нет.
Решение
Когда вы говорите «подходящие игры», это означает, что все игры, удовлетворяющие следующим условиям:
- Имеют
Min. Player >= your player input
- Иметь
Max. Player <= your player input
- Иметь
Est. Time <= your time input
Где все становится интересно
Хотя это можно сделать довольно простым способом, я считаю, что это принесет пользувы, если вы оценили эти игры в зависимости от того, насколько они «подходят».
Для этого вы можете использовать систему сортировки, основанную на некоторых математических формулах:
- Поскольку вызнать, что все возвращенные предметы имеют оценочное время, при максимальном вводе, вы можете создать счет в виде
(currentItemTime/MaximumTime) * timeScoreWeight
- Кроме того, вы можете изменить счет в зависимости от того, сколько сеансов игры можетиграть в это время, т.е. с временным интервалом 1час, в игру А можно играть один раз, а в игру В - дважды. Если вы учитываете рейтинг своего игрока, это можно использовать для поиска оптимальной игры для вашей ситуации на основе прошлых результатов. Это также создало бы проблему, когда новые / без рейтинга игры быстро падают на дно.
- Поскольку у вас есть показатель среднего рейтинга, вы также можете добавить его кформула как
currentItemRating/5 * ratingWeight
. - Если вы хотите учесть гибкие размеры столов, то есть вы хотите запускать две игры одновременно с одинаковым количеством людей, вы также можете найти, какие комбинации игр существуют, где
numberOfPlayer <= (x+y)
где x равно a number >= minPlayer and <=maxPlayer
для игры A и y равно a number >= minPlayer and <=maxPlayer
для игры B.
Если вы сложите все эти оценки,затем вы можете отсортировать по этому номеру и получить список оптимальных игр, отсортированных от лучших к худшим в вашей ситуации.
Возвращение к земле
Хотя мечтать всегда хорошо, я полагаю, выхочу, чтобы что-то закончилось довольно быстро, поэтому вот код, с которого можно начать:
function test() {
var gamesThatFitCriteria = findGames(4,50);
}
function findGames(player, timeInMinutes) {
var games = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
games.shift(); //Remove first row
games.shift(); //Remove second row
var result = [];
for (var i=0; i<games.length; i++) {
var currentGame = games[i];
var time = currentGame[2];
var minPlayer = currentGame[3];
var maxPlayer = currentGame[4];
if (time<=timeInMinutes && player >= minPlayer && player <= maxPlayer) {
//This is eligible.
result.push(currentGame);
}
}
return result;
}
Надеюсь, это поможет!