Anagrames en utilisant un dico de mots [resolu]
Publié : ven. 29/févr./2008 14:59
Ma solution en bas de page
-----------
Voilà un truc sur lequel je planche dans le cadre de challenge javascript, programmation, logique, sql et compagnie. (hackbbs.org)
L'épreuve sur laquelle j'en chie consiste à récupérer des "mots mélangés" d'une page web et de trouver leur correspondance dans un dictionnaire de mots (est considéré comme mot une suite caractères alphanumérique).
Chaque mot dans ce dico est sur une ligne, c'est un simple .txt, pas de colonnes.
ex : Global dicofile$=Path$+"wordlist.txt"
cacao
pistache
123456
broutille
pure
basic
le dico contient plus de 1200 mots
Maintenant j'ai une série de 10 mots générés par la page web.
je les récupère et j'arrive à traiter la source pour qu'elle l'affiche que les 10 mots de la même façon, 1 par ligne
ex : source$
caoca
tachpie
654132
epur
bsica
Vous l'avez remarqué, les mots proposés font partie du dictionnaire, mais sont dans le désordre !
Comme il y a 1200 mots, c'est pas évident de retrouver les bons mots sans y passer 3 plombes.
Voilà le défi.
Sachant que les 10 mots proposés changent toutes les 30 secondes, est-ce qu'un prog en PB est capable de retrouver les dix mots correspondant dans le dico en moins de 30 secondes ?
Voilà mon début de code qui permet déjà de lire le dico (un simple readfile) et de récupérer les mots de la page php.
J'ai maintenant besoin de votre aide pour la suite.
Pouvez vous me montrer comment PB peut lire chaque ligne (mot) du dico et tester l'ordre des caractères afin de les comparer à URLmot1$, URLmot2$, URLmot3$... URLmot10$.
; notez que
len_mot1=len(URLmot1$)
URLmot1$=left(URLmot1$,len_mot1-1)
etc... ceci afin de ne pas prendre en compte l'astérix pour la comparaison
Merci pour votre aide.
Le dico est téléchargeable ici : http://arsworld.free.fr/pb/wordlist.txt
-----------
Voilà un truc sur lequel je planche dans le cadre de challenge javascript, programmation, logique, sql et compagnie. (hackbbs.org)
L'épreuve sur laquelle j'en chie consiste à récupérer des "mots mélangés" d'une page web et de trouver leur correspondance dans un dictionnaire de mots (est considéré comme mot une suite caractères alphanumérique).
Chaque mot dans ce dico est sur une ligne, c'est un simple .txt, pas de colonnes.
ex : Global dicofile$=Path$+"wordlist.txt"
cacao
pistache
123456
broutille
pure
basic
le dico contient plus de 1200 mots
Maintenant j'ai une série de 10 mots générés par la page web.
je les récupère et j'arrive à traiter la source pour qu'elle l'affiche que les 10 mots de la même façon, 1 par ligne
ex : source$
caoca
tachpie
654132
epur
bsica
Vous l'avez remarqué, les mots proposés font partie du dictionnaire, mais sont dans le désordre !
Comme il y a 1200 mots, c'est pas évident de retrouver les bons mots sans y passer 3 plombes.
Voilà le défi.
Sachant que les 10 mots proposés changent toutes les 30 secondes, est-ce qu'un prog en PB est capable de retrouver les dix mots correspondant dans le dico en moins de 30 secondes ?
Voilà mon début de code qui permet déjà de lire le dico (un simple readfile) et de récupérer les mots de la page php.
Code : Tout sélectionner
; Remettre les mots dans l'ordre
;
Global url$="http://hackbbs.org/miss/15/gene.php"
Global Path$=GetCurrentDirectory()
Global dicofile$=Path$+"wordlist.txt"
Procedure.s Affichentre(string.s, LString.s, RString.s)
Protected Affichentre.s, lindex.l, RIndex.l
lindex = FindString(string, LString, 0)
RIndex = FindString(string, RString, lindex+Len(LString))
If lindex And RIndex
lindex + Len(LString)
Affichentre = Mid(string, lindex, RIndex-lindex)
EndIf
ProcedureReturn Affichentre
EndProcedure
ProcedureDLL.s Url2Text2(Url.s, OpenType.b,ProxyAndPort.s)
;/ Author : Pille
isLoop.b=1
INET_RELOAD.l = $80000000
hInet.l=0
hURL.l=0
Bytes.l=0
Buffer.s= Space (2048 )
RES.s= ""
hInet = InternetOpen_ ( "" , OpenType, ProxyAndPort, "" , 0)
hURL = InternetOpenUrl_ (hInet, Url, #Null , 0, INET_RELOAD, 0)
Repeat
InternetReadFile_ (hURL,@Buffer, Len (Buffer), @Bytes)
If Bytes = 0
isLoop=0
Else
RES = RES + Left (Buffer, Bytes)
EndIf
Until isLoop=0
InternetCloseHandle_ (hURL)
InternetCloseHandle_ (hInet)
ProcedureReturn RES
EndProcedure
ProcedureDLL.s Url2Text(Url.s)
ProcedureReturn Url2Text2(Url,1, "" )
EndProcedure
; On y va
Source$=Url2Text(url$) ; Je récupe la source entière
Source$=Affichentre(Source$,"<td><li>","</li></td> </tr> </table>") ; j'affiche la liste de mot contenant encore des caractères html
Source$=ReplaceString(Source$,"</li></td> </tr><td><li>","*") ; je remplace les caracteres html par un *
Source$=Source$+"*"
MessageRequester("test","Mots de la page web"+Chr(10)+Source$) ;-TEST J'affiche les 10 mots pour être sûr que ça fonctionne
pos=1
Position = FindString(Source$, "*", pos)
URLmot1$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot1$)
Position = FindString(Source$, "*", pos)
URLmot2$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot2$)
Position = FindString(Source$, "*", pos)
URLmot3$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot3$)
Position = FindString(Source$, "*", pos)
URLmot4$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot4$)
Position = FindString(Source$, "*", pos)
URLmot5$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot5$)
Position = FindString(Source$, "*", pos)
URLmot6$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot6$)
Position = FindString(Source$, "*", pos)
URLmot7$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot7$)
Position = FindString(Source$, "*", pos)
URLmot8$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot8$)
Position = FindString(Source$, "*", pos)
URLmot9$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot9$)
Position = FindString(Source$, "*", pos)
URLmot10$=Left(Source$,Position)
Source$=RemoveString(Source$,URLmot10$)
MessageRequester("test2","Les 10 mots reconnus par PB"+Chr(10)+URLmot1$+URLmot2$+URLmot3$+URLmot4$+URLmot5$+URLmot6$+URLmot7$+URLmot8$+URLmot9$+URLmot10$)
; J'affiche les 10 mots pour être sûr que ça fonctionne
End
;--test affichage du dico
; If ReadFile(0, dicofile$)
; While Eof(0) = 0
; Debug ReadString(0)
; Wend
; CloseFile(0)
; Else
; MessageRequester("Information","Impossible d'ouvrir le fichier!")
; EndIf
Pouvez vous me montrer comment PB peut lire chaque ligne (mot) du dico et tester l'ordre des caractères afin de les comparer à URLmot1$, URLmot2$, URLmot3$... URLmot10$.
; notez que
len_mot1=len(URLmot1$)
URLmot1$=left(URLmot1$,len_mot1-1)
etc... ceci afin de ne pas prendre en compte l'astérix pour la comparaison
Merci pour votre aide.
Le dico est téléchargeable ici : http://arsworld.free.fr/pb/wordlist.txt