From 7ae65065395c1a79ba5beafc0120486c529464ed Mon Sep 17 00:00:00 2001 From: adrien Date: Mon, 5 May 2025 16:57:29 +0200 Subject: [PATCH] WIP --- Grille.php | 14 +++------- Trie.php | 76 ++++++++++++++---------------------------------------- index.php | 2 +- 3 files changed, 25 insertions(+), 67 deletions(-) diff --git a/Grille.php b/Grille.php index d7c203b..00892bb 100644 --- a/Grille.php +++ b/Grille.php @@ -2,9 +2,6 @@ include_once "dico.php"; -const MAX_ESSAIS = 0; - - class Grille implements Iterator, ArrayAccess { public $grille; public $hauteur; @@ -34,7 +31,7 @@ class Grille implements Iterator, ArrayAccess { $this->nb_positions = count($this->positions); mt_srand($id == "" ? null : crc32($id)); - $this->grilles = $this->generateur(0); + $this->grilles = $this->gen_grilles(); } public function get_ligne($y, $largeur) @@ -53,7 +50,7 @@ class Grille implements Iterator, ArrayAccess { return $colonne; } - public function generateur($i, $lettres_suivantes_ligne = NULL) + public function gen_grilles($i = 0, $lettres_suivantes_ligne = NULL) { if ($i == $this->nb_positions) { yield $this; @@ -62,9 +59,7 @@ class Grille implements Iterator, ArrayAccess { [$x, $y] = $this->positions[$i]; - if ($x) { - $lettres_suivantes_ligne = $lettres_suivantes_ligne->noeud[$this->grille[$y][$x-1]]; - } else { + if ($x == 0) { $lettres_suivantes_ligne = $this->lettres_suivantes[$this->largeur]; } @@ -78,7 +73,6 @@ class Grille implements Iterator, ArrayAccess { usort($lettres_communes, function ($a, $b) { return mt_rand(-1, 1); }); - if (MAX_ESSAIS) $lettres_communes = array_slice($lettres_communes, 0, MAX_ESSAIS); foreach ($lettres_communes as $lettre) { $this->grille[$y][$x] = $lettre; @@ -108,7 +102,7 @@ class Grille implements Iterator, ArrayAccess { } if ($i < $this->nb_positions) { - yield from $this->generateur($i + 1, $lettres_suivantes_ligne); + yield from $this->gen_grilles($i + 1, $lettres_suivantes_ligne->noeud[$lettre]); } else { yield $this; } diff --git a/Trie.php b/Trie.php index d5cf94d..4b25925 100644 --- a/Trie.php +++ b/Trie.php @@ -1,13 +1,22 @@ noeud[$cle])) $this->noeud[$cle] = new Trie(); + if (count($cles)) { + $this->noeud[$cle]->offsetSet($cles, $valeur); + } else { + $this->noeud[$cle] = $valeur; + } + } // ArrayAccess public function offsetExists($cles): bool { @@ -18,7 +27,7 @@ class Trie implements ArrayAccess, Countable //, Iterator if (count($cles)) { return $this->noeud[$cle]->offsetExists($cles); } else { - return isset($this->noeud[$cles]); + return isset($this->noeud[$cles[0]]); } } @@ -35,72 +44,27 @@ class Trie implements ArrayAccess, Countable //, Iterator } } - public function offsetSet($cles, $valeur): void { - if (!count($cles)) { - throw new \OutOfBoundsException("Liste de clés vide."); - return; - } - $cle = array_shift($cles); - if (!isset($this->noeud[$cle])) $this->noeud[$cle] = new Trie(); - if (count($cles)) { - $this->noeud[$cle]->offsetSet($cles, $valeur); - } else { - $this->noeud[$cle] = $valeur; - } - $this->nb_branches++; - } - public function offsetUnset($cles): void { - if ($this->offsetExists(cles)) { + if ($this->offsetExists($cles)) { $cle = array_shift($cles); if (count($cles)) { $this->noeud[$cle]->offsetUnset($cles); } else { unset($this->noeud[$cle]); } - $this->nb_branches--; } } - // Countable - public function count(): int { - return $this->nb_branches; - } - -/* - // Iterator - public function marcheurs(): generator { + // IteratorAggregate + public function getIterator(): Generator { foreach ($this->noeud as $cle => $branche) { if ($branche instanceof Trie) { foreach($branche as $sous_cles => $feuille) { - $this->cles_en_cours = [$cle, ...$sous_cles]; - yield $feuille; + yield [$cle, ...$sous_cles] => $feuille; } } else { - $this->cles_en_cours = [$cle]; - yield $branche; + yield $cle => $branche; } } } - - public function current(): mixed { - return $this->marcheur->current(); - } - - public function key(): array { - return $this->cles_en_cours; - } - - public function next(): void { - $this->marcheur->next(); - } - - public function rewind(): void { - $this->marcheur = $this->marcheurs(); - } - - public function valid(): bool { - return $this->marcheur->valid(); - } -*/ } \ No newline at end of file diff --git a/index.php b/index.php index cd7b4d8..2986d4d 100644 --- a/index.php +++ b/index.php @@ -75,7 +75,7 @@ if ($grille->valid()) { - ⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜ + □□□□■□□□□□□□