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
    giovedì 03 luglio 2025
    Bari
    33
    40
    47
    65
    61
    Cagliari
    78
    19
    74
    44
    05
    Firenze
    46
    50
    38
    79
    19
    Genova
    72
    48
    47
    66
    34
    Milano
    11
    19
    37
    61
    16
    Napoli
    66
    85
    20
    29
    74
    Palermo
    46
    10
    66
    76
    35
    Roma
    34
    66
    75
    79
    74
    Torino
    27
    33
    40
    59
    10
    Venezia
    50
    26
    68
    07
    30
    Nazionale
    04
    17
    74
    46
    41
    Estrazione Simbolotto
    Nazionale
    34
    03
    11
    07
    32

Ultimi Messaggi

Indietro
Alto