function executeProcess(array $argv) { $rebuses = DirItem::inst(__DIR__, 'rebuses.txt')->getTextFileAdapter(); $MR = PsMathRebus::inst(); $result = array(); foreach ($rebuses->getLines() as $rebus) { if (starts_with($rebus, '#')) { continue; //--- } $rebus = $MR->normalize($rebus); switch ($MR->rebusState($rebus)) { case PsMathRebus::STATE_HAS_ANSWERS: dolog("Take rebus answers: {$rebus}"); $result[$rebus] = $MR->rebusAnswers($rebus); break; case PsMathRebus::STATE_NO_ANSWERS: dolog("Skipping rebus: {$rebus}"); $result[$rebus] = array(); break; case PsMathRebus::STATE_NOT_REGISTERED: dolog("Processing rebus: {$rebus}"); $result[$rebus] = PsMathRebusSolver::solve($rebus); break; } } $ansDI = DirItem::inst(__DIR__, 'answers.txt'); $ansDI->remove(); foreach ($result as $rebus => $answers) { $ansDI->writeLineToFile($rebus); foreach ($answers as $answer) { $ansDI->writeLineToFile($answer); } $ansDI->writeLineToFile(); } /* * Если передан параметр копирования, то скопируем файл после обработки */ if (1 == array_get_value(1, $argv, 0)) { dolog('Copy from [{}] to [{}]', $ansDI->getRelPath(), $MR->getAnswersDI()->getRelPath()); $ansDI->copyTo($MR->getAnswersDI()->getAbsPath()); } }
function smarty_function_chis_rebus($params, Smarty_Internal_Template &$smarty) { $params = ArrayAdapter::inst($params); /* * Текст ребуса */ $rebus = $params->str('text'); if ($rebus) { return "<div class=\"ps-math-rebus-holder\">{$rebus}</div>"; } $rebus = $params->str('ans'); if ($rebus) { $answers = PsMathRebus::inst()->rebusAnswers($rebus); if (is_array($answers)) { foreach ($answers as $ans) { echo "<div class=\"ps-math-rebus-holder\">{$ans}</div> "; } } else { return PsHtml::spanErr($answers); } } }
<?php /* * Работа с ребусами. * Всё идёт по следующему сценарию: * Рядом с классом PsMathRebus лежит файл с ребусами и ответами на них: kit...rebuses.txt * Процесс берёт файл rebuses.txt с ребусами и обрабатывает его, учитывая, какие ребусы уже были обработаны. * По факту обработки строится файл с ответами и копируется на место kit...rebuses.txt */ require_once '../ToolsResources.php'; $CALLED_FILE = __FILE__; $LOGGERS_LIST[] = 'PsMathRebusSolver'; $rebuses = DirItem::inst(__DIR__, 'rebuses.txt')->getTextFileAdapter(); $MR = PsMathRebus::inst(); $result = array(); foreach ($rebuses->getLines() as $rebus) { if (starts_with($rebus, '#')) { continue; } $rebus = $MR->normalize($rebus); switch ($MR->rebusState($rebus)) { case PsMathRebus::STATE_HAS_ANSWERS: dolog("Take rebus answers: {$rebus}"); $result[$rebus] = $MR->rebusAnswers($rebus); break; case PsMathRebus::STATE_NO_ANSWERS: dolog("Scipping rebus: {$rebus}"); $result[$rebus] = array(); break; case PsMathRebus::STATE_NOT_REGISTERED: dolog("Processing rebus: {$rebus}");
/** @return PsMathRebus */ public static function solve($rebus, $skipFirstChars = true) { $rebus = PsMathRebus::inst()->normalize($rebus); $solver = new PsMathRebusSolver(); $solver->SCIP_FIRST_CHARS = $skipFirstChars; return $solver->doSolve($rebus); }