def equilibre_reccurEtendue(texte, n, ind): res=([],0) if longueur(texte)<=n: #si la longueur du texte est inférieur à la longueur de la ligne res=([texte],0,'infini',0) #alors pas besoin de le découper, et on ignore le déséquilibre MEMO.add_etendue(ind,res[0],res[1],res[2],res[3]) else : curr=0 s='infini' longtext=longueur(texte[0:1]) while longtext<=n: reccur=MEMO.get_etendue(ind+curr+1) if reccur==-1: reccur=equilibre_reccurEtendue(texte[curr+1:],n,ind+curr+1) MEMO.add_etendue(ind+1,reccur[0],reccur[1],reccur[2],reccur[3]) c=reccur[2] l=reccur[3] if min(longtext,c)==longtext: c=longtext if min(longtext,l)==l: l=longtext s1=l-c if min(s1,s)==s1: s=s1 res=([texte[0:curr+1]]+reccur[0],s,c,l) curr+=1 longtext=longueur(texte[0:curr+1]) return res
def equilibreEtendue(texte, n): global MEMO MEMO=Memo() for i in range (len(texte)-1,-1,-1): #Pour i allant de l'indice du dernier mot au premier if longueur(texte[i:])<=n: res=([texte[i:]],0,'infini',0) else: curr=0 deseq='infini' longtext=longueur(texte[i:i+1]) while longtext<=n: suite=MEMO.get_etendue(i+curr+1) c=suite[2] l=suite[3] if min(longtext,c)==longtext: c=longtext if min(longtext,l)==l: l=longtext deseq_bis=l-c if min(deseq,deseq_bis)==deseq_bis: #on notera que la fonction min a été surchargée pour #considérer 'infini' comme l'infini deseq=deseq_bis res=([texte[i:i+curr+1]]+suite[0],deseq,c,l) curr+=1 longtext=longueur(texte[i:i+curr+1]) MEMO.add_etendue(i,res[0],res[1],res[2],res[3]) return res
def equilibre_reccur(texte, n, ind): res=([],0) if longueur(texte)<=n: #si la longueur du texte est inférieur à la longueur de la ligne res=([texte],0) #alors pas besoin de le découper, et on ignore le déséquilibre MEMO.add(ind,res[0],res[1]) else : curr=0 s='infini' while longueur(texte[0:curr+1])<=n: reccur=MEMO.get(ind+curr+1) if reccur==-1: reccur=equilibre_reccur(texte[curr+1:],n,ind+curr+1) MEMO.add(ind+1,reccur[0],reccur[1]) s1=blancLigne(texte[0:curr+1],n)+reccur[1] if min(s1,s)==s1: s=s1 res=([texte[0:curr+1]]+reccur[0],s) curr+=1 return res
def equilibreVar(texte, n): global MEMO MEMO=Memo() for i in range (len(texte)-1,-1,-1): #Pour i allant de l'indice du dernier mot au premier if longueur(texte[i:])<=n: res=([texte[i:]],0) else: curr=0 deseq='infini' while longueur(texte[i:i+curr+1])<=n: suite=MEMO.get(i+curr+1) deseq_bis=variance([texte[i:i+curr+1]]+suite[0]) if min(deseq,deseq_bis)==deseq_bis: #on notera que la fonction min a été surchargée pour #considérer 'infini' comme l'infini deseq=deseq_bis res=([texte[i:i+curr+1]]+suite[0],deseq) curr+=1 MEMO.add(i,res[0],res[1]) return res