roy
Super Member >PLATINUM<
Salve chiedo per chi può una modifica a questo script postato da FILLOTTO che analizza le migliori 10 terzine su ruota,(considerando che identifica come migliori terzine quelle che hanno dato già il terno)volevo come modifica allo script la possibilità di eliminare le terzine che hanno dato in anticipo il terno.Grazie mille
Option Explicit
' Script Analisi Terzine ULTRA-OTTIMIZZATO
' Versione ad alte prestazioni con cache e algoritmi ottimizzati
' Classe per memorizzare i risultati delle terzine
Class clsTerzinaRisultato
Private m_aNumeri(3)
Private m_Frequenza
Private m_Ritardo
Private m_Punteggio
Sub Init(n1,n2,n3,freq,rit)
m_aNumeri(1) = n1
m_aNumeri(2) = n2
m_aNumeri(3) = n3
m_Frequenza = freq
m_Ritardo = rit
' Punteggio: alta frequenza = buono, alto ritardo = cattivo
m_Punteggio =(freq * 100) - rit
End Sub
Property Get NumeriStringa()
NumeriStringa = Format2(m_aNumeri(1)) & "-" & Format2(m_aNumeri(2)) & "-" & Format2(m_aNumeri(3))
End Property
Property Get Frequenza()
Frequenza = m_Frequenza
End Property
Property Get Ritardo()
Ritardo = m_Ritardo
End Property
Property Get Punteggio()
Punteggio = m_Punteggio
End Property
Property Get Numero(indice)
Numero = m_aNumeri(indice)
End Property
End Class
' Variabili globali per cache
Dim CacheEstrazioni()
Dim CacheInizializzata
Sub Main()
' --- INPUT UTENTE ---
Dim CodiceRuota,RuotaStr,UltimaEstrazione,NumEstrazioni
Dim InizioAnalisi,NumTerzineDaAnalizzare
' Selezione ruota
CodiceRuota = ScegliRuota()
If CodiceRuota = 0 Then
MsgBox "Nessuna ruota selezionata.",vbInformation
Exit Sub
End If
RuotaStr = NomeRuota(CodiceRuota)
' Parametri analisi
UltimaEstrazione = InputBox("Ultima estrazione da analizzare:","Input",CStr(EstrazioneFin))
If Not IsNumeric(UltimaEstrazione) Then Exit Sub
UltimaEstrazione = CLng(UltimaEstrazione)
NumEstrazioni = InputBox("Numero estrazioni da analizzare:","Input","50")
If Not IsNumeric(NumEstrazioni) Then Exit Sub
NumEstrazioni = CLng(NumEstrazioni)
InizioAnalisi = UltimaEstrazione - NumEstrazioni + 1
If InizioAnalisi < 1 Then InizioAnalisi = 1
' Ridotto drasticamente il numero di terzine per evitare timeout
NumTerzineDaAnalizzare = InputBox("Numero massimo terzine da testare:","Input","1000")
If Not IsNumeric(NumTerzineDaAnalizzare) Then Exit Sub
NumTerzineDaAnalizzare = CLng(NumTerzineDaAnalizzare)
' --- INIZIALIZZAZIONE CACHE ---
Call Messaggio("Inizializzazione cache estrazioni...")
Call InizializzaCache(CodiceRuota,InizioAnalisi,UltimaEstrazione)
' --- INIZIO ANALISI ---
Call Messaggio("Analisi in corso...")
Scrivi "=========================================================="
Scrivi "ANALISI TERZINE - VERSIONE ULTRA-OTTIMIZZATA"
Scrivi "Ruota: " & RuotaStr
Scrivi "Periodo: " & InizioAnalisi & " - " & UltimaEstrazione & " (" & NumEstrazioni & " estrazioni)"
Scrivi "Max terzine da testare: " & NumTerzineDaAnalizzare
Scrivi "=========================================================="
' --- STRATEGIA INTELLIGENTE ---
' Analizziamo solo le terzine più promettenti usando campionamento
Dim TopTerzine(10)
Dim i
For i = 1 To 10
Set TopTerzine(i) = Nothing
Next
' Campionamento intelligente delle terzine
Call AnalisiCampionamento(TopTerzine,CodiceRuota,InizioAnalisi,UltimaEstrazione,NumTerzineDaAnalizzare)
' --- RISULTATI ---
Scrivi "=========================================================="
Scrivi "RISULTATI ANALISI (TOP 10)"
Scrivi "=========================================================="
For i = 1 To 10
If Not TopTerzine(i) Is Nothing Then
Scrivi i & ") " & TopTerzine(i).NumeriStringa & " - Freq:" & TopTerzine(i).Frequenza & " Rit:" & TopTerzine(i).Ritardo & " Punt:" & TopTerzine(i).Punteggio
If i = 1 Then
' Dettagli per la migliore
Scrivi " >>> MIGLIORE TERZINA <<<"
If TopTerzine(i).Frequenza > 0 Then
Dim MediaUscite
MediaUscite = NumEstrazioni / TopTerzine(i).Frequenza
Scrivi " Media estrazioni tra uscite: " & Round(MediaUscite,1)
End If
End If
End If
Next
Scrivi "=========================================================="
Scrivi "Analisi completata!"
' Pulizia cache
CacheInizializzata = False
End Sub
' Inizializza cache delle estrazioni per velocizzare i calcoli
Sub InizializzaCache(CodiceRuota,InizioEstr,FineEstr)
Dim NumEstrazioni,i,j
NumEstrazioni = FineEstr - InizioEstr + 1
' Ridimensiona array cache
ReDim CacheEstrazioni(NumEstrazioni,5)
' Carica tutte le estrazioni in memoria
For i = 0 To NumEstrazioni - 1
For j = 1 To 5
CacheEstrazioni(i,j) = Estratto(InizioEstr + i,CodiceRuota,j)
Next
Next
CacheInizializzata = True
End Sub
' Analisi con campionamento intelligente
Sub AnalisiCampionamento(TopArray,CodiceRuota,InizioAnalisi,UltimaEstrazione,MaxTerzine)
Dim TerzineAnalizzate,i
TerzineAnalizzate = 0
' Strategia 1: Numeri più frequenti
Call Messaggio("Fase 1: Analisi numeri più frequenti...")
Dim NumeriFrequenti(20)
Call TrovaNumeriFriequenti(NumeriFrequenti,CodiceRuota,InizioAnalisi,UltimaEstrazione)
' Genera terzine dai numeri più frequenti
Dim n1,n2,n3
For i = 1 To 15
For n2 = i + 1 To 16
For n3 = n2 + 1 To 17
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
n1 = NumeriFrequenti(i)
If n1 > 0 And NumeriFrequenti(n2) > 0 And NumeriFrequenti(n3) > 0 Then
Call AnalizzaTerzina(n1,NumeriFrequenti(n2),NumeriFrequenti(n3),TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
End If
Next
Next
Next
' Strategia 2: Campionamento casuale distribuito
Call Messaggio("Fase 2: Campionamento distribuito...")
Dim StepCampionamento
StepCampionamento = 90 \ 10 ' Dividi in 10 fasce
For i = 1 To 88 Step StepCampionamento
For n2 = i + 1 To i + StepCampionamento - 1
For n3 = n2 + 1 To i + StepCampionamento
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
If n3 <= 90 Then
Call AnalizzaTerzina(i,n2,n3,TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
End If
Next
Next
Next
' Strategia 3: Sequenze specifiche
Call Messaggio("Fase 3: Sequenze specifiche...")
' Terzine consecutive
For i = 1 To 88
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
Call AnalizzaTerzina(i,i + 1,i + 2,TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
Next
Scrivi "Terzine analizzate: " & TerzineAnalizzate
End Sub
' Trova i numeri più frequenti nel periodo
Sub TrovaNumeriFriequenti(NumeriArray,CodiceRuota,InizioEstr,FineEstr)
Dim FreqNumeri(90),i,j,NumEstr
' Inizializza frequenze
For i = 1 To 90
FreqNumeri(i) = 0
Next
' Conta frequenze usando la cache
For i = 0 To UBound(CacheEstrazioni,1)
For j = 1 To 5
If CacheEstrazioni(i,j) > 0 And CacheEstrazioni(i,j) <= 90 Then
FreqNumeri(CacheEstrazioni(i,j)) = FreqNumeri(CacheEstrazioni(i,j)) + 1
End If
Next
Next
' Ordina per frequenza (bubble sort semplificato)
Dim TempFreq,TempNum,NumeriOrdinati(90)
For i = 1 To 90
NumeriOrdinati(i) = i
Next
For i = 1 To 89
For j = i + 1 To 90
If FreqNumeri(NumeriOrdinati(i)) < FreqNumeri(NumeriOrdinati(j)) Then
TempNum = NumeriOrdinati(i)
NumeriOrdinati(i) = NumeriOrdinati(j)
NumeriOrdinati(j) = TempNum
End If
Next
Next
' Copia i primi 20
For i = 1 To 20
NumeriArray(i) = NumeriOrdinati(i)
Next
End Sub
' Analizza una singola terzina
Sub AnalizzaTerzina(n1,n2,n3,TopArray,InizioAnalisi,UltimaEstrazione)
Dim Frequenza,Ritardo
' Calcola frequenza e ritardo ottimizzati
Frequenza = CalcolaFrequenzaOttimizzata(n1,n2,n3)
Ritardo = CalcolaRitardoOttimizzato(n1,n2,n3,UltimaEstrazione - InizioAnalisi + 1)
' Crea oggetto risultato
Dim TerzinaCorrente
Set TerzinaCorrente = New clsTerzinaRisultato
Call TerzinaCorrente.Init(n1,n2,n3,Frequenza,Ritardo)
' Inserisce nella top 10 se merita
Call InserisciInTop10(TopArray,TerzinaCorrente)
End Sub
' Calcola frequenza usando la cache (molto più veloce)
Function CalcolaFrequenzaOttimizzata(n1,n2,n3)
Dim Frequenza,i,j,ContaTrovati
Frequenza = 0
For i = 0 To UBound(CacheEstrazioni,1)
ContaTrovati = 0
For j = 1 To 5
If CacheEstrazioni(i,j) = n1 Or CacheEstrazioni(i,j) = n2 Or CacheEstrazioni(i,j) = n3 Then
ContaTrovati = ContaTrovati + 1
End If
Next
If ContaTrovati >= 3 Then
Frequenza = Frequenza + 1
End If
Next
CalcolaFrequenzaOttimizzata = Frequenza
End Function
' Calcola ritardo usando la cache (molto più veloce)
Function CalcolaRitardoOttimizzato(n1,n2,n3,NumEstrazioni)
Dim Ritardo,i,j,ContaTrovati
Ritardo = 0
' Cerca dall'ultima estrazione all'indietro
For i = UBound(CacheEstrazioni,1) To 0 Step - 1
ContaTrovati = 0
For j = 1 To 5
If CacheEstrazioni(i,j) = n1 Or CacheEstrazioni(i,j) = n2 Or CacheEstrazioni(i,j) = n3 Then
ContaTrovati = ContaTrovati + 1
End If
Next
If ContaTrovati >= 3 Then
Exit For ' Trovata, ritardo calcolato
End If
Ritardo = Ritardo + 1
Next
CalcolaRitardoOttimizzato = Ritardo
End Function
' Inserisce terzina nella top 10 se merita
Sub InserisciInTop10(TopArray,NuovaTerzina)
Dim i,j
' Trova posizione dove inserire
For i = 1 To 10
If TopArray(i) Is Nothing Then
' Posizione libera, inserisce qui
Set TopArray(i) = NuovaTerzina
Exit For
ElseIf NuovaTerzina.Punteggio > TopArray(i).Punteggio Then
' Sposta tutti gli elementi in basso
For j = 10 To i + 1 Step - 1
If j > 1 Then
Set TopArray(j) = TopArray(j - 1)
End If
Next
' Inserisce nuovo elemento
Set TopArray(i) = NuovaTerzina
Exit For
End If
Next
End Sub
' Funzione di supporto per formattare numeri a 2 cifre
Function Format2(numero)
If numero < 10 Then
Format2 = "0" & numero
Else
Format2 = CStr(numero)
End If
End Function
Option Explicit
' Script Analisi Terzine ULTRA-OTTIMIZZATO
' Versione ad alte prestazioni con cache e algoritmi ottimizzati
' Classe per memorizzare i risultati delle terzine
Class clsTerzinaRisultato
Private m_aNumeri(3)
Private m_Frequenza
Private m_Ritardo
Private m_Punteggio
Sub Init(n1,n2,n3,freq,rit)
m_aNumeri(1) = n1
m_aNumeri(2) = n2
m_aNumeri(3) = n3
m_Frequenza = freq
m_Ritardo = rit
' Punteggio: alta frequenza = buono, alto ritardo = cattivo
m_Punteggio =(freq * 100) - rit
End Sub
Property Get NumeriStringa()
NumeriStringa = Format2(m_aNumeri(1)) & "-" & Format2(m_aNumeri(2)) & "-" & Format2(m_aNumeri(3))
End Property
Property Get Frequenza()
Frequenza = m_Frequenza
End Property
Property Get Ritardo()
Ritardo = m_Ritardo
End Property
Property Get Punteggio()
Punteggio = m_Punteggio
End Property
Property Get Numero(indice)
Numero = m_aNumeri(indice)
End Property
End Class
' Variabili globali per cache
Dim CacheEstrazioni()
Dim CacheInizializzata
Sub Main()
' --- INPUT UTENTE ---
Dim CodiceRuota,RuotaStr,UltimaEstrazione,NumEstrazioni
Dim InizioAnalisi,NumTerzineDaAnalizzare
' Selezione ruota
CodiceRuota = ScegliRuota()
If CodiceRuota = 0 Then
MsgBox "Nessuna ruota selezionata.",vbInformation
Exit Sub
End If
RuotaStr = NomeRuota(CodiceRuota)
' Parametri analisi
UltimaEstrazione = InputBox("Ultima estrazione da analizzare:","Input",CStr(EstrazioneFin))
If Not IsNumeric(UltimaEstrazione) Then Exit Sub
UltimaEstrazione = CLng(UltimaEstrazione)
NumEstrazioni = InputBox("Numero estrazioni da analizzare:","Input","50")
If Not IsNumeric(NumEstrazioni) Then Exit Sub
NumEstrazioni = CLng(NumEstrazioni)
InizioAnalisi = UltimaEstrazione - NumEstrazioni + 1
If InizioAnalisi < 1 Then InizioAnalisi = 1
' Ridotto drasticamente il numero di terzine per evitare timeout
NumTerzineDaAnalizzare = InputBox("Numero massimo terzine da testare:","Input","1000")
If Not IsNumeric(NumTerzineDaAnalizzare) Then Exit Sub
NumTerzineDaAnalizzare = CLng(NumTerzineDaAnalizzare)
' --- INIZIALIZZAZIONE CACHE ---
Call Messaggio("Inizializzazione cache estrazioni...")
Call InizializzaCache(CodiceRuota,InizioAnalisi,UltimaEstrazione)
' --- INIZIO ANALISI ---
Call Messaggio("Analisi in corso...")
Scrivi "=========================================================="
Scrivi "ANALISI TERZINE - VERSIONE ULTRA-OTTIMIZZATA"
Scrivi "Ruota: " & RuotaStr
Scrivi "Periodo: " & InizioAnalisi & " - " & UltimaEstrazione & " (" & NumEstrazioni & " estrazioni)"
Scrivi "Max terzine da testare: " & NumTerzineDaAnalizzare
Scrivi "=========================================================="
' --- STRATEGIA INTELLIGENTE ---
' Analizziamo solo le terzine più promettenti usando campionamento
Dim TopTerzine(10)
Dim i
For i = 1 To 10
Set TopTerzine(i) = Nothing
Next
' Campionamento intelligente delle terzine
Call AnalisiCampionamento(TopTerzine,CodiceRuota,InizioAnalisi,UltimaEstrazione,NumTerzineDaAnalizzare)
' --- RISULTATI ---
Scrivi "=========================================================="
Scrivi "RISULTATI ANALISI (TOP 10)"
Scrivi "=========================================================="
For i = 1 To 10
If Not TopTerzine(i) Is Nothing Then
Scrivi i & ") " & TopTerzine(i).NumeriStringa & " - Freq:" & TopTerzine(i).Frequenza & " Rit:" & TopTerzine(i).Ritardo & " Punt:" & TopTerzine(i).Punteggio
If i = 1 Then
' Dettagli per la migliore
Scrivi " >>> MIGLIORE TERZINA <<<"
If TopTerzine(i).Frequenza > 0 Then
Dim MediaUscite
MediaUscite = NumEstrazioni / TopTerzine(i).Frequenza
Scrivi " Media estrazioni tra uscite: " & Round(MediaUscite,1)
End If
End If
End If
Next
Scrivi "=========================================================="
Scrivi "Analisi completata!"
' Pulizia cache
CacheInizializzata = False
End Sub
' Inizializza cache delle estrazioni per velocizzare i calcoli
Sub InizializzaCache(CodiceRuota,InizioEstr,FineEstr)
Dim NumEstrazioni,i,j
NumEstrazioni = FineEstr - InizioEstr + 1
' Ridimensiona array cache
ReDim CacheEstrazioni(NumEstrazioni,5)
' Carica tutte le estrazioni in memoria
For i = 0 To NumEstrazioni - 1
For j = 1 To 5
CacheEstrazioni(i,j) = Estratto(InizioEstr + i,CodiceRuota,j)
Next
Next
CacheInizializzata = True
End Sub
' Analisi con campionamento intelligente
Sub AnalisiCampionamento(TopArray,CodiceRuota,InizioAnalisi,UltimaEstrazione,MaxTerzine)
Dim TerzineAnalizzate,i
TerzineAnalizzate = 0
' Strategia 1: Numeri più frequenti
Call Messaggio("Fase 1: Analisi numeri più frequenti...")
Dim NumeriFrequenti(20)
Call TrovaNumeriFriequenti(NumeriFrequenti,CodiceRuota,InizioAnalisi,UltimaEstrazione)
' Genera terzine dai numeri più frequenti
Dim n1,n2,n3
For i = 1 To 15
For n2 = i + 1 To 16
For n3 = n2 + 1 To 17
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
n1 = NumeriFrequenti(i)
If n1 > 0 And NumeriFrequenti(n2) > 0 And NumeriFrequenti(n3) > 0 Then
Call AnalizzaTerzina(n1,NumeriFrequenti(n2),NumeriFrequenti(n3),TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
End If
Next
Next
Next
' Strategia 2: Campionamento casuale distribuito
Call Messaggio("Fase 2: Campionamento distribuito...")
Dim StepCampionamento
StepCampionamento = 90 \ 10 ' Dividi in 10 fasce
For i = 1 To 88 Step StepCampionamento
For n2 = i + 1 To i + StepCampionamento - 1
For n3 = n2 + 1 To i + StepCampionamento
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
If n3 <= 90 Then
Call AnalizzaTerzina(i,n2,n3,TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
End If
Next
Next
Next
' Strategia 3: Sequenze specifiche
Call Messaggio("Fase 3: Sequenze specifiche...")
' Terzine consecutive
For i = 1 To 88
If TerzineAnalizzate >= MaxTerzine Then Exit Sub
Call AnalizzaTerzina(i,i + 1,i + 2,TopArray,InizioAnalisi,UltimaEstrazione)
TerzineAnalizzate = TerzineAnalizzate + 1
Next
Scrivi "Terzine analizzate: " & TerzineAnalizzate
End Sub
' Trova i numeri più frequenti nel periodo
Sub TrovaNumeriFriequenti(NumeriArray,CodiceRuota,InizioEstr,FineEstr)
Dim FreqNumeri(90),i,j,NumEstr
' Inizializza frequenze
For i = 1 To 90
FreqNumeri(i) = 0
Next
' Conta frequenze usando la cache
For i = 0 To UBound(CacheEstrazioni,1)
For j = 1 To 5
If CacheEstrazioni(i,j) > 0 And CacheEstrazioni(i,j) <= 90 Then
FreqNumeri(CacheEstrazioni(i,j)) = FreqNumeri(CacheEstrazioni(i,j)) + 1
End If
Next
Next
' Ordina per frequenza (bubble sort semplificato)
Dim TempFreq,TempNum,NumeriOrdinati(90)
For i = 1 To 90
NumeriOrdinati(i) = i
Next
For i = 1 To 89
For j = i + 1 To 90
If FreqNumeri(NumeriOrdinati(i)) < FreqNumeri(NumeriOrdinati(j)) Then
TempNum = NumeriOrdinati(i)
NumeriOrdinati(i) = NumeriOrdinati(j)
NumeriOrdinati(j) = TempNum
End If
Next
Next
' Copia i primi 20
For i = 1 To 20
NumeriArray(i) = NumeriOrdinati(i)
Next
End Sub
' Analizza una singola terzina
Sub AnalizzaTerzina(n1,n2,n3,TopArray,InizioAnalisi,UltimaEstrazione)
Dim Frequenza,Ritardo
' Calcola frequenza e ritardo ottimizzati
Frequenza = CalcolaFrequenzaOttimizzata(n1,n2,n3)
Ritardo = CalcolaRitardoOttimizzato(n1,n2,n3,UltimaEstrazione - InizioAnalisi + 1)
' Crea oggetto risultato
Dim TerzinaCorrente
Set TerzinaCorrente = New clsTerzinaRisultato
Call TerzinaCorrente.Init(n1,n2,n3,Frequenza,Ritardo)
' Inserisce nella top 10 se merita
Call InserisciInTop10(TopArray,TerzinaCorrente)
End Sub
' Calcola frequenza usando la cache (molto più veloce)
Function CalcolaFrequenzaOttimizzata(n1,n2,n3)
Dim Frequenza,i,j,ContaTrovati
Frequenza = 0
For i = 0 To UBound(CacheEstrazioni,1)
ContaTrovati = 0
For j = 1 To 5
If CacheEstrazioni(i,j) = n1 Or CacheEstrazioni(i,j) = n2 Or CacheEstrazioni(i,j) = n3 Then
ContaTrovati = ContaTrovati + 1
End If
Next
If ContaTrovati >= 3 Then
Frequenza = Frequenza + 1
End If
Next
CalcolaFrequenzaOttimizzata = Frequenza
End Function
' Calcola ritardo usando la cache (molto più veloce)
Function CalcolaRitardoOttimizzato(n1,n2,n3,NumEstrazioni)
Dim Ritardo,i,j,ContaTrovati
Ritardo = 0
' Cerca dall'ultima estrazione all'indietro
For i = UBound(CacheEstrazioni,1) To 0 Step - 1
ContaTrovati = 0
For j = 1 To 5
If CacheEstrazioni(i,j) = n1 Or CacheEstrazioni(i,j) = n2 Or CacheEstrazioni(i,j) = n3 Then
ContaTrovati = ContaTrovati + 1
End If
Next
If ContaTrovati >= 3 Then
Exit For ' Trovata, ritardo calcolato
End If
Ritardo = Ritardo + 1
Next
CalcolaRitardoOttimizzato = Ritardo
End Function
' Inserisce terzina nella top 10 se merita
Sub InserisciInTop10(TopArray,NuovaTerzina)
Dim i,j
' Trova posizione dove inserire
For i = 1 To 10
If TopArray(i) Is Nothing Then
' Posizione libera, inserisce qui
Set TopArray(i) = NuovaTerzina
Exit For
ElseIf NuovaTerzina.Punteggio > TopArray(i).Punteggio Then
' Sposta tutti gli elementi in basso
For j = 10 To i + 1 Step - 1
If j > 1 Then
Set TopArray(j) = TopArray(j - 1)
End If
Next
' Inserisce nuovo elemento
Set TopArray(i) = NuovaTerzina
Exit For
End If
Next
End Sub
' Funzione di supporto per formattare numeri a 2 cifre
Function Format2(numero)
If numero < 10 Then
Format2 = "0" & numero
Else
Format2 = CStr(numero)
End If
End Function