Autore Topic: Teoria della scimmia instancabile  (Letto 718 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Teoria della scimmia instancabile
« il: 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
« Ultima modifica: 18 Settembre 2016, 13:57:34 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.700
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Teoria della scimmia instancabile
« Risposta #1 il: 18 Settembre 2016, 09:12:31 »
 :ciao:
Ovviamente ho provato!
Interessante Teoria, relativa Critica e Dimostrazione!
 :)
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Teoria della scimmia instancabile
« Risposta #2 il: 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)
« Ultima modifica: 04 Ottobre 2016, 17:36:47 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.262
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Teoria della scimmia instancabile
« Risposta #3 il: 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:


« Ultima modifica: 05 Ottobre 2016, 01:10:13 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Teoria della scimmia instancabile
« Risposta #4 il: 05 Ottobre 2016, 11:54:01 »
mi servono piu' scimmie .....
se corri, morirai stanco (motto degli sniper)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re:Teoria della scimmia instancabile
« Risposta #5 il: 11 Dicembre 2016, 21:57:07 »
Ho provato a mettere "vuott" ma dopo 20 milioni di tentativi ho fermato il programma. ;D
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.