Option Explicit
Sub Main
   'implementazione filtro abasul x A in classe voluta (fino alla 89) + data estrazione rs max in selettivo  by lotto_tom75
   'metodo abasul completo---
   'Intanto, prima di spiegare come fare per scegliere le Combinazioni da giocare proposte dallo script,
   'bisogna prima capire bene questo concetto: il mio modo di operare si affida esclusivamente a principi
   'statistico-matematici e pertanto le scelte delle Combinazioni previsionali non fanno a che fare né a
   '"metodi per il lotto" né ad una "casuale previsione cabalistica per il lotto".Ecco come si procede:
   'si devono scegliere tra tutte le Combinazioni ricercate dallo script: 1) Due ambi secchi; due terzine
   'per ambo e due quartine per ambo ma che abbiano come data del loro max storico l'anno più vicino
   'a quello odierno, cioè dell'ultima estrazione. 2) Tutti i 18 numeri che sono compresi per ogni combinazione
   'devono essere tutti diversi. 3) Le previsioni che quindi In tutto ne sono sei, devono essere sempre seguite
   'estrazione su estrazione, perché quando ad esempio una di essa supera il range "tra 45% e 75%"
   'deve essere tolta e giocarne sempre di meno.
   '-----fine metodologia abasul
   Dim nSorte,aRuote,Ini,fin,sMsg,nMoltip,nTrov,nNumSel
   Dim nCicloTeo,nRitMax,nRitMin,nClasseLunghetta,nRuoteSel,nLunghetteDaTrov
   Dim TimeStart
   Dim k,CollComb,cColonna
   Dim aN
   Dim TipoAlgo
   Dim RetRit,RetRitMax,RetIncrRitMax,RetFrq
   Dim nSuperficialita
   nTrov = 0 '
   nNumSel = ScegliNumeri(aN)
   'aN = Array(0,16,49,60)
   'nSorte = 2 ' ScegliEsito
   nSorte = InputBox("Scegli sorte di ricerca","Sorte di ricerca",2)
   If nSorte < 0 Or nSorte > 5 Then
      nSorte = InputBox("Hai scelto una sorte impossibile da valutare. Scegli sorte di ricerca appropriata...","Sorte di ricerca",2)
   End If
   'nClasseLunghetta = 3 'ScegliClassseLunghetta
   nClasseLunghetta = InputBox("Scegli classe di ricerca","Classe di ricerca",UBound(aN) - 1)
   TipoAlgo = 4
   nSuperficialita = 0
   Dim contatore
   contatore = 0
   Call Scrivi
   Call Scrivi("Elaborazione effettuata con archivio lotto aggiornato all'estrazione del: " & giorno(EstrazioneFin) & "-" & Mese(EstrazioneFin) & "-" & Anno(EstrazioneFin))
   Call Scrivi
   Call Scrivi("Classe " & nClasseLunghetta & " sorte " & nSorte)
   Call Scrivi
   'nRuoteSel= 1 : ReDim aRuote(1) : aRuote(1) =RO_'SelRuote(aRuote)
   Dim r
   For r = 1 To 12 ' to 12
      nRuoteSel = r : ReDim aRuote(r) : aRuote(r) = r
      nLunghetteDaTrov = 10000 ' Int(InputBox("Lunghette da trovare","Quantità lunghette",10))
      ReDim Preserve aRuote(nRuoteSel)
      nCicloTeo = CicloTeorico(nClasseLunghetta,nSorte,UBound(aRuote))
      nMoltip = 1
      '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 = 0' Int(InputBox(sMsg,,nCicloTeo * nMoltip))
      'sMsg = "Inserire il ritardo minimo 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 3"
      nRitMin = 0 ' Int(InputBox(sMsg,,nCicloTeo * 3))
      fin = EstrazioneFin
      Ini = fin - nRitMax
      'If Ini <= 0 Then Ini = 1
      Dim idrsmax ' il numero dell'estrazione in cui si è verificato il ritardo storico per la sorte specificata
      Dim estrazione
      For estrazione = Ini To fin
         TimeStart = Timer
         Call GetLunghettePiuRitardate(aN,aRuote,nClasseLunghetta,nSorte,CollComb,EstrazioneIni,EstrazioneFin,nRitMin,nRitMax,nLunghetteDaTrov,TipoAlgo,nSuperficialita)
         'Call GetLunghettePiuRitardate(aN,aRuote,EstrazioneIni,EstrazioneFin,nClasseLunghetta,nSorte,CollComb)
         Call OrdinaItemCollection(CollComb,"Ritardo",,,- 1)
         For Each cColonna In CollComb
            contatore = contatore + 1
            Call StatisticaFormazioneTurbo(cColonna.aNum,aRuote,nSorte,RetRit,RetRitMax,RetIncrRitMax,RetFrq,EstrazioneIni,EstrazioneFin)
            idrsmax = SerieEstrazioneStorico(EstrazioneIni,EstrazioneFin,cColonna.aNum,aRuote,nSorte)
            'Dim matchxdataraugualersmax
            'If RetRit=idrsmax Then
            '
            '         matchxdataraugualersmax=DataEstrazione(idrsmax)
            '
            'End If
            Dim diff
            diff = RetRitMax - RetRit
            If(RetRit >= 0) Then
               Dim datoabasul
               datoabasul =(RetRit/RetRitMax) * 100
               diff = RetRitMax - RetRit
               If(RetRit >= 0) Then
                  If(datoabasul >= 45) And(datoabasul <= 75) Then
                     Call Messaggio("trovata")
                     Call Scrivi("PROVA OUTPUT SECONDO FILTRO ABASUL con sole formazioni con ra distante dal rispettivo rs x A in terzina tra il 45% e 75%")
                     Call Scrivi("<font color=green>OK la formazione ha passato il filtro abasul per A in 3ina con valore di filtro: </font>" & datoabasul)
                     Call Scrivi("Sorte ricercata: " & nSorte & " classe: " & nClasseLunghetta)
                     'idrsmax = SerieEstrazioneStorico(Ini,fin,cColonna.aNum,aRuote,nSorte)
                     Call Scrivi(SiglaRuota(aRuote(r)) & " - " & cColonna.GetStringaNum & " Rit " & RetRit & " rit max " & RetRitMax & "<font color=blue> data ritardo max " & DataEstrazione(idrsmax) & "</font> incmax " & RetIncrRitMax & " frequenza " & RetFrq)
                     ' Scrivi
                     '                     Call Scrivi (Int(EstrazioneFin))
                     '                     Call Scrivi (Int(idrsmax))
                     Dim ValorediffEstrazioneFinmenoidrsmax
                     ValorediffEstrazioneFinmenoidrsmax = Int(EstrazioneFin) - Int(idrsmax)
                     '                     Scrivi
                     Call Scrivi("<font color=red>VALORE DIFF data ultima estrazione - data rs max <strong>" & ValorediffEstrazioneFinmenoidrsmax & "</strong></font>")
                  Else
                     'Call Scrivi("<font color=red>NO la formazione NON ha passato il filtro abasul per A in 3ina con valore di filtro: </font>" & datoabasul)
                  End If
               End If ' x controllo valori non nulli di ra e rs
               'Call Scrivi("Sorte ricercata: " & nSorte & " classe: " & nClasseLunghetta)
               'Call Scrivi(SiglaRuota(aRuote(r)) & " " & cColonna.GetStringaNum & " Rit " & RetRit & " rit max " & RetRitMax & " incmax " & RetIncrRitMax & " frequenza " & RetFrq)
               'Call Scrivi(cColonna.GetStringaNum)
            End If
            If ScriptInterrotto Then Exit For
         Next
      Next
      Call Scrivi("------------------------------------------------------------------------------")
      If ScriptInterrotto Then Exit For
   Next 'secondo next aggiunto per tentativo di elaborare ogni ruota in una volta sola
   Call Scrivi("Tempo di elaborazione : " & FormattaSecondi(Timer - TimeStart))
End Sub
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 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
Function FormattaSecondi(s)
   'Questa Function trasforma il numero di secondi passato come parametro in una stringa
   ' passando i secondi si ottengono ore  minuti e secondi  in formato hh:mm:ss
   ' s ---> Numero di secondi da formattare
   ' ritorna una stringa il cui formato è hh:mm:ss (la function non funziona se in totale abbiamo piu di 99 ore )
   Dim hh
   Dim Mm
   Dim Ss
   Dim TimeStr
   hh = s \ 3600
   Mm =(s Mod 3600) \ 60
   Ss = s -((hh * 3600) +(Mm * 60))
   TimeStr = Format2(hh) & ":" & Format2(Mm) & ":" & Format2(Ss)
   FormattaSecondi = TimeStr
End Function