Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> szukanie wyrazu posiadajacego dane litery, slownik scrabble
bercow
post
Post #1





Grupa: Zarejestrowani
Postów: 156
Pomógł: 11
Dołączył: 25.12.2005

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


Mamy tablice $slowo (na koncu bedzie pewnie duuuuzo wieksza, i jakies wprowadzone litery $litery, jak znalesc wszystkie slowa ktore mozna ulozyc z podanych liter, w tej chwili dostaje 'jak nizej', nie wiem czemu czesc pomija
  1. katarek - a
  2. katarek - a
  3. katarek - r
  4. zak - z
  5. zak - a
  6. rak - r
  7. rak - a
  1. <?php
  2.  
  3. $slowo = array ("katarek", "zak", "rak");
  4. $litery = array ("k", "a", "z", "m", "r");
  5.  
  6. for ($j=0;$j<count($slowo);$j++) {
  7. $litera = $slowo[$j];
  8.  
  9. for ($i=0;$i <= strlen($litera);$i++) {
  10. $key = array_search($litera[$i], $litery);
  11. if ($key == TRUE) {
  12. echo $slowo[$j]." - ".$litera[$i]."<br />";
  13. }
  14. }
  15. }
  16. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
minolone
post
Post #2





Grupa: Zarejestrowani
Postów: 141
Pomógł: 24
Dołączył: 21.06.2008

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


Kiedyś używałem takiej klasy do Szufelki (coś jak scrabble) w której przeszukiwałem słownik "sjp"
Tyle że ona jest bez powtórzeń, i polecam się zastosować do rad ~Crozin-a, robiłem to na takiej samej zasadzie,

Cytat z posta z 2011r.
Cytat
Ja akurat używałem tej klasy do gry "szufelka" generowałem sobie słowa od 3 do 7 liter tak ze to nie robiło jakiegoś strasznego zamulenia, i wszystko było oparte o bazę danych,
skracając wyszukiwanie weź pod uwagę to ze czasami z jednego słowa można ułożyć tez inne, np: masło, słoma, i te literki są już takie same. takich słówek jest w tym słowniku bardzo dużo.
wiec zasada działanie była trochę u mnie inna nie przeszukiwałem słówek lecz miałem słowa ułożone w kolejności alfabetycznej w bazie czyli np: masło to miałem 'ałmos' ze słomy litery są takie same, miałem je zahashowane (sha1) i porobione dowiązania, jeden hash kilka słówek, wyszukując po hashu zaoszczędzałem sporo czasu. możesz pokombinować na różne sposoby, odciążając trochę serwer nie musisz od razu wyszukiwać slow składających się z 3, 4, 5, 6, 7, 8, 9 znaków tylko osobno, weź pod uwagę tez ze w grze w scrabble rzadko układasz bardzo długie słowa, wiec słowa np które maja powyżej 10 czy tam więcej znaków nie będą ci potrzebne wiec możesz je usunąć, a tym samym odchudzisz plik o prawie polowe. zaglądając w ten plik sjp widziałeś pewnie jakie tam są słowa.

  1. <?php
  2. class Combinations implements Iterator
  3. {
  4. protected $c = null;
  5. protected $s = null;
  6. protected $n = 0;
  7. protected $k = 0;
  8. protected $pos = 0;
  9.  
  10. function __construct($s, $k) {
  11. if(is_array($s)) {
  12. $this->s = array_values($s);
  13. $this->n = count($this->s);
  14. } else {
  15. $this->s = (string) $s;
  16. $this->n = strlen($this->s);
  17. }
  18. $this->k = $k;
  19. $this->rewind();
  20. }
  21. function key() {
  22. return $this->pos;
  23. }
  24. function current() {
  25. $r = array();
  26. for($i = 0; $i < $this->k; $i++)
  27. $r[] = $this->s[$this->c[$i]];
  28. return is_array($this->s) ? $r : implode('', $r);
  29. }
  30. function next() {
  31. if($this->_next())
  32. $this->pos++;
  33. else
  34. $this->pos = -1;
  35. }
  36. function rewind() {
  37. $this->c = range(0, $this->k);
  38. $this->pos = 0;
  39. }
  40. function valid() {
  41. return $this->pos >= 0;
  42. }
  43. //
  44. protected function _next() {
  45. $i = $this->k - 1;
  46. while ($i >= 0 && $this->c[$i] == $this->n - $this->k + $i)
  47. $i--;
  48. if($i < 0)
  49. return false;
  50. $this->c[$i]++;
  51. while($i++ < $this->k - 1)
  52. $this->c[$i] = $this->c[$i - 1] + 1;
  53. return true;
  54. }
  55. }
  56.  
  57. $aaa = array('k', 'a', 'z', 'm', 'r');
  58. sort($aaa);
  59.  
  60. //Użycie klasy new Combinations('słówka, literki', 'wynik z ilu liter')
  61.  
  62. foreach(new Combinations($aaa, 3) as $k => $v)
  63. echo $k + 1, ' ', implode(',', $v), "<br />";
  64.  
  65. Co da wynik:
  66. 1 a,k,m
  67. 2 a,k,r
  68. 3 a,k,z
  69. 4 a,m,r
  70. 5 a,m,z
  71. 6 a,r,z
  72. 7 k,m,r
  73. 8 k,m,z
  74. 9 k,r,z
  75. 10 m,r,z
  76. ?>


Ten post edytował minolone 15.07.2012, 15:16:30
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 11.10.2025 - 12:48