Advertisement
Guest User

Untitled

a guest
Dec 19th, 2014
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.57 KB | None | 0 0
  1. from unicodedata import normalize
  2. import random
  3.  
  4. def convertir(mot):
  5.         """Renvoie le mot converti en minuscules et sans caractères spéciaux"""
  6.         return(normalize('NFKD',mot).encode('ASCII','ignore')).decode().lower()
  7.  
  8. def initialiserDictionnaire(nom_fichier):
  9.         """initialise un dict des mobs d'un fichier sans caractere speciaux"""
  10.         f=open(nom_fichier)
  11.         dicomotgood=dict()
  12.         ligne=None
  13.         while ligne!='':
  14.                 ligne=f.readline()
  15.                 ligne=ligne[:-1]#on evite de prend le //n
  16.                 if '-' in ligne:
  17.                         ligne=ligne.replace('-','')#on supprime les trait d'union
  18.                 if len(ligne) not in dicomotgood.keys():#on créer une clef de la taille d'un mot si il existe pas sinon on creer une cle de la longueur du mot
  19.                         dicomotgood[len(ligne)]=[]
  20.                 dicomotgood[len(ligne)].append(convertir(ligne))
  21.         f.close()
  22.         return dicomotgood
  23.  
  24. def initialiserSac():
  25.         """initialise le sac d'un jeu de scrabble francais"""
  26.         Sac=9*['a']+15*['e']+8*['i']+5*['l']+6*(['n']+['o']+['r']+['s']+['t']+['u'])+1*(['j']+['k']+['q']+['w']+['x']+['y']+['z'])+2*(['g']+['b']+['c']+['f']+['g']+['h']+['p']+['v'])+3*(['d']+['m'])+2*['*']#création du sac
  27.         return Sac
  28.  
  29. def piocher(sac,n):
  30.         """pioche n element dans une liste un sac ici"""
  31.         lettrepiocher=[]
  32.         for i in range(n):
  33.                 position=random.randint(0,len(sac)-1)#on pioche la lettre et on supprime la lettre piocher n fois
  34.                 lettrepiocher.append(sac[position])
  35.                 sac.pop(position)
  36.         return lettrepiocher
  37.  
  38. def score(mot):
  39.         """calcul le score d'un mot selon les regle francaise"""
  40.         point=0
  41.         dico=dict()
  42.         dico['*']=0#initialisation du dico en clé les lettre et en valeur les points rapportés
  43.         dico['e','a','i','n','o','r','s','t','u','l']=1
  44.         dico['d','m','g']=2
  45.         dico['b','c','p']=3
  46.         dico['f','h','v']=4
  47.         dico['j','q']=8
  48.         dico['k','w','x','y','z']=10
  49.         for lettre in mot:
  50.                 for cle in dico.keys():#on check dans quel groupe de lettre et la lettre
  51.                         if lettre in cle:
  52.                                 point+=dico[cle]#on ajoute la valeur representé par le groupe de lettre
  53.         return point
  54.  
  55. def trouverMotDeLongueurFixe(lettres, k, dictionnaire):
  56.         """trouve un mot de longueur k avec des lettre données sous forme de liste"""
  57.         for values in dictionnaire[k]:
  58.                 flag=True#pour naviguer entre les boucles
  59.                 for lettre in values:
  60.                         if lettre not in lettres or values.count(lettre)>lettres.count(lettre):
  61.                                 flag=False#naviguer entre les boucles
  62.                                 break
  63.                 if flag==True:#si le mot est trouvé
  64.                         return values
  65.         return 'pas trouvé'
  66.  
  67. def trouverMotDeLongueurMaximale(lettres,dictionnaire):
  68.         """trouve le mot le plus long possible à faire selon les lettres en main"""
  69.         k=len(lettres)
  70.         candidat = trouverMotDeLongueurFixe(lettres, k, dictionnaire)
  71.         while candidat=="pas trouvé" and k>0:#si le mot est impossible a faire en fonction des lettres en main
  72.                 k-=1
  73.                 candidat = trouverMotDeLongueurFixe(lettres,k, dictionnaire)
  74.         return candidat
  75.  
  76. def trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire):
  77.         """trouve le meilleur mot à faire parmis les mots de tailles k grâce aux lettres en main"""
  78.         save=dictionnaire.copy()#on save le dico
  79.         candidat=trouverMotDeLongueurFixe(lettres, k, dictionnaire)
  80.         if candidat=="pas trouvé":
  81.                 return candidat
  82.         save[k].remove(candidat)#on supprime des valeurs du dico save le premier mot
  83.         challenger=""
  84.         while True:#si cest un mot
  85.                 challenger=trouverMotDeLongueurFixe(lettres, k, save)
  86.                 if challenger=="pas trouvé":
  87.                         return candidat
  88.                 if score(challenger)>score(candidat):#on prend le meilleur score
  89.                         candidat=challenger
  90.                 save[k].remove(challenger)#on garde le meilleur score et on candidat
  91.  
  92. def trouverMotDeScoreMaximal(lettres,dictionnaire):
  93.         """trouve le mot au score maximal"""
  94.         k=len(lettres)
  95.         candidat = ""
  96.         while k>0:
  97.                 challenger = trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire)
  98.                 candidat = challenger if (challenger!="pas trouvé" and score(challenger)>score(candidat)) else candidat
  99.                 k-=1
  100.         return candidat
  101.  
  102.  
  103.        
  104.  
  105.  
  106. if __name__ == '__main__':
  107.        
  108.         print("sac du scrabble:",initialiserSac())
  109.         sac=initialiserSac()
  110.         print("je pioche 7 lettres j'ai:",piocher(sac,7))
  111.         print("score du mot kiwi:",score('kiwi'))
  112.         lettres=['a','r','u','d','m','e','o']
  113.         dictionnaire=initialiserDictionnaire('liste-mots-fr-iso-8859-15.txt')
  114.         print('=======Recherche de mots de longueur fixe=========')
  115.         for k in range(1,len(lettres)+1):
  116.                 trouvfix=trouverMotDeLongueurFixe(lettres,k,dictionnaire)
  117.                 if trouvfix != 'pas trouvé':
  118.                         print('Recherche d un mot de longueur',k,'... Trouvé:',trouvfix,'qui rapporte',score(trouvfix),'point' if score(trouvfix)==1 else 'points' )
  119.                 else:print('pas trouvé pour une longueur',k)
  120.         print('=========== recherche d\'un mot de longueur maximal ========')
  121.         print('voici un mot de longueur maximale pour la réglette', lettres,':',trouverMotDeLongueurMaximale(lettres,dictionnaire),'qui rapporte',score(trouvfix),'point' if score(trouvfix)==1 else 'points')
  122.         print('========= recherche de mots de longueur fixe et de score maximal =======')
  123.         for l in range(1,len(lettres)+1):
  124.                 trouvtrouv=trouverMotDeLongueurFixeEtDeScoreMaximal(lettres,k,dictionnaire)
  125.                 if trouvtrouv != 'pas trouvé':
  126.                         print('recherche d\'un mot de longueur',l,'... trouvé:',trouvtrouv,',qui rapport',score(trouvtrouv),'point' if score(trouvtrouv)==1 else 'points')
  127.                 else:('pas trouvé pour une longueur',l)
  128.         trouvtrouvtrouv=trouverMotDeScoreMaximal(lettres,dictionnaire)
  129.         print('voici un mot de score maximal pour la reglette',lettres,':',trouvtrouvtrouv,', qui rapporte',score(trouvtrouvtrouv),'point' if score(trouvtrouvtrouv)==1 else 'points')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement