Novità

script di verifica che vorrei ottimizzare...

lotto_tom75

Advanced Premium Member
Codice:
Class clsSviluppo
   Private aBNumDaSvil
   Private nQNumeri
   Private nCombInt
   Private nClasse
   Private aRighe
   Private nQNumPerRiga
   Private aPuntatore
   Private nSviluppate
   Function InitSviluppo(aNumeri,Classe)
      nQNumeri = AlimentArrayNumDaSvil(aNumeri)
      nCombInt = Combinazioni(nQNumeri,Classe)
      nClasse = Classe
      nSviluppate = 0
      If nCombInt > 0 Then
         Call AlimentaArrayRighe
         Call InitArrayPuntatore
      End If
      InitSviluppo = nCombInt
   End Function
   Function GetQuantitaNumeriDaSvil
      GetQuantitaNumeriDaSvil = nQNumeri
   End Function
   Function GetStringaNumDaSvil
      Dim s,k
      s = ""
      For k = 1 To UBound(aBNumDaSvil)
         If aBNumDaSvil(k) Then
            s = s & Format2(k) & "."
         End If
      Next
      GetStringaNumDaSvil = RimuoviLastChr(s,".")
   End Function
   Private Sub InitArrayPuntatore
      Dim k
      ReDim aPuntatore(nClasse)
      For k = 1 To nClasse - 1
         aPuntatore(k) = 1
      Next
      aPuntatore(k) = 0
   End Sub
   Function GetComb(aComb)
      Dim nTmp,k,nPuntatore
      nPuntatore = nClasse
      nTmp = aPuntatore(nPuntatore) + 1
      Do While nTmp > nQNumPerRiga
         nPuntatore = nPuntatore - 1
         If nPuntatore <= 0 Then Exit Do
         nTmp = aPuntatore(nPuntatore) + 1
      Loop
      If nPuntatore > 0 Then
         For k = nPuntatore To nClasse
            aPuntatore(k) = nTmp
         Next
         ReDim aComb(nClasse)
         For k = 1 To nClasse
            aComb(k) = aRighe(k,aPuntatore(k))
         Next
         nSviluppate = nSviluppate + 1
         GetComb = True
      Else
         GetComb = False
      End If
   End Function
   Function GetQuantitaSviluppate
      GetQuantitaSviluppate = nSviluppate
   End Function
   Private Function AlimentArrayNumDaSvil(aNumeri)
      Dim k,q
      aBNumDaSvil = ArrayNumeriToBool(aNumeri)
      For k = 1 To 90
         If aBNumDaSvil(k) Then
            q = q + 1
         End If
      Next
      AlimentArrayNumDaSvil = q
   End Function
   Private Sub AlimentaArrayRighe
      Dim nRiga,k,aNumeri
      Call ArrayBNumToArrayNum(aBNumDaSvil,aNumeri)
      nQNumPerRiga =(nQNumeri - nClasse) + 1
      ReDim aRighe(nClasse,nQNumPerRiga)
      For nRiga = 1 To nClasse
         For k = nRiga To(nRiga + nQNumPerRiga) - 1
            aRighe(nRiga,(k - nRiga) + 1) = aNumeri(k)
         Next
      Next
   End Sub
   Sub OutputARighe
      Dim k,j,s
      For k = 1 To nClasse
         s = ""
         For j = 1 To nQNumPerRiga
            s = s & Format2(aRighe(k,j)) & "."
         Next
         Call Scrivi(Format2(k) & ") " & RimuoviLastChr(s,"."))
      Next
   End Sub
End Class
Sub Main
   Dim ce
   Dim vettoreestrattiusciti
   Dim estrattiusciti
   estrattiusciti = "5 7 8"
   Call SplitByChar(estrattiusciti," ",vettoreestrattiusciti)
   For ce = 0 To UBound(vettoreestrattiusciti)
      Scrivi "singolo estratto " & vettoreestrattiusciti(ce)
   Next
   Dim c
   Dim aNumok
   aNumok = Array(0)
   Dim clSvi
   Dim nClasse
   Dim k,j
   Dim sNumeri
   Dim idComb
   Dim nInizio,nFine
   Dim idValoreDaAna
   Dim sValoreUsato
   Dim CombTot
   Set clSvi = New clsSviluppo
   Dim quantirisultati
   Dim Col_Ord
   Dim Tipo_Ord
   Dim QNS
   Dim aruote
   Dim aNum
   Dim tipoordinamentoscelto
   Dim numeridaverificare
   numeridaverificare = "1.2.3.4.5.6.7.8.9.10"
   Call SplitByChar(numeridaverificare,".",aNum)
   Dim v
   '
   For v = 0 To UBound(aNum)
      Scrivi "|" & aNum(v) & "|"
   Next
   For c = 1 To UBound(aNum) - 1
      aNum(c) = Int(aNum(c))
      aNumok = array_push(aNumok,aNum(c))
   Next
   nClasse = 1
   Dim nsorte
   Call ScegliRuote(aruote)
   nsorte = 1
   Dim parametrodiordinamentofinale
   parametrodiordinamentofinale = "f"
   Dim tipodiordinamentofinale
   tipodiordinamentofinale = "d"
   Select Case(parametrodiordinamentofinale)
   Case "f"
      idValoreDaAna = 1
      Col_Ord = 2
      sValoreUsato = " frequenza "
   Case "r"
      idValoreDaAna = 2
      Col_Ord = 3
      sValoreUsato = " ritardo "
   End Select
   Select Case(tipodiordinamentofinale)
   Case "d"
      Tipo_Ord = 0
      tipoordinamentoscelto = " decrescente "
   Case "c"
      Tipo_Ord = 1
      tipoordinamentoscelto = " crescente "
   End Select
   nInizio = EstrazioneIni
   nFine = EstrazioneFin
   If nClasse > 0 And nsorte > 0 And nsorte <= nClasse And idValoreDaAna > 0 Then
      Call Messaggio("Sviluppo combinazioni di classe " & nClasse)
      CombTot = clSvi.InitSviluppo(aNumok,nClasse)
      Call Messaggio("Lunghette totali da analizzare " & CombTot)
      ReDim aCombMigliori(CombTot,6)
      Call Messaggio("Statistica combinazioni in corso ")
      ReDim aCol(nClasse)
      Do While clSvi.GetComb(aCol) = True
         Call AnalisiComb(aCol,aruote,nsorte,aCombMigliori,nInizio,nFine,idValoreDaAna)
         k = k + 1
         If k Mod 1 = 0 Then
            Call Messaggio("Statistica combinazioni in corso " & k & " di " & CombTot)
            Call AvanzamentoElab(1,CombTot,k)
            If ScriptInterrotto Then Exit Do
         End If
         Call AvanzamentoElab(1,CombTot,k)
      Loop
      Call Messaggio("")
      Scrivi
      Scrivi
      Call Scrivi("Combinazioni di" & "<font color=red> classe " & nClasse & "</font>" & " analizzate per" & "<font color=red> punti " & nsorte & "</font>" & " sulle ruote " & "<font color=red>" & GetRuoteUsate(aruote) & "</font>")
      Call Scrivi("Combinazioni riportate in base al valore di" & "<font color=red>" & sValoreUsato & "</font>")
      Call Scrivi("Risultati ordinati in modo" & "<font color=red>" & tipoordinamentoscelto & "</font>")
      Call Scrivi("Range analizzato " & GetInfoEstrazione(nInizio) & " fino a " & GetInfoEstrazione(nFine))
      Call Scrivi("Estrazioni analizzate totali : " &(nFine + 1) - nInizio)
      Call Scrivi
      For k = 1 To UBound(aCombMigliori)
         ReDim ADati(6)
         ADati(1) = aCombMigliori(k,4)
         ADati(2) = aCombMigliori(k,1)
         ADati(3) = aCombMigliori(k,2)
         ADati(4) = aCombMigliori(k,3)
         ADati(5) = aCombMigliori(k,5)
         ADati(6) = aCombMigliori(k,6)
         Dim cColonna
         Dim contatore
         contatore = contatore + 1
         Dim diff
         For ce = 0 To UBound(vettoreestrattiusciti)
            If ADati(1) = vettoreestrattiusciti(ce) Then
               Call Scrivi("<font color=red>formazione: " & ADati(1) & " -" & " FQ " & ADati(2) & " -" & " RA " & ADati(3) & " -" & " RS " & ADati(4) & " -" & diff & " <font color=red bgcolor=yellow>" & ADati(5) & " -" & " INCMAX " & ADati(6) & "</font>" & " -" & " contatore " & contatore & "</font>")
            Else
               Call Scrivi("formazione: " & ADati(1) & " -" & " FQ " & ADati(2) & " -" & " RA " & ADati(3) & " -" & " RS " & ADati(4) & " - DIFF " & ADati(5) & " -" & " INCMAX " & ADati(6) & " -" & " contatore " & contatore)
            End If
            If ScriptInterrotto Then Exit For
         Next
         If ScriptInterrotto Then Exit For
      Next
      Call Scrivi
      Call Scrivi("Tempo trascorso: " & TempoTrascorso)
      Call Scrivi
   Else
      MsgBox "Selezionare la classe di sviluppo e la Sorte , " & _
      "si ricorda che la Sorte non puo essere maggiore della classe di sviluppo " & _
      "e che bisogna scegliere quale valore statistico considerare per " & _
      "alimentare la lista delle prime N Combinazioni desiderate da mostrare in output "
      Stop
   End If
End Sub
Sub AnalisiComb(aNum,aRuote,Sorte,aCombMig,nInizio,nFine,idValoreDaAna)
   Dim k,j
   Dim Rit
   Dim RitMax
   Dim Freq
   Dim Valore
   Dim diff
   Dim RetIncrRitMax
   Call StatisticaFormazioneTurbo(aNum,aRuote,Sorte,Rit,RitMax,RetIncrRitMax,Freq,nInizio,nFine)
   diff = RitMax - Rit
   Select Case idValoreDaAna
   Case 1
      Valore = Freq
   Case 2
      Valore = Rit
   Case 3
      Valore = RitMax
   End Select
   For k = 1 To UBound(aCombMig)
      If Valore >= aCombMig(k,0) Then
         For j = UBound(aCombMig) To(k + 1) Step - 1
            aCombMig(j,0) = aCombMig(j - 1,0)
            aCombMig(j,1) = aCombMig(j - 1,1)
            aCombMig(j,2) = aCombMig(j - 1,2)
            aCombMig(j,3) = aCombMig(j - 1,3)
            aCombMig(j,4) = aCombMig(j - 1,4)
            aCombMig(j,5) = aCombMig(j - 1,5)
            aCombMig(j,6) = aCombMig(j - 1,6)
         Next
         aCombMig(k,0) = Valore
         aCombMig(k,1) = Freq
         aCombMig(k,2) = Rit
         aCombMig(k,3) = RitMax
         aCombMig(k,4) = StringaNumeri(aNum)
         aCombMig(k,5) = diff
         aCombMig(k,6) = RetIncrRitMax
         Exit For
      End If
   Next
End Sub
Function ScegliSorte()
   ReDim aVoci(4)
   aVoci(0) = "Estratto"
   aVoci(1) = "Ambo"
   aVoci(2) = "Terno"
   aVoci(3) = "Quaterna"
   aVoci(4) = "Cinquina"
   ScegliSorte = ScegliOpzioneMenu(aVoci,1,"Scegli Sorte") + 1
End Function
Function ScegliValoreDaAnalizzare(sValore,parametro)
   ReDim aVoci(4)
   Dim i
   aVoci(0) = "Frequenza"
   aVoci(1) = "Ritardo"
   aVoci(2) = "Ritardo massimo"
   aVoci(3) = "Differenza Aurea"
   aVoci(4) = "IncMax"
   i = ScegliOpzioneMenu(aVoci,1,"Quale valore considerare per l'ordinamento ? ")
   sValore = aVoci(i)
   ScegliValoreDaAnalizzare = i + 1
End Function
Function GetRuoteUsate(aRuote)
   Dim k
   Dim s
   For k = 1 To UBound(aRuote)
      s = s & SiglaRuota(aRuote(k)) & " "
   Next
   GetRuoteUsate = Trim(s)
End Function
Function array_push(arr,vars)
   Dim k,newelem,newarrsize,elem
   If IsArray(arr) Then
      If Len(vars) > 0 Then
         If InStr(vars,",") = False Then
            newarrsize = CInt(UBound(arr) + 1)
            ReDim Preserve arr(newarrsize)
            arr(newarrsize) = vars
         Else
            k =(UBound(arr) + 1)
            newelem = Split(vars,",")
            newarrsize = CInt(UBound(arr) + UBound(newelem) + 1)
            ReDim Preserve arr(newarrsize)
            For Each elem In newelem
               arr(k) = Trim(elem)
               k = k + 1
            Next
         End If
      End If
      array_push = arr
   Else
      array_push = False
   End If
End Function
Function SelEsito
   Dim ret
   Dim aVoci
   For ret = 1 To 1
      SelEsito = ret
   Next
End Function

Se lo si esegue si ottiene il seguente output

singolo estratto 5
singolo estratto 7
singolo estratto 8

|1|
|2|
|3|
|4|
|5|
|6|
|7|
|8|
|9|
|10|


Combinazioni di classe 1 analizzate per punti 1 sulle ruote BA
Combinazioni riportate in base al valore di frequenza
Risultati ordinati in modo decrescente
Range analizzato [00001] [ 1 ] 07.01.1871 fino a [10032] [ 9 ] 20.01.2022
Estrazioni analizzate totali : 10032

formazione: 5 - FQ 591 - RA 19 - RS 108 - 89 - INCMAX 0 - contatore 1
formazione: 5 - FQ 591 - RA 19 - RS 108 - DIFF 89 - INCMAX 0 - contatore 1
formazione: 5 - FQ 591 - RA 19 - RS 108 - DIFF 89 - INCMAX 0 - contatore 1
formazione: 4 - FQ 570 - RA 51 - RS 103 - DIFF 52 - INCMAX 0 - contatore 2
formazione: 4 - FQ 570 - RA 51 - RS 103 - DIFF 52 - INCMAX 0 - contatore 2
formazione: 4 - FQ 570 - RA 51 - RS 103 - DIFF 52 - INCMAX 0 - contatore 2
formazione: 8 - FQ 548 - RA 25 - RS 145 - DIFF 120 - INCMAX 0 - contatore 3
formazione: 8 - FQ 548 - RA 25 - RS 145 - DIFF 120 - INCMAX 0 - contatore 3
formazione: 8 - FQ 548 - RA 25 - RS 145 - 120 - INCMAX 0 - contatore 3
formazione: 3 - FQ 540 - RA 25 - RS 115 - DIFF 90 - INCMAX 0 - contatore 4
formazione: 3 - FQ 540 - RA 25 - RS 115 - DIFF 90 - INCMAX 0 - contatore 4
formazione: 3 - FQ 540 - RA 25 - RS 115 - DIFF 90 - INCMAX 0 - contatore 4
formazione: 9 - FQ 539 - RA 9 - RS 91 - DIFF 82 - INCMAX 0 - contatore 5
formazione: 9 - FQ 539 - RA 9 - RS 91 - DIFF 82 - INCMAX 0 - contatore 5
formazione: 9 - FQ 539 - RA 9 - RS 91 - DIFF 82 - INCMAX 0 - contatore 5
formazione: 2 - FQ 529 - RA 12 - RS 104 - DIFF 92 - INCMAX 0 - contatore 6
formazione: 2 - FQ 529 - RA 12 - RS 104 - DIFF 92 - INCMAX 0 - contatore 6
formazione: 2 - FQ 529 - RA 12 - RS 104 - DIFF 92 - INCMAX 0 - contatore 6
formazione: 6 - FQ 513 - RA 96 - RS 125 - DIFF 29 - INCMAX 0 - contatore 7
formazione: 6 - FQ 513 - RA 96 - RS 125 - DIFF 29 - INCMAX 0 - contatore 7
formazione: 6 - FQ 513 - RA 96 - RS 125 - DIFF 29 - INCMAX 0 - contatore 7
formazione: 7 - FQ 499 - RA 46 - RS 146 - DIFF 100 - INCMAX 0 - contatore 8
formazione: 7 - FQ 499 - RA 46 - RS 146 - 100 - INCMAX 0 - contatore 8
formazione: 7 - FQ 499 - RA 46 - RS 146 - DIFF 100 - INCMAX 0 - contatore 8

Tempo trascorso: 00:00:08

Tutto bene... tranne il fatto che le risultanze di riga sono sempre uguali al numero degli estratti verificati... anzichè essere una riga soltanto per ogni numero da verificare come dovrebbe essere...

es. se gli estratti fossero stati 5 lo script avrebbe mostrato 5 righe per ogni numero da verificare... ecc...

Grazie a chi riuscirà a sistemarlo in modo che l'output di esempio diventi...


Combinazioni di classe 1 analizzate per punti 1 sulle ruote BA
Combinazioni riportate in base al valore di frequenza
Risultati ordinati in modo decrescente
Range analizzato [00001] [ 1 ] 07.01.1871 fino a [10032] [ 9 ] 20.01.2022
Estrazioni analizzate totali : 10032

formazione: 5 - FQ 591 - RA 19 - RS 108 - 89 - INCMAX 0 - contatore 1
formazione: 4 - FQ 570 - RA 51 - RS 103 - DIFF 52 - INCMAX 0 - contatore 2
formazione: 8 - FQ 548 - RA 25 - RS 145 - DIFF 120 - INCMAX 0 - contatore 3
formazione: 3 - FQ 540 - RA 25 - RS 115 - DIFF 90 - INCMAX 0 - contatore 4
formazione: 9 - FQ 539 - RA 9 - RS 91 - DIFF 82 - INCMAX 0 - contatore 5
formazione: 2 - FQ 529 - RA 12 - RS 104 - DIFF 92 - INCMAX 0 - contatore 6
formazione: 6 - FQ 513 - RA 96 - RS 125 - DIFF 29 - INCMAX 0 - contatore 7
formazione: 7 - FQ 499 - RA 46 - RS 146 - DIFF 100 - INCMAX 0 - contatore 8

ovvero presenti appunto una sola riga per numero da verificare...
 
Non importa più ce l'ho fatta da solo 😀 usando PuntiSuArray 👇 ;)

Codice:
 If PuntiSuArray(vettorediconfronto,aNumok,1) = 1 Then

 Call Scrivi("<font color=red>formazione: " & ADati(1) & " -" & " FQ " & ADati(2) & " -" & " RA " & ADati(3) & " -" & " RS " & ADati(4) & " -" & diff & " <font color=red bgcolor=yellow>" & ADati(5) & " -" & " INCMAX " & ADati(6) & "</font>" & " -" & " contatore " & contatore & "</font>")

else 
 
 Call Scrivi("formazione: " & ADati(1) & " -" & " FQ " & ADati(2) & " -" & " RA " & ADati(3) & " -" & " RS " & ADati(4) & " - DIFF " & ADati(5) & " -" & " INCMAX " & ADati(6) & " -" & " contatore " & contatore)
      
  End If
 

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

Ultimi Messaggi

Indietro
Alto