From f964f5a50006ff24b09f22e91a3b92ba70497102 Mon Sep 17 00:00:00 2001 From: adrien Date: Wed, 23 Apr 2025 17:50:58 +0200 Subject: [PATCH] colonnes par la droite --- test2.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test2.py b/test2.py index 1910a4e..039cd08 100644 --- a/test2.py +++ b/test2.py @@ -40,7 +40,7 @@ class Ligne: self.grille = grille def __getitem__(self, n): - return "".join(self.grille[n][:n]) + return "".join(self.grille[n]) def __setitem__(self, n, mot): self.grille[n] = list(mot) @@ -51,7 +51,7 @@ class Colonne: self.grille = grille def __getitem__(self, n): - return "".join(ligne[n] for ligne in self.grille[:n+1]) + return "".join(ligne[n] for ligne in self.grille) def __setitem__(self, n, mot): for i, char in enumerate(mot): @@ -67,10 +67,12 @@ class Grille: self.colonne = Colonne(self.grille) self.mot_commencant_par = defaultdict(lambda: defaultdict(list)) + self.mots_finissant_par = defaultdict(lambda: defaultdict(list)) for dimension in (hauteur,) if hauteur == largeur else (hauteur, largeur): for mot in mots_de_n_lettres(dimension): for i in range(dimension+1): self.mot_commencant_par[dimension][mot[:i]].append(mot) + self.mots_finissant_par[dimension][mot[i:]].append(mot) self.grilles = self.genere_grilles() next(self.grilles) @@ -82,11 +84,10 @@ class Grille: return next(self.grilles) def genere_grilles(self): - print(f"Grille({self.hauteur}, {self.largeur})") yield from self.trouve_une_ligne(0) def trouve_une_ligne(self, i): - for mot in self.mot_commencant_par[self.largeur][self.ligne[i]]: + for mot in self.mots_finissant_par[self.largeur][self.ligne[i][self.largeur-i:]]: self.ligne[i] = mot if i < self.largeur: yield from self.trouve_une_colonne(i) @@ -96,8 +97,8 @@ class Grille: yield self def trouve_une_colonne(self, i): - for mot in self.mot_commencant_par[self.hauteur][self.colonne[i]]: - self.colonne[i] = mot + for mot in self.mot_commencant_par[self.hauteur][self.colonne[self.largeur-1-i][:i+1]]: + self.colonne[self.largeur-1-i] = mot if i + 1 < self.hauteur: yield from self.trouve_une_ligne(i + 1) elif i + 1 < self.largeur: @@ -129,12 +130,10 @@ if __name__ == "__main__": def __exit__(self, *exc_info): end = time.time() - print(f"Execution time: {end - self.start:.2f} seconds") + print(f"Execution time: {end - self.start:.2f} seconds\n") for i in range(2, 14): with Timer(): print(Grille(i, i)) with Timer(): - print(Grille(i + 1, i)) - with Timer(): - print(Grille(i, i + 1)) + print(Grille(i, i+1))