Novità

C'è un modo analogo per ottenere il numero delle formazioni ridotte prima di generarle?

lotto_tom75

Advanced Premium Member
Per sviluppare tutte le formazioni integrali esiste grazie al mitico Luigi questo modo:

Codice:
ColTot = InitSviluppoIntegrale(aNum,Classe)

Per ottenere le ridotte facciamo:

Codice:
If ColTot > 0 Then
  
  Do While GetCombSviluppoRid(aCol,GradoDiPresenzaVoluto) = True
...

Ma la domanda è... come ColTot ci da subito, prima di generarle, il numero di formazioni integrali generate da anum e classe, c'è un modo per sapere le formazioni ridotte generate da aCol e GradoDiPresenzaVoluto prima di doverle elaborare una per una contandole con una variabile apposita? 🤔

Ad esempio dovendo sapere quante 9ineg7 si generano con 36 elementi adesso mi tocca aspettare che siano generate e contate tutte... mentre con quello che ricerco lo saprei istantaneamente... 👾


Grazie agli esperti scripter eventualmente in ascolto... 👋🙂
 
Buonasera lotto_tom75 :).

"InitSviluppoIntegrale" è un function di SpazioScript e come tale restituisce un valore. Il valore che restituisce non è niente altro che il risultato del calcolo combinatorio. Tale risultato è dato dalla function "Combinazioni" che ottiene il numero di combinazioni che si possono formare con N numeri di classe K.

Nello specifico:

Il calcolo combinatorio presenta una diramazione formata dalle "Combinazioni semplici"

-dato un insieme di "n" numeri differenti tra di loro, in cui "k" (la classe di sviluppo) sia <= di n;

Quante combinazioni si generano di classe k dati n numeri? tenendo in considerazione che:

-ogni formazione contenga esattamente lunghette di classe k con numeri tutti differenti tra loro;
-ogni formazione sia diversa dall'altra per almeno un numero senza tenere in considerazione l'ordine.

Bene, la formula matematica che ci viene in aiuto è proprio quella utilizzata dalla function "Combinazioni" ovvero:

C(n,k) =

n! (il punto esclamativo in matematica serve ad indicare il "fattoriale")
------------
(n-k)! * k!

Ecco un esempio pratico per capire bene la sua applicazione:

Dati 90 numeri quanti terni si generano tenendo in considerazione quanto riportato sopra?

C(90,3) =

90!
--------------
(90-3)! * 3!

90! = 90*89*88*87*86*85 ..... 3*2*1 il fattoriale lo si calcola semplicemente moltiplicando il numero antecedente al successivo in modo decrescente fino ad arrivare ad esaurimento della serie numerica

90 - 3 = 87
87! = 87*86*85*84 ...ecc
3! = 3*2*1 = 6

attraverso una semplificazione matematica che non starò qui a spiegare .. tutti i numeri che vanno dall'87 all'1 vengono meno quindi si avrà

C(90,3) =


90*89*88
------------------
3*2*1


704.880
------------ = 117.480 terni
6

ecco cosa succede quando viene chiamata la function "InitSviluppoIntegrale", passando i parametri (aNum,Classe). Restituisce un valore e lo immagazziniamo all'interno di una variabile che nel tuo caso hai chiamato per comodità "ColTot ".

Ora quanto chiami la function "GetCombSviluppo" (senza alcuna riduzione) essa legge la colonna corrente durante lo sviluppo di un sistema integrale e da questo ne scaturisce che le combinazioni calcolate precedentemente e sviluppate siano pari a 117480.

Nel momento in cui tu chiami la function "GetCombSviluppoRid" (riduzione) il discorso cambia radicalmente. Questa funzione legge la colonna corrente durante lo sviluppo di un sistema integrale come nel caso precedente ma gestisce la riduzione n-k.
Senza soffermarmi più di tanto "nel codice" in linea di massima possiamo dire che questa funzione in un sistema

n = 90
k = 3
sorte garantita = 2

farà 90 - 3 = 87 e questo valore sarà pari al numero di colonne che salterà il puntatore inizializzato nel momento in cui "preleverà i valori" dell'array bidimensionale prima di salire di registro.

Di conseguenza ne deduciamo che comunque partiamo da un "sistema integrale" ma poi effettuiamo una riduzione controllata per mezzo della function.

Ora la soluzione alla tua richiesta risiede in un problema "matematico" piuttosto che "informatico".
Esiste una modifica che possa trasformare la formula del calcolo combinatorio delle combinazioni semplici in modo dinamico e che possa considerare una riduzione n-k?

Io personalmente non la conosco (e non penso esista) ma magari qui c'è qualcuno in grado di poterla estrapolare chissà :)
 
Ultima modifica:
Buonasera lotto_tom75 :).

"InitSviluppoIntegrale" è un function di SpazioScript e come tale restituisce un valore. Il valore che restituisce non è niente altro che il risultato del calcolo combinatorio. Tale risultato è dato dalla function "Combinazioni" che ottiene il numero di combinazioni che si possono formare con N numeri di classe K.

Nello specifico:

Il calcolo combinatorio presenta una diramazione formata dalle "Combinazioni semplici"

-dato un insieme di "n" numeri differenti tra di loro, in cui "k" (la classe di sviluppo) sia <= di n;

Quante combinazioni si generano di classe k dati n numeri? tenendo in considerazione che:

-ogni formazione contenga esattamente lunghette di classe k con numeri tutti differenti tra loro;
-ogni formazione sia diversa dall'altra per almeno un numero senza tenere in considerazione l'ordine.

Bene, la formula matematica che ci viene in aiuto è proprio quella utilizzata dalla function "Combinazioni" ovvero:

C(n,k) =

n! (il punto esclamativo in matematica serve ad indicare il "fattoriale")
------------
(n-k)! * k!

Ecco un esempio pratico per capire bene la sua applicazione:

Dati 90 numeri quanti terni si generano tenendo in considerazione quanto riportato sopra?

C(90,3) =

90!
--------------
(90-3)! * 3!

90! = 90*89*88*87*86*85 ..... 3*2*1 il fattoriale lo si calcola semplicemente moltiplicando il numero antecedente al successivo in modo decrescente fino ad arrivare ad esaurimento della serie numerica

90 - 3 = 87
87! = 87*86*85*84 ...ecc
3! = 3*2*1 = 6

attraverso una semplificazione matematica che non starò qui a spiegare .. tutti i numeri che vanno dall'87 all'1 vengono meno quindi si avrà

C(90,3) =


90*89*88
------------------
3*2*1


704.880
------------ = 117.480 terni
6

ecco cosa succede quando viene chiamata la function "InitSviluppoIntegrale", passando i parametri (aNum,Classe). Restituisce un valore e lo immagazziniamo all'interno di una variabile che nel tuo caso hai chiamato per comodità "ColTot ".

Ora quanto chiami la function "GetCombSviluppo" (senza alcuna riduzione) essa legge la colonna corrente durante lo sviluppo di un sistema integrale e da questo ne scaturisce che le combinazioni calcolate precedentemente e sviluppate siano pari a 117480.

Nel momento in cui tu chiami la function "GetCombSviluppoRid" (riduzione) il discorso cambia radicalmente. Questa funzione legge la colonna corrente durante lo sviluppo di un sistema integrale come nel caso precedente ma gestisce la riduzione n-k.
Senza soffermarmi più di tanto "nel codice" in linea di massima possiamo dire che questa funzione in un sistema

n = 90
k = 3
sorte garantita = 2

farà 90 - 3 = 87 e questo valore sarà pari al numero di colonne che salterà il puntatore inizializzato nel momento in cui "preleverà i valori" dell'array bidimensionale prima di salire di registro.

Di conseguenza ne deduciamo che comunque partiamo da un "sistema integrale" ma poi effettuiamo una riduzione controllata per mezzo della function.

Ora la soluzione alla tua richiesta risiede in un problema "matematico" piuttosto che "informatico".
Esiste una modifica che possa trasformare la formula del calcolo combinatorio delle combinazioni semplici in modo dinamico e che possa considerare una riduzione n-k?

Io personalmente non la conosco (e non penso esista) ma magari qui c'è qualcuno in grado di poterla estrapolare chissà :)

o_O😱 Doppio graditissimo stupore... per la risposta a dir poco dettagliata... e ricca di nozioni top... e per... la rilettura piacevolissima di questo grande nick/persona! 🙏😉 A dir la verità me lo ricordavo molto più corto... Ma ced credo permetta di modificare il proprio nick o di aprirne uno nuovo quindi... ben riletto mitoooooooo e grazie mille e complimenti per questo tuo fantastico intervento/rientro 💪👌👍👋:cool::)
 
All'ottima e davvero esauriente risposta di Edoardo aggiungo che l'algoritmo che riduce ad n-k non fa altro che confrontare la colonna corrente con tutte le precedenti , se è rappresentato il punteggio n-k la colonna vine scartata.
sicuramente non è un metotodo ottimale , le routine di riduzionesono ben piu complesse e spesso si avvalgono di matrici , in quel caso le combinazioni derivanti sono note a priorori , ma nel caso dello sviluppo ridotto in tempo reale non è cosi ed è un dato che non è possibile sapere in anticipo.

Ciao ....
 
All'ottima e davvero esauriente risposta di Edoardo aggiungo che l'algoritmo che riduce ad n-k non fa altro che confrontare la colonna corrente con tutte le precedenti , se è rappresentato il punteggio n-k la colonna vine scartata.
sicuramente non è un metotodo ottimale , le routine di riduzionesono ben piu complesse e spesso si avvalgono di matrici , in quel caso le combinazioni derivanti sono note a priorori , ma nel caso dello sviluppo ridotto in tempo reale non è cosi ed è un dato che non è possibile sapere in anticipo.

Ciao ....

😵😱 Grazie anche a Te 🦸‍♂️🧙‍♂️! Ehm... come si saluta una Divinità? :unsure: 😳 🙄 🙏 👋😀
 
Integrale lo puoi calcolare anche così , ma ridotto si calcola pressa poco non esiste nessun metodo che ti dia il risultato esatto

Option Explicit
Sub Main
Dim Numeri,Classe,I,M,N
Numeri = InputBox("Numeri in Gioco","",90)
Classe = InputBox("Classe di sviluppo","",6)
M = Numeri
For I = 1 To(Classe - 1)
M = M *(Numeri - I)
Classe = Classe *(I)
Next
Scrivi "Combinazioni : " & M/Classe
End Sub
 

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