Bonjour,
Je possède une base de donnée de mots de la langue française (dictionnaire ods 4 et 5), celle du scrabble.
Je suis occupé de créer un petit script qui pourrait me retourner les résultats possibles selon un tirage de lettres aléatoire.
Un exemple et vous comprendrez très vite:
Je tire les lettres: brear
Les solutions possibles:
Le script génère ce SQL:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 # Mot Score Taille 1 ARBRE 7 5 2 BARRE 7 5 3 ABER 6 4 4 RABE 6 4 5 ERRA 4 4 6 RARE 4 4 7 BAR 5 3 8 BEA 5 3 9 BER 5 3 10 RAB 5 3 11 ARE 3 3 12 REA 3 3 13 BA 4 2 14 BE 4 2 15 RA 2 2 16 RE 2 2
La colonne score a été ajoutée par moi même et contient le score du mot au scrabble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT DISTINCT word, CHAR_LENGTH( word ) AS length, score FROM words WHERE ( CHAR_LENGTH( word ) <=5 AND word NOT REGEXP 'C|D|F|G|H|I|J|K|L|M|N|O|P|Q|S|T|U|V|W|X|Y|Z' ) AND ( word NOT LIKE '%B%B%' AND word NOT LIKE '%A%A%' AND word NOT LIKE '%E%E%' AND word NOT LIKE '%R%R%R%'
C'est en fait, très simple, je procède par élimination de toutes les autres lettres de l'alphabet(les NOT REGEXP) et vérifie que je ne possède pas plus de lettres que prévu (les NOT LIKE).
On peut réduire tout cela en une seule ligne:
Je n'ai pas trouvé plus rapide pour trouver ces solutions, est ce que qqun à une autre idée ?! Y a t'il moyen d'optimiser cela ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT DISTINCT word, CHAR_LENGTH( word ) AS length, score FROM words WHERE ( CHAR_LENGTH( word ) <=5 AND word NOT REGEXP 'C|D|F|G|H|I|J|K|L|M|N|O|P|Q|S|T|U|V|W|X|Y|Z|.*A.*A.*|.*A.*A.*|.*R.*R.*R.*|.*E.*E.*' )
Aussi, ma principale question est:, Comment créer une requête lorsqu'il y a une wildcard ?
Par exemple, je veux trouver tous les mots avec ces lettres: brear + 1 lettre au hasard.
Je continue à chercher mais les seules solutions valables nécessitent un traitement post SQL via un script afin de vérifier la validité des mots trouvés.
Pensez vous que c'est faisable avec 1 seule query SQL ?
Merci à vous
Partager