ora c e anche nz , e per calcolare 3 estrazioni indietro , si usa l ultima - 3
Option Explicit
Const RUOTE_DIVERSE = True
Const ESTRAZIONI_A_RITROSO = 3
Sub Main
Dim aRuote
Dim aTitoli
Dim aRiga
Dim Fine
Dim Inizio
Dim es
Dim iRuota
Dim Ruota
Dim p
Dim num
Dim idCin
Dim aCnt()
Dim aN1()
Dim aN2()
Dim h
Dim hCap
Dim h1
Dim h2
Dim idRiga
Dim capogioco
Dim doppio
Dim Diametrale
Dim aHData()
Dim aHRuota()
Dim aHCin()
Dim aHN1()
Dim aHN2()
Dim trovato
Call CaricaRuote(aRuote)
Fine = EstrazioneFin
Inizio = Fine - ESTRAZIONI_A_RITROSO
If Inizio < EstrazioneIni Then
Inizio = EstrazioneIni
End If
h = 0
hCap = 128
ReDim aHData(hCap)
ReDim aHRuota(hCap)
ReDim aHCin(hCap)
ReDim aHN1(hCap)
ReDim aHN2(hCap)
For es = Inizio To Fine
For iRuota = 1 To UBound(aRuote)
Ruota = aRuote(iRuota)
ReDim aCnt(18)
ReDim aN1(18)
ReDim aN2(18)
For p = 1 To 5
num = Estratto(es, Ruota, p)
idCin = IdCinquinaDaNumero(num)
aCnt(idCin) = aCnt(idCin) + 1
If aCnt(idCin) = 1 Then
aN1(idCin) = num
ElseIf aCnt(idCin) = 2 Then
aN2(idCin) = num
End If
Next
For idCin = 1 To 18
If aCnt(idCin) = 2 Then
Call AggiungiAmboEsatto( _
h, hCap, _
aHData, aHRuota, aHCin, aHN1, aHN2, _
es, Ruota, idCin, aN1(idCin), aN2(idCin) _
)
End If
Next
Next
Next
ReDim aTitoli(14)
aTitoli(1) = "Cinquina"
aTitoli(2) = "Data 1"
aTitoli(3) = "Ruota 1"
aTitoli(4) = "Coppia 1"
aTitoli(5) = "Data 2"
aTitoli(6) = "Ruota 2"
aTitoli(7) = "Coppia 2"
aTitoli(8) = "Capogioco"
aTitoli(9) = "Doppio"
aTitoli(10) = "Diametrale"
aTitoli(11) = "Ambo 1"
aTitoli(12) = "Ambo 2"
aTitoli(13) = "Terno"
aTitoli(14) = "Ruote"
Call InitTabella(aTitoli, vbCyan)
Scrivi "Metodo cinquine pentagonali - ultima estrazione + 3 a ritroso", 1
Scrivi "Range controllato: " & GetInfoEstrazione(Inizio) & " -> " & GetInfoEstrazione(Fine), 1
Scrivi
trovato = False
idRiga = 0
For h1 = 1 To h - 1
For h2 = h1 + 1 To h
If aHCin(h1) = aHCin(h2) Then
If RUOTE_DIVERSE = False Or aHRuota(h1) <> aHRuota(h2) Then
If QuattroDiversi(aHN1(h1), aHN2(h1), aHN1(h2), aHN2(h2)) Then
capogioco = NumeroMancante( _
aHCin(h1), _
aHN1(h1), aHN2(h1), _
aHN1(h2), aHN2(h2) _
)
If capogioco > 0 Then
doppio = Doppio90(capogioco)
Diametrale = Diametrale90(doppio)
idRiga = idRiga + 1
trovato = True
ReDim aRiga(14)
aRiga(1) = StringaCinquina(aHCin(h1))
aRiga(2) = GetInfoEstrazione(aHData(h1))
aRiga(3) = SiglaRuota(aHRuota(h1))
aRiga(4) = FormatNum(aHN1(h1)) & "-" & FormatNum(aHN2(h1))
aRiga(5) = GetInfoEstrazione(aHData(h2))
aRiga(6) = SiglaRuota(aHRuota(h2))
aRiga(7) = FormatNum(aHN1(h2)) & "-" & FormatNum(aHN2(h2))
aRiga(8) = FormatNum(capogioco)
aRiga(9) = FormatNum(doppio)
aRiga(10) = FormatNum(Diametrale)
aRiga(11) = FormatNum(capogioco) & "-" & FormatNum(doppio)
aRiga(12) = FormatNum(capogioco) & "-" & FormatNum(Diametrale)
aRiga(13) = FormatNum(capogioco) & "-" & FormatNum(doppio) & "-" & FormatNum(Diametrale)
aRiga(14) = SiglaRuota(aHRuota(h1)) & "-" & SiglaRuota(aHRuota(h2))
Call AddRigaTabella(aRiga, , "center")
End If
End If
End If
End If
Next
Next
If trovato Then
Call CreaTabella
Else
Scrivi "Nessun segnale trovato con i parametri attuali.", 1
End If
End Sub
Sub CaricaRuote(ByRef aRuote)
ReDim aRuote(11)
aRuote(1) = BA_
aRuote(2) = CA_
aRuote(3) = FI_
aRuote(4) = GE_
aRuote(5) = MI_
aRuote(6) = NA_
aRuote(7) = PA_
aRuote(8) = RO_
aRuote(9) = TO_
aRuote(10) = VE_
' Slot array 11.
' Non è la ruota Tutte.
' Qui dentro viene messa la Nazionale/RN.
aRuote(11) = NZ_
End Sub
Sub AggiungiAmboEsatto( _
ByRef h, ByRef hCap, _
ByRef aHData, ByRef aHRuota, ByRef aHCin, ByRef aHN1, ByRef aHN2, _
es, Ruota, idCin, n1, n2 _
)
Dim nMin
Dim nMax
Call OrdinaCoppia(n1, n2, nMin, nMax)
h = h + 1
If h > hCap Then
hCap = hCap + 128
ReDim Preserve aHData(hCap)
ReDim Preserve aHRuota(hCap)
ReDim Preserve aHCin(hCap)
ReDim Preserve aHN1(hCap)
ReDim Preserve aHN2(hCap)
End If
aHData(h) = es
aHRuota(h) = Ruota
aHCin(h) = idCin
aHN1(h) = nMin
aHN2(h) = nMax
End Sub
Function IdCinquinaDaNumero(num)
IdCinquinaDaNumero = ((num - 1) Mod 18) + 1
End Function
Function NumeroCinquina(idCin, pos)
NumeroCinquina = idCin + ((pos - 1) * 18)
End Function
Function StringaCinquina(idCin)
StringaCinquina = _
FormatNum(NumeroCinquina(idCin, 1)) & "-" & _
FormatNum(NumeroCinquina(idCin, 2)) & "-" & _
FormatNum(NumeroCinquina(idCin, 3)) & "-" & _
FormatNum(NumeroCinquina(idCin, 4)) & "-" & _
FormatNum(NumeroCinquina(idCin, 5))
End Function
Function NumeroMancante(idCin, n1, n2, n3, n4)
Dim pos
Dim Val
NumeroMancante = 0
For pos = 1 To 5
Val = NumeroCinquina(idCin, pos)
If Val <> n1 And Val <> n2 And Val <> n3 And Val <> n4 Then
NumeroMancante = Val
Exit Function
End If
Next
End Function
Function QuattroDiversi(a, b, c, d)
QuattroDiversi = False
If a = b Then Exit Function
If a = c Then Exit Function
If a = d Then Exit Function
If b = c Then Exit Function
If b = d Then Exit Function
If c = d Then Exit Function
QuattroDiversi = True
End Function
Sub OrdinaCoppia(n1, n2, ByRef nMin, ByRef nMax)
If n1 <= n2 Then
nMin = n1
nMax = n2
Else
nMin = n2
nMax = n1
End If
End Sub
Function Doppio90(Val)
Doppio90 = ((Val * 2 - 1) Mod 90) + 1
End Function
Function Diametrale90(Val)
If Val <= 45 Then
Diametrale90 = Val + 45
Else
Diametrale90 = Val - 45
End If
End Function
Function FormatNum(Val)
FormatNum = Format2(Val)
End Function