fork download
  1. <?php
  2.  
  3. // your code goes here
  4.  
  5.  
  6. $text1 = "Кажется, нас обнаружили! Надо срочно уходить отсюда, пока не поздно. Бежим же скорее!";
  7. $text2 = "Ну, прости меня! Не хотела я тебе зла сделать; да в себе не вольна была. Что говорила, что делала, себя не
  8. помнила.";
  9. $text3 = "Идет гражданская война. Космические корабли повстанцев, наносящие удар с тайной базы, одержали первую победу,
  10. в схватке со зловещей Галактической Империей.";
  11.  
  12. function makeFirstCharLowerCase(string $word): string
  13. {
  14. return mb_strtolower(mb_substr($word, 0, 1)) . mb_substr($word, 1);
  15. }
  16.  
  17. function makeFirstCharUpperCase(string $word): string
  18. {
  19. return mb_strtoupper(mb_substr($word, 0, 1)) . mb_substr($word, 1);
  20. }
  21.  
  22. /**
  23.  * @return array<string>
  24.  * @throws Exception
  25.  */
  26. function makeSentences(string $text): array
  27. {
  28. $sentences = preg_split('/[.!?]/', $text, -1, PREG_SPLIT_NO_EMPTY);
  29. if (false === $sentences) {
  30. throw new Exception(preg_last_error_msg());
  31. }
  32. return $sentences;
  33. }
  34.  
  35. /**
  36.  * @return array<string>
  37.  * @throws Exception
  38.  */
  39. function makeReverseWordsInSentence(string $sentence): array
  40. {
  41. $words = preg_split('/[-,;:\s]/', $sentence, -1, PREG_SPLIT_NO_EMPTY);
  42. if (false === $words) {
  43. throw new Exception(preg_last_error_msg());
  44. }
  45. return array_reverse($words);
  46. }
  47.  
  48. /**
  49.  * @throws Exception
  50.  */
  51. function makeYodaStyleText(string $text): string
  52. {
  53. $sentences = makeSentences($text);
  54. $result = '';
  55. foreach ($sentences as $sentence) {
  56. $reversedWords = makeReverseWordsInSentence($sentence);
  57. $reversedWords[0] = makeFirstCharUpperCase($reversedWords[0]);
  58. $reversedWords[count($reversedWords) - 1] = makeFirstCharLowerCase($reversedWords[count($reversedWords) - 1]);
  59. $result .= implode(' ', $reversedWords) . '. ';
  60. }
  61. return $result;
  62. }
  63.  
  64. $texts = [$text1, $text2, $text3];
  65. $yodaText = '';
  66.  
  67. try {
  68. foreach ($texts as $text) {
  69. $yodaText = makeYodaStyleText($text);
  70. echo "Йода говорит: $yodaText\n";
  71. }
  72. } catch (Exception $e) {
  73. echo "Произошла ошибка: " . $e->getMessage();
  74. }
  75.  
Success #stdin #stdout 0.04s 26168KB
stdin
Standard input is empty
stdout
Йода говорит: Обнаружили нас кажется. Поздно не пока отсюда уходить срочно надо. Скорее же бежим. 
Йода говорит: Меня прости ну. Была вольна не себе в да сделать зла тебе я хотела не. Помнила не себя делала что говорила что. 
Йода говорит: Война гражданская идет. Империей Галактической зловещей со схватке в победу первую одержали базы тайной с удар наносящие повстанцев корабли космические.