Exemple #1
0
 /**
  * @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 getRound()
 {
     if (null !== $this->previousRound && !$this->previousRound->isRoundCompleted()) {
         // previous round not complete, initializing this round would probably fail
         return null;
     }
     if (!$this->isRoundInitialized) {
         $this->initializeRoundEntity($this->round);
         $this->isRoundInitialized = true;
     }
     return $this->round;
 }
Exemple #3
0
 /**
  * @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;
 }
Exemple #4
0
 /**
  * @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;
 }
Exemple #5
0
 /**
  * @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;
 }
Exemple #6
0
 /**
  * @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;
 }