Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mieszarka synonimów
atomas
post 18.06.2018, 09:04:30
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2010

Ostrzeżenie: (0%)
-----



witajcie

znalaazłem w sieci taki generator tekstów
liderman

autor twierdzi że wszystko powinno działać, a mi urywa teksty, nie losuje całego zdania, tylko bliżej nieokreślone fragmenty:

  1. function getRandomPart($text)
  2. {
  3. $openLevel = 0;
  4. $lastPos = 0;
  5. $isIgnore = false;
  6. $parts = array();
  7. $textLen = mb_strlen($text, 'UTF-8');
  8. for ($i = 0; $i < $textLen; $i++) {
  9. $currentChar = mb_substr($text, $i, 1, 'UTF-8');
  10. if ($currentChar === '{') {
  11. $openLevel++;
  12. $isIgnore = true;
  13. continue;
  14. }
  15.  
  16. if ($currentChar === '}') {
  17. $openLevel--;
  18. if ($openLevel === 0) {
  19. $isIgnore = false;
  20. }
  21.  
  22. continue;
  23. }
  24.  
  25. if ($isIgnore === true) {
  26. continue;
  27. }
  28.  
  29. if ($currentChar === '|') {
  30. $parts[] = mb_substr($text, $lastPos, ($i - $lastPos), 'UTF-8');
  31. $lastPos = $i + 1;
  32. }
  33. }
  34.  
  35. $parts[] = mb_substr($text, $lastPos, null, 'UTF-8');
  36.  
  37. return $parts[array_rand($parts)];
  38. }
  39.  
  40.  
  41. function generate($text)
  42. {
  43. $startSafePos = 0;
  44. $startPos = 0;
  45. $endPos = 0;
  46. $openLevel = 0;
  47. $isFind = false;
  48. $result = '';
  49. $textLen = mb_strlen($text, 'UTF-8');
  50. for ($i = 0; $i < $textLen; $i++) {
  51. if (mb_substr($text, $i, 1, 'UTF-8') === '{') {
  52. if ($openLevel === 0) {
  53. $startPos = $i;
  54. $result .= mb_substr($text, $startSafePos, $startPos - $startSafePos, 'UTF-8');
  55. }
  56.  
  57. $openLevel++;
  58. continue;
  59. }
  60.  
  61. if (mb_substr($text, $i, 1, 'UTF-8') === '}') {
  62. $openLevel--;
  63.  
  64. if ($openLevel === 0) {
  65. $isFind = true;
  66. $endPos = $i;
  67.  
  68. $startSafePos = $i + 1;
  69.  
  70. $result .= generate(
  71. getRandomPart(
  72. mb_substr($text, $startPos + 1, $endPos - ($startPos + 1), 'UTF-8')
  73. )
  74. );
  75.  
  76. continue;
  77. }
  78. }
  79. }
  80.  
  81. if ($isFind === false) {
  82. return $text;
  83. }
  84.  
  85. return $result . mb_substr($text, $endPos + 1, null, 'UTF-8');
  86. }
  87. echo generate("{Good {morning|evening|day}|Goodnight|Hello}, {friend|brother}! {How are you|What's new with you}?");



wydaje mi się, że autor strywializował problem, ale może ktoś na forum wie jak poprawić te metody (wyłowiłem funkcje metod z klasy), albo podpowie mi dobry algorytm do tego, bo ja od kilku dni nad tym siedzę i nie mam pomysłu,
udało mi się tylko wymyślić walidację tego typu tekstów
Go to the top of the page
+Quote Post
nospor
post 18.06.2018, 09:09:09
Post #2





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Czemu nie uzyjesz kodu autora jako calosc tylko wyciales pare metod z klasy i na nich dzialasz? Nie sadzisz ze najzwyklej w swiecie popelniles blad podczas wycinania??


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
atomas
post 18.06.2018, 11:38:15
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2010

Ostrzeżenie: (0%)
-----


Oczywiście, że testowałem cały kod i efekty są takie same, raczej niemożliwe, żeby klasa się źle odpaliła
Go to the top of the page
+Quote Post
nospor
post 19.06.2018, 16:49:22
Post #4





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Ja tam pobralem te klase i odpalilem podane tam przyklady i jakos wszystko dziala. Autor stworzyl tez testy i tez dzialaja wiec raczej ty cos tam namotales.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
atomas
post 19.06.2018, 22:57:37
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2010

Ostrzeżenie: (0%)
-----


Dziękuję za pochylenie się nad tym.
Może winą jest moja wersja PHP. Ja mam 5.3 autor wymaga 5.4.9

Może ktoś da linka do jakiegoś tutoriala jak korzystać z takich testów. ja w obiektowym jestem bardziej niż początkujący.
Go to the top of the page
+Quote Post
nospor
post 20.06.2018, 09:34:05
Post #6





Grupa: Moderatorzy
Postów: 36 441
Pomógł: 6290
Dołączył: 27.12.2004




Nie mozesz zrobic upgrade php? 5.3 to dosc stary....

Co do testow to jest to phpunit. Tobie i tak to do niczego nie potrzebne tutaj wiec po co se glowe zawracasz testami? Testy tylko by pokazac ze dziala i dziala. Wina pewnie w tej wersji php.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
atomas
post 20.06.2018, 09:44:54
Post #7





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 22.01.2010

Ostrzeżenie: (0%)
-----



tak, po podniesieniu php na 5.5 zadziałała zarówno klasa jak i wyjęta z niej sama metoda funkcyjnie
dziękuję, bo sam bym się poddał
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 14:04