Объекты и сортировкиСортировкиmedium

Sports League Table Ranking

Вы организуете турнир по round-robin схеме. Каждая команда играет с каждой. Победа одной игре дает 2 очка, ничья — 1 очко. После некоторого количества игр вы хотите узнать, кто находится на каком месте в турнирной таблице. Для упорядочивания команд используются следующие критерии (в порядке важности):

  • Очки
  • Разница по количеству голов (забитые минус пропущенные)
  • Количество забитых голов

Если у двух команд одинаковое количество очков, то мы сравниваем их по разнице голов. Если одинаковая разница, то по количеству забитых голов. Если все три критерия одинаковые — команды делят общее место. Например, если играет 4 команды, а лучшие две по всем критериям равны, то будет да первых места, одно третье и одно четвертое.

Аргументы функции

  • number — количество команд в лиге
  • games — массив из четырех значений, описывающий результат игры в виде [TeamA, TeamB, GoalA, GoalB] (команда TeamA играла с командой TeamB, TeamA забила GoalA, TeamB забила GoalB голов).

Возвращаемое значение

  • Массив позиций в турнирной таблице. На i-ом месте стоит позиция i-ой команды.

Пример

Предположим, играет 6 команд.

const number = 6; const games = [ [0, 5, 2, 2], // Team 0 - Team 5 => 2:2 [1, 4, 0, 2], // Team 1 - Team 4 => 0:2 [2, 3, 1, 2], // Team 2 - Team 3 => 1:2 [1, 5, 2, 2], // Team 1 - Team 5 => 2:2 [2, 0, 1, 1], // Team 2 - Team 0 => 1:1 [3, 4, 1, 1], // Team 3 - Team 4 => 1:1 [2, 5, 0, 2], // Team 2 - Team 5 => 0:2 [3, 1, 1, 1], // Team 3 - Team 1 => 1:1 [4, 0, 2, 0], // Team 4 - Team 0 => 2:0 ];

Тогда итоговая таблица будет выглядеть так:

┌──────┬───────┬──────┬───────┬──────┐ │ team │ score │ diff │ goals │ rank │ ├──────┼───────┼──────┼───────┼──────┤ 45451542623414302-23412-23421-326└──────┴───────┴──────┴───────┴──────┘ const ranks = [4, 4, 6, 3, 1, 2] // teams → 0 1 2 3 4 5