Gambas-it

Programmazione => Progetti degli utenti => Topic aperto da: vuott - 17 Settembre 2016, 17:31:41

Titolo: Teoria della scimmia instancabile
Inserito da: vuott - 17 Settembre 2016, 17:31:41
" La teoria della scimmia instancabile o delle scimmie infinite sostiene che se una scimmia preme su una tastiera tasti a caso per un tempo infinito, quasi certamente riuscirà a comporre un determinato testo. "

http://www.focus.it/scienza/scienze/che-cose-la-teoria-della-scimmia-instancabile
https://it.wikipedia.org/wiki/Teorema_della_scimmia_instancabile
http://www.ioprogrammo.it/index.php?topic=26511.msg96288;topicseen#msg96288

Ne ho fatto un semplice codice:     ;D
Codice: [Seleziona]
Private Const LUNG As Integer = 4
Private Const PAROLA As String = "ciao"


Public Sub Main()

  Dim fl As File
  Dim i, random As Integer
  Dim conteggio As Long
  Dim t As New Byte[LUNG]
  Dim ris As String
 
    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
Titolo: Re:Teoria della scimmia instancabile
Inserito da: kicco - 18 Settembre 2016, 09:12:31
 :ciao:
Ovviamente ho provato!
Interessante Teoria, relativa Critica e Dimostrazione!
 :)
Titolo: Re:Teoria della scimmia instancabile
Inserito da: allegfede - 04 Ottobre 2016, 17:33:09
Digitata la parola 'ciao' dopo 2760 tentativi.

con una piccola modifica per rendere piu' generico il test:

Codice: [Seleziona]
Public LUNG As Integer
Private Const PAROLA As String = "Perfezione"


Public Sub Main()

  Dim fl As File
  Dim i, random As Integer
  Dim conteggio As Long
  Dim t As New Byte[LUNG]
  Dim ris As String
 
 
    LUNG = Len(PAROLA)
 
    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

abbiamo un out of bound su t = CByte(random)
Titolo: Re:Teoria della scimmia instancabile
Inserito da: vuott - 04 Ottobre 2016, 18:41:45
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 !    :-X
Infatti la variabile globale "LUNG" resta inizializzata di default a zero.
Il tuo codice va corretto dunque come segue:
Codice: [Seleziona]
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 !    ;D
Inserendo ad esempio la più breve parola "perfez",  la scimmia ha impiegato  45957537 tentativi !!!    :death:


Titolo: Re:Teoria della scimmia instancabile
Inserito da: allegfede - 05 Ottobre 2016, 11:54:01
mi servono piu' scimmie .....
Titolo: Re:Teoria della scimmia instancabile
Inserito da: Top Fuel - 11 Dicembre 2016, 21:57:07
Ho provato a mettere "vuott" ma dopo 20 milioni di tentativi ho fermato il programma. ;D