13. februar 2008 - 22:52Der er
25 kommentarer og 1 løsning
Brute forcer algoritme
hej eksperter. jeg prøver på at lave en brute forcer, jeg vil hav en tekst streng til at ændre sig sådan: a > b > c - z aa > ab > ac ba > bb > ba osv. er der nogen der kan hjælpe med at lave en sådan algoritme(det tror jeg det hedder)
jeg tænkte på noget i retningen af: do streng = chr(index) index = index + 1 loop
den skal "køre igennem" store bogstaver, små bogstaver og tal
Module Main Sub Perm(ca() As Char, ix As Integer) If ix < ca.Length - 1 Then Dim i As Integer For i = 0 to 25 ca(ix) = Convert.ToChar(97 + i) Perm(ca, ix + 1) Next Else Console.WriteLine(New string(ca)) End If End Sub Sub Perm(n As Integer) Dim i As Integer For i = 1 To n Dim ca(i) As Char Perm(ca, 0) Next End Sub Sub Main() Perm(2) End Sub End Module
Btw hvordan får jeg koden til at fortsætte med at lave kombinationer? dvs flere end 2 cifre, F.eks hvis jeg gerne vil have den til at lave 10 (aaaaaaaaaa > aaaaaaaaab) osv
jeg skal kun bruge en af gangen, de skal skrives i et textarea(multiline textbox) på hver sin linie. jeg vil gerne have en variablel til at indeholde først a derefter b osv.
Til reference: 1-10 tegn (med det tegnsæt du nævner) giver 146.813.779.479.510 forskellige kombinationer - heraf er 141.167.095.653.376 af dem på 10 tegn, mens resten er 1-9. Hvis vi går ud fra at du kan generere 1 million kombinationer i sekundet (for nu lige at have et nemt tal at arbejde med), vil det tage dig ca. 4 år og 8 måneder at løbe dem igennem.
En god benchmark ville være at prøve med 1-6 tegn, der "kun" er 321.272.406 kombinationer - gang antallet af sekunder det tager at løbe dem igennem med 5 dage og 7 timer, så har du et meget godt estimat af hvor lang tid 1-10 tegn vil tage.
Mht. tekstboks, vil den nok allerede dø når den er igang med 6 tegn.
skal jeg ikke putte koden i et modul? (højre-klik i solution explorer > add > module) jeg har prøvet sta skrive textbox1.text = ta men får bare "name 'ta' is not declared."
Imports System Public Class Form1 Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code " Module Main Sub Perm(ByVal ca() As Char, ByVal ix As Integer) If ix < ca.Length - 1 Then Dim i As Integer For i = 0 To 25 ca(ix) = Convert.ToChar(97 + i) Perm(ca, ix + 1) Next Else ta.Text += (New String(ca) + Environment.NewLine) End If End Sub Sub Perm(ByVal n As Integer) Dim i As Integer For i = 1 To n Dim ca(i) As Char Perm(ca, 0) Next End Sub Sub Main() Perm(2) End Sub End Module End Class
det giver mig "module statements can occur only at file or namespace level." undskyld jeg spørger så meget, men jeg bruger ikke visual basic ret meget
Private Sub cmdnext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdnext.Click Perm(2) End Sub -------------------------------------------------------------------------
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub -------------------------------------------------------------------------
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Perm(2) End Sub -------------------------------------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Start() End Sub -------------------------------------------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Timer1.Stop() End Sub -------------------------------------------------------------------------
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Perm(2) End Sub -------------------------------------------------------------------------
Sub Perm(ByVal ca() As Char, ByVal ix As Integer) If ix < ca.Length - 1 Then Dim i As Integer For i = 0 To 25 ca(ix) = Convert.ToChar(97 + i) Perm(ca, ix + 1) Next Else txtmain.Text += (New String(ca) + Environment.NewLine) End If End Sub -------------------------------------------------------------------------
Sub Perm(ByVal n As Integer) Dim i As Integer For i = 1 To n Dim ca(i) As Char Perm(ca, 0) Next End Sub End Class -------------------------------------------------------------------------
jeg får ingen fejl, men den skriver "abcdefghijklmnopqrstuvwxyzaaabacadaeafagahai......" på en gang, istedet for at gå et trin videre når jeg trykker?
Ahh, det er den ikke, jeg mente at jeg ville have dem til at komme frem en af gangen i en single-line textbox når jeg klikkede på knappen. det med multiline textbox er noget helt andet, det kan jeg godt selv klare :D,
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.