Discussione:
SUPERENALOTTO
(troppo vecchio per rispondere)
luca
2009-06-20 12:54:23 UTC
Permalink
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare un codice che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni

3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
For y = 3 To 9
Z = Int((90 * Rnd) + 1)
If y = 3 Then Cells(x, y) = Z
If y = 4 Then
While Z = Cells(x, 3)
Z = Int((90 * Rnd) + 1)
Wend
Cells(x, y) = Z
End If
...............

un consiglio.... grazie.
lorenzoeffe
2009-06-20 14:06:21 UTC
Permalink
Post by luca
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare un codice che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni
3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
For y = 3 To 9
Z = Int((90 * Rnd) + 1)
If y = 3 Then Cells(x, y) = Z
If y = 4 Then
While Z = Cells(x, 3)
Z = Int((90 * Rnd) + 1)
Wend
Cells(x, y) = Z
End If
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo
luca
2009-06-20 14:40:01 UTC
Permalink
Post by lorenzoeffe
Post by luca
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare  un codice  che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni
3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
 For y = 3 To 9
   Z = Int((90 * Rnd) + 1)
   If y = 3 Then Cells(x, y) = Z
   If y = 4 Then
     While Z = Cells(x, 3)
       Z = Int((90 * Rnd) + 1)
     Wend
     Cells(x, y) = Z
   End If
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
- Mostra testo citato -
avevo pensato ai 6 cicli,
1° problema non riesco ad uscire dall'overflow
2° problema il punto complicato sono i duplicati,
.3° cestinato tutti i codici prova az

cmq grazie proverò ancora,
luca
2009-06-20 16:23:18 UTC
Permalink
Post by luca
Post by lorenzoeffe
Post by luca
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare  un codice  che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni
3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
 For y = 3 To 9
   Z = Int((90 * Rnd) + 1)
   If y = 3 Then Cells(x, y) = Z
   If y = 4 Then
     While Z = Cells(x, 3)
       Z = Int((90 * Rnd) + 1)
     Wend
     Cells(x, y) = Z
   End If
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
- Mostra testo citato -
avevo pensato ai 6 cicli,
1° problema non riesco ad uscire dall'overflow
2° problema il punto complicato sono i duplicati,
.3° cestinato tutti i codici prova az
cmq grazie proverò ancora,- Nascondi testo citato
- Mostra testo citato -
listato per scorrere tutte le combinazioni

in g6 =somma(a6:f6)

Sub test2()
For a = 1 To 90
Range("a6") = a
For b = 2 To 90
Range("b6") = b
For c = 3 To 90
Range("c6") = c
For d = 4 To 90
Range("d6") = d
For e = 5 To 90
Range("e6") = e
For f = 3 To 90
Range("f6") = f

Next f
Next e
Next d
Next c
Next b
Next a
End Sub

se la somma in g6 = a g2, deve estrarre i numeri e
inserirli nel socondo foglio.....
Antonio P.
2009-06-22 22:20:04 UTC
Permalink
Post by luca
Sub test2()
For a = 1 To 90
Range("a6") = a
For b = 2 To 90
Range("b6") = b
For c = 3 To 90
Range("c6") = c
For d = 4 To 90
Range("d6") = d
For e = 5 To 90
Range("e6") = e
For f = 3 To 90
Range("f6") = f
io la farei :

For a = 1 To 85
Range("a6") = a
For b = a+1 To 86
Range("b6") = b
For c = b+1 To 87
Range("c6") = c
For d = c+1 To 88
Range("d6") = d
For e = d+1 To 89
Range("e6") = e
For f = e+1 To 90
Range("f6") = f


eviti i duplicati, e hai già i numeri in ordine.



Antonio
(togliere NO SPaM per rispondere)
lorenzoeffe
2009-06-20 18:25:38 UTC
Permalink
Post by lorenzoeffe
Post by luca
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare un codice che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni
3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
For y = 3 To 9
Z = Int((90 * Rnd) + 1)
If y = 3 Then Cells(x, y) = Z
If y = 4 Then
While Z = Cells(x, 3)
Z = Int((90 * Rnd) + 1)
Wend
Cells(x, y) = Z
End If
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
- Mostra testo citato -
avevo pensato ai 6 cicli,
1° problema non riesco ad uscire dall'overflow
2° problema il punto complicato sono i duplicati,
.3° cestinato tutti i codici prova az
e partire da questo?
Sub Macro1()

Bersaglio = 45
Massimo = 15 'troppo lungo con 90
For A = 1 To Massimo
For B = A + 1 To Massimo
For C = B + 1 To Massimo
For D = C + 1 To Massimo
For E = D + 1 To Massimo
For F = E + 1 To Massimo

ZZZ = A + B + C + D + E + F
If ZZZ = Bersaglio Then
Range("A65000").End(xlUp).Offset(1, 0).Value = A
Range("B65000").End(xlUp).Offset(1, 0).Value = B
Range("C65000").End(xlUp).Offset(1, 0).Value = C
Range("D65000").End(xlUp).Offset(1, 0).Value = D
Range("E65000").End(xlUp).Offset(1, 0).Value = E
Range("F65000").End(xlUp).Offset(1, 0).Value = F
End If
Next F
Next E
Next D
Next C
Next B
Next A


End Sub
luca
2009-06-21 17:29:14 UTC
Permalink
Post by luca
Post by lorenzoeffe
Post by luca
un saluto al tutto l'ng,
vi sono tante proposte che esaminano il superenalotto,
fra estrazioni, confronti, ecc ecc,
sto cercando di adattare un codice che possa darmi
tutte le combinazioni possibili se la somma dei 6 numeri
equivale ad una determinata rischiesta.
mi spiego meglio, se volessi che la somma sia 295
vorrei ottenere le possibili combinazioni
3-42-46-52-70-82 = 295
1-42-49-53-65-85 = 295
ecc ecc ecc
ho provato facendo estrarre casulamente una
sequenza di 6 numeri casuali, ma chiaramente
aspettare la somma che interessa diventa
un terno all'otto :))-
............. parte del codice
For x = 2 To 30 ' questo e per 30 Righe
For y = 3 To 9
Z = Int((90 * Rnd) + 1)
If y = 3 Then Cells(x, y) = Z
If y = 4 Then
While Z = Cells(x, 3)
Z = Int((90 * Rnd) + 1)
Wend
Cells(x, y) = Z
End If
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
- Mostra testo citato -
avevo pensato ai 6 cicli,
1° problema non riesco ad uscire dall'overflow
2° problema il punto complicato sono i duplicati,
.3° cestinato tutti i codici prova az
e partire da questo?
Sub Macro1()
Bersaglio = 45
Massimo = 15 'troppo lungo con 90
    For A = 1 To Massimo
    For B = A + 1 To Massimo
    For C = B + 1 To Massimo
    For D = C + 1 To Massimo
    For E = D + 1 To Massimo
    For F = E + 1 To Massimo
    ZZZ = A + B + C + D + E + F
    If  ZZZ = Bersaglio Then
    Range("A65000").End(xlUp).Offset(1, 0).Value = A
    Range("B65000").End(xlUp).Offset(1, 0).Value = B
    Range("C65000").End(xlUp).Offset(1, 0).Value = C
    Range("D65000").End(xlUp).Offset(1, 0).Value = D
    Range("E65000").End(xlUp).Offset(1, 0).Value = E
    Range("F65000").End(xlUp).Offset(1, 0).Value = F
      End If
      Next F
    Next E
    Next D
    Next C
    Next B
    Next A
End Sub- Nascondi testo citato
- Mostra testo citato -
waouo, bella soluzione,
ma rimane il problema dei doppioni
lorenzoeffe
2009-06-21 18:14:50 UTC
Permalink
Post by lorenzoeffe
Post by lorenzoeffe
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
e partire da questo?
Sub Macro1()
Bersaglio = 45
Massimo = 15 'troppo lungo con 90
For A = 1 To Massimo
For B = A + 1 To Massimo
For C = B + 1 To Massimo
For D = C + 1 To Massimo
For E = D + 1 To Massimo
For F = E + 1 To Massimo
ZZZ = A + B + C + D + E + F
If ZZZ = Bersaglio Then
Range("A65000").End(xlUp).Offset(1, 0).Value = A
Range("B65000").End(xlUp).Offset(1, 0).Value = B
Range("C65000").End(xlUp).Offset(1, 0).Value = C
Range("D65000").End(xlUp).Offset(1, 0).Value = D
Range("E65000").End(xlUp).Offset(1, 0).Value = E
Range("F65000").End(xlUp).Offset(1, 0).Value = F
End If
Next F
Next E
Next D
Next C
Next B
Next A
End Sub- Nascondi testo citato
waouo, bella soluzione,
ma rimane il problema dei doppioni

Dici?
non mi pare ci sia con il codice sopra, ma io non ne so molto di
combinazioni.
Prova a fare delle simulazioni con massimo 90 (tutti i numeri possibili), ma
fissando un bersaglio di poco superiore a 21 (1+2+3+4+5+6) o superiore a
500.
Perchè il numero di combinazioni possibili forma una curva gaussiana che ha
il suo massimo in 45*6 = 270 come numero totale cercato.
con obiettivi tipo 250, si formano ben oltre le 65000 combinazioni diverse.
Non so se hai il 2007 per andare oltre le 65 mila.
Ciao, lo
eliano
2009-06-21 21:57:21 UTC
Permalink
Post by luca
Post by lorenzoeffe
Post by lorenzoeffe
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
e partire da questo?
Sub Macro1()
Bersaglio = 45
Massimo = 15 'troppo lungo con 90
For A = 1 To Massimo
For B = A + 1 To Massimo
For C = B + 1 To Massimo
For D = C + 1 To Massimo
For E = D + 1 To Massimo
For F = E + 1 To Massimo
ZZZ = A + B + C + D + E + F
If ZZZ = Bersaglio Then
Range("A65000").End(xlUp).Offset(1, 0).Value = A
Range("B65000").End(xlUp).Offset(1, 0).Value = B
Range("C65000").End(xlUp).Offset(1, 0).Value = C
Range("D65000").End(xlUp).Offset(1, 0).Value = D
Range("E65000").End(xlUp).Offset(1, 0).Value = E
Range("F65000").End(xlUp).Offset(1, 0).Value = F
End If
Next F
Next E
Next D
Next C
Next B
Next A
End Sub- Nascondi testo citato
waouo, bella soluzione,
ma rimane il problema dei doppioni
Dici?
non mi pare ci sia con il codice sopra, ma io non ne so molto di
combinazioni.
Prova a fare delle simulazioni con massimo 90 (tutti i numeri possibili), ma
fissando un bersaglio di poco superiore a 21 (1+2+3+4+5+6) o superiore a
500.
Perchè il numero di combinazioni possibili forma una curva gaussiana che ha
il suo massimo in 45*6 = 270 come numero totale cercato.
con obiettivi tipo 250, si formano ben oltre le 65000 combinazioni diverse.
Non so se hai il 2007 per andare oltre le 65 mila.
Ciao, lo- Nascondi testo citato
- Mostra testo citato -
Ciao lorenzo.
Mi sembra che tutte le estrazioni dal 2003 ad oggi siano state 885. Al
di la dell'exploit tecnico, mi spieghi a cosa servono TUTTE le
combinazioni di sei numeri ai fini dell'ottenimento di un possibile
risultato vincente ? Grazie.

Ti faccio anche notare che un certo Giovanni Carbone, appassionato
della materia, afferma di aver testato oltre 60 anni di estrazione del
lotto, ricostruendo quindi anche le ipotetiche estrazioni del
Superenalotto quando questo gioco era nella mente degli dei.
Avrebbe rilevato che la probabilità massima di estrazione desunta
dalle estrazioni reali o ipotetiche si verificava quando la somma dei
sei numeri meno 273 dava un risultato fra +100 e -100; ti posso
assicurare che ho effettuato delle prove riscontrando che dai dati dal
2003 ad oggi il calcolo collima.
Non sono in grado di calcolare quante combinazioni rispondano a quella
probabilità massima, ma ritengo che siano qualche "decina" (si fa per
dire) di milioni, rendendo improponibile, a mio avviso, la
collimazione positiva con le estrazioni effettuate fino ad oggi.
A proposito, la tua macro funziona egregiamente, manca solo della
dichiarazione delle variabili e prima che fratello Mauro si
inquieti :-)) forse sarebbe il caso di aggiungere il malefico Option
Explicit.
Saluti
Eliano
Mauro Gamberini
2009-06-22 15:59:30 UTC
Permalink
A proposito, la tua macro funziona egregiamente, manca solo della
dichiarazione delle variabili e prima che fratello Mauro si
inquieti :-)) forse sarebbe il caso di aggiungere il malefico Option
Explicit.
**********************************************

No no, per enalotti e classifiche calciofile,
facciano come vogliono...
--
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/
eliano
2009-06-26 00:35:59 UTC
Permalink
Post by luca
Post by lorenzoeffe
Post by lorenzoeffe
L'ordine non è importante giusto?
allora una soluzione potrebbe essere nidificare 6 cicli for 1 to 90.
Per accelerare la ricerca, dovresti poi ad ogni ciclo prevedere l'uscita dal
loop quando va in overflow.
Dovresti anche eliminare le sequenze con duplicati 1-1-2-3-4-5 oppure
1-2-1-1-3-4 (1 nell'esempio) e qui la cosa si complica.
ciao, Lo- Nascondi testo citato
e partire da questo?
Sub Macro1()
Bersaglio = 45
Massimo = 15 'troppo lungo con 90
For A = 1 To Massimo
For B = A + 1 To Massimo
For C = B + 1 To Massimo
For D = C + 1 To Massimo
For E = D + 1 To Massimo
For F = E + 1 To Massimo
ZZZ = A + B + C + D + E + F
If ZZZ = Bersaglio Then
Range("A65000").End(xlUp).Offset(1, 0).Value = A
Range("B65000").End(xlUp).Offset(1, 0).Value = B
Range("C65000").End(xlUp).Offset(1, 0).Value = C
Range("D65000").End(xlUp).Offset(1, 0).Value = D
Range("E65000").End(xlUp).Offset(1, 0).Value = E
Range("F65000").End(xlUp).Offset(1, 0).Value = F
End If
Next F
Next E
Next D
Next C
Next B
Next A
End Sub- Nascondi testo citato
waouo, bella soluzione,
ma rimane il problema dei doppioni
Dici?
non mi pare ci sia con il codice sopra, ma io non ne so molto di
combinazioni.
Prova a fare delle simulazioni con massimo 90 (tutti i numeri possibili), ma
fissando un bersaglio di poco superiore a 21 (1+2+3+4+5+6) o superiore a
500.
Perchè il numero di combinazioni possibili forma una curva gaussiana che ha
il suo massimo in 45*6 = 270 come numero totale cercato.
con obiettivi tipo 250, si formano ben oltre le 65000 combinazioni diverse.
Non so se hai il 2007 per andare oltre le 65 mila.
Ciao, lo- Nascondi testo citato
- Mostra testo citato -
Ciao lorenzo.
A conferma di quanto già detto, ti fornisco i dati per la gaussiana,
con buona pace (spero) per Luca che saluto.:-))
Bersaglio minimo = 21, bersaglio massimo = 525, bersaglio medio = 273
Bersagli possibili = 505 -- Ho usato un passo 21 evitando che il mio
portatilino defungesse. :-D)

target combinazioni
21 1
42 331
63 4494
84 24473
105 86499
126 235409
147 527025
168 1002668
189 1661520
210 2432784
231 3174610
252 3716255
272 3915627
273 3916220
274 3915627
294 3716255
315 3174610
336 2432784
357 1661520
378 1002668
399 527025
420 235409
441 86499
462 24473
483 4494
504 331
525 1

Saluti
Eliano

Loading...