Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Michel Newsgroups: fr.comp.lang.python Subject: Re: Tricher au scrabble... Date: Sat, 02 Dec 2023 03:48:09 +0100 Organization: A noiseless patient Spider Lines: 42 Message-ID: <874jh1tlp1.fsf@gnus.org> References: <656a1a3b$0$10088$426a74cc@news.free.fr> <656a1e57$0$10088$426a74cc@news.free.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: dont-email.me; posting-host="dca59e199930798328945c9eb8276c3d"; logging-data="2218323"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/2PNmyNGgXraqn5lUnBppL" User-Agent: Gnus Cancel-Lock: sha1:b4E3M4EH7tU5RCChsY5EpA3bIJM= sha1:sLotOoJ1UrHGFY/k0kdrN8aq8Q4= Mail-Copies-To: never Bytes: 2355 Le 1 d=C3=A9cembre 2023 yves a =C3=A9crit : > dictionnaire =3D "/usr/share/dict/french" > with open(dictionnaire) as f: > resultat =3D [mot.rstrip() for mot in f.readlines() if=20 > sorted(mot.rstrip()) =3D=3D sorted("acenrt")] Pour les anagrammes c'est bon mais pour le scrabble on peut avoir des lettres qui ne seraient pas utilis=C3=A9es et donc cet algo ne marcherait p= as. > 0.4 secondes sur mon ordi, quand m=C3=AAme. Sur le mien 0.280. Mais en reprenant le m=C3=AAme principe que pour le scrabble, en chargeant le fichier dans une array par longueur de mot, j'obtiens 0.170. fichier =3D "/usr/share/dict/french" # on suppose que les mots font 27 caract=C3=A8res maxi # (d=C3=A9sinstitutionnalisassions) MAX =3D 27 def charge_dico(): dictionnaire =3D [[] for i in range(MAX + 1)] with open(fichier, 'r') as fp: while line :=3D fp.readline().rstrip(): dictionnaire[len(line)].append(line) return dictionnaire def recherche(lettres, dictionnaire): resultat =3D [mot for mot in dictionnaire[len(lettres)] if sorted(mot) =3D=3D sorted(lettres)] return resultat tests =3D ['acenrt'] dictionnaire =3D charge_dico() for lettres in tests: print(lettres, ':', recherche(lettres, dictionnaire))