From bcfe6da555659578551de889099b699fc963804a Mon Sep 17 00:00:00 2001 From: adrien Date: Mon, 28 Apr 2025 14:02:02 +0200 Subject: [PATCH] corrections mineures --- .gitignore | 2 + dico.csv | 2 +- style.css | 9 +++- test.py | 144 ----------------------------------------------------- 4 files changed, 10 insertions(+), 147 deletions(-) create mode 100644 .gitignore delete mode 100644 test.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e8eadbd --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +*.py \ No newline at end of file diff --git a/dico.csv b/dico.csv index 1370e4f..57a62da 100644 --- a/dico.csv +++ b/dico.csv @@ -1484,7 +1484,7 @@ NICE Beau, pour des anglais en promenade. Jean-Paul Vanden Branden NICE Agréable en angleterre comme en france. Robert Scipion NID Panier d’œufs. Marc Aussitot NID Se fait petit à petit. Michel Laclos -NID OEuvre pie. Michel Laclos +NID Œuvre pie. Michel Laclos NIE Parle pour ne rien dire. Dédale NIE Infirme ou dément. Guy Hachette NIET Tintin au pays des soviets. Marc Aussitot diff --git a/style.css b/style.css index 6aad88e..1270fa9 100644 --- a/style.css +++ b/style.css @@ -48,7 +48,6 @@ table.grille { height: 2rem; border: 1px solid black; padding: 2px; - font-family: 'Comic Sans MS', 'Comic Sans', cursive, sans; } .grille tr:nth-of-type(2) td { @@ -79,6 +78,8 @@ table.grille { padding: 0; text-align: center; font-size: 1.2em; + font-family: 'Comic Sans MS', 'Comic Sans', sans; + color: darkblue; } .grille input[disabled] { @@ -104,7 +105,11 @@ table.grille { } .definitions li ol { - padding-left: 0.8em; + padding-left: 0em; +} + +.definitions li li { + margin-left: 0.8em; } .definitions li li::marker { diff --git a/test.py b/test.py deleted file mode 100644 index 09a8c6f..0000000 --- a/test.py +++ /dev/null @@ -1,144 +0,0 @@ -import csv -from re import compile, match -from random import choice, sample, randrange -from collections import defaultdict -from math import ceil -from itertools import product, chain - - -dico = defaultdict(list) -with open("dico.csv", "r", encoding="utf-8") as fichier: - for mot, definition in csv.reader(fichier, delimiter="\t"): - if not mot.startswith("#"): - dico[mot].append(definition) - -mots_de_n_lettres = defaultdict(set) -for mot in dico: - mots_de_n_lettres[len(mot)].add(mot) - - -def mots_espaces(n): - for mot in mots_de_n_lettres[n]: - yield mot - # for mot in mots_de_n_lettres[n-1]: - # yield f"{mot} " - # yield f" {mot}" - for i in range(1, ceil(n / 2)): - for mot1, mot2 in product(mots_de_n_lettres[i], mots_espaces(n - i - 1)): - yield f"{mot1} {mot2}" - yield f"{mot2} {mot1}" - # for mot1, mot2 in product(mots_de_n_lettres[i], mots_espaces(n - i - 2)): - # yield f" {mot1} {mot2}" - # yield f"{mot2} {mot1} " - # for mot1, mot2 in product(mots_de_n_lettres[i-1], mots_espaces(n - i - 1)): - # yield f" {mot1} {mot2}" - # yield f"{mot2} {mot1} " - - -class Ligne: - def __init__(self, grille): - self.grille = grille - - def __getitem__(self, n): - return "".join(self.grille[n]) - - def __setitem__(self, n, mot): - self.grille[n] = list(mot) - - -class Colonne: - def __init__(self, grille): - self.grille = grille - - def __getitem__(self, n): - return "".join(ligne[n] for ligne in self.grille) - - def __setitem__(self, n, mot): - for i, char in enumerate(mot): - self.grille[i][n] = char - - -class Grille: - def __init__(self, hauteur, largeur): - self.hauteur = hauteur - self.largeur = largeur - self.grille = [["." for _ in range(largeur)] for _ in range(hauteur)] - self.ligne = Ligne(self.grille) - self.colonne = Colonne(self.grille) - - self.mots_commencant_par = defaultdict(lambda: defaultdict(list)) - for dimension in (hauteur,) if hauteur == largeur else (hauteur, largeur): - for mot in mots_espaces(dimension): - for i in range(dimension+1): - self.mots_commencant_par[dimension][mot[:i]].append(mot) - - self.grilles = self.genere_grilles() - next(self.grilles) - - def __iter__(self): - return self - - def __next__(self): - 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, l): - for mot in self.mots_commencant_par[self.largeur][self.ligne[l][:l]]: - self.ligne[l] = mot - if all( - self.colonne[c][:l+1] in self.mots_commencant_par[self.hauteur] - for c in range(l, self.largeur) - ): - if l < self.largeur: - yield from self.trouve_une_colonne(l) - elif l + 1 < self.hauteur: - yield from self.trouve_une_ligne(l + 1) - else: - yield self - - def trouve_une_colonne(self, c): - for mot in self.mots_commencant_par[self.hauteur][self.colonne[c][:c+1]]: - self.colonne[c] = mot - if all( - self.ligne[l][:c+1] in self.mots_commencant_par[self.largeur] - for l in range(c, self.largeur) - ): - if c + 1 < self.hauteur: - yield from self.trouve_une_ligne(c + 1) - elif c + 1 < self.largeur: - yield from self.trouve_une_colonne(c + 1) - else: - yield self - - def __str__(self): - return ( - " " - + " ".join(chr(65 + i) for i in range(self.largeur)) - + "\n" - + "\n".join( - f"{i + 1:2} " + " ".join(ligne) for i, ligne in enumerate(self.grille) - ) - ) - - def __repr__(self): - return self.__str__() - - -if __name__ == "__main__": - import time - - class Timer: - def __enter__(self): - self.start = time.time() - return self - - def __exit__(self, *exc_info): - end = time.time() - print(f"Execution time: {end - self.start:.2f} seconds") - - for n in range(2, 14): - with Timer(): - print(Grille(n, n))