méthodes magiques

This commit is contained in:
2025-08-22 10:56:06 +02:00
parent 6635adf26a
commit d3b11df015
4 changed files with 48 additions and 36 deletions

View File

@ -52,10 +52,40 @@ class Trie implements ArrayAccess, IteratorAggregate, Countable {
} }
} }
public function arrayIterator() { // ArrayAccess
public function offsetSet($array, $valeur): void {
if (is_string($array)) {
$array = str_split($array);
}
$this->arraySet($array, $valeur);
}
public function offsetExists($array): bool {
if (is_string($array)) {
$array = str_split($array);
}
return $this->arrayExists($array);
}
public function &offsetGet($array): mixed {
if (is_string($array)) {
$array = str_split($array);
}
return $this->arrayGet($array);
}
public function offsetUnset($array): void {
if (is_string($array)) {
$array = str_split($array);
}
$this->arrayUnset($array);
}
// IteratorAggregate
public function getIterator(): Traversable {
foreach ($this->branches as $cle => $branche) { foreach ($this->branches as $cle => $branche) {
if ($branche instanceof Trie) { if ($branche instanceof Trie) {
foreach($branche->arrayIterator() as $sous_cles => $feuille) { foreach($branche->getIterator() as $sous_cles => $feuille) {
yield array_merge([$cle], $sous_cles) => $feuille; yield array_merge([$cle], $sous_cles) => $feuille;
} }
} else { } else {
@ -64,30 +94,6 @@ class Trie implements ArrayAccess, IteratorAggregate, Countable {
} }
} }
// ArrayAccess
public function offsetSet($string, $valeur): void {
$this->arraySet(str_split($string), $valeur);
}
public function offsetExists($string): bool {
return $this->arrayExists(str_split($string));
}
public function &offsetGet($string): mixed {
return $this->arrayGet(str_split($string));
}
public function offsetUnset($string): void {
$this->arrayUnset(str_split($string));
}
// IteratorAggregate
public function getIterator(): Traversable {
foreach($this->arrayIterator() as $array => $valeur) {
yield implode("", $array) => $valeur;
}
}
// Countable // Countable
public function count(): int { public function count(): int {
return $this->nb_branches; return $this->nb_branches;

View File

@ -580,7 +580,7 @@ COU S'y pendre est plus sympa que d'y mettre la corde@Thierry Larsan
COUCHETTE Vous permet, en somme, dêtre en train@Georges Perec Grâce à elle on peut être en train couenne@Tour de cochon COUCHETTE Vous permet, en somme, dêtre en train@Georges Perec Grâce à elle on peut être en train couenne@Tour de cochon
COULANT Saccorde à nœud@Lionel Leteur COULANT Saccorde à nœud@Lionel Leteur
COUP DE FOUDRE Ce qui arrive lorsque se rencontrent deux personnes très excitées, mais peu sélectives COUP DE FOUDRE Ce qui arrive lorsque se rencontrent deux personnes très excitées, mais peu sélectives
COUPEPAPIER Lame pour "les trois mousquetaires"@Thierry Larsan COUPE PAPIER Lame pour "les trois mousquetaires"@Thierry Larsan
COUPEROSE Ne désigne absolument pas une espèce de sécateur@Georges Perec COUPEROSE Ne désigne absolument pas une espèce de sécateur@Georges Perec
COUR Plat agréable à faire@Michel Laclos S'annonce aux messieurs, se fait aux dames@Bernard Philippet COUR Plat agréable à faire@Michel Laclos S'annonce aux messieurs, se fait aux dames@Bernard Philippet
COURAGE Nécouter que le sien@Alain Schifres dans Les Hexagons Art d'avoir peur sans que cela paraisse COURAGE Nécouter que le sien@Alain Schifres dans Les Hexagons Art d'avoir peur sans que cela paraisse
@ -1807,7 +1807,7 @@ OPPOSITION En politique, le parti qui empêche le gouvernement d'aller battre la
OPTICIEN Deux verres chez lui pour éviter les dégâts@Philippe Dupuis OPTICIEN Deux verres chez lui pour éviter les dégâts@Philippe Dupuis
OPTIMISTE Adepte de la doctrine selon laquelle le noir est blanc@Ambrose Bierce Personne qui commence à faire ses mots croisés au stylo-bille OPTIMISTE Adepte de la doctrine selon laquelle le noir est blanc@Ambrose Bierce Personne qui commence à faire ses mots croisés au stylo-bille
OPULENTES Avec avantages en nature ou en espèces@Corinne Beltz OPULENTES Avec avantages en nature ou en espèces@Corinne Beltz
OR Son pont nous permet de rouler dessus@Georges Perec Matière pour un livre mais plus pour une livre@Robert Scipion A été veau avant dêtre étalon@Dédale Brillante conjonction@Michel Laclos Pour un bridge ou un pont@Philippe Dupuis Prix fort@Philippe Harang Massif apprécié@Lucien Lacau Une eau s'en régale@Guy Hachette Plut à danaé@Thierry Larsan Le massif des écrins@Bernard Philippet Précieuse conjonction OR Son pont nous permet de rouler dessus@Georges Perec Matière pour un livre mais plus pour une livre@Robert Scipion A été veau avant dêtre étalon@Dédale Brillante conjonction@Michel Laclos Pour un bridge ou un pont@Philippe Dupuis Prix fort@Philippe Harang Massif apprécié@Lucien Lacau Une eau s'en régale@Guy Hachette Plut à Danaé@Thierry Larsan Le massif des écrins@Bernard Philippet Précieuse conjonction
ORACLE Il se mouille parfois mais ne sèche jamais@Bernard Philippet ORACLE Il se mouille parfois mais ne sèche jamais@Bernard Philippet
ORAL Procès-verbal@Michel Laclos ORAL Procès-verbal@Michel Laclos
ORANGE Souvent pressée dès le réveil@Michel Laclos Réunion de quartier ORANGE Souvent pressée dès le réveil@Michel Laclos Réunion de quartier
@ -2158,7 +2158,7 @@ RENGAINE Un air qui commence par vous entrer par une oreille et qui finit par vo
RENI Guide pour amateur dart@Corinne Beltz RENI Guide pour amateur dart@Corinne Beltz
RENTABLES Quand les choses le sont cest quil y a un certain rapport@Georges Perec RENTABLES Quand les choses le sont cest quil y a un certain rapport@Georges Perec
RENTREE Revenue ou revenu@Michel Laclos RENTREE Revenue ou revenu@Michel Laclos
REPAS Cest après lavoir saut é quon se sent léger@Paul Roisin REPAS Cest après lavoir sauté quon se sent léger@Paul Roisin
REPASSEUSE Dame de fer@Michel Deineko REPASSEUSE Dame de fer@Michel Deineko
REPETITION Cest du travail avant de jouer@Michel Laclos REPETITION Cest du travail avant de jouer@Michel Laclos
REPLIQUE Double sauf sur scène@Philippe Harang REPLIQUE Double sauf sur scène@Philippe Harang

Can't render this file because it has a wrong number of fields in line 12.

View File

@ -1,4 +1,5 @@
<?php <?php
include_once "Trie.php"; include_once "Trie.php";
@ -48,9 +49,9 @@ function mots_espaces($longueur_max) {
for ($longueur = $longueur_max; $longueur >= 2; $longueur--) { for ($longueur = $longueur_max; $longueur >= 2; $longueur--) {
for ($position_espace = $longueur - 1; $position_espace >= 1; $position_espace--) { for ($position_espace = $longueur - 1; $position_espace >= 1; $position_espace--) {
$mots_suivants = $dico[$longueur - $position_espace - 1]; $mots_suivants = $dico[$longueur - $position_espace - 1];
foreach ($dico[$position_espace]->arrayIterator() as $premier_mot => $definition) { foreach ($dico[$position_espace] as $premier_mot => $definition) {
$premier_mot[] = CASE_NOIRE; $premier_mot[] = CASE_NOIRE;
$dico[$longueur]->arraySet($premier_mot, $mots_suivants); $dico[$longueur][$premier_mot] = $mots_suivants;
} }
} }
} }

View File

@ -1,4 +1,9 @@
<?php <?php
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
include_once "Grille.php"; include_once "Grille.php";
@ -131,7 +136,7 @@ function formatter_definition($definition) {
<?php for ($x = 0; $x < $largeur; $x++): ?> <?php for ($x = 0; $x < $largeur; $x++): ?>
<?php if ($grille[$y][$x] == CASE_NOIRE): ?> <?php if ($grille[$y][$x] == CASE_NOIRE): ?>
<td class="case noire"> <td class="case noire">
<input id="<?= chr($x + 65) . ($y + 1) ?>" type="text" maxlength="1" size="1" disabled /> <input id="<?= chr($x + 65) . ($y + 1) ?>" type="text" maxlength="1" size="1" value="<?= CASE_NOIRE ?>" disabled />
</td> </td>
<?php else: ?> <?php else: ?>
<td class="case blanche"> <td class="case blanche">