Novità

Cerco Listato

non usare tutte , seleziona invece le ruote che vuoi.
Per il resto io voorrei insegnaare piu che regalare...
 
Ciao, Luigi.
Naturalmente apprezzo che preferisci insegnare. E ti ringrazio di questo.
Dovrei impegnarmi, ci proverò magari studiando i vostri script e la guida di Spaziometria.

Tornando al listato, ho provato a selezionare tutte le ruote, dopo un po' mi da memoria esaurita.
Con 90 numeri, 24 array e lunghetta di 4 numeri.
Comunque per formazioni piccole va bene.
Ancora grazie
 
ciao Cinzia , in questo caso neon c'è da studiare nessuna guida ,devi semplicemente capire nello script il punto dove la colonna sviluppata
vien inserita nella tabella.
Tu devi semplicemente mettere un if (o piu if ) per fare in modo che solo alcune delle colonne sviluppate finiscano effettivamente nella tabella

anche perche devi sempre considerare che 24 lunghette da 3 numeri l'una sviluppate in quartine da 800mila e rotte colonne . le vuoi mettere tutte nella tabella ? Che sei la sorella di LottoTom ? :)

Codice:
Option Explicit
Sub Main
  Scrivi Combinazioni ( 24 , 4) 
  Scrivi 3^4
 
  Scrivi Combinazioni ( 24 , 4)  * 3^4
End Sub
 
Preferirei senza tabella...E' proprio necessaria?
Una cosa semplice, veloce e che non esaurisca la memoria.
Io avevo fatto questo. Però sono vincolata alla lunghezza della formazione che dev' essere uguale al numero di array .
Io vorrei formare settine, massimo ottine con un numero di array pari a 24

Codice:
Sub Main()
Dim nn(10),ru(1)
w = 3
r = 11

ru(1) = r

num1 = Array(1,21,41)
num2 = Array(05,25,45)
num3 = Array(31,51,71)
num4 = Array(15,35,55,19,39,59)
num5 = Array(23)
num6 = Array(16,36,56)
num7 = Array(14,24,34,44)
num8 = Array(10,20,30)
num9 = Array(26,46,66)
num10 = Array(11)

ww1 = UBound(num1)
ww2 = UBound(num2)
ww3 = UBound(num3)
ww4 = UBound(num4)
ww5 = UBound(num5)
ww6 = UBound(num6)
ww7 = UBound(num7)
ww8 = UBound(num8)
ww9 = UBound(num9)
ww10 = UBound(num10)
'-----------------------------------------------
For a = 0 To ww1
nn(1) = num1(a)

For b = 0 To ww2
nn(2) = num2(b)
For c = 0 To ww3
nn(3) = num3(c)
For d = 0 To ww4
nn(4) = num4(d)
For e = 0 To ww5
nn(5) = num5(e)
For f = 0 To ww6
nn(6) = num6(f)
For g = 0 To ww7
nn(7) = num7(g)
For h = 0 To ww8
If ScriptInterrotto Then Exit For
nn(8) = num8(h)
For i = 0 To ww9
nn(9) = num9(i)
For j = 0 To ww10
nn(10) = num10(j)


st = SerieStoricoTurbo(1,EstrazioneFin - 1,nn,ru,w)

If st < 55 Then 

cc = cc + 1

Messaggio FormatSpace(cc,3,1) & ") " & SiglaRuota(r) & " " & StringaNumeri(nn) & " at " & FormatSpace(st,3,1)
Scrivi FormatSpace(cc,3,1) & ") " & SiglaRuota(r) & " " & StringaNumeri(nn) & " st " & FormatSpace(st,3,1)
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next

End Sub
 
devi semplicemente fare come hai gia fatto , naturalmente adattando il tuo pezzetto di codice al mio script. Provacia almeno , a mangiare non ti mangia e il pc non esploderà anche se fai qualche errore.
Ciao.

Codice:
st = SerieStoricoTurbo(1,EstrazioneFin - 1,nn,ru,w)

If st < 55 Then
   ' metti la colonna nella tabella
end if
 
Joe, questo è lo script completo con la tua implementazione.

Codice:
Option Explicit
Sub Main
   Dim aLunghette,nQuantitaLung,nClasseFormazione
   nQuantitaLung = AlimentaArrayLunghette(aLunghette)
   If nQuantitaLung >= 2 Then
      nClasseFormazione = Int(InputBox("Quanti numeri per ogni formazione in gioco da 2 a " & nQuantitaLung))
      If nClasseFormazione >= 2 And nClasseFormazione <= nQuantitaLung Then
         Call ProduciFormazioni(aLunghette,nClasseFormazione)
      Else
         MsgBox "Quantità errata",vbExclamation
      End If
   Else
      MsgBox "Lunghette insufficient",vbExclamation
   End If
End Sub
Function AlimentaArrayLunghette(aLunghette)
   ' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
   ReDim aLunghette(5)
   aLunghette(1) = Split("0,66,67,69,78,72,89",",")
   aLunghette(2) = Split("0,55,57,59,75,77,86",",")
   aLunghette(3) = Split("0,65,68,79,88",",")
   aLunghette(4) = Split("0,50,58,54,70,87",",")
   aLunghette(5) = Split("0,56,52,76,85",",")
   ' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
   AlimentaArrayLunghette = UBound(aLunghette)
End Function
Sub ProduciFormazioni(aLunghette,nClasseFormazione)
   Dim I
   Dim k,aRetColonna,sLungUsate
   ReDim aN(UBound(aLunghette))
   For k = 1 To UBound(aN)
      aN(k) = k
   Next
   ReDim aSegni(nClasseFormazione)
   Call InitSviluppoIntegrale(aN,nClasseFormazione)
   Do While GetCombSviluppo(aRetColonna)
      sLungUsate = ""
      For k = 1 To nClasseFormazione
         aSegni(k) = aLunghette(aRetColonna(k))
         sLungUsate = sLungUsate & aRetColonna(k) & "-"
      Next
      Call Messaggio("Sviluppo colonne tra le lunghette " & RimuoviLastChr(sLungUsate,"-"))
      Call SviluppaColonne(aSegni,I)
      If ScriptInterrotto Then Exit Do
      DoEventsEx
   Loop
End Sub
Sub SviluppaColonne(aSegni,I)
   Dim nClasse,K,aTmp,nPnt,aRu(1),Fr
   nClasse = UBound(aSegni)
   ReDim aColonna(nClasse)
   ReDim aPuntatore(nClasse)
   ReDim aQSegni(nClasse)
   aRu(1) = TT_
   For K = 1 To nClasse
      aTmp = aSegni(K)
      aPuntatore(K) = 1
      aQSegni(K) = UBound(aTmp)
   Next
   nPnt = nClasse
   Do
      For K = 1 To nClasse
         aTmp = aSegni(K)
         aColonna(K) = aTmp(aPuntatore(K))
      Next
      I = I + 1
      Fr = SerieFreqTurbo(1,EstrazioneFin,aColonna,aRu,nClasse)
      If Fr > 250 Then
      Call Scrivi(FormatSpace(I,4,True) & ") " & StringaNumeri(aColonna) & " Fr " & Fr)
      End If
      Do While aPuntatore(nPnt) + 1 > aQSegni(nPnt)
         nPnt = nPnt - 1
         If nPnt = 0 Then Exit Do
      Loop
      If nPnt > 0 Then
         aPuntatore(nPnt) = aPuntatore(nPnt) + 1
         For K = nPnt + 1 To nClasse
            aPuntatore(K) = 1
         Next
         nPnt = nClasse
      End If
      If ScriptInterrotto Then Exit Do
      DoEventsEx
   Loop While nPnt > 0
End Sub

Questo è l' output
 
con questo script mostrertà sempre e solo le prime 10 combinazioni migliori in base all'ordinamento scelto.
Quindi non darà problemi di memoria esaurita



Codice:
Option Explicit
Const cOrdinaRit = 2
Const cOrdinaFrq = 3
Const cOrdinaRitMax = 4



Sub Main
   Dim aLunghette,nQuantitaLung,nClasseFormazione,nMaxClasse
   Dim aRuote,nSorte
   Dim Inizio,Fine
   Dim nTipoOrdinamento
  
   Inizio = EstrazioneIni
   Fine = EstrazioneFin
  
   nQuantitaLung = AlimentaArrayLunghette(aLunghette)
  
  
   If nQuantitaLung >= 2 Then
      If VerificaDoppi(aLunghette) Then
         nMaxClasse = Iif(nQuantitaLung <= 10,nQuantitaLung,10)
         nClasseFormazione = Int(InputBox("Quanti numeri per ogni formazione in gioco da 2 a " & nMaxClasse))
         nTipoOrdinamento = ScegliTipoOrdinamento
         Call ScegliRuote(aRuote)
         nSorte = ScegliEsito(2,2,nClasseFormazione)
        
         If nTipoOrdinamento > 0 Then
            If nClasseFormazione >= 2 And nClasseFormazione <= nMaxClasse Then
               Call ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,Fine,nTipoOrdinamento)
            Else
               MsgBox "Quantità errata",vbExclamation
            End If
         End If
         
      End If
   Else
      MsgBox "Lunghette insufficient",vbExclamation
   End If
End Sub
Function ScegliTipoOrdinamento
   Dim aV,i
   aV = Array("Ritardo","Frequenza","Ritardo Max")
   i = ScegliOpzioneMenu(aV,,"Ordina per")
   
   Select Case i
   Case 0
      ScegliTipoOrdinamento = cOrdinaRit
   Case 1
      ScegliTipoOrdinamento = cOrdinaFrq
      
   Case 2
      ScegliTipoOrdinamento = cOrdinaRitMax
   Case Else
       ScegliTipoOrdinamento = 0
   End Select
End Function
Function VerificaDoppi(aLunghette)

   Dim k,j,n,sNumeriNonValidi,sNumeriDoppi
   ReDim aB(90)
  
   sNumeriNonValidi = ""
   sNumeriDoppi = ""
  
   For k = 1 To UBound(aLunghette)
      For j = 1 To UBound(aLunghette(k))
         n = Int(aLunghette(k)(j))
         If n > 0 And n <= 90 Then
            If aB(n) Then
                sNumeriDoppi = sNumeriDoppi & " Lunghetta " & k & " numero " & n & ","

            Else
               aB(n) = True
            End If
         Else
            sNumeriNonValidi = sNumeriNonValidi & " Lunghetta " & k & " numero " & n & ","
         End If
      Next
   Next
  
   If sNumeriNonValidi <> "" Or sNumeriDoppi <> "" Then
      If sNumeriNonValidi <> "" Then
         MsgBox "Numeri non validi " & vbCrLf & sNumeriNonValidi,vbExclamation
      End If
      If sNumeriDoppi <> "" Then
         MsgBox "Numeri ripetuti " & vbCrLf & sNumeriDoppi,vbExclamation
      End If
      VerificaDoppi = False
  Else
     VerificaDoppi = True
  End If

  
End Function

Function AlimentaArrayLunghette(aLunghette)
   ' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
   'ReDim aLunghette(5)
 
  ' aLunghette(1) = Split("0,66,67,69,78,72,89",",") ' 6
  ' aLunghette(2) = Split("0,55,57,59,75,77,86",",") ' 6
  ' aLunghette(3) = Split("0,65,68,79,88",",") '4
  ' aLunghette(4) = Split("0,50,58,54,70,87",",") '5
  ' aLunghette(5) = Split("0,56,52,76,85",",") '4
  
  
 ReDim aLunghette(24)
   aLunghette(1) = Split("0,90,89,88,87,86,85",",")
   aLunghette(2) = Split("0,84,83,82,81,80,79",",")
   aLunghette(3) = Split("0,78,77,76,75,74,73",",")
   aLunghette(4) = Split("0,72,71,70,69",",")
   aLunghette(5) = Split("0,68,67,66,65",",")
   aLunghette(6) = Split("0,64,63,62",",")
   aLunghette(7) = Split("0,61,60,59",",")
   aLunghette(8) = Split("0,58,57,56",",")
   aLunghette(9) = Split("0,55,54,53",",")
   aLunghette(10) = Split("0,52",",")
   aLunghette(11) = Split("0,51",",")
   aLunghette(12) = Split("0,50",",")
   aLunghette(13) = Split("0,49",",")
   aLunghette(14) = Split("0,48,47,46",",")
   aLunghette(15) = Split("0,45,44,43",",")
   aLunghette(16) = Split("0,42,41,40",",")
   aLunghette(17) = Split("0,39,38,37",",")
   aLunghette(18) = Split("0,36,35,34",",")
   aLunghette(19) = Split("0,33,32,31",",")
   aLunghette(20) = Split("0,30,29,28,27,26,25",",")
   aLunghette(21) = Split("0,24,23,22,21",",")
   aLunghette(22) = Split("0,20,19,18,17,16,15",",")
   aLunghette(23) = Split("0,14,13,12,11,10,09",",")
   aLunghette(24) = Split("0,08,07,06,05,04,03,02,01",",")
   
   ' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
   AlimentaArrayLunghette = UBound(aLunghette)
End Function
Sub ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,fine,nTipoOrdinamento)
   Dim I
   Dim k,aRetColonna,sLungUsate
   Dim nRitardo,nRitardoMax,nFrequenza
   Dim aT
   Dim nCombTraLunghette
   Dim aPrimeCombinazioni
   Dim nSviluppate,nDaSviluppare
   
   ReDim aPrimeCombinazioni(10,1)
   
  
 
  
   ReDim aN(UBound(aLunghette))
   For k = 1 To UBound(aN)
      aN(k) = k
   Next
  
   nCombTraLunghette = Combinazioni(UBound(aN),nClasseFormazione)
  
   If MsgBox("Le combinazioni tra lunghette sono " & nCombTraLunghette & " continuo ?",vbQuestion + vbYesNo) = vbYes Then
   
      aT = Array("","Formazione","Ritardo","Frequenza","RitardoMax")
      Call InitTabella(aT)
   
      ReDim aSegni(nClasseFormazione)
      nDaSviluppare = InitSviluppoIntegrale(aN,nClasseFormazione)
      Do While GetCombSviluppo(aRetColonna)
         nSviluppate = nSviluppate + 1
         sLungUsate = ""
         For k = 1 To nClasseFormazione
            aSegni(k) = aLunghette(aRetColonna(k))
            sLungUsate = sLungUsate & aRetColonna(k) & "-"
         Next
         Call Messaggio("Sviluppo colonne tra le lunghette " & RimuoviLastChr(sLungUsate,"-") & " (" & nSviluppate & "/" & nDaSviluppare & ")")
         Call SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,fine,aPrimeCombinazioni,nTipoOrdinamento)
         If ScriptInterrotto Then Exit Do
         DoEventsEx
      Loop
     
     
      Call Scrivi(String(50,"="))
      Call Scrivi("Colonne sviluppate : " & I)
      Call Scrivi("Classe             : " & nClasseFormazione)
      Call Scrivi("Sorte              : " & nSorte)
      Call Scrivi("Ruote              : " & StringaRuote(aRuote))
      Call Scrivi(String(50,"="))
      Call Scrivi
        
      For k = 1 To UBound(aPrimeCombinazioni)
         aRetColonna = StringaNumeriToArray(aPrimeCombinazioni(k,0))
         Call StatFrzTurbo(aRetColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,fine)
      
         aT(1) = aPrimeCombinazioni(k,0)
         aT(2) = nRitardo
         aT(4) = nRitardoMax
         aT(3) = nFrequenza
         Call AddRigaTabella(aT)
      Next
     
      Call CreaTabellaOrdinabile(nTipoOrdinamento)
   End If
  
End Sub
Function CalcolaColonneDaSviluppare(aPresPerQ)
   Dim t,k
  
   t = 1
   For k = 1 To UBound(aPresPerQ)
      If aPresPerQ(k) > 0 Then
         t = t *(k ^ aPresPerQ(k))
      End If
   Next
  
   CalcolaColonneDaSviluppare = t
  
End Function
Sub SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,Fine,aPrimeCombinazioni,nTipoOrdinamento)
   Dim nClasse,K,aTmp,nPnt,j,jj
   Dim nRitardo,nRitardoMax,nFrequenza,nDaSviluppare,nSviluppate,nValMax
   ReDim aT(4)
   nClasse = UBound(aSegni)
    
   ReDim aColonna(nClasse)
   ReDim aPuntatore(nClasse)
   ReDim aQSegni(nClasse)
   ReDim aPresPerQuantita(90)
  

   For K = 1 To nClasse
      aTmp = aSegni(K)
      aPuntatore(K) = 1
      aQSegni(K) = UBound(aTmp)
     
      aPresPerQuantita(aQSegni(K)) = aPresPerQuantita(aQSegni(K)) + 1

     
   Next
  
  Call AvanzamentoElab(1,nDaSviluppare,nSviluppate)

   nDaSviluppare = CalcolaColonneDaSviluppare(aPresPerQuantita)
  
  
  
   nPnt = nClasse
   Do
      For K = 1 To nClasse
         aTmp = aSegni(K)
         aColonna(K) = aTmp(aPuntatore(K))
      Next
      I = I + 1
      nSviluppate = nSviluppate + 1
      If nSviluppate Mod 500 = 0 Then
         Call AvanzamentoElab(1,nDaSviluppare,nSviluppate)
      End If
      
     
     ' Call Scrivi(FormatSpace(I,4,True) & ") " & StringaNumeri(aColonna))
     
   '   Call StatFrzTurbo(aColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,Fine)
      
   '   aT(1) = StringaNumeri(aColonna)
   '   aT(2) = nRitardo
   '   aT(4) = nRitardoMax
   '   aT(3) = nFrequenza
   '   Call AddRigaTabella(aT)
    
     If nTipoOrdinamento = cOrdinaRit Then
         nValMax = SerieRitardoTurbo(Inizio,Fine,aColonna,aRuote,nSorte)

     ElseIf nTipoOrdinamento = cOrdinaFrq Then
         nValMax = SerieFreqTurbo(Inizio,Fine,aColonna,aRuote,nSorte)

     ElseIf nTipoOrdinamento = cOrdinaRitMax Then
         nValMax = SerieStoricoTurbo(Inizio,Fine,aColonna,aRuote,nSorte)
     End If

    
     For j = 1 To UBound(aPrimeCombinazioni)
        If nValMax >= aPrimeCombinazioni(j,1) Then
           For jj = UBound(aPrimeCombinazioni) To j + 1 Step - 1
              aPrimeCombinazioni(jj,0) = aPrimeCombinazioni(jj - 1,0)
              aPrimeCombinazioni(jj,1) = aPrimeCombinazioni(jj - 1,1)
              
           Next
           aPrimeCombinazioni(j,0) = StringaNumeri(aColonna)
           aPrimeCombinazioni(j,1) = nValMax
           
           Exit For
        End If
     Next
     
        
      Do While aPuntatore(nPnt) + 1 > aQSegni(nPnt)
         nPnt = nPnt - 1
         If nPnt = 0 Then Exit Do
      Loop
      If nPnt > 0 Then
         aPuntatore(nPnt) = aPuntatore(nPnt) + 1
         For K = nPnt + 1 To nClasse
            aPuntatore(K) = 1
         Next
         nPnt = nClasse
      End If
      If ScriptInterrotto Then Exit Do
      DoEventsEx
   Loop While nPnt > 0
End Sub
 
con questo script mostrertà sempre e solo le prime 10 combinazioni migliori in base all'ordinamento scelto.
Quindi non darà problemi di memoria esaurita



Codice:
Option Explicit
Const cOrdinaRit = 2
Const cOrdinaFrq = 3
Const cOrdinaRitMax = 4



Sub Main
   Dim aLunghette,nQuantitaLung,nClasseFormazione,nMaxClasse
   Dim aRuote,nSorte
   Dim Inizio,Fine
   Dim nTipoOrdinamento
 
   Inizio = EstrazioneIni
   Fine = EstrazioneFin
 
   nQuantitaLung = AlimentaArrayLunghette(aLunghette)
 
 
   If nQuantitaLung >= 2 Then
      If VerificaDoppi(aLunghette) Then
         nMaxClasse = Iif(nQuantitaLung <= 10,nQuantitaLung,10)
         nClasseFormazione = Int(InputBox("Quanti numeri per ogni formazione in gioco da 2 a " & nMaxClasse))
         nTipoOrdinamento = ScegliTipoOrdinamento
         Call ScegliRuote(aRuote)
         nSorte = ScegliEsito(2,2,nClasseFormazione)
 
         If nTipoOrdinamento > 0 Then
            If nClasseFormazione >= 2 And nClasseFormazione <= nMaxClasse Then
               Call ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,Fine,nTipoOrdinamento)
            Else
               MsgBox "Quantità errata",vbExclamation
            End If
         End If
 
      End If
   Else
      MsgBox "Lunghette insufficient",vbExclamation
   End If
End Sub
Function ScegliTipoOrdinamento
   Dim aV,i
   aV = Array("Ritardo","Frequenza","Ritardo Max")
   i = ScegliOpzioneMenu(aV,,"Ordina per")
 
   Select Case i
   Case 0
      ScegliTipoOrdinamento = cOrdinaRit
   Case 1
      ScegliTipoOrdinamento = cOrdinaFrq
 
   Case 2
      ScegliTipoOrdinamento = cOrdinaRitMax
   Case Else
       ScegliTipoOrdinamento = 0
   End Select
End Function
Function VerificaDoppi(aLunghette)

   Dim k,j,n,sNumeriNonValidi,sNumeriDoppi
   ReDim aB(90)
 
   sNumeriNonValidi = ""
   sNumeriDoppi = ""
 
   For k = 1 To UBound(aLunghette)
      For j = 1 To UBound(aLunghette(k))
         n = Int(aLunghette(k)(j))
         If n > 0 And n <= 90 Then
            If aB(n) Then
                sNumeriDoppi = sNumeriDoppi & " Lunghetta " & k & " numero " & n & ","

            Else
               aB(n) = True
            End If
         Else
            sNumeriNonValidi = sNumeriNonValidi & " Lunghetta " & k & " numero " & n & ","
         End If
      Next
   Next
 
   If sNumeriNonValidi <> "" Or sNumeriDoppi <> "" Then
      If sNumeriNonValidi <> "" Then
         MsgBox "Numeri non validi " & vbCrLf & sNumeriNonValidi,vbExclamation
      End If
      If sNumeriDoppi <> "" Then
         MsgBox "Numeri ripetuti " & vbCrLf & sNumeriDoppi,vbExclamation
      End If
      VerificaDoppi = False
  Else
     VerificaDoppi = True
  End If

 
End Function

Function AlimentaArrayLunghette(aLunghette)
   ' per comodita le lunghette sono preimpostate ma nulla vieta di leggerle da un file o da inputbox
   'ReDim aLunghette(5)
 
  ' aLunghette(1) = Split("0,66,67,69,78,72,89",",") ' 6
  ' aLunghette(2) = Split("0,55,57,59,75,77,86",",") ' 6
  ' aLunghette(3) = Split("0,65,68,79,88",",") '4
  ' aLunghette(4) = Split("0,50,58,54,70,87",",") '5
  ' aLunghette(5) = Split("0,56,52,76,85",",") '4
 
 
 ReDim aLunghette(24)
   aLunghette(1) = Split("0,90,89,88,87,86,85",",")
   aLunghette(2) = Split("0,84,83,82,81,80,79",",")
   aLunghette(3) = Split("0,78,77,76,75,74,73",",")
   aLunghette(4) = Split("0,72,71,70,69",",")
   aLunghette(5) = Split("0,68,67,66,65",",")
   aLunghette(6) = Split("0,64,63,62",",")
   aLunghette(7) = Split("0,61,60,59",",")
   aLunghette(8) = Split("0,58,57,56",",")
   aLunghette(9) = Split("0,55,54,53",",")
   aLunghette(10) = Split("0,52",",")
   aLunghette(11) = Split("0,51",",")
   aLunghette(12) = Split("0,50",",")
   aLunghette(13) = Split("0,49",",")
   aLunghette(14) = Split("0,48,47,46",",")
   aLunghette(15) = Split("0,45,44,43",",")
   aLunghette(16) = Split("0,42,41,40",",")
   aLunghette(17) = Split("0,39,38,37",",")
   aLunghette(18) = Split("0,36,35,34",",")
   aLunghette(19) = Split("0,33,32,31",",")
   aLunghette(20) = Split("0,30,29,28,27,26,25",",")
   aLunghette(21) = Split("0,24,23,22,21",",")
   aLunghette(22) = Split("0,20,19,18,17,16,15",",")
   aLunghette(23) = Split("0,14,13,12,11,10,09",",")
   aLunghette(24) = Split("0,08,07,06,05,04,03,02,01",",")
 
   ' la funzione torna il numero di lunghette ( l'elemento a indice 0 non è usato)
   AlimentaArrayLunghette = UBound(aLunghette)
End Function
Sub ProduciFormazioni(aLunghette,nClasseFormazione,aRuote,nSorte,Inizio,fine,nTipoOrdinamento)
   Dim I
   Dim k,aRetColonna,sLungUsate
   Dim nRitardo,nRitardoMax,nFrequenza
   Dim aT
   Dim nCombTraLunghette
   Dim aPrimeCombinazioni
   Dim nSviluppate,nDaSviluppare
 
   ReDim aPrimeCombinazioni(10,1)
 
 
 
 
   ReDim aN(UBound(aLunghette))
   For k = 1 To UBound(aN)
      aN(k) = k
   Next
 
   nCombTraLunghette = Combinazioni(UBound(aN),nClasseFormazione)
 
   If MsgBox("Le combinazioni tra lunghette sono " & nCombTraLunghette & " continuo ?",vbQuestion + vbYesNo) = vbYes Then
 
      aT = Array("","Formazione","Ritardo","Frequenza","RitardoMax")
      Call InitTabella(aT)
 
      ReDim aSegni(nClasseFormazione)
      nDaSviluppare = InitSviluppoIntegrale(aN,nClasseFormazione)
      Do While GetCombSviluppo(aRetColonna)
         nSviluppate = nSviluppate + 1
         sLungUsate = ""
         For k = 1 To nClasseFormazione
            aSegni(k) = aLunghette(aRetColonna(k))
            sLungUsate = sLungUsate & aRetColonna(k) & "-"
         Next
         Call Messaggio("Sviluppo colonne tra le lunghette " & RimuoviLastChr(sLungUsate,"-") & " (" & nSviluppate & "/" & nDaSviluppare & ")")
         Call SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,fine,aPrimeCombinazioni,nTipoOrdinamento)
         If ScriptInterrotto Then Exit Do
         DoEventsEx
      Loop
 
 
      Call Scrivi(String(50,"="))
      Call Scrivi("Colonne sviluppate : " & I)
      Call Scrivi("Classe             : " & nClasseFormazione)
      Call Scrivi("Sorte              : " & nSorte)
      Call Scrivi("Ruote              : " & StringaRuote(aRuote))
      Call Scrivi(String(50,"="))
      Call Scrivi
 
      For k = 1 To UBound(aPrimeCombinazioni)
         aRetColonna = StringaNumeriToArray(aPrimeCombinazioni(k,0))
         Call StatFrzTurbo(aRetColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,fine)
 
         aT(1) = aPrimeCombinazioni(k,0)
         aT(2) = nRitardo
         aT(4) = nRitardoMax
         aT(3) = nFrequenza
         Call AddRigaTabella(aT)
      Next
 
      Call CreaTabellaOrdinabile(nTipoOrdinamento)
   End If
 
End Sub
Function CalcolaColonneDaSviluppare(aPresPerQ)
   Dim t,k
 
   t = 1
   For k = 1 To UBound(aPresPerQ)
      If aPresPerQ(k) > 0 Then
         t = t *(k ^ aPresPerQ(k))
      End If
   Next
 
   CalcolaColonneDaSviluppare = t
 
End Function
Sub SviluppaColonne(aSegni,I,aRuote,nSorte,Inizio,Fine,aPrimeCombinazioni,nTipoOrdinamento)
   Dim nClasse,K,aTmp,nPnt,j,jj
   Dim nRitardo,nRitardoMax,nFrequenza,nDaSviluppare,nSviluppate,nValMax
   ReDim aT(4)
   nClasse = UBound(aSegni)
 
   ReDim aColonna(nClasse)
   ReDim aPuntatore(nClasse)
   ReDim aQSegni(nClasse)
   ReDim aPresPerQuantita(90)
 

   For K = 1 To nClasse
      aTmp = aSegni(K)
      aPuntatore(K) = 1
      aQSegni(K) = UBound(aTmp)
 
      aPresPerQuantita(aQSegni(K)) = aPresPerQuantita(aQSegni(K)) + 1

 
   Next
 
  Call AvanzamentoElab(1,nDaSviluppare,nSviluppate)

   nDaSviluppare = CalcolaColonneDaSviluppare(aPresPerQuantita)
 
 
 
   nPnt = nClasse
   Do
      For K = 1 To nClasse
         aTmp = aSegni(K)
         aColonna(K) = aTmp(aPuntatore(K))
      Next
      I = I + 1
      nSviluppate = nSviluppate + 1
      If nSviluppate Mod 500 = 0 Then
         Call AvanzamentoElab(1,nDaSviluppare,nSviluppate)
      End If
 
 
     ' Call Scrivi(FormatSpace(I,4,True) & ") " & StringaNumeri(aColonna))
 
   '   Call StatFrzTurbo(aColonna,aRuote,nSorte,nRitardo,nRitardoMax,0,nFrequenza,,Inizio,Fine)
 
   '   aT(1) = StringaNumeri(aColonna)
   '   aT(2) = nRitardo
   '   aT(4) = nRitardoMax
   '   aT(3) = nFrequenza
   '   Call AddRigaTabella(aT)
 
     If nTipoOrdinamento = cOrdinaRit Then
         nValMax = SerieRitardoTurbo(Inizio,Fine,aColonna,aRuote,nSorte)

     ElseIf nTipoOrdinamento = cOrdinaFrq Then
         nValMax = SerieFreqTurbo(Inizio,Fine,aColonna,aRuote,nSorte)

     ElseIf nTipoOrdinamento = cOrdinaRitMax Then
         nValMax = SerieStoricoTurbo(Inizio,Fine,aColonna,aRuote,nSorte)
     End If

 
     For j = 1 To UBound(aPrimeCombinazioni)
        If nValMax >= aPrimeCombinazioni(j,1) Then
           For jj = UBound(aPrimeCombinazioni) To j + 1 Step - 1
              aPrimeCombinazioni(jj,0) = aPrimeCombinazioni(jj - 1,0)
              aPrimeCombinazioni(jj,1) = aPrimeCombinazioni(jj - 1,1)
     
           Next
           aPrimeCombinazioni(j,0) = StringaNumeri(aColonna)
           aPrimeCombinazioni(j,1) = nValMax
  
           Exit For
        End If
     Next
 
 
      Do While aPuntatore(nPnt) + 1 > aQSegni(nPnt)
         nPnt = nPnt - 1
         If nPnt = 0 Then Exit Do
      Loop
      If nPnt > 0 Then
         aPuntatore(nPnt) = aPuntatore(nPnt) + 1
         For K = nPnt + 1 To nClasse
            aPuntatore(K) = 1
         Next
         nPnt = nClasse
      End If
      If ScriptInterrotto Then Exit Do
      DoEventsEx
   Loop While nPnt > 0
End Sub



"Che sei la sorella di lotto tom ? " :LOL: Grandissimo :ROFLMAO:


Ma questo script... esattamente cosa fa? 😮

Ho provato a leggere in alcuni post passati di questo thread ma non mi è assolutamente chiaro... anche se mi intriga moltissimo specialmente se riesce a comporre, secondo le basi numeriche dei singoli array implementati e analizzare x la sorte di ricerca desiderata, formazioni di qualunque classe ordinandole addirittura per il valore desiderato di ritardo o frequenza valutando la cosa su tutte separate o unite...

Lo chiedo a Cinzia che ha ideato tutto l'interessantissimo procedimento e a Luigi che l'ha come sempre magistralmente ottimizzato.

Grazie mitici x eventuali delucidazioni in merito.

👋:)

ps: concordo con mia sorella... sul fatto che 800.000 formazioni senza tabella siano molto + gestibili in termini di velocità elaborazionale, output e assenza di blocchi eventuali rispetto a 800.000 formazioni con tabella... 😁
 
Ultima modifica:
Ciao, Tom. Sto lavorando con gli script di questi grandiosi. Ti posso solo dire che se riesco a utilizzarli come spero verranno fuori delle belle lunghette.

Ciao Cinzia complimenti ancora per il tuo sviluppo. Per quanto riguarda i vari array da cui prelevi i vari elementi numerici... puoi scegliere per ogni vettore il numero di elementi della relativa formazione (es. 3 elem. dal gruppo 1, 2 elem. dal gruppo 3 ecc..) ? Te lo chiedo perchè se fosse possibile sarebbe estremamente utile anche per un mio tipo di sviluppo ABC già qui condiviso. Se non puoi spiegare oltre... no problem e leggerò curiosissimo i tuoi eventuali sviluppi in merito e ancora complimenti per la tua ricerca. 👋:)
 
1629917729977.png

Tom avremo sicuramente modo di commentarle.
Ciao, Luigi. Dal tuo script più recente. Prova terzine per ambo su tutte ordinate per RitMax , io vorrei che riportasse le terzine che hanno il massimo strorico più basso, mi sembra che riporti le prime 10 con Max storico più alto. Puoi fare qualcosa ?
 
Ciao, Joe sto provando anche il tuo, quello completo. Ho sostituito SeriefreqTurbo con SeriestoricoTurbo.
Mi sembra che vada bene. Si può velocizzare?
 
Ciao Cinzia,

Non so.

Ti posso dire che le versioni turbo (di quelle base) in genere vanno bene e sono veloci.

E' proprio la ricerca dello storico che comporta pesantezza e lentezza dello script.

Cioè in genere conviene usare lo script lento una sola volta per lo storico a tutto l'archivio

e poi abbandonare la ricerca limitando gli intervalli e/o alleggerire lo script di questo fardello.

Solo uno script concepito per essere molto-molto-leggero e molto orientato, a questo calcolo,

può migliorare i tempi di elaborazione.

Però sull'opportunità di redigerlo appositamente, si devono pesare costi e benefici che se ne possono ricavare.

Come sai, chi è interessato a questi riferimenti, è solito lasciare il Pc libero di lavorare per una notte (o più).

:)
 
Ciao Cinzia.

Nuovamente non so se il codice scritto per il calcolo dello storico-turbo sia il più efficiente possibile.

Però suppongo lo sia o lo sia verosimilmente.

Per il fatto stesso dell'esistere di questa nuova funzione alternativa alla vecchia.

Se intendiamo per ritardo il tempo in estrazioni tra 2 eventi successivi, del medesimo tipo,

misurato con unità di 1 estrazione = 2 giorni (escludendo le domeniche)

allora si ... basta contate le estrazioni.

Cioè "adottare" il contatore a cui probabilmente ti riferisci.

Anche in questo caso essendo Spaziometria in grado di fornire "ElencoEstrazioni",

cioè la serie cronologica delle estrazioni è facile e veloce ricavare i ritardi.

Con l'algoritmo EstrazioneAttuale meno EstrazionePrecedendente.

Essendo operazione matematica semplice (cioè una differenza) il computer la esegue molto velocemente.

Dunque penso che l'algoritmo più veloce consista nel rilevare le cadute,

Calcolare le differenze tra esse.

Memorizzare il valore massimo tra queste differenze.

Però avendo premesso il "non so" iniziale, credo che solo Luigi, sia in grado di

confermarci ... se e come ... stanno le cose.

:)
 
Ciao, Joe. Grazie della risposta esaustiva. Hai compreso esattamente la questione. Attendiamo il parere di Luigi.
Ho fatto girare un mio script per settine (35 terni) - ruota tutte senza filtri, sono arrivata dopo qualche giorno alla settina 1.3.8.13.76.79.82
e ho trovato questo storico
1.3.8.13.66.73.76 st 111
7 le volte in cui ha superato 100
ritardo naturale 36,47
ritardo medio effettivo 32,17
Si potrebbero trovare storici anche inferiori a 100
Ci va soltanto pazienza.
 
ciao le funzioni turbo sono piu veloci perche sono scritte in un altro linguaggio , ma per fare il calcolo non fanno la differenza tra estrazioni in quanto non si potrebbero sapere le estrazioni non valide da non conteggiare contenute all'interno.
Non c'è nessun modo di velocizzare la cosa con gli script.
Se ho capito ben tu hai sviluppato 6 milioni e passa di combinazioni e c'è voluto qualche giorno , prova solo a sviluppare le colonen senza calcoo di ritardo e niente altro e vedi quanto tempo ci mette.. io penso troppo ..con gli script questi sono numeri non gestibili.
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 11 gennaio 2025
    Bari
    73
    43
    01
    58
    81
    Cagliari
    69
    60
    18
    02
    10
    Firenze
    25
    32
    18
    55
    54
    Genova
    48
    05
    40
    34
    69
    Milano
    10
    07
    70
    44
    79
    Napoli
    11
    89
    01
    34
    80
    Palermo
    37
    80
    82
    44
    77
    Roma
    78
    04
    38
    39
    56
    Torino
    08
    13
    30
    27
    24
    Venezia
    56
    75
    36
    18
    70
    Nazionale
    63
    83
    19
    31
    80
    Estrazione Simbolotto
    Bari
    35
    34
    12
    23
    20
Indietro
Alto