/** * @inheritDoc */ public function filter(RoundGearsInterface $previousRoundGears) { $leaderBoard = $previousRoundGears->getLeaderBoard(); if (count($leaderBoard->getGroupNumbers()) % 2 != 0) { throw new \RuntimeException('input reduce cuts the number of groups in half and can therefore only work with even group numbers.'); } $result = array(); $newGroupCount = count($leaderBoard->getGroupNumbers()) / 2; for ($n = 0; $n < $newGroupCount; ++$n) { $result[] = array(); } // foreach group // take first player and put into group%2 // repeat ... -> advance $remapGroupNumber = function ($groupNumber) use($newGroupCount) { return $groupNumber % $newGroupCount; }; $advance = $previousRoundGears->getRound()->getSetup()->getAdvance(); // -1 = all foreach ($leaderBoard->getEntries($advance) as $groupNumber => $groupedEntries) { /** @var LeaderBoardEntryInterface[] $groupedEntries */ foreach ($groupedEntries as $entry) { $result[$remapGroupNumber($groupNumber)][] = $entry->getPlayer(); } } return $result; }
/** * @inheritDoc */ public function filter(RoundGearsInterface $previousRoundGears) { $advance = $previousRoundGears->getRound()->getSetup()->getAdvance(); // -1 = all $leaderBoardEntries = $previousRoundGears->getLeaderBoard()->getEntries($advance); $result = array(0 => array()); foreach ($leaderBoardEntries as $groupNumber => $groupedEntries) { /** @var LeaderBoardEntryInterface[] $groupedEntries */ foreach ($groupedEntries as $entry) { $result[0][] = $entry->getPlayer(); } } return $result; }
/** * @inheritDoc */ public function filter(RoundGearsInterface $previousRoundGears) { // create one group for all 1st // create one group for all 2nd // ... // until reached advance $advance = $previousRoundGears->getRound()->getSetup()->getAdvance(); // -1 = all $leaderBoardEntries = $previousRoundGears->getLeaderBoard()->getEntries($advance); $result = array(); foreach ($leaderBoardEntries as $groupNumber => $groupedEntries) { /** @var LeaderBoardEntryInterface[] $groupedEntries */ foreach ($groupedEntries as $place0 => $entry) { $result[$place0][] = $entry->getPlayer(); } } return $result; }
/** * @inheritDoc */ public function filter(RoundGearsInterface $previousRoundGears) { if (!$previousRoundGears->isRoundCompleted()) { throw new \RuntimeException(); } $advance = $previousRoundGears->getSetup()->getAdvance(); $leaderBoard = $previousRoundGears->getLeaderBoard(); $output = array(); foreach ($leaderBoard->getEntries() as $groupNumber => $entries) { /** @var LeaderBoardEntryInterface[] $entries */ $output[$groupNumber] = array(); foreach ($entries as $entry) { if (-1 != $advance && count($output[$groupNumber]) >= $advance) { break; } $output[$groupNumber][] = $entry->getPlayer(); } } return $output; }
/** * @inheritDoc */ public function filter(RoundGearsInterface $previousRoundGears) { $advance = $previousRoundGears->getRound()->getSetup()->getAdvance(); // -1 = all $leaderBoard = $previousRoundGears->getLeaderBoard(); $result = array(); $groupNumbers = $leaderBoard->getGroupNumbers(); foreach ($groupNumbers as $groupNumber) { $result[$groupNumber] = array(); } $groupNumberStepped = function ($step) use($groupNumbers) { $it = new \ArrayIterator($groupNumbers); $it->seek($step % $it->count()); return $it->current(); }; $players = $leaderBoard->getEntries($advance); $step = 0; foreach ($groupNumbers as $groupNumber) { $groupAdvance = -1 == $advance ? count($players[$groupNumber]) : $advance; for ($i = 0; $i < $groupAdvance; ++$i) { $result[$groupNumberStepped($step + $i)][] = $players[$groupNumber][$i]->getPlayer(); } $step += $this->getSteps(); } // $step = 0; // for ($i = 0; $i < $advance; ++$i) { // foreach ($groupNumbers as $groupNumber) { // $result[$groupNumberStepped($step+1)][] = $players[$groupNumber][$i]; // } // // $step += $this->getSteps(); // } // dump($players, $result); // TODO implement input step : filter // throw new \Exception('TODO'); return $result; }