Option Explicit
Sub Main
Dim aN
Dim nClasse,nSorte
Dim Inizio,Fine
Dim aColonne,aCombUtili,aCombInutili,aRuote
Dim k,j
Dim nStoricoGruppo
Dim nIdCombUtile,nIdCombInutile
Dim sComb
Dim aBEstrCoperte , nEstrCoperteOrig
Dim aRetComb
nClasse = 2
nSorte = 2
Inizio = EstrazioneIni
Fine = EstrazioneFin
If ScegliRuote(aRuote) > 0 Then
If ScegliNumeri(aN) >= nClasse Then
aColonne = SviluppoIntegrale(aN,nClasse)
ReDim aCombUtili(UBound(aColonne),nClasse)
ReDim aCombInutili(UBound(aColonne),nClasse)
nStoricoGruppo = GetStorico(aColonne,Inizio,Fine,nClasse,aRuote,0,nSorte)
Call GetArrayIdEstrazioni(aBEstrCoperte,Inizio,Fine,aColonne ,nClasse,nSorte,aRuote)
nEstrCoperteOrig = GetEstrazioniCoperte(aBEstrCoperte,Inizio,Fine)
Scrivi "Storico del gruppo : " & GetStorico(aColonne,Inizio,Fine,nClasse,aRuote,0,nSorte)
ReDim aTb(2)
aTb(1) = "Ambo"
aTb(2) = "Storico Senza"
Call InitTabella(aTb)
For k = 1 To UBound(aColonne)
aTb(1) = aColonne(k,1) & "." & aColonne(k,2)
aTb(2) = GetStorico(aColonne,Inizio,Fine,nClasse,aRuote,k,nSorte)
If aTb(2) > nStoricoGruppo Then
nIdCombUtile = nIdCombUtile + 1
For j = 1 To nClasse
aCombUtili(nIdCombUtile,j) = aColonne(k,j)
Next
Call AddRigaTabella(aTb,vbGreen)
Else
nIdCombInutile = nIdCombInutile + 1
For j = 1 To nClasse
aCombInutili(nIdCombInutile,j) = aColonne(k,j)
Next
Call AddRigaTabella(aTb,vbRed)
End If
Call AvanzamentoElab(0,UBound(aColonne),k)
If ScriptInterrotto Then Exit For
Next
Call CreaTabella(2,1)
Scrivi
Scrivi "Storico del gruppo senza le combinazioni escluse (quelle rosse): " & GetStorico(aCombUtili,Inizio,Fine,nClasse,aRuote,0,nSorte)
Scrivi "Combinazioni totali : " & UBound(aColonne)
Scrivi "Combinazioni utili : " & nIdCombUtile
Scrivi "Combinazioni scartate : " & UBound(aColonne) - nIdCombUtile & " (" & Round(ProporzioneX((UBound(aColonne) - nIdCombUtile),UBound(aColonne),100),2) & ")"
Scrivi "Lista combinazioni utili"
For k = 1 To nIdCombUtile
sComb = ""
For j = 1 To nClasse
sComb = sComb & Format2(aCombUtili(k,j)) & "."
Next
Call Scrivi(RimuoviLastChr(sComb,"."))
If ScriptInterrotto Then Exit For
Next
Scrivi
Scrivi "Lista estrazioni scoperte"
Call GetArrayIdEstrazioni(aBEstrCoperte,Inizio,Fine,aCombUtili,nClasse,nSorte,aRuote)
j = 0
For k = Inizio To Fine
If Not aBEstrCoperte(k) Then
j = j + 1
Scrivi FormatSpace(j,5,True) & ") " & k
End If
Next
Messaggio "Ricerca combinazioni indispensabili"
k = 0
Do While GetEstrazioniCoperte(aBEstrCoperte,Inizio,Fine) < nEstrCoperteOrig
Call GetCombMigliore(aCombInutili,aBEstrCoperte,Inizio,Fine,aRuote,nClasse,nSorte,aRetComb)
nIdCombUtile = nIdCombUtile + 1
For j = 1 To nClasse
aCombUtili(nIdCombUtile,j) = aRetComb(j)
Next
Call GetArrayIdEstrazioni(aBEstrCoperte,Inizio,Fine,aCombUtili,nClasse,nSorte,aRuote)
k = k + 1
Call AvanzamentoElab(1,nIdCombInutile,k)
If ScriptInterrotto Then Exit Do
If k = nIdCombInutile Then Exit Do
Loop
Scrivi
Scrivi "Elenco combinazioni indispensabili : " & nIdCombUtile
Scrivi "Ritardo storico :" & GetStorico(aCombUtili,Inizio,Fine,nClasse,aRuote,0,nSorte)
Scrivi
Scrivi "Combinazioni totali : " & UBound(aColonne)
Scrivi "Combinazioni utili : " & nIdCombUtile
Scrivi "Combinazioni scartate : " & UBound(aColonne) - nIdCombUtile & " (" & Round(ProporzioneX((UBound(aColonne) - nIdCombUtile),UBound(aColonne),100),2) & ")"
Scrivi
For k = 1 To nIdCombUtile
sComb = ""
For j = 1 To nClasse
sComb = sComb & Format2(aCombUtili(k,j)) & "."
Next
Call Scrivi(RimuoviLastChr(sComb,"."))
If ScriptInterrotto Then Exit For
Next
End If
End If
End Sub
Function GetStorico(aColonne,Inizio,Fine,nClasse,aRuote,nIdDaEscludere,nSorte)
Dim k,j
Dim nRitMax
ReDim an(nClasse)
For k = 1 To UBound(aColonne)
If k <> nIdDaEscludere Then
If aColonne(k,1) > 0 Then
For j = 1 To nClasse
an(j) = aColonne(k,j)
Next
Call AddNumeriToGruppoStatistico(an,aRuote)
End If
End If
If ScriptInterrotto Then Exit For
Next
Call StatisticaGruppoFormazioniTurbo(nSorte,0,nRitMax,0,"",Inizio,Fine)
GetStorico = nRitMax
End Function
Sub GetArrayIdEstrazioni(aRetIdEstr,Inizio,Fine,aComb,nClasse,nSorte,aRuote)
Dim k,j
ReDim aRetIdEstr(Fine)
Dim aRit,aIdEstr
ReDim aN(nClasse)
For k = 1 To UBound(aComb)
If aComb(k,1) > 0 Then
For j = 1 To nClasse
aN(j) = aComb(k,j)
Next
Call ElencoRitardiTurbo(aN,aRuote,nSorte,Inizio,Fine,aRit,aIdEstr)
For j = 1 To UBound(aIdEstr) - 1
aRetIdEstr(aIdEstr(j)) = True
Next
End If
Call AvanzamentoElab(1,UBound(aComb),k)
If ScriptInterrotto Then Exit For
Next
End Sub
Function GetEstrazioniCoperte(aBEstr,Inizio,fine)
Dim k
Dim ret
For k = Inizio To fine
If aBEstr(k) Then
ret = ret + 1
End If
Next
GetEstrazioniCoperte = ret
End Function
Sub GetCombMigliore(aCombInutili,aBEstrCoperte,Inizio,Fine,aRuote,nClasse,nSorte,aRet)
Dim k,j
Dim nFrq
Dim nCoperte,nCoperteMax,nIdCombMigliore
ReDim aRet(nClasse)
ReDim aN(nClasse)
nCoperteMax = 0
For k = 1 To UBound(aCombInutili)
If aCombInutili(k,1) > 0 Then
nCoperte = 0
For j = 1 To nClasse
aN(j) = aCombInutili(k,j)
Next
For j = Inizio To Fine
If Not aBEstrCoperte(j) Then
Call StatFrzTurbo(aN,aRuote,nSorte,0,0,0,nFrq,,j,j)
If nFrq > 0 Then
nCoperte = nCoperte + 1
End If
End If
Next
If nCoperte > nCoperteMax Then
nCoperteMax = nCoperte
nIdCombMigliore = k
End If
End If
Next
For k = 1 To nClasse
aRet(k) = aCombInutili(nIdCombMigliore,k)
aCombInutili(nIdCombMigliore,k) = 0
Next
End Sub