PDA

Visualizza la versione completa : Algoritmo Estrazione casuale


ggmac
26-02-2010, 14:11
Salve ho la necessita di creare un algoritmo per un concorso a premi instant win (ad estrazione in tempo reale) che estrae un vincitore ogni 20 giocatori che giocano, ma il vincitore non deve coincidere con il 20 esemo ma uno dei tra 20.

Dopo inserisco ad esempio

600 premi al mese :

520 premi da 5 euro
50 da 10 euro
15 da 20 euro
2 televisori
3 navigatori
10 ipod

Non riesco a capire come ripartizionare i premi per fascie quindi ogni tot premi di fascia bassa inserirne uno di fascia alta di premio ecc.. ed attribuirne uno ogni 20 che giocano.

Immagine di esempio:

http://www.ggmedia.it/cc.png

MItaly
26-02-2010, 14:22
Originariamente inviato da ggmac
Non riesco a capire come ripartizionare i premi per fascie quindi ogni tot premi di fascia bassa inserirne uno di fascia alta di premio ecc.. ed attribuirne uno ogni 20 che giocano.
Io userei un array di strutture del tipo:


struct Giocatore
{
/* ... vari dati personali ... */
int NumeroPremio;
}, dove NumeroPremio all'inizio dell'estrazione viene inizializzato a zero.
Quindi iteri su tutti i premi da assegnare, e per ciascuno estrai un numero compreso tra 0 e il numero degli elementi nell'array dei giocatori; se il giocatore corrispondente ha NumeroPremio impostato a zero (cioè non ha ancora vinto niente) gli assegni il premio (assegnando a NumeroPremio un qualche ID che caratterizzi il premio vinto), altrimenti ripeti l'estrazione per il premio in questione finché non trovi qualcuno che non ha ancora vinto niente; bisogna naturalmente anche controllare che ci siano ancora giocatori senza premio, altrimenti rischi un loop infinito (anche se è raro che ci siano più premi che giocatori :D ).
In alternativa puoi usare un'altra struttura dati da cui ogni volta vai a rimuovere il giocatore che ha appena vinto; i numeri casuali in questo caso saranno nel range [0, numero di elementi ancora nella lista).

ggmac
26-02-2010, 14:26
IL SOFTWARE DEVE ESSERE UN APPLICAZIONE WEB IN PHP MYSQL..

IO AVEVO PENSATO DI PREVEDERE IL NUMERO TOTALE DEI GIOCATORI MA NONT ROVO UNA SOLUZIONE PER ANDARE VANTI

MItaly
26-02-2010, 17:07
Chiedo scusa, l'algoritmo che ho detto va bene per un'estrazione "normale", non per un istant win.
Per un istant win potresti "schedulare" in qualche maniera i premi, in modo che ce ne sia uno ogni tot minuti/ore/... da vincere, scelto (come tipo e come orario esatto) casualmente. Il primo visitatore che arriva dopo il momento per cui è stato previsto il premio in questione lo vince.
Nel dettaglio, supponendo di disporre di 600 premi al mese: il mese va diviso in 600 "finestre" (se è un mese da 30 giorni saranno 43200 minuti, ossia finestre da 72 minuti), in ciascuna delle quali verrà assegnato un premio. Ogni 72 minuti quindi avviene la scelta del premio per il prossimo vincitore e del momento (entro la finestra di 72 minuti) in cui verrà vinto. A questo punto ad ogni visita verrà effettuato un controllo, per vedere (a) se il premio non è già stato assegnato e (b) se è passata l'ora stabilita. Se entrambe le condizioni sono verificate, il premio viene assegnato al visitatore corrente.
Questo è lo schema di base che mi viene in mente. Naturalmente ci sono diverse cose da perfezionare: in primo luogo, come gestire la questione dei premi non estratti (situazione che si verifica se nessuno visita il sito tra l'ora dell'estrazione e l'inizio della finestra successiva): potrebbero andare a far parte di un montepremi finale, o si potrebbero rischedulare casualmente nelle finestre successive. Nello specifico, si potrebbe far sì che se un premio non viene assegnato venga scelta casualmente una finestra entro le successive 24 ore in cui verranno assegnati due premi, entrambi naturalmente schedulati per un momento casuale e differente.
Un altra questione che mi viene in mente è come gestire le ore con uno scarso numero di visite (=>la notte): si potrebbero adottare finestre più ampie di notte e più strette di giorno, così da riequilibrare la situazione (altrimenti di notte sarebbe molto più facile vincere), oppure decidere che il gioco è attivo solo in certi orari (ho visto che spesso in molti concorsi del genere usa fare così).

Originariamente inviato da ggmac
IL SOFTWARE DEVE ESSERE UN APPLICAZIONE WEB IN PHP MYSQL..
Allora chiedi nell'apposito forum PHP. E per favore non scrivere tutto in maiuscolo.

LeleFT
26-02-2010, 18:04
PHP ha una sua area dedicata.
Ad ogni modo, non avevi specificato il linguaggio (né nel titolo, come richiesto dal regolamento interno, né nel messaggio iniziale).

Per le richieste di sviluppo software, inoltre, c'è il forum "Offro Lavoro / Collaborazione".

Posta, quindi, nell'area che più ritieni adatta (PHP o "Offro Lavoro / Collaborazione").


Qui chiudo.


Ciao. :ciauz:

Loading