ikwae ha scritto: non sono riuscito a capire se le 18 righe si popolano con numeri random oppure con i numeri del mio Archivio
Sono numeri prelevati dalle tue estrazioni.
Marius ha scritto:Una cosa che mi dà da pensare è che in tutte le prove effettuate i numeri "mancanti" non abbiamo mai superato il 20, cioè le celle vuote vengono riempite con numeri inferiori, mai superiori
Avevo gia' constatato e detto che usando come random l'intero range 1-90 la soluzione diventava meno facile, e non ne capivo il motivo... fino a stanotte quando nel dormiveglia ho avuto il lampo...
E' evidente che e' impossibile che numeri quali 1-2-3 vengano pescati dalle estrazioni come i numeri piu' alti; come e' evidente che i numeri man mano che si abbassano hanno sempre meno chances di risultare i piu' alti dell'estrazione. Insomma i numeri bassi o vengono inseriti come numeri random o non hanno chance (1-2-3) o ne hanno da pochissime a poche (4-5.. a crescere). Ecco perche' randomizzando su range piu' limitati le chances di riempire lo schema aumentano, perche' aumenta l'utilizzo di numeri bassi come numeri random.
E ricordo che con la seconda soluzione (vedi
viewtopic.php?f=26&t=110039&p=645785#p645755), quella che limitava i random all'intervallo 1-36, lo schema veniva riempito molto spesso per tutte le righe e al 99% fino a riga 17 compresa, senza bisogno di retry.
Mi viene chiesta una spiegazione sul codice; provvedo senza esagerare
:
La GimmeR1R2 restituisce due numeri random, prendendoli da quelli non ancora in uso.
La GimmeN1N2 restituisce i due numeri piu' alti di tutte le estrazioni che contengono il Random #1, oppure solo il piu' alto delle estrazioni che contengono Random #2.
In generale nell'array kArr(1 to 90) mi creo all'inizio l'elenco delle righe che contengono ognuno dei 90 numeri; cosi' man mano che esamino i vari random so gia' dove trovo le estrazioni che contengono quel numero.
In uArr(1 To 90) segno i numeri man mano che vengono usati, per evitare che vengano riusati.
Questo mi porta a commentare che se "Num_Mancanti" ha solo l'obiettivo di inserire nello schema i numeri mancanti allora non e' necessario ripartire da zero come deve fare la
Sub completa pubblicata da Mario; perche' uArr(1 To 90) gia' conosce quali sono i numeri usati e quali mancano.
Bastera' pertanto inserire questo codice prima di End Sub:
- Codice: Seleziona tutto
MsgBox ("Completato; Sec: " & Format(Timer - myTim, "0.0") & ", Retry: " & flMax)
'DA QUI IN AVANTI: Inserisce i numeri mancanti
For I = LBound(P4T21, 1) To UBound(P4T21, 1)
For J = LBound(P4T21, 2) To UBound(P4T21, 2)
If P4T21(I, J) = "" Then
myMatch = Application.Match(0, uArr, False)
If Not IsError(myMatch) Then
Cells(I, J) = myMatch
Cells(I, J).Interior.Color = RGB(255, 200, 200) 'Colora i numeri Inseriti
uArr(myMatch) = 11
End If
End If
Next J
Next I
End Sub
I numeri aggiunti in questa fase vengono colorati per evidenziarli.
E' pero' anche necessario inserire la dichiarazione della nuova variabile usata e azzerare i colori dell'area risultati: pertanto all'inizio aggiungere queste due righe in questa posizione:
- Codice: Seleziona tutto
Dim MaxRetr
Dim myMatch '<<< AGGIUNGERE
Range("P4:T21").Interior.Color = xlNone '<<< AGGIUNGERE
'
MaxRetr = 4 '<<< Il numero max di Retry
Ciao