Novità

Legend - NUOVA MISSIONE

  • Creatore Discussione Creatore Discussione LuigiB
  • Data di inizio Data di inizio
ciao Legend questo è l'algoritmo dal quale prenderemo spunto , per applicarlo alle nostre necessita dovremo apportare le opportune modifiche da qui prendiamo solo l'ispirazione.
Ora non pensare al lotto ma soffermati sul meccanismo con il quale una tale lettera letta dal
messaggio in chiaro viene convertita in uno qualsiasi dei caratteri del charset e nonostante cio produca una stringa incomprensibile il processo è reversibile.

il meccanismo è questo

per ogni lettera del messaggio in chiaro

ottieni la posizione della lettera nel charset

ottieni la posizione del carattere di mascheramento in funzione della password usata e della posizione del carattere in chiaro all'interno del messaggio in chiaro

somma i due valori e riduci eventualmente il risultato se questo supera la lunghezza del charset

il valore ottenuto è la posizione del carattere criptato nel charset

prendi il carattere criptato e aggiungilo al testo criptato

alla fine mostra il testo criptato

vado a dormire pure io .. buona notte !
 
Ciao luigi cercavo si scrivere un array di 90 numeri ma scritti in ordine casuale.
Utilizzando numero casuale e poi elimina ripetuti
Riesco a scriverli tutti e 90 perché uso l opzione comprime ma poi me li restituisce ordinati.
So che la funzione ordina per ottimizzare il codice e la velocità ma come posso fare con codice?
Deco utilizzare la classe con Add e err. clear?
Ciao :)
Grazie;)
 
ciao legend ogni cosa al suo tempo , per ora non devi fare nulla oltre a quelllo che ti suggerisco io ..piu tardi vedo se ce la faccio a scriverti le prime cose che dovrai implememtare ..
 
Ciao Legend , possiamo iniziare con l'implementazione del nostro script.
l'esempio che ti ho fatto precedentemente sull'algoritmo di crittazione serviva per
spiegare da dove prenderemo l'ispirazione .

ripeto innanzi tutto quale sia il nostro scopo.

il nostro scopo consiste nel costruire uno script che produca una quantità a scelta
di archivi virtuali
Durante l'esecuzione dello script sarà possibile scegliere un'altro script (precedentemente fatto o modificato da uno gia esistente) che implementi un metodo.
Il metodo sarà applicato a tutti gli archivi virtuali e per ogni archivio analizzato
il metodo resituira una classifica di combinazioni individuate come migliori.
Noi conteggeremo le convergenze dei numeri delle combinazioni prodotte dal metodo su
tutti gli archivi virtuali.
Alla fine otterremo una classifica delle convergenze.
Con un'apposita routine studieremo l'andamento del metodo in un range di analisi da noi definito per vedere cosa sarebbe successo se lo avessimo giocato
Con un'altra routine invece proporremo l'eventuale giocata da fare alla prossima estrazione.
in base al metodoto scelto in quel momento

Se ci pensi quasi tutti gli script nel loro output producono una classifica di combinazioni di solito lo fanno mostando in output una tabella,tutti gli script che gia fanno questo potranno essere facilmente adattati per farli usare dal nostro script,


Non nego che lo script sia abbastanza complesso , ma come tutte le cose complesse si tratta
di piu cose semplici sommate l'una all'altra quindi penso che riusciremo nell'intento.

la prima parte delllo script consiste nella generazione degli archivi virtuali.
Quindi definiamo bene quali siano le caratteristiche principali da implementare.

1)deve essere possibile scegliere la quantità di archivi virtuali da creare
2)deve essere possibile continuare ad aggiornare eventuali archivi virtuali gia creati
3)deve essere possibile creare piu gruppi di archivi virtuali


rispettando queste caratteristiche sarà possibile creare una quantita quasi infinita
di archivi virtuali.

Mano mano ti dirò quali sono le routine da implementare e come abbiamo gia fatto tu metterai la tua routine , io successivamente metterò la mia.
L'importante è ch tu capisca lo scopo delle varie routine e la logica che le lega.

inizieremo innanzi tutto a creare una routine di utility che serve per leggere tutte
le estrazioni dell'archivio reale per metterle in memoria in un'apposita matrice.
Questo è necessario perche il nostro script dovra sempre sapere quali sono i numeri estratti
nell'archivio vero quello che abbiamo definito archivio reale.

questa che segue è la funzione in cui devi implementare il codice.

Codice:
Function AlimentaMatriceEst(aEst) ' as boolean
    Dim k,r,e,nTot
    


    ReDim aEst(nTot,11,5)

End Function

Come vedi ti ho avvantaggiato dichiarando gia le variabili da usare, o forse ti ho reso
le cose piu difficili, chi lo sa ? Certo è che devi implementare la funzione usando solo le variabili che ci sono , non potrai dichiararne altre.
nella nostra matrice la ruota nazionale vale 11 e non 12 come nelle routine dello spazioscript, fai attenzione a questo.
Quindi questa routinedeve alimentare la matrice aEst con tutte le estrazioni dell'archivio
e deve tornare true se c'è riuscita.

procedi con questo primo step.

consiglio : puoi (devi) usare la funzione GetEstrazioneCompleta nel tuo codice
 
ciao Luigi;)
ciao a tutti
ecco il codice
Ma 11 ? E' cambiato qualcosa oppure i nuovi archivi si dislocano in spaziometria?
Codice:
Option Explicit
Sub Main
    Dim nTot,k
    nTot = EstrazioniArchivio
    ReDim aEstr(nTot,11,5)
    Call AlimentaMatriceEst(aEstr)
    For k = 1 To nTot
        If Not GetEstrazioneCompleta(k,aEstr)Then Scrivi k
    Next
End Sub
Function AlimentaMatriceEst(aEstr)
    Dim k,R,e,nTot
    nTot = EstrazioniArchivio
    ReDim aEstr(nTot,11,5)
    For k = 1 To nTot
        For R = 1 To 11
            For e = 1 To 5
                aEstr(k,R,e) = Estratto(k,R,e)
            Next
        Next
    Next
End Function

credo che sia corretto
Luigi ho perso il pomeriggio per scrivere una stringa di 90 numeri senza ripetizioni in modo casuale no serve ma cosi è corretta?
Codice:
Option Explicit
Sub Main
    ReDim aNum(0)
    Dim k,nTrov
    ReDim aNumTro(0)
    Dim Numeri
    Set Numeri = GetNewCollection
    nTrov = 0
    Do While nTrov < 90
        k = k + 1
        ReDim Preserve aNum(k)
        aNum(k) = NumeroCasuale(1,90)
        On Error Resume Next
        Numeri.Add,"h" & aNum(k)
        If Err = 0 Then
            nTrov = nTrov + 1
            ReDim Preserve aNumTro(nTrov)
            aNumTro(nTrov) = aNum(k)
        End If
        Err.Clear
    Loop
    Scrivi "Tro " & UBound(aNumTro)
    Scrivi "Rip " & NumeriRipetuti(aNumTro)
    Scrivi "Numeri  " & StringaNumeri(aNumTro," ",True)
End Sub
grazie :)
a dopo
 
Ultima modifica:
allora ragazzi mi fa piacere l'entusiasmo ma la regola è molto semplice : "vietato partire per la tangente"

quindi dato che lo script che ho in mente è abbastanza complesso e che gia so come vorrei impostarlo legend o gli altri che parteciano devono semplicemente scrivere il codice che io chiedo
niente di piu niente di meno , vb6 non è il nostro argomento stiamo lavorando con uno script ,
riguardo a te legend hai fatto abbastanza bene solo che nella sub main per ora non c'è bisogno di nessuna variabile all'infuori di aEstr , e la stessa aEstr va dimesionata direttamente dentro la sua sub , inoltre legend anche se il tuo codice funziona ti avevo "consigliato" di usare getEstrazioneCompleta invece dei 55 accesi con la funzione Estratto .. dai vedila nell'hel e posta le modifiche.
La tua stringa di 90 numeri ineffetti non ci serve ...vedrai poi come faremo per creare gli archivi virtuali.

il fattodella nazionale 11 dipende dalla stuttura dati che stiamo creando la matrice aEstr , vedrai poi che ci torneà utile.Non ti confondere con i valori che si devono passare alle varie funzion istatistiche , ora noi stiamo facedo uno script che ha una sua propria logica.

ciao.
 
Ultima modifica di un moderatore:
Luigi mi spiace ma non capisco. Come posso riempirla se non con gli estratti?
Per utilizzare get Estrazione completa devo dichiarare un altra matrice con Redim.
Mi manca quslcosa
 
Senza voler prevaricare nessuno, provo a lasciare un listato :

Codice:
Option Explicit
Sub Main
    Dim nTot,k
    nTot = EstrazioniArchivio
    ReDim aEstr(nTot,11,5)
    Call AlimentaMatriceEst(aEstr)
    For k = 9080 To nTot
        If Not GetEstrazioneCompleta(k,aEstr)Then Scrivi k
    Next
End Sub
Function AlimentaMatriceEst(aEstr)
    Dim k,R,e,nTot
    ReDim EstrRitorno(11,5)
    nTot = EstrazioniArchivio
    ReDim aEstr(nTot,11,5)
    For k = 9080 To nTot
        Call GetEstrazioneCompleta(k,EstrRitorno)
        Scrivi " Estraz. n° " & k '& " " &
        ScriviMatrice EstrRitorno,,3
    Next
End Function

Un saluto
 
Ciao Claudio piacere rileggerti
:)
Non riuscivo perché pensavo che così valorizzato solo a ritorno e non aestr.
Bravissimo.
Ora aspettiamo luigi.
Ciao e buon lavoro a tutti:)
 
Ottimo , bravo Claudio (pero ti sei dimeticato di alimetare a Estr..) lo script dopo questa prima implementazione infatti risulterebbe cosi.
Caludio , Legend e tutti gli altr iscripterr che eventualmente stanno seguendo devono allinearsi
a questo codice.


Codice:
Sub Main
        Dim aEstAR ' matrice estrazioni archivio reale (Tot,Ruota,Pos)
 
        ' legge le estrazioni dell'archivio reale e le mette in memoria
        If AlimentaMatriceEst(aEstAR) Then
            
        End If
  
End Sub
Function AlimentaMatriceEst(aEst)
    ' alimenta la matrice con tutte le estrazioni dell'archivio reale
    Dim k,r,e,nTot
    nTot = EstrazioniArchivio
    ReDim aEst(nTot,11,5)
    For k = 1 To nTot
        ReDim aNumEst(0)
        Call GetEstrazioneCompleta(k,aNumEst)
        aEst(k,0,0) = DataEstrazione(k,,,"/") & "-" & IndiceAnnuale(k)
        For r = 1 To 11
            For e = 1 To 5
                aEst(k,r,e) = aNumEst(r,e)
            Next
        Next
    Next
    AlimentaMatriceEst = nTot > 0
End Function


coem noterete ho usato uno spazio libero della matrice per memorizzare anche la data e il numero estrazione

ora dobbiamo continuare ad implementare la sub main predisponendo alcune dele variabili che serviranno al nostro script ,e scrvere anche qualche linea di codice che prepari l'ambiente.
Nessuna preoccupazione per ora le cose rimangono sempmplici e procederemo a piccolissimi step.

Abbiamo visto che nella sub main la funzione che vi ho chiesto "AlimentaMatriceEst" è stata inserita in un costrutto if questo fa presupporre che all'interno del blocco dovremo scrivere altro codice.


un 'altra delle necessita a cui dobbiamo provvedere è la creazione di una directory dove andremmo a salvare i file degli archivi virtuali che produrremo.
Quindi dichiareremo una nuova variabile nella sub main e sempre nella main la valorizzeremo ,
tale variabile conterrà il percorso delal directory dove salveremo gli archivi virtuali.
Per creare una directory c'è l'apposita funzione dello spazioscript.
Anche la chiamata a questa funzione va posta in un costrutto if interno a quello gia presente.

dopo aver scritto il semplice codice per ottenere quello chiesto sopra penseremo ad approntare
per ora parzialmente tutto cio che ci servirà per costruire gli archivi virtuali , quindi dichiareremo una serie di variabili

Dovrà essere possibile scegliere quanti archivi si vogliono creare
Dovrà essere possibile scegliere da quale estrazione (dell'archivio reale) partire per la generazione dei virtuali


per ora vediamo chi fa priam ad implemetare queste richieste.

Potrei aggiungerne altre ma ripeto prefrisco fare step molto piccoli anche se il codice richiesto è molto facile .. non vi preoccupate il bello verrà dopo ...

ciao a tutti
 
Ultima modifica di un moderatore:
Codice:
Sub Main
    Dim aEstAR ' matrice estrazioni archivio reale (Tot,Ruota,Pos)
    Dim Ini,Fin,sDir,nArchivi
    ' legge le estrazioni dell'archivio reale e le mette in memoria
    If AlimentaMatriceEst(aEstAR) Then
        'con scegli file apro la cartella solo per verificare creazione
        'sDir = ScegliFile(GetDirectoryAppData & "ArchiviVirtualiMultipli\")
        sDir = GetDirectoryAppData & "ArchiviVirtualiEnigma\"
        If CreaDirectory(sDir) Then
            Call ScegliRange(Ini,Fin)
            nArchivi=QuantiArchivi
            
            MsgBox"ora possiamo generare i nuovi archivi Enigma"
        End If
    End If
End Sub
Function AlimentaMatriceEst(aEst)
    ' alimenta la matrice con tutte le estrazioni dell'archivio reale
    Dim k,r,e,nTot
    nTot = EstrazioniArchivio
    ReDim aEst(nTot,11,5)
    For k = 1 To nTot
        ReDim aNumEst(0)
        Call GetEstrazioneCompleta(k,aNumEst)
        aEst(k,0,0) = DataEstrazione(k,,,"/") & "-" & IndiceAnnuale(k)
        For r = 1 To 11
            For e = 1 To 5
                aEst(k,r,e) = aNumEst(r,e)
            Next
        Next
    Next
    AlimentaMatriceEst = nTot > 0
End Function
Function QuantiArchivi
QuantiArchivi=Int(InputBox("Quanti archivi vuoi creare?","Numero Archivi",12))
End Function

Ciao a Tutti ;)
spero vada bene
 
perfetto , l'unicacosa il range , a noi ci interessa solo l'inizio , cioè l'estrazione dalla quale iniziare a creare i virtuali , la fine non ci interessa perche sarà sempre fino all'ultima estrazione disponibile.

ecco lo script con queste prime implementazioni fatte assieme

Codice:
Option Explicit

Sub Main
    Dim nQArchivi ' quantita degli archivi da creare
    Dim nEstrIni ' estrazione dalla quale iniziare a creare le corrispondenti virtuali
    Dim aEstAR ' matrice estrazioni archivio reale (Tot,Ruota,Pos)
    Dim sDirArcVirt ' directory dove vengono creati gli archivi virtuali
    
    nQArchivi = Int(InputBox("Quanti archivi virtuali creare ?","Quantita archivi virtuali","25"))
    nEstrIni = 3950
    sDirArcVirt = GetDirectoryAppData & "ArchiviVirtualiEnigma\"
    ' creo la directry dove salvo gli archivi
    If CreaDirectory(sDirArcVirt) Then
        ' legge le estrazioni dell'archivio reale e le mette in memoria
        If AlimentaMatriceEst(aEstAR) Then
            
        End If
    End If
End Sub
Function AlimentaMatriceEst(aEst)
    ' alimenta la matrice con tutte le estrazioni dell'archivio reale
    Dim k,r,e,nTot
    nTot = EstrazioniArchivio
    ReDim aEst(nTot,11,5)
    For k = 1 To nTot
        ReDim aNumEst(0)
        Call GetEstrazioneCompleta(k,aNumEst)
        aEst(k,0,0) = DataEstrazione(k,,,"/") & "-" & IndiceAnnuale(k)
        For r = 1 To 11
            For e = 1 To 5
                aEst(k,r,e) = aNumEst(r,e)
            Next
        Next
    Next
    AlimentaMatriceEst = nTot > 0
End Function


ho visto che tu hai messo delle input box io per ora ho lasciato valori fissi perche siamo in fase di test e scoccia ogni volta inserire il valore nella input box m comunque va benissimo come hai fatto.

benissimo iniziamo a introdurre l'agoritmo che useremo per generare gli archivi virtuali , come ho anticipato trae ispirazione dalle routine di crittazione di cui ho fatto un banale esempio
Quella routine riesce a trasformae la stringa in chiaro in una stringa incomprensibile grazie alla password e sempre grazie alla password riesce a fare il processo inverso.
Anche a noi ci serve qualcosa di simile alle password per poter generare i numeri virtuali che ci servono , infatti i nostri archivi virtuali dipendono dai numeri dell'archivio reale e in un certo senso si potrebbe dire che l'archivio virtuale sia l'archivio realr criptato dove al posto del numero vero ne compare semplicemente un altro ..dato che nella sostanza gli archivi continuano a rispettare le regole del lotto noi potremo fare le statistiche sull'archivio virtuale vedere la combinazione migliore e poi tradurla tramite la "passwod" nei numeri veri quelli dell'archivio reale.
Ora noi avendo a che fare con i numeri non useremo una password alfabetica ma una password numerica , la password numerica non è niente altro che quella ch viene comunemente definita tra i giocatori "lunghetta" per esempio "1.5.15.23.58"
come si vede la lunghetta puo avere 5 numeri ma anche di piu o anche di meno , ad ogni lunghetta corrisponderà un archivio virtuale , useremo i numeri della lunghetta come se fosse una password.

quindi il codice che vi chiedo è ancora molto semplice

ci vuole un array che chiameremo aKey e che conterra tutte le lunghette che useremo per codificare l'archivio reale

ci vule la possibilità di sceglier di che classe sarnno le lunghette che andranno ad alimentare aKey (impostare classe minima almeno a 5 fare il controllo)

ci vule una funzione che riceva tutti i parametri necessari affinche possa alimetare aKey con la quantita di lunghette volute , e della classe specificata

Questa funzione alimenterà aKey con tutte le lunghette producendole in modo casuale o ordinato.
Io direi che è meglio casuale ,( poi magari diro il perche secondo me)

.. procedere ... avanti tutta !
 
Ultima modifica di un moderatore:
Codice:
            Option Explicit
Sub Main
    Dim idClasse,idArch,i
    
    idArch = 10
    ReDim qArrayArchivi(idArch)
    idClasse = GetClasse
    Scrivi idClasse
    Call CreaArchivi(qArrayArchivi,idClasse)

    For i = 1 To UBound(qArrayArchivi)
        
        Scrivi qArrayArchivi(i)
    Next
End Sub
Function GetClasse
    Dim aClasse
    aClasse = Array(5,6,7,8,9,10)
    GetClasse = ScegliOpzioneMenu(aClasse,0,"SelClasseCombinazione") + 5
End Function
Function GetArrayNum(idClasse,aNumTro)
    ReDim aNum(0)
    Dim k,nTrov
    'ReDim aNumTro(0)
    Dim Numeri
    Set Numeri = GetNewCollection
    nTrov = 0
    Do While nTrov < idClasse
        k = k + 1
        ReDim Preserve aNum(k)
        aNum(k) = NumeroCasuale(1,90)
        On Error Resume Next
        Numeri.Add,"h" & aNum(k)
        If Err = 0 Then
            nTrov = nTrov + 1
            ReDim Preserve aNumTro(nTrov)
            aNumTro(nTrov) = aNum(k)
        End If
        Err.Clear
    Loop
End Function
Sub CreaArchivi(qArrayArchivi,idClasse)
    Dim K
    ReDim aNumTro(0)
    For K = 1 To UBound(qArrayArchivi)
        Call GetArrayNum(idClasse,aNumTro)
        qArrayArchivi(K) = StringaNumeri(aNumTro,,True)
    Next
End Sub

Ciao Ho costruito una funzione che costruisce una passwordNumerica
e una combobox che da la classe da 5 a 10
che te ne pare ?
se le funzioni vanno bene le inseriamo nello script originale con i nomi originali
aKey() =qArrayArch
a dopo;)
 
Ultima modifica:
se ti restituisce l'array che avevamo detto va bene , diciamo che sei stato macchinoso , la lunghetta non c'è bisogno di costruirla un numeo alla volta ..tu prova a modificare doman i si continua.. ciao
 
Ciao Luigi se preferisci possiamo utilizzare getColonnaCasuale ma restituisce i numeri ordinati come preferisci
oviamente si scriverebbe meno codice.
Fammi sapere;)
ecco con codice alternativo
Codice:
Option Explicit
Sub Main
    Dim idClasse,idArc,i
    idClasse = GetClasse
    idArc = Int(InputBox("Quanti Archivi Vuoi Creare?","Numero Archivi",25))
    ReDim aKey(idArc)
    Call CreaArch(aKey,idClasse)
    For i = 1 To UBound(aKey)
        Scrivi Format2(i)&") "&aKey(i)
    Next
End Sub
Sub CreaArch(aKey,idClasse)
    Dim Numeri
    Dim nTrov
    ReDim aNum(idClasse)
    
    Set Numeri = GetNewCollection
    nTrov = 0
    Do While nTrov < UBound(aKey)
        Call GetColonnaCasuale(idClasse,aNum)
        On Error Resume Next
        Numeri.Add,"h" & StringaNumeri(aNum,,True)
        If Err = 0 Then
            nTrov = nTrov + 1
            aKey(nTrov) = StringaNumeri(aNum,,True)
        End If
        Err.Clear
    Loop
End Sub
Function GetClasse
    Dim aClasse(10)
    Dim i
    For i = 0 To UBound(aClasse)
        aClasse(i) = i + 5
    Next
    GetClasse = ScegliOpzioneMenu(aClasse,0,"SelezionaClasseChiavi") + 5
End Function
 
Ultima modifica:

Ultima estrazione Lotto

  • Estrazione del lotto
    venerdì 24 gennaio 2025
    Bari
    67
    35
    46
    60
    43
    Cagliari
    09
    24
    58
    03
    62
    Firenze
    52
    68
    17
    40
    80
    Genova
    58
    85
    12
    49
    52
    Milano
    87
    04
    59
    54
    52
    Napoli
    32
    90
    61
    22
    23
    Palermo
    65
    14
    17
    75
    60
    Roma
    61
    68
    64
    09
    19
    Torino
    57
    19
    08
    01
    78
    Venezia
    90
    16
    66
    18
    50
    Nazionale
    57
    56
    33
    25
    38
    Estrazione Simbolotto
    Bari
    19
    23
    25
    34
    20
Indietro
Alto