from trie_fr import Trie
from ruzzlefr import *
from random import random, choice


# -------------- programme principal --------------------

def lettre():
    x=10000*random()
    if x<1489: return "e"
    elif x<2510: return "s"
    elif x<3481: return "a"
    elif x<4421: return "i"
    elif x<5288: return "r"
    elif x<6022: return "n"
    elif x<6704: return "t"
    elif x<7286: return "o"
    elif x<7687: return "l"
    elif x<8047: return "u"
    elif x<8387: return "c"
    elif x<8641: return "m"
    elif x<8877: return "d"
    elif x<9112: return "p"
    elif x<9272: return "g"
    elif x<9412: return "b"
    elif x<9548: return "f"
    elif x<9664: return "h"
    elif x<9771: return "z"
    elif x<9867: return "v"
    elif x<9917: return "q"
    elif x<9951: return "y"
    elif x<9976: return "x"
    elif x<9994: return "j"
    elif x<9999: return "k"
    else: return "w"
    
def grille_aleatoire():
    grille=""
    for i in range(16):
        grille+=lettre()
    return grille


stat = [0]*200
trie = creer_trie('dico_ruzzle.txt')
score_max=0
print('Début de la recherche')
for i in range(1000000):
    donnees = grille_aleatoire()
    grille = [Case(lettre) for lettre in donnees]  # la grille est une liste de 16 cases
    creer_connexions(grille)
    resultats = []
    for case in grille: # première lettre du mot à chercher (16 possibilités)
        noeud = trie    # on se place au début du Trie
        mots_trouves = chercher(noeud[case.getValue()], case)
        if len(mots_trouves) > 0:
            resultats.extend(mots_trouves)  # ajoute les nouveaux mots trouvés au résultat
    score = len(list(set(resultats)))  # compte le nombre de mots différents
    stat[score//10]+=1
    if score>score_max:
        score_max = score
        print(donnees, score_max)

fichier = open("stat.txt", "w")
for i in range(200):
    fichier.write("["+str(10*i)+"-"+str(10*i+9)+"[ "+str(stat[i])+"\n")
fichier.close()
