From 4874bc0d781ffa6aa457e499fcb85297ad1001f3 Mon Sep 17 00:00:00 2001 From: adrien Date: Thu, 1 May 2025 17:40:35 +0200 Subject: [PATCH] limite nombre de mots --- Grille.php | 2 +- dico.php | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Grille.php b/Grille.php index 4ec09c9..86987f6 100644 --- a/Grille.php +++ b/Grille.php @@ -34,7 +34,7 @@ class Grille implements Iterator, ArrayAccess { $this->lettres_suivantes = []; foreach ($hauteur == $largeur ? [$hauteur] : [$hauteur, $largeur] as $longueur) { $this->lettres_suivantes[$longueur] = []; - foreach (mots_espaces($longueur) as $mot) { + foreach (mots_espaces($longueur, $hauteur == $largeur ? MAX_MOTS : MAX_MOTS/2) as $mot) { $ref = &$this->lettres_suivantes[$longueur]; for ($i = 0; $i < $longueur; $i++) { $lettre = $mot[$i]; diff --git a/dico.php b/dico.php index feea622..d5a7097 100644 --- a/dico.php +++ b/dico.php @@ -2,7 +2,8 @@ const MIN_LETTRES_MOT_1 = 2; -const MIN_LETTRES_MOT_2 = 1; +const MIN_LETTRES_MOT_2 = 0; +const MAX_MOTS = 1000000; $dico = []; if (($lecteur = fopen("dico.csv", "r")) !== FALSE) { @@ -27,20 +28,22 @@ if (($lecteur = fopen("dico.csv", "r")) !== FALSE) { fclose($lecteur); } -function mots_espaces($longueur) +function mots_espaces($longueur, $nb_mots=0) { global $dico; - $nb_mots = 0; foreach ($dico[$longueur] as $mot => $definition) { yield $mot; + if (++$nb_mots >= MAX_MOTS) return; } for ($i = MIN_LETTRES_MOT_1; $longueur - $i - 1 >= MIN_LETTRES_MOT_2; $i++) { foreach ($dico[$i] as $mot1 => $definition) { foreach (mots_espaces($longueur - $i - 1) as $mot2) { if ($mot1 != $mot2) { yield "$mot1 $mot2"; + if (++$nb_mots >= MAX_MOTS) return; yield "$mot2 $mot1"; + if (++$nb_mots >= MAX_MOTS) return; } } }