Merge branch 'task/tiebreak-arocut1' into develop

This commit is contained in:
Jeroen De Meerleer 2019-05-30 08:33:57 +02:00
commit 0ddc62c0b7
Signed by: JeroenED
GPG Key ID: 28CCCB8F62BFADD6
4 changed files with 12 additions and 9 deletions

View File

@ -70,7 +70,7 @@ abstract class Player
/**
* @return string[]
*/
public function getIds(): array
public function getIds(): ?array
{
return $this->Ids;
}
@ -88,7 +88,7 @@ abstract class Player
/**
* @return int[]
*/
public function getElos(): array
public function getElos(): ?array
{
return $this->Elos;
}

View File

@ -458,8 +458,6 @@ class Pairtwo6 extends Pairtwo6Model implements ReaderInterface
$player->setBinaryData("TieMatch", $this->readData('Int', substr($swscontents, $offset, $length)));
$offset += $length;
$player->setElos($elos);
$player->setIds($ids);
$this->getTournament()->addPlayer($player);
}
// PlayerNames

View File

@ -141,20 +141,22 @@ abstract class Tiebreaks extends Tournament
* @param Player $player
* @return float
*/
protected function calculateAverageRating(Player $player)
protected function calculateAverageRating(Player $player, int $cut = 0)
{
$pairings = $player->getPairings();
$totalrating = 0;
$totalopponents = 0;
$allratings = [];
foreach ($pairings as $pairing) {
if (array_search($pairing->getResult(), self::NotPlayed) === false) {
$toadd = $pairing->getOpponent()->getElos()['home'];
if ($toadd != 0) {
$totalrating += $toadd;
$totalopponents++;
$allratings[] = $toadd;
}
}
}
return round($totalrating / $totalopponents);
sort($allratings);
$allratings = array_slice($allratings, $cut);
return round(array_sum($allratings) / count($allratings));
}
}

View File

@ -264,7 +264,7 @@ class Tournament extends Tiebreaks
/**
* @return float|bool
* @return float|null
*/
private function calculateTiebreak(Tiebreak $tiebreak, Player $player, int $tbkey = 0): ?float
{
@ -293,6 +293,9 @@ class Tournament extends Tiebreaks
case Tiebreak::Aro:
return $this->calculateAverageRating($player);
break;
case Tiebreak::AroCut:
return $this->calculateAverageRating($player, 1);
break;
default:
return null;
}