Autor Zpráva
lifeplus
Profil *
Ahoj,

mám problém s generátorem náhodných seskupeních.

mám pole

$pole = array(0 => 'neco',
                       1 => 'nic');


momentálně to dělám takhle:

$pole[rand(0,1)];


ale přestalo mi to vyhovovat, potřebola bych, aby když je "neco" tak následně bylo 3x "nic" a pak zase "neco" nebo "nic", maximálně však 9 "nic" vedle sebe. Pomohl by mi s tím někdo?
bohyn
Profil
Generovani nahodnych cisel podle procentalniho zastoupeni se tu nedavno probiralo. viz vyber polozky

kolikrat v rade bylo neco/nic si odhlidas pres pole nebo sessions/cookies
keeehi
Profil *
$nic = 0;
$vysledek = 0;

cyklus
{
  $nahodny = rand(0,1);

  if ($nahodny == 0)
  {
    $vysledek .= "0111";
    $nic += 3;
  }
  else
  {
    $vysledek .= "1";
    $nic++;
  }

  if ($nic == 9)
  {
    $vysledek .= "0111";
    $nic = 0;
  }

}

$x = array("0", "1");
$y   = array("něco,", "nic,");

echo (str_replace($x, $y, $vysledek));
keeehi
Profil *
pokaždé, když se objeví něco, přidá se za něco nic. Pokud se objeví 9x nic za sebou, přidá se za poslední nic něco, a protože se tedy v textu objevilo něco, přidá se za to zase nic.

Je to hroznej popis, ale jinak to nešlo. Začínám nenávidět slova nic a něco.
keeehi
Profil *
oprava: pokaždé, když se objeví něco, přidá se za něco 3x nic. Pokud se objeví 9x nic za sebou, přidá se za poslední nic něco, a protože se tedy v textu objevilo něco, přidá se zase za něco 3x nic.
lifeplus
Profil *
funguje fakt pěkně, díky
lifeplus
Profil *
bohužel ne, po chvíli se začne opakovat něco # 3x nic # něco
BetaCam
Profil
lifeplus
třeba :
$data = array('neco', 'nic');
$inline = 0;
$stack = array();
for($i=0;$i<20;$i++){
	if ($inline === 9 OR rand(0,1) === 0) {
		$inline = ($inline === 9 ? 0 : $inline+3);
		array_push($stack, $data[0], $data[1], $data[1], $data[1]);
	}else{
		$stack[] = $data[1];
	}
}


pokud sem to dobře pochopil
lifeplus
Profil *
skoro, ale už nebude problém si to upravit, díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: