Trovai un prezioso msg. (allegato alla fine) di Stefano Foresi (che
ringrazio ancora moltissimo), il quale rispondeva ad un'amico del NG su come
sviluppare integralmente un sistema di N numeri al superenalotto.
Ho usato anch'io l'algoritmo per sviluppare integralmente un sistema e tutto
è andato OK, ma, provato a variare il codice per fare le riduzioni alla n-1,
n-2 e n-3 sono andato in pallone.
>Per la garanzia 5 devono cambiare almeno 2 numeri;
Ho provato con lo STEP 2:
For n1 = 1 To N - 5 STEP 2
For n2 = n1 + 1 To N - 4 STEP 2
For n3 = n2 + 1 To N - 3 STEP 2
For n4 = n3 + 1 To N - 2 STEP 2
For n5 = n4 + 1 To N - 1 STEP 2
For n6 = n5 + 1 To N STEP 2
.........
.......
ma senza esito positivo. Ho fatto anche altri tentativi che però
evidentemente non corrispondono a quello giusto.
Dato che l'algoritmo dello sviluppo integrale riesce a ricavare
correttamente le colonne (integrali), credo ancora che la soluzione la si
possa ricavare modificandolo opportunamente, ma come però?! Forse sarà pure
semplice, ma purtroppo finora non ci sono ancora riuscito.
In sintesi: qual è la variazione che si deve fare rispetto al codice dello
sviluppo
integrale, per cambiare x(2,3,4) numeri e ottenere così le rid. alla
n-x(2,3,4)?
Dai!!! Fatemi vedere che i programmers vb sono sempre grandi!
Grazie a tutti.
Max.
Allego msg di Stefano:
Ho fatto un piccolo programma per sviluppare integralmente un sistema di N
numeri contenuti in una variabile chiamata NumeriInGioco (1 to N).
For n1 = 1 To N - 5
For n2 = n1 + 1 To N - 4
For n3 = n2 + 1 To N - 3
For n4 = n3 + 1 To N - 2
For n5 = n4 + 1 To N - 1
For n6 = n5 + 1 To N
Combinazione=NumeriInGioco(n1) & " " & _
NumeriInGioco(n2) & " " & NumeriInGioco(n3) & "
" & _
NumeriInGioco(n4) & " " & NumeriInGioco(n5) & "
" & _
NumeriInGioco(n6)
List1.additem Combinazione 'questo per inserire le
combinazioni in una list.
Next
Next
Next
Next
Next
Next
Ad ogni ciclo la variabile "Combinazione" contiene una stringa che è una
combinazione del
sistema integrale. Questo sistema è il cosiddetto "a garanzia di 6" (detta
anche n).
Giocando 8 numeri (da 1 a 8) viene fuori:
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
...
2 3 5 6 7 8
2 4 5 6 7 8
3 4 5 6 7 8
Di solito nei programmi si possono calcolare 4 tipi di garanzie: 6,5,4,3 (in
gergo n,n-1,n-2,n-3). Per la garanzia del 6, come hai visto, basta che cambi
un numero. Per la garanzia 5 devono cambiare almeno 2 numeri; per la
garanzia del 4 devono cambiare almeno 3 numeri e per quella del 3 almeno 4.
Per "cambiare" intendo dire che la combinazione calcolata deve avere tot
numeri diversi da una qualsiasi altra combinazione già calcolata.
...........
..........
Stefano
il sistema sviluppa come prima colonna
1 2 3 4 5 6
dalla seconda colonna in poi che il sistema sviluppa devi fare un controllo
a ritroso scartando la colonna attuale se i numeri che coincidono sono
1,2,3,4,5 in base alla garanzia richiesta.
Mettiamo che chiedi la garanzia del 4 (allora lo scarto deve essere di 3
punti)... quindi
lo sviluppo salterà un bel pò di colonne fino a quando non incontra la
1 2 3 7 8 9
ecc...
raga io sviluppo software per il Lotto da qualche anno.... ne sto ultimando
proprio uno adesso e sarà pronto per Pasqua, se vi va di darmi una mano con
la stampa delle schede ricambierò volentieri... altrimenti sarò costretto ad
inventarmi la stampa delle schedine e giuro non ho un attimo di tempo. In
cambio del vostro aiuto vi inserisco nella lista dei collaboratori così
magari avrete anche l'opportunità di farvi conoscere a livello nazionale per
la programmazione di software dedicato ai giochi e in più vi do qualche
numero buono per vincere ;-))
ciao Davide
Dunque..
se vuoi, quando affronterò la stampa delle schede nel mio prog. del
superenalotto che sto sviluppando (tempo -faccio prog. non per lavoro ma per
grandissima passione nel poco tempo libero-, moglie, 1 figlia e un'altra in
arrivo a giorni (o forse a ore) permettendo!) ti potrò dire come ho fatto.
Fammi sapere.
Visto che sviluppi software da qualche anno, ti volevo chiedere alcune
informazioni:
come pubblicizzi il software?
come fai a venderlo?
Come ti fai pagare?
Devi rilasciare fattura o cosa? e ci vuole per forza la P. IVA ?
Nei cd o floppy che eventualmente distribuisci, metti delle etichette
particolari o le crei tu con la stampante?
Corredi il tutto anche con materiale cartaceo (manuale, licenze, scatola
contenitore)?
Ti ringrazio per la tua disponibilità e ancora per la dritta che mi hai
dato.
A presto.
Max G.
Davide Greco ha scritto nel messaggio <7cbkk8$j19$1...@nslave1.tin.it>...
poi ti sposti grazie a currentx e currenty
printer.currentx= (il punto che ti interessa)
printer.currenty= (il punto che ti interessa)
poi se vuoi stampi una X usando il carattere curier (devi fare delle prove
sulla grandezza del carattere, prova con un 6)
printer.font= (il carattere curier)
alla fine se hai finito le schedine usi
printer.enddoc
se ne devi stamparne altre
printer.newdoc
e rinizi la stampa(magari con un ciclo)
spero di esserti stato utile
...GooD LooK...
EffEPi SySteM
EffEPi...@iol.it
Fabrizio Parrella
- VB6 -
UIN:21371755
La DOMANDA è questa: dall'integrale di 177.100 colonne, quali sono queste
115 che mi rappresentano il "sistema minimo" per fare 3 con 3 punti?
Ho provato diversi metodi, con poco sucesso, ad es.: prendo e metto da parte
una sestina dalle 177.100 integrale, mi elimino le 20 terzine generabili da
questa colonna, poi prendo la successiva colonna che copre altre 20 terzine
tra quelle rimaste (che sono 2300 - 20 = 2280), e continuo così fino alla
copertura totale delle terzine in gioco... però arrivo ad un punto in cui
rimangono terzine non raggruppabili in gruppi da 20, quindi non riesco ad
avere il sistema minimo di 115 colonne.
Idee?
--
Ciao, AntoGal
*************************************************
Home Page (area programmatori di VolFtp)
http://volftp.tin.it/italiani/galletta/
per scaricare un gioco di DAMA ITALIANA
*************************************************
ciao Davide
http://www.dreamlink.net/davidegreco
ciao Davide
>hai mai provato ad usare l'oggetto printer?
>setti l'unità di misura in millimetri
>printer.scalemode= (6 o 7, adesso non ricordo, uno è centimetri,
>l'altro è millimetri)
serve anche il decimillimetro... fra una casella e l'altra c'è uno 0.8 di
distanza...
>poi ti sposti grazie a currentx e currenty
>printer.currentx= (il punto che ti interessa)
>printer.currenty= (il punto che ti interessa)
mi sa che prima si deve impostare la grandezza del foglio di stampa per
quanto è grande una scheda. E qui mi sorge un dubbio circa la precisione con
cui verranno stampati i caratteri... le schedine devono essere inserite sul
lato destro , sinistro o in qualsiasi posto ? devono essere inserite
verticalmente o orizzontalmente ?
>poi se vuoi stampi una X usando il carattere curier (devi fare delle prove
>sulla grandezza del carattere, prova con un 6)
>printer.font= (il carattere curier)
>
>alla fine se hai finito le schedine usi
>printer.enddoc
>se ne devi stamparne altre
>printer.newdoc
>e rinizi la stampa(magari con un ciclo)
si ok....sul carattere sulla grandezza e su NewDoc EndPrinter non ci sono
problemi... il difficile sta nel centrare esattamente le caselle da
contrassegnare
ciao Davide
ehm.., scusa ma, funziona, si!.... però questo controllo a ritroso che il
ciclo deve fare per scartare le colonne rallenta notevolmente l'esecuzione
con l'aumentare delle colonne da controllare, tanto da arrivare al punto da
diventare quasi inutilizzabile quando i numeri giocati cominciano a essere +
di 30.
Ora mi domando: vabbè che VB rispetto agli altri linguaggi è più lento, ma
allora o i programmi che si trovano in commercio sono stati creati tutti con
linguaggi che riescono ad essere 1000 volte + veloci, oppure l'algoritmo che
sfruttano è un'altro e non necessita di quel controllo a ritroso?!
Grazie in anticipo.
Max G.
Max G. ha scritto nel messaggio <7cd77t$4ft$1...@news.IT.net>...
si in effetti come algoritmo diventa un po lentuccio.... ma non proprio con
i 30 numeri...
Per risolvere il problema si dovrebbe poter scartare all'istante le
combinazioni ripetute quindi senza controlli a ritroso. Per fare una cosa
del genere mi viene in mente per adesso solo una possibilità:
se il sistema è a garanzia di Ambo_ verificare se anche solo uno degli ambi
che si formano con la bolletta da controllare siano già presenti in qualche
bolletta,
lo stesso discorso anche per i sistemi a garanzia di Terno, ecc
adesso però risolviamo un altro problema...
con 90 numeri si formano
4.005 ambi
117.000 (circa) terni
2.500.000 (circa) quaterne
49.000.000 (circa) cinquine
ecc
finchè si tratta di controllare che gli ambi i terni e volendo anche le
quaterne dell'ultima bolletta siano già stati sviluppati è ok... ma come si
fa a gestire 49 milioni di cinquine ???
quindi presumibilmente anche questa strada non è conveniente !!
resta quindi da vedere come evitare il controllo a ritroso (che è lento solo
quando si ha a che fare con sviluppi molto grandi). Se consideriamo che
generalmente l'utente non mette in gioco più di qualche centinaio di colonne
allora il problema è risolto... infatti basta dare l'opportunità di
interrompere lo sviluppo quando il numero di bollette va oltre le intenzioni
dell'utente.
senza però aggirare l'ostacolo..... vediamo come risolvere il problema del
controllo delle combinazioni già presenti nello sviluppo.... fatevi avanti
;-))
ciao Davide