abbiamo un out of bound su t = CByte(random)
...perché quando crei la variabile vettoriale " t " in modo statico, le assegni una quantità di elementi pari a zero !
Infatti la variabile globale "
LUNG" resta inizializzata di default a zero.
Il tuo codice va corretto dunque come segue:
Public LUNG As Integer
Private Const PAROLA As String = "perfez"
Public Sub Main()
Dim fl As File
Dim i, random As Integer
Dim conteggio As Long
Dim t As Byte[]
Dim ris As String
LUNG = Len(PAROLA)
t = New Byte[LUNG]
File.Save("/tmp/scimmia", Null)
fl = Open "/tmp/scimmia" For Write Append
Do
For i = 0 To LUNG - 1
random = Rand(97, 123)
If random = 123 Then random = 32
t[i] = CByte(random)
Next
ris = t.ToString(0, t.Count)
Print #fl, ris
Inc conteggio
Loop Until ris = PAROLA
Print "Digitata la parola '"; PAROLA; "' dopo "; conteggio; " tentativi."
End
Oltre a ciò v'è un altro problema: hai posto una parola da comporre avente un carattere con codice ASCII inferiore a 97 (carattere maiuscolo della "P"). Laddove invece il programma (ripreso da quello originario) prende in considerazione soltanto le lettere minuscole: codici ASCII da 97 a 123 - vedi la riga:
Rand(97, 123). Quindi non sarà mai composta quella parola !
....e poi con una parola così lunga.... il programma morirà stanco !
Inserendo ad esempio la
più breve parola "perfez", la
scimmia ha impiegato 45957537 tentativi !!!