Option Explicit
Class clsCombinazione
Private m_UltEstUscita
Private m_Key
Private m_aNum
Private m_Classe
Private m_Index
Sub Class_Initialize
' codice
End Sub
Sub Class_Terminate
' codice
End Sub
Public Property Get Index
Index = m_Index
End Property
Public Property Let Index(NewValue)
m_Index = NewValue
End Property
Public Property Get Classe
Classe = m_Classe
End Property
Public Property Let Classe(NewValue)
m_Classe = NewValue
End Property
Public Property Get Key
Key = m_Key
End Property
Public Property Let Key(NewValue)
m_Key = NewValue
End Property
Public Property Get aNum
aNum = m_aNum
End Property
Public Property Let aNum(NewValue)
m_aNum = NewValue
End Property
Public Property Get UltEstUscita
UltEstUscita = m_UltEstUscita
End Property
Public Property Let UltEstUscita(NewValue)
m_UltEstUscita = NewValue
End Property
Function GetStringaNum
GetStringaNum = StringaNumeri(m_aNum,,True)
End Function
Function AlimentaCollLunghetta(CollLunghette,CollCombBase,nClasseLung)
Dim abNum,nClasseTmp
Dim n
ReDim aCol(0)
Dim sKey,cItem
Dim bFound,bNonAdatta
Dim aNum
Dim nNumIni,nNumAggiunto
Dim sRadice
nClasseTmp = m_Classe
abNum = ArrayNumeriToBool(m_aNum)
nNumIni = 0
sRadice = StringaNumeri(m_aNum,,True)
Do While nNumIni < 90
nNumIni = nNumIni + 1
Do While nClasseTmp < nClasseLung
bFound = False
Call Messaggio("Analisi radice " & sRadice)
bNonAdatta = True
For n = nNumIni To 90
If abNum(n) = False Then
nNumAggiunto = n
abNum(n) = True
nClasseTmp = nClasseTmp + 1
'ReDim aNum(nClasseTmp)
Call ArrayBNumToArrayNum(abNum,aNum)
Call InitSviluppoIntegrale(aNum,m_Classe)
bNonAdatta = False
Do While GetCombSviluppo(aCol)
sKey = "k" & StringaNumeri(aCol,,True)
If GetItemCollection(CollCombBase,sKey,cItem) Then
If cItem.Index > m_Index Then
bNonAdatta = True
abNum(n) = False
nClasseTmp = nClasseTmp - 1
Exit Do
End If
End If
Loop
If bNonAdatta = False Then Exit For
End If
Next
If bNonAdatta Then Exit Do
Loop
If nClasseTmp = nClasseLung Then
Dim clsL
Set clsL = New clsCombinazione
clsL.aNum = aNum
clsL.Classe = nClasseLung
clsL.UltEstUscita = m_UltEstUscita
sKey = "k" & StringaNumeri(aNum,,True)
On Error Resume Next
Call AddItemColl(CollLunghette,clsL,sKey)
nNumIni = nNumAggiunto
abNum(nNumAggiunto) = False
nClasseTmp = nClasseTmp - 1
Else
nNumIni = 90
End If
Loop
End Function
End Class
Sub Main
Dim collCombBase,CollLunghette,nSorte,aRuote,Ini,fin,sMsg,nMoltip
Dim nCicloTeo,nRitMax,nClasseLunghetta,nRuoteSel,nCombBaseTrov,nLunghetteDaTrov
Dim clsComb
Dim i
nSorte = ScegliEsito
nClasseLunghetta = ScegliClassseLunghetta
nRuoteSel = SelRuote(aRuote)
nLunghetteDaTrov = 3
ReDim Preserve aRuote(nRuoteSel)
nCicloTeo = CicloTeorico(nClasseLunghetta,nSorte,UBound(aRuote))
nMoltip = 25
sMsg = "Inserire il ritardo massimo ipotizzato per la sorte voluta nella lunghetta" & vbCrLf
sMsg = sMsg & "Il valore mostrato è il CicloTeorico per la sorte di " & nSorte
sMsg = sMsg & " su " & nClasseLunghetta & " numeri su " & nRuoteSel & " ruote moltiplicato per " & nMoltip
nRitMax = Int(InputBox(sMsg,,nCicloTeo * nMoltip))
fin = EstrazioneFin
Ini = fin - nRitMax
If Ini <= 0 Then Ini = 1
Call AlimentaCollCombUscite(collCombBase,nSorte,aRuote,Ini,fin)
Call OrdinaItemCollection(collCombBase,"UltEstUscita","Key",,1)
i = 0
For Each clsComb In collCombBase
i = i + 1
clsComb.Index = i
Next
nCombBaseTrov = collCombBase.count
Call Scrivi("Le combinazioni base (uscite nel periodo analizzato) di classe " & nSorte & " sono " & nCombBaseTrov)
Set CollLunghette = GetNewCollection
i = 0
For Each clsComb In collCombBase
Call clsComb.AlimentaCollLunghetta(CollLunghette,collCombBase,nClasseLunghetta)
'Call Scrivi(clsComb.GetStringaNum & " -- " & clsComb.UltEstUscita)
If CollLunghette.count >= nLunghetteDaTrov Then Exit For
i = i + 1
'If i > 1000 Then Exit For
Call AvanzamentoElab(1,nCombBaseTrov,i)
If ScriptInterrotto Then Exit For
Next
For Each clsComb In CollLunghette
Call Scrivi(clsComb.GetStringaNum & " -- " & clsComb.UltEstUscita & " - Rit " & RitardoCombinazioneTurbo(aRuote,clsComb.aNum,nSorte,fin))
Next
End Sub
Sub AlimentaCollCombUscite(coll,nSorteCerc,aRuote,Ini,Fin)
Dim idEstr,r,k,nCombSvil,sKey
Dim clsComb
ReDim aColonne(0)
ReDim aNum(0)
ReDim aCol(0)
nCombSvil = Combinazioni(5,nSorteCerc)
Set coll = GetNewCollection
For idEstr = Ini To Fin
For r = 1 To UBound(aRuote)
Call GetArrayNumeriRuota(idEstr,aRuote(r),aNum)
Call OrdinaMatrice(aNum,1)
Call InitSviluppoIntegrale(aNum,nSorteCerc)
Do While GetCombSviluppo(aCol)
sKey = "k" & StringaNumeri(aCol,,True)
Call GetClsComb(coll,sKey,clsComb,aCol,nSorteCerc)
clsComb.UltEstUscita = idEstr
Loop
Next
Call AvanzamentoElab(Ini,Fin,idEstr)
If ScriptInterrotto Then Exit For
Next
End Sub
Function GetClsComb(coll,sKey,clsComb,aCol,nClasse)
On Error Resume Next
Set clsComb = coll(sKey)
If Err <> 0 Then
Err.Clear
Set clsComb = New clsCombinazione
clsComb.Key = sKey
clsComb.aNum = aCol
clsComb.Classe = nClasse
Call coll.Add(clsComb,sKey)
GetClsComb = False
Else
GetClsComb = True
End If
End Function
Function ScegliClassseLunghetta
Dim aVoci(30)
Dim k,i
For k = 2 To(2 - 1) + UBound(aVoci)
i = i + 1
aVoci(i) = k
Next
k = ScegliOpzioneMenu(aVoci,5,"Classe lunghetta")
ScegliClassseLunghetta = Int(aVoci(k))
End Function
Function GetItemCollection(Coll,sKey,cItem)
On Error Resume Next
Set cItem = Coll(sKey)
If Err <> 0 Then
Err.Clear
GetItemCollection = False
Else
GetItemCollection = True
End If
End Function
Function SelRuote(aRuote)
Dim t,k,bTutte
bTutte = False
t = ScegliRuote(aRuote)
For k = 1 To t
If aRuote(k) = TT_ Then
bTutte = True
Exit For
End If
Next
If bTutte Then
ReDim aRuote(10)
For k = 1 To 10
aRuote(k) = k
Next
SelRuote = 10
Else
SelRuote = t
End If
End Function