fork(1) download
  1. <?php
  2.  
  3. /* «Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
  4.  
  5.   нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
  6.   «жи» или «ши» написано с буквой ы
  7.   в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
  8.   в тексте есть слова «а» или «но» без запятой перед ними.
  9.   (можешь добавить еще несколько правил, если хорошо знаешь русский язык)
  10.  
  11. В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).*/
  12.  
  13. $matches = array();
  14. $medium = "";
  15. $text = "Ты а нонимен сдесь ";
  16. $regexp = array(
  17. "Предложения начинаются с заглавной буквы.\n" => "/[.] [а-яё]/",
  18. "Нет слова координально, но есть кардинально.\n" => "/координально/ui",
  19. "Нет слова сдесь, но есть здесь.\n" => "/сдесь/ui",
  20. "Приставки з- не бывает.\n" => "/здела[лню]/ui",
  21. "Жи/ши пиши с буквой И.\n" => "/[жщ]ы/ui",
  22. "чк/чн без Ь.\n" => "/чь[кн]/u",
  23. "Перед частицами 'а' и/или 'но' ставится запятая.\n" => "/[а-яё] (а|но) /u",
  24. "Предложение должно кончатся знаком препинания.\n" => "/.*[а-я0-9 ]$/u"
  25. );
  26. $n = 0;
  27. foreach ($regexp as $solution => $rule) {
  28. if (preg_match_all($rule, $text, $matches)){
  29. $medium = "->".$matches[0][0]."<-";
  30. $txt = str_replace($matches[0][0], $medium, $text);
  31. // preg_replace ($matches[0][0], $medium, $txt);
  32. echo $txt." || ".$solution;
  33. $n++;
  34. }
  35. }
  36. echo "Количество ошибок: $n\n";
  37. if ($n == 0) {
  38. echo "Вы молодец!";
  39. } elseif ($n <= count($regexp)) {
  40. echo "Вернитесь в школу.";
  41. } else {
  42. echo "Вернитесь в детсад.";
  43. }
  44. ?>
Success #stdin #stdout 0.02s 20520KB
stdin
Standard input is empty
stdout
Ты а нонимен ->сдесь<-  || Нет слова сдесь, но есть здесь.
Т->ы а <-нонимен сдесь  || Перед частицами 'а' и/или 'но' ставится запятая.
->Ты а нонимен сдесь <- || Предложение должно кончатся знаком препинания.
Количество ошибок: 3
Вернитесь в школу.