From 28c7c9b38420e654b2cdcc30325689ccc70b533c Mon Sep 17 00:00:00 2001
From: Koffi Gantchou <koffi.gantchou.etu@univ-lille.fr>
Date: Wed, 22 Jan 2025 19:04:24 +0100
Subject: [PATCH] Replace tp1.py

---
 tp1.py | 539 ++++++++++++++++++++++++++++-----------------------------
 1 file changed, 269 insertions(+), 270 deletions(-)

diff --git a/tp1.py b/tp1.py
index 96798db..9fb9c0f 100644
--- a/tp1.py
+++ b/tp1.py
@@ -1,270 +1,269 @@
-#nom:gantchou koffi
-#mi13
-# anagrammes
-# 16/01
-#METHODE SPLIT
-
-
-#2 la methode split supprime l'element pris en parametre dans la chaine
-# >>> s= "la méthode split est parfois bien utile"
-# >>> s.split(' ')
-# ['la', 'méthode', 'split', 'est', 'parfois', 'bien', 'utile']
-# >>> s.split('e')
-# ['la méthod', ' split ', 'st parfois bi', 'n util', '']
-# >>> s.split('é')
-# ['la m', 'thode split est parfois bien utile']
-# >>> s.split()
-# ['la', 'méthode', 'split', 'est', 'parfois', 'bien', 'utile']
-# >>> s.split('')
-# Traceback (most recent call last):
-#   File "<stdin>", line 1, in <module>
-# ValueError: empty separator
-# >>> s.split('split')
-# ['la méthode ', ' est parfois bien utile']
-
-#3 la methode split ne modifie pas la chaine a laquelle elle s'applique
-
-#METHODE JOIN
-# la methode join ne modifiie pas la chaine a laquelle elle s'applique
-
-
-#la methode sort ne s'applique que sur des listes
-# de meme que join
-
-def join(carac:str,l:list[str])->str:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])
-    'raymond.calbuth.ronchin.fr'
-    
-    """
-    res=''
-    for i in range(len(l)-1):
-        res+=l[i]+carac
-    res=res+l[len(l)-1]
-    
-    return res
-        
-def sort(s: str) -> str:
-    """
-    Renvoie une chaîne de caractères contenant les caractères de `s` triés dans l'ordre croissant.
-
-    Précondition: aucune
-
-    Exemples:
-
-    $$$ sort('timoleon')
-    'eilmnoot'
-    """
-    l=list(s)
-    l.sort()
-    v="".join(l)
-    return v
-    
-def sont_anagrammes(s1: str, s2: str) -> bool:
-    """
-    Renvoie True si s1 et s2 sont anagrammatiques, False sinon.
-
-    Précondition: aucune
-
-    Exemples:
-
-    $$$ sont_anagrammes('orange', 'organe')
-    True
-    $$$ sont_anagrammes('orange','Organe')
-    False
-    """
-    anag1=sort(s1)
-    anag2=sort(s2)
-    return anag1==anag2
-
-def sont_anagrammes2(s1:str,s2:str)->bool:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ sont_anagrammes2('orange', 'organe')
-    True
-    $$$ sont_anagrammes2('orange','Organe')
-    False
-    
-    """
-    dict1={}
-    dict2={}
-    for elt in s1:
-        if elt in dict1:
-            dict1[elt]=dict1[elt]+1
-        else:
-            dict1[elt]=1        
-     
-    for elm in s2:
-        if elm in dict2:
-            dict2[elm]=dict2[elm]+1
-        else:
-            dict2[elm]=1
-    return dict1==dict2
-    
-def sont_anagrammes3(s1:str,s2:str)->bool:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ sont_anagrammes3('orange', 'organe')
-    True
-    $$$ sont_anagrammes3('orange','Organe')
-    False
-    $$$ sont_anagrammes3('hezf','ehzu')
-    False
-    """
-    for elt in s1:
-        if s1.count(elt)!=s2.count(elt):
-            return False
-    return True
-        
-EQUIV_NON_ACCENTUE = {'é':'e','ê':'e','è':'e','à':'a','û':'u','â':'a','ï':'i'}
-def bas_casse_sans_accent (chaine:str)->str:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ bas_casse_sans_accent('Orangé')
-    'orange'
-    $$$ bas_casse_sans_accent('ghsêéè')
-    'ghseee'
-    """
-    res=''
-    for elt in chaine:
-        for accentue in EQUIV_NON_ACCENTUE:
-            if elt==accentue:
-                elt=EQUIV_NON_ACCENTUE[accentue]
-        res+=elt    
-    return res.lower()
-    
-def sont_anagrammes4(s1:str,s2:str)->bool:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ sont_anagrammes4('Orangé', 'organE')
-    True
-
-    """
-    a=bas_casse_sans_accent(s1)
-    b=bas_casse_sans_accent(s2) 
-    if sort(a)!=sort(b):
-        return False
-    return True
-
-# il y'a 139719 mots dans  ce lexique
-# non ce lexique ne contient pas de doublons car len(LEXIQUE)==len(set(LEXIQUE))
-
-from lexique import LEXIQUE
-def anagrammes(mot: str) -> list[str]:
-    """
-    Renvoie la liste des mots figurant dans le LEXIQUE qui sont des anagrammes de mot.
-
-    Précondition: aucune
-
-    Exemples:
-
-    $$$ anagrammes('orange')
-    ['onagre', 'orange', 'orangé', 'organe', 'rongea']
-    $$$ anagrammes('info')
-    ['foin']
-    $$$ anagrammes('Calbuth')
-    []
-    """
-    res=[]
-    for elt in LEXIQUE:
-        
-        if len(mot) == len(elt) and sont_anagrammes4(elt,mot):
-            res.append(elt)
-    return res
-
-#2 liste des anagrammes du mot chien
-# ['chien', 'chiné', 'niche', 'niché']
-
-
-# ANAGRAMMES D'UN MOT:seconde methode
-#1 il n'est pas raisonnable de prendre les mots du lexique pour clés car plusieurs clés ne peuvent pas designer la meme valeur
-# en effet ces mots du lexiques en representant les clés auront tous la meme valeur qui est le mot dont on cherche ces anagrammes
-
-
-def cle(chaine:str)->str:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ cle('Orangé')
-    'aegnor'
-
-    """
-    a=bas_casse_sans_accent(chaine)
-    b=sort(a)
-    return b
-
-
-
-
-ANAGRAMMES={}
-for mot in LEXIQUE:
-    if not(mot in ANAGRAMMES):
-        mot_anagrammes = anagrammes(mot)
-        for elt in mot_anagrammes:
-             ANAGRAMMES[elt] = mot_anagrammes
-    
-
-
-def anagrammes2(mot:str)->list[str]:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$
-    """
-    return ANAGRAMMES.get(mot,[mot])
-
-
-
-#c'est la methode avec le dictionnaire la plus rapide
-i=0
-ANAGRAMMES2={}
-for mote in LEXIQUE:
-    i+=1
-    if not(mote in ANAGRAMMES2):
-        mot_anagrammes2 = anagrammes(mote)
-        for elm in mot_anagrammes2:
-            ANAGRAMMES2[elm] = mot_anagrammes2
-            if i==30:
-                break
-
-
-def anagrammes3(mot:str)->list[str]:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$ anagrammes3('chien')
-    ['chien', 'chiné', 'niche', 'niché']
-    """
-    return ANAGRAMMES2.get(mot,[mot])
-
-
-def anagrammes_phrase(phrase:str)->list[str]:
-    """ à_remplacer_par_ce_que_fait_la_fonction
-
-    Précondition :
-    Exemple(s) :
-    $$$
-    """
-    res=[]
-    mot=[]
-    liste=phrase.split(' ')
-    for elt in liste:
-        mot.append(anagrammes(elt))
-        " ".join()
-    res+=mot
-    return res
-
+#nom:gantchou koffi
+#mi13
+# anagrammes
+# 16/01
+#METHODE SPLIT
+
+
+#2 la methode split supprime l'element pris en parametre dans la chaine
+# >>> s= "la méthode split est parfois bien utile"
+# >>> s.split(' ')
+# ['la', 'méthode', 'split', 'est', 'parfois', 'bien', 'utile']
+# >>> s.split('e')
+# ['la méthod', ' split ', 'st parfois bi', 'n util', '']
+# >>> s.split('é')
+# ['la m', 'thode split est parfois bien utile']
+# >>> s.split()
+# ['la', 'méthode', 'split', 'est', 'parfois', 'bien', 'utile']
+# >>> s.split('')
+# Traceback (most recent call last):
+#   File "<stdin>", line 1, in <module>
+# ValueError: empty separator
+# >>> s.split('split')
+# ['la méthode ', ' est parfois bien utile']
+
+#3 la methode split ne modifie pas la chaine a laquelle elle s'applique
+
+#METHODE JOIN
+# la methode join ne modifiie pas la chaine a laquelle elle s'applique
+
+
+#la methode sort ne s'applique que sur des listes
+# de meme que join
+
+def join(carac:str,l:list[str])->str:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])
+    'raymond.calbuth.ronchin.fr'
+    
+    """
+    res=''
+    for i in range(len(l)-1):
+        res+=l[i]+carac
+    res=res+l[len(l)-1]
+    
+    return res
+        
+def sort(s: str) -> str:
+    """
+    Renvoie une chaîne de caractères contenant les caractères de `s` triés dans l'ordre croissant.
+
+    Précondition: aucune
+
+    Exemples:
+
+    $$$ sort('timoleon')
+    'eilmnoot'
+    """
+    l=list(s)
+    l.sort()
+    v="".join(l)
+    return v
+    
+def sont_anagrammes(s1: str, s2: str) -> bool:
+    """
+    Renvoie True si s1 et s2 sont anagrammatiques, False sinon.
+
+    Précondition: aucune
+
+    Exemples:
+
+    $$$ sont_anagrammes('orange', 'organe')
+    True
+    $$$ sont_anagrammes('orange','Organe')
+    False
+    """
+    anag1=sort(s1)
+    anag2=sort(s2)
+    return anag1==anag2
+
+def sont_anagrammes2(s1:str,s2:str)->bool:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ sont_anagrammes2('orange', 'organe')
+    True
+    $$$ sont_anagrammes2('orange','Organe')
+    False
+    
+    """
+    dict1={}
+    dict2={}
+    for elt in s1:
+        if elt in dict1:
+            dict1[elt]=dict1[elt]+1
+        else:
+            dict1[elt]=1        
+     
+    for elm in s2:
+        if elm in dict2:
+            dict2[elm]=dict2[elm]+1
+        else:
+            dict2[elm]=1
+    return dict1==dict2
+    
+def sont_anagrammes3(s1:str,s2:str)->bool:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ sont_anagrammes3('orange', 'organe')
+    True
+    $$$ sont_anagrammes3('orange','Organe')
+    False
+    $$$ sont_anagrammes3('hezf','ehzu')
+    False
+    """
+    for elt in s1:
+        if s1.count(elt)!=s2.count(elt):
+            return False
+    return True
+        
+EQUIV_NON_ACCENTUE = {
+    'à': 'a', 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a',
+    'ç': 'c',
+    'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
+    'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i',
+    'ñ': 'n',
+    'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', 'ö': 'o',
+    'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u',
+    'ý': 'y', 'ÿ': 'y'
+}
+def bas_casse_sans_accent (chaine:str)->str:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ bas_casse_sans_accent('Orangé')
+    'orange'
+    $$$ bas_casse_sans_accent('ghsêéè')
+    'ghseee'
+    """
+    res=''
+    for elt in chaine:
+        for accentue in EQUIV_NON_ACCENTUE:
+            if elt==accentue:
+                elt=EQUIV_NON_ACCENTUE[accentue]
+        res+=elt    
+    return res.lower()
+    
+def sont_anagrammes4(s1:str,s2:str)->bool:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ sont_anagrammes4('Orangé', 'organE')
+    True
+
+    """
+    a=bas_casse_sans_accent(s1)
+    b=bas_casse_sans_accent(s2) 
+    if sort(a)!=sort(b):
+        return False
+    return True
+
+# il y'a 139719 mots dans  ce lexique
+# non ce lexique ne contient pas de doublons car len(LEXIQUE)==len(set(LEXIQUE))
+
+from lexique import LEXIQUE
+def anagrammes(mot: str) -> list[str]:
+    """
+    Renvoie la liste des mots figurant dans le LEXIQUE qui sont des anagrammes de mot.
+
+    Précondition: aucune
+
+    Exemples:
+
+    $$$ anagrammes('orange')
+    ['onagre', 'orange', 'orangé', 'organe', 'rongea']
+    $$$ anagrammes('info')
+    ['foin']
+    $$$ anagrammes('Calbuth')
+    []
+    """
+    res=[]
+    for elt in LEXIQUE:
+        
+        if len(mot) == len(elt) and sont_anagrammes4(elt,mot):
+            res.append(elt)
+    return res
+
+#2 liste des anagrammes du mot chien
+# ['chien', 'chiné', 'niche', 'niché']
+
+
+# ANAGRAMMES D'UN MOT:seconde methode
+#1 il n'est pas raisonnable de prendre les mots du lexique pour clés car plusieurs clés ne peuvent pas designer la meme valeur
+# en effet ces mots du lexiques en representant les clés auront tous la meme valeur qui est le mot dont on cherche ces anagrammes
+
+
+def cle(chaine:str)->str:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$ cle('Orangé')
+    'aegnor'
+
+    """
+    a=bas_casse_sans_accent(chaine)
+    b=sort(a)
+    return b
+
+ANAGRAMMES={}
+for mot in LEXIQUE:
+    mot_cle=cle(mot)
+    if mot_cle not in ANAGRAMMES:
+        ANAGRAMMES[mot_cle]=[]
+    ANAGRAMMES[mot_cle].append(mot)
+print(len(ANAGRAMMES))
+
+
+def anagrammes2(mot:str)->list[str]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    return ANAGRAMMES[cle(mot)]
+
+
+#c'est la methode avec le dictionnaire la plus rapide
+
+i=0
+ANAGRAMMES2={}
+for mot in LEXIQUE:
+    i+=1
+    mot_cle=cle(mot)
+    if mot_cle not in ANAGRAMMES2:
+        ANAGRAMMES2[mot_cle]=[]
+    ANAGRAMMES2[mot_cle].append(mot)
+    if i==30:
+        break
+
+
+# on a 27 comme longeur au lieu de 30 car il y'a certains mots qui se repetent comme a et à etc
+def anagrammes_phrase(phrase:str)->list[str]:
+    """ à_remplacer_par_ce_que_fait_la_fonction
+
+    Précondition :
+    Exemple(s) :
+    $$$
+    """
+    res=[]
+    mot=''
+    resultat=[]
+    liste=phrase.split()
+    for elt in liste:
+        res.append(anagrammes2(elt))
+        for i in range(len(res)):
+            for j in range(len(res)-1):
+                mot += res[i-1][j-1] + res[j-1][i-1]
+        resultat.append(mot)   
+    return resultat
+
-- 
GitLab