numeri casuali in php

turillo

Utente Attivo
23 Apr 2012
47
0
0
cari amici volevo avere delle vostre considerazioni in merito alla generazione di numeri casuali in php.
il mio obiettivo è quello di avere un codice che li generi il più possibile "diversi" in N estrazioni.
faccio un esempio per rendere l'idea, considerando l'esempio delle estrazioni di numeri.

1 estrazione: 2 4 8 1
2 estrazione: 2 5 7 3

e cosi via...

il mio problema è questo: come posso costruire un codice che mi vari i numeri generati anche in estrazioni diverse?

evitare di avere cose simili a

1 estrazione: 2 4 8 1
2 estrazione: 4 5 2 3
3 estrazione: 4 1 8 2
4 estrazione: 2 1 5 6

in cui i numeri 2 e 4 sono ripetuti diverse volte alle varie estrazioni

che consigli date per implementare una maggiore casualità/diversità?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ciao,
ma le strazioni le memorizzi in un db?
i numeri fino a quanto arrivano?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
dimenticavo:
se vuoi evitare di ripetere il numero fai l'estrazione senza ripetizione, cioe fai in modo che un numero estratto non posa più venere estratto.
potresti provare, visto che sono array, a esttrarre verificare se il numero è gia estratto se si estrai di nuovo se no salvi l'estratto.
comunque in questo modo modifichi le propbilita-
ripetendo l'es rand(1,90) es.
1° estrazione probabilita 1/90
2° estrazione probabilità 1/89
3° estrazione probabilità 1/88
...................
89° 1/2
90° 1/1
 

turillo

Utente Attivo
23 Apr 2012
47
0
0
l'estrazione la faccio già senza ripetizione solo che praticamente le estrazioni le faccio a gruppi.

ad esempio,

1 manche
estrazione 1
estrazione 2
etc...

2 manche
estrazione 1
estrazione 2
etc...

ora il problema è che i numeri sono diversi all'interno della stessa manche ma spesso si ripetono nella varie manches

quindi avremo

1 manche
23
44
78
12

2 manche
23
57
78
90

il 23 e il 78 me li ritrovo di nuovo..il mio obiettivo è quello di ridurre questa ridondanza. potrei ad esempio utilizzare un array che memorizzi le estrazioni nelle varie manche, potrebbe essere una soluzione.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
non so se ti può seore, ma ho ripescato un mio vecchio script per la distribuzione delle carte a bridge. forse può dartti qualche input
PHP:
<?php
//costruisco il mazzo di carte
$seme[0]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[1]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[2]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[3]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$semi=array('picche','cuori','quadri','fiori');
$giocatore=array('sud','ovest','nord','est');
$carte=13;//numero carte per giocatore
for($k=0; $k < 4; $k++){//distribuisco tra i giocatori
	$numero=0;//numero carte distribuite
	while($numero < $carte){//ripeto sino a che non distribuite tutte le carte al giocatore
		$s=rand(0,3);//estraggo il seme
		$c=rand(0,12);//estraggo la carta
		if(isset($seme[$s][$c])){//la carte esiste
			$giocatori[$k][$s].=$seme[$s][$c]." ";//la attribuisco al giocatore
			$numero++;//incremento il umero di carte per il giocatore k
			unset($seme[$s][$c]);//elimino carta dal mazzo
		}
	}
}
//verifica distribuzione
for($k=0;$k<4;$k++){
	echo "giocatore ".$giocatore[$k]."<br>";
	for($j=0;$j<4;$j++){
		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seme ".$semi[$j].": ".$giocatori[$k][$j]."<br>";
	}
	echo "<hr>";
}
?>
 

turillo

Utente Attivo
23 Apr 2012
47
0
0
ciao
non so se ti può seore, ma ho ripescato un mio vecchio script per la distribuzione delle carte a bridge. forse può dartti qualche input
PHP:
<?php
//costruisco il mazzo di carte
$seme[0]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[1]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[2]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$seme[3]=array('2','3','4','5','6','7','8','9','10','F','D','R','A');
$semi=array('picche','cuori','quadri','fiori');
$giocatore=array('sud','ovest','nord','est');
$carte=13;//numero carte per giocatore
for($k=0; $k < 4; $k++){//distribuisco tra i giocatori
	$numero=0;//numero carte distribuite
	while($numero < $carte){//ripeto sino a che non distribuite tutte le carte al giocatore
		$s=rand(0,3);//estraggo il seme
		$c=rand(0,12);//estraggo la carta
		if(isset($seme[$s][$c])){//la carte esiste
			$giocatori[$k][$s].=$seme[$s][$c]." ";//la attribuisco al giocatore
			$numero++;//incremento il umero di carte per il giocatore k
			unset($seme[$s][$c]);//elimino carta dal mazzo
		}
	}
}
//verifica distribuzione
for($k=0;$k<4;$k++){
	echo "giocatore ".$giocatore[$k]."<br>";
	for($j=0;$j<4;$j++){
		echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;seme ".$semi[$j].": ".$giocatori[$k][$j]."<br>";
	}
	echo "<hr>";
}
?>

si infatti è proprio con unset che tu elimini la carta pescata dopo che è stata data al giocatore.
io lo utilizzo anche all'interno della singola manche per avere estrazioni diverse, ma vorrei anche che
le manche contenessero anche tra loro estrazioni diverse: il dubbio però che mi viene è che lo script
non deve implicare che tra le manche ci sia diversità, quindi vediamo se devo considerare o no di
apportare tale modifica.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
per essere sicuro che per ogni estrazione e nelle varie manche i numeri non si ripetono potresti fare così,
devi però mettere un controllo che verifichi di non andare (tentare di) ad estrarre elementi dell'array che non esistono, cioè non fare più di un certo numero di estrazioni

PHP:
<?php
$da_estrarre=array();
$min=1;
$max=100;
//creo l'array
for($k=$min; $k <=$max;$k++){
	$da_estrarre[]=$k;
}
//randomizzo (mescolo) l'array
shuffle($da_estrarre);
$n_manche=5;//numero di manche
$n_per_manche=4;//numero di estrazioni per manche
//per fare la verifica
$lunghezza=count($da_estrarre);
for($k=0;$k < $n_manche; $k++){
	$ofset=$n_per_manche*($k);//elemento di partenza per l'estrazione
	//verifico di non estrarre elementi inesistenti (cerco oltre la lunghezza dell'array)
	if(($ofset+$n_per_manche)<$lunghezza){
		//estraggo un sotto array che parte da $ofset e comprende $n_per_manche elementi
		$estrazione[$k]=array_slice($da_estrarre,$ofset,$n_per_manche);
	}else{
		break; //esco dal ciclo
	}
}
//verifica estrazione
echo "<hr>";
foreach($estrazione as $ch_1 => $val_1){
	echo "manche n.: ".($ch_1+1)."<br />";
	foreach ($val_1 as $ch_2 => $val_2){
		echo "&nbsp;&nbsp;&nbsp;".($ch_2+1).") $val_2<br />";
	}
	echo "<hr>";
}
?>
 

turillo

Utente Attivo
23 Apr 2012
47
0
0
ah un altro piccolo dubbio: mi serve generare un numero decimale compreso tra 0 e 1 a due cifre
tipo 0,45 - 0,77 - 0,3 - 0,05 e cosi via..come posso fare?

EDIT: soluzione trovata!
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
R generazione numeri o lettere casuali senza ripetizione Javascript 0
V generazione numeri casuali non ripetuti .NET Framework 3
C operazioni con numeri casuali PHP 7
StarFish [C++] Numeri casuali C/C++ 2
D Generare numeri interi casuali compresi in [1;k] Java 0
emanuelevt generazione di numeri casuali PHP 2
P Excel: numeri casuali arrotondati Windows e Software 1
S Come conoscere la posizione di numeri in un array escludendo i doppioni PHP 4
Max 1 Numeri whatsapp strani Smartphone e tablet 0
G Generazione di numeri random in PHP PHP 5
G Operazioni matematiche con grandi numeri PHP PHP 5
A [PHP] Script con array con numeri che iniziano per 00 PHP 2
D [Javascript] [HTML] Inserire slash dopo 3 numeri Javascript 5
M [PHP] Controllo campo cap con trattino oltre ai numeri PHP 3
Z Somma di numeri in una lista di app inventor Sviluppo app per Android 0
bubino8 [PHP] 4 numeri casuale no doppioni PHP 11
M [PHP] range tra due numeri PHP 7
ivarello C# Convertire i numeri in note Programmazione 1
T [PHP] ordinare un campo varchar che contiene numeri PHP 6
V Numeri con decimali jQuery 3
filomeni numeri decimali e MySql PHP 6
A Problema con stringhe e numeri interi PHP 2
David92 Numeri Random Javascript 1
filippino Riconoscere numeri pari e dispari con PHP PHP 1
K INPUT numeri negativi Sviluppo app per Android 4
M variabile compresa tra numeri negativi, non funziona PHP 2
P Controllare che il form sia composto da soli numeri e non sia vuoto? Javascript 11
A Aprire una tastiera con solo numeri Sviluppo app per Android 1
R estrapolare numeri PHP 2
C [RISOLTO]Numeri random al termine di un link http Javascript 27
C Esercizio: Inserire elenco numeri e controllare che siano di tupi numerico Javascript 2
Monital Numeri infiniti? PHP 5
Z Sommare i numeri con FOR Javascript 1
borgo italia numeri interi e float MySQL 3
M Ordina numeri in modo crescente PHP 4
Z TIpi di numeri PHP 1
voldemort Numeri random in Java Java 1
anthares Riordinare colonna secondo numeri crescenti PHP 5
anthares Interrogare database secondo porzione di numeri PHP 5
V gestire numeri PHP 6
E Array su variabile di numeri presa dal databse PHP 3
max_400 Database: Confrontare una variabile con una colonna di numeri PHP 6
AnD@rè numeri romani Java 4
C estrapolare da documento solo numeri Javascript 3
H Estrarre Numeri contenuti in un URL PHP 2
Z Sommare i numeri PHP 2
A Numeri letti male da foglio Excel con Java Java 1
T programma numeri primi PHP 0
borgo italia espressione regolare con numeri PHP 2
N Allineare numeri a destra. Classic ASP 2

Discussioni simili