setName('magicword:generate-grid')
->setDescription('generate grids')
->addArgument('languageName', InputArgument::REQUIRED)
->addArgument('number', InputArgument::REQUIRED)
->addArgument('threshold', InputArgument::OPTIONAL)
->addOption('custom', 'c', InputOption::VALUE_NONE)
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$em = $this->getContainer()->get('doctrine')->getEntityManager('default');
$gridManager = $this->getContainer()->get('mw_manager.grid');
$letterManager = $this->getContainer()->get('mw_manager.letter_language');
$customWeightedLetters = $this->getContainer()->getParameter('custom_letters');
$number = $input->getArgument('number');
$languageName = $input->getArgument('languageName');
$threshold = $input->getArgument('threshold');
$custom = $input->getOption('custom');
$totalFormCount = 0;
$keptGrid = 0;
while ($keptGrid < $number) {
$customLetters = ($custom)
? $letterManager->getCustomWeigth($customWeightedLetters)
: $customLetters = null;
$language = $em->getRepository('LexiconBundle:Language')->findOneByName($languageName);
$timeStart = microtime(true);
$grid = $gridManager->generate($language, $customLetters);
$timeEnd = microtime(true);
$executionTime = round($timeEnd - $timeStart, 2);
$formCount = count($grid->getFoundableForms());
if ($threshold && $formCount < $threshold) {
$output->writeln('A grid has been generated but does not contains enough forms ('.$formCount.'). (generated in '.$executionTime.' sec.)');
$gridId = $grid->getId();
$squares = $em->getRepository('MagicWordBundle:Square')->findByGrid($gridId);
$foundableForms = $em->getRepository('MagicWordBundle:FoundableForm')->findByGrid($gridId);
foreach ($squares as $square) {
$em->remove($square);
}
foreach ($foundableForms as $foundableForm) {
$em->remove($foundableForm);
}
$em->remove($grid);
$em->flush();
} else {
$keptGrid++;
$output->writeln('('.$keptGrid.') A grid has been generated and contains ('.$formCount.') forms (generated in '.$executionTime.' sec.)');
$totalFormCount += $formCount;
}
$em->clear();
}
$average = round($totalFormCount / $keptGrid);
$output->writeln('Done ! (average form count: '.$average.')');
}
}