Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/02/2015, 11:56
MMan
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 8 meses
Puntos: 15
Respuesta: Combinaciones de números aleatorios que no se repitan

tal vez...

agregar 2 campos a "cartones"

1 boolean yausado
1 string numerosdelcarton

:: ni siquiera necesitarias tener un campo por cada numero... haciendo un EXPLODE("," , numerosdelcarton ) tendrias un array con todos los nums

el boolean te permite filtrar los ya usados, para obtener un nuevo carton

numerosdelcarton: guardas los numeros ORDENADOS separados con coma (o lo que sea) como un string.... esto te permite buscar el carton mas facil ( en vez de estar creando arrays/ conjuntos e iterando por cada uno de los 15 numeros )


------------
<?php
Código PHP:
Ver original
  1. function dameListaNum($cuantos=15, $min=0, $max=99){
  2.     if ($cuantos > ($max-$min) ) {die( "error, parametros incorrectos"); }
  3.     // si $cuantos > numero de permutaciones que se pueden hacer... die ("error, $cuantos > a lo permitido")
  4.    
  5.    
  6.     $x=0;
  7.     $valores = array();
  8.     while ($x<$cuantos) {
  9.       $num_aleatorio = rand($min,$max);
  10.       if (!in_array($num_aleatorio,$valores)) {
  11.         array_push($valores,$num_aleatorio);
  12.         $x++;
  13.       }
  14.     }
  15.  
  16.     // ordena
  17.     asort($valores);
  18.     return implode(",", $valores);
  19. }
  20.  
  21. // genero 1000 cartones de prueba
  22. $cartones = array();
  23.  
  24. for($i=1;$i<=1000;$i++){
  25.     $uncarton = dameListaNum();
  26.     if (!in_array($uncarton, $cartones)){
  27.         array_push($cartones,$uncarton);
  28.     }
  29. }
  30.  
  31.  
  32. // prueba pa ver si hay duplicados
  33. echo count($cartones);
  34. echo "\n";
  35. // elimino duplicados
  36. $resultado = array_unique($cartones);
  37. echo count($resultado);
  38. // deberia dar 1000 / 1000

?>

Última edición por MMan; 28/02/2015 a las 13:17 Razón: agregado codigo de prueba