Macro / Script для поиска лучшей настольной игры - Google Spreadsheet - PullRequest
1 голос
/ 22 октября 2019

У меня есть электронная таблица, которую я создал со своими друзьями, в которой есть коллекция настольных игр и информация о каждой игре (примерное время, необходимое для игры, минимум людей, максимум людей и т. Д.)
Я хотел бы создать страницугде я могу ввести количество людей, которые у меня есть со мной, и количество времени, которое я хочу потратить на игру.
Когда я нажму клавишу ввода, скрипт запустится и выдаст мне список игр, подходящих для данной игры. количество игроков и время, которое я ввел.

Вот ссылка на таблицу.

https://docs.google.com/spreadsheets/d/1AFTr_ji5iz8BJU9_OkZ1Xhfb9hg9ARAaRXfdVx2Y8pU/edit?usp=sharing

1 Ответ

0 голосов
/ 22 октября 2019

Предисловие

Это интересный вопрос, который может быстро увеличиться в объеме.

В то время как количество игроков у вас является «фиксированным» значением, предполагаемое время - нет.

Решение

Когда вы говорите «подходящие игры», это означает, что все игры, удовлетворяющие следующим условиям:

  • Имеют 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;
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...