Bien qu’inscrit depuis de nombreuses années, je ne poste pas souvent sur le forum, car je mets un point d’honneur à trouver la solution tout seul. Mais je vous lis tous les jours et j’essaye de comprendre les programmes que vous postez. J’aime les posts de Kwai chang caine qui manipule l’auto dérision avec humour tel un maestro. Beaucoup d’entre vous sont des pointures en programmation et j’avoue que quelquefois vos programmes sont aussi obscurs que des hiéroglyphes…
J’aime la cryptographie telle qu’on la pratiquait au 19e siècle (et avant…) et le confinement de cette période m’oblige à trouver des idées de programme.
Comme je vous le disais plus haut il n’est pas dans mes habitudes de demander de l’aide, car j’estime qu’on apprend mieux les mains dans le cambouis…
Mais là, après des semaines, j’avoue que je sèche…
Le programme utilise un texte qu’il découpe en bigrammes (deux lettres), les compte et ensuite affiche le résultat graphiquement. Mais voilà, car il y a toujours un mais, je n’arrive pas à éliminer les doublons ce qui fait que le graphisme se trouve perturbé par plusieurs affichages au même endroit de la même donnée. J’avoue que j’ai fait beaucoup d’essais, remplacé les listes par des tableaux, essayé aussi les Maps qui devraient éviter les doublons, mais j’avoue que de ce côté les exemples de la doc sont vraiment obscurs.
Si vous regardez le débug, le bigramme GS est répété 32 fois, ce qui semble normal puisqu'il y en a 32, mais une fois suffirait.

Le programme n’est pas très long et je pense qu’il ne devrait pas poser de problèmes à des ténors comme vous …
Mais peut-être qu’il n’y a pas de solutions ?
Je vous remercie par avance si vous vous penchez sur mon problème…
J’arrête là mon discours (je vais finir par battre Kwai chang caine …)
Un os à ronger c’est toujours bon quand on s’ennuie. Vous pouvez aussi essayez de déchiffrer le message, mais ce ne sera pas facile...

Code : Tout sélectionner
Enumeration Windows
#Window
#TableauBigrammes
EndEnumeration
Structure TexteBig
Bigramme.s
Nbre.i
EndStructure
Structure Texte
Lettre.s
Nombre.i
EndStructure
Global NewList Alphabet.Texte()
Global NewList Tableau.TexteBig()
Global AlphabetRef.s
; A$="QDPOHYQKPTBXQJCXSGMHQXEIBPZXMWMTISVSKHIETTJPQXWSGZHXLSPZMEEIPNHTNXPZJHBWHVMFXVYDWGXTYNIMKINJVMXJ"+
; "YDBLBPTJYLIPYDXYTMRZWOHYQGIZXVKJMCXRCKINQTJPWUHYEZVCXZMPWTBTMMXXOMTVRMCITJYLTMNJVMXILAEGMHGZYVHQKZ"+
; "ZHNWCOMXSPMPVWIIQVRMOSRMIIHMBNHTFSSMNXOSSNEBISPOIXGGMMITELCPVXWITJXKXQMMXCXZMPWTBTMMXXWIQAPXNVQQSNL"+
; "EGHSKVIJZQHGGMZYKJYYIHOHYQESNBIXVPTZYCMVXFSGEIZTVBVMLEEKVMLHRHVMNLIBZQXLTPDIKXWJZWUTVPZENQHCQSLIVGNS"+
; "GLUSVRWOSSNQHNVPDISLSSNPXLFMHFXLNCQSNLGFZVVAEGNIGAYPGEGMQCQSBEEAJQFXYLZXHFFCZXMHYRGIFTPFZYKWIBVRLVILZ"+
; "WMJYCHSBVIQOIEEIMPQHBGCGPXJYGKEKEIMPUNBWCOEBMGCGPXJYGKPXNVCJYJNMCNXZTMCXILMNCVRGXHYMGHNFGZRFTVEJXYBPJZ"+
; "HXOEEPIHNHCMYBLWCVYXMGCNXFHRAJINKSSWMXGPCGINKIRXILMPYNSXNVMPPBGGMIRNXGCGPXJYGIILMNYHEBLZCIYXVIJGIJNMCN"+
; "XOXRSZXKHTRVVWYMJGIWXVCQIHNHCCELTVBZXVXWRHEFXVCJYETZMOVXNRCNSKVMCMIVHQKZPXLESOVXL"
;A$="ZHNWCOMXSPMPVWIIQVRMOSRMIIHMBNHTFSSMNXOSSNEBISPOIXGGMMITELCPVXWITJXKXQMMXCXZMPWTBTMMXXWIQAPXNVQQSNL"
A$="XGSUAZRKOQGPALLGUSXARIUGRGXYGZGSPTPOGUOGSVEGAJKIOE"+
"SXGUKEOSEPFZDGSVEGERRGSQGZSRGPALLGUGSUFAVGOUGUVGOS"+
"GDKZSSFZFTPOGXFTTGAZLRFUDGVEZVEGAJDGSIKOLATSGZQKQG"+
"KZUSUFAUIRGEZXGSUAZLFAERRESDGVEGERRGSVEGERRGOEGSDG"+
"REZQGSFDFOKZUSGUHKAZGSDGXYELLFZSDGLGTTGSFADGZLKZUS"+
"DGDGZUGRRGSLRGUOEGSDGLEXYASDGQOKZDTGOGFASFZUIGEZUS"+
"DGSQOELLFZSXGSURKNAFZUOFAVGOKEURGSTGDKERRFZSRGSTGX"+
"YGSDGXYGVGAJPRKZXSFAPRFZDSRGSIFOUOKEUSRGSLRAGOSSGX"+
"YGSDFZURGIKOLATSGTGRGKDGSIKOLATSDGLOAEUSFPALLGUDAV"+
"EGAJUGTISUASKESPEGZDGSYESUFEOGSGUUAVFADOKESXFZUGOU"+
"GSXFZUGSGUUAFOAESNAKZDSFAVOGZURGZUGTGZUUGSQOKZDGSI"+
"FOUGSZEFOGS"
For n=1 To 26
L$=Chr(64+n)
If CountString(A$,L$)<>0
AddElement (Alphabet())
Alphabet()\Lettre=L$
Alphabet()\Nombre=CountString(A$,L$)
EndIf
Next n
SortStructuredList(Alphabet(), #PB_Sort_Descending, OffsetOf(Texte\Nombre), TypeOf(Texte\Nombre))
; Création de l'alphabet de référence
ForEach Alphabet()
AlphabetRef=AlphabetRef+Alphabet()\Lettre
Next
; -------------- Remplir la list des bigramme ---------------
For n=1 To Len(A$)-1
B$=Mid(A$,n,2)
Nombre=CountString(A$,B$)
; If CountString(C$,B$)=0
; C$=C$+B$
; Else
; Continue
; EndIf
AddElement(Tableau())
Tableau()\Bigramme=B$
Tableau()\Nbre=Nombre
Next n
SortStructuredList(Tableau(), #PB_Sort_Descending, OffsetOf(TexteBig\Nbre), TypeOf(TexteBig\Nbre))
ForEach Tableau()
Debug Tableau()\Bigramme + "---> "+ Str(Tableau()\Nbre)
Next
If OpenWindow(#Window, 0, 0, 800, 800, "Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )=0
End
EndIf
CanvasGadget(#TableauBigrammes,20,50,676,676)
StartDrawing(CanvasOutput(#TableauBigrammes))
Box(0,0,675,675,RGB(255,255,240))
StopDrawing()
If StartDrawing(CanvasOutput(#TableauBigrammes))
For X=0 To 700 Step 25
Line(X,0,1,675,RGB(0,0,0))
Next X
For Y= 0 To 700 Step 25
Line(0,Y,675,1,RGB(0,0,0))
Next Y
PasX=35
PasY=32
X=0
Y=0
ForEach Alphabet()
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(PasX,Y+6,Alphabet()\Lettre,RGB(0,0,0))
PasX+25
DrawText(X+8,PasY,Alphabet()\Lettre,RGB(0,0,0))
PasY+25
Next
ForEach Tableau()
LettreG=FindString(AlphabetRef,Left(Tableau()\Bigramme,1),1)
LettreD=FindString(AlphabetRef,Right(Tableau()\Bigramme,1),1)
; Debug "--------------- decoupage bigrammes ---------------"
; Debug Str(LettreG) + " ---> " + Str(LettreD)
Total.s=Str(Tableau()\Nbre)
If Len(total)=1
total=" "+Total
EndIf
DrawText((25*LettreD)+5,(25*LettreG)+5,Total,RGB(0,0,0))
;Debug Str(lettreD)+" ---> "
Next
StopDrawing()
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow