Deutsch   English   Français   Italiano  
<874jh1tlp1.fsf@gnus.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Michel <michel@domain.invalid>
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: <uk4fm4$852n$1@dont-email.me>
	<recherche-20231128131821@ram.dialup.fu-berlin.de>
	<uk51rm$auel$2@dont-email.me> <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))