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
    martedì 01 luglio 2025
    Bari
    71
    66
    48
    42
    76
    Cagliari
    84
    70
    23
    69
    43
    Firenze
    50
    21
    30
    11
    69
    Genova
    89
    41
    50
    80
    67
    Milano
    41
    59
    67
    03
    60
    Napoli
    87
    63
    51
    42
    07
    Palermo
    56
    87
    76
    27
    09
    Roma
    41
    26
    50
    22
    77
    Torino
    36
    83
    80
    65
    05
    Venezia
    45
    77
    76
    81
    71
    Nazionale
    72
    06
    03
    08
    07
    Estrazione Simbolotto
    Nazionale
    34
    27
    08
    12
    17
Indietro
Alto