Maîtrise du pseudo aléatoire

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Maîtrise du pseudo aléatoire

Re: Maîtrise du pseudo aléatoire

par AB » 20 janv. 2010, 21:38

Tu devrais ouvrir un autre topic parce que même si c'est pour le même script, ce n'est pas du tout le même problème.

Ton sujet sur pseudo aléatoire est résolu, reste un nouveau pb sur l'exploitation de données depuis un fichier texte.
Dans ton nouveau topic essaye d'être plus explicite. Comment veux-tu que l'on interprète :
Mais je pense que j'ai besoin de tout remettre dans un tableau après de cette façon...
...
Mais ça marche pas comme je veux
Tu veux faire quoi exactement ? Dans quel but ? Pourquoi faire ? etc.
Si j'ai bien compris tu fais un tirage façon loto et tu enregistres le résultat dans un fichier texte. C'est ça ? Et ensuite que veux-tu en faire ? Bref comment veux-tu que l'on te dise si ta méthode est bonne si tu reste aussi vague...

Re: Maîtrise du pseudo aléatoire

par diabless6 » 20 janv. 2010, 19:53

Rebonjour :wink:

Je viens vous montrer l'état d'avancement de mon petit code mais ça va s'en dire que je suis bloquée là #-o :
$tab_array=file("nouveau_loto.txt");
//Fichier contient données
$nbvals=count($tab_array);
//compte le nb de données
echo 'nombre de valeurs: '.$nbvals.'<br>';
$tab_string=implode("",$tab_array);
//converti tab en string
//on retire les caractères -+
$a_remplacer=array("-","+");
$correction = str_replace($a_remplacer, "" , $tab_string);

$tab[$correction]=$tab_string;
Le format des nombres dans le fichier est x-x-x-x-x+x
Donc je ne pense pas que l'on puisse appliquer des conditions dans ce format ci.
C'est pourquoi j'ai converti le tableau $tab_array en $tab_string. ça m'a facilité la tâche pour supprimer les caractères en $correction.
Mais je pense que j'ai besoin de tout remettre dans un tableau après de cette façon :
7822283810=>7-8-22-28-38+10
32132333810=>3-21-32-33-38+10
etc...
Mais ça marche pas comme je veux :roll: Elle est bien ma façon là ? Mais jsuis entrain penser, si ça marche pas, c'est que j'ai un indice identique !?!
Merci

Resolu: Maîtrise du pseudo aléatoire

par diabless6 » 18 janv. 2010, 21:46

T'aurais pas oublié de mettre un petit résolu ? :)
Arf zut! j'y vais tout de suite :mrgreen:

Re: Maîtrise du pseudo aléatoire

par AB » 18 janv. 2010, 21:02

T'aurais pas oublié de mettre un petit résolu ? :)

Re: Maîtrise du pseudo aléatoire

par diabless6 » 18 janv. 2010, 13:25

Merci :wink:

Re: Maîtrise du pseudo aléatoire

par niuxe » 18 janv. 2010, 08:31

Hello,
Bon mes exemples sont enregistrés et je vais maintenant m'attaqué au même style mais un peut différent :

-Partir d'un .csv ou un xlt
-le mettre dans un array
-traiter avec des conditions
-sortir le résultat

Souhaitez moi bonne chance :mrgreen:
Je trouve que ce sera plus simple que ce que tu viens d'ingurgiter. En gros ça va se passer autour de cette fonction : fgetcsv et le mode d'ouverture du fichier (partie très intéressante me semble t'il). Si tu cales n'oublie pas la doc php. Elle aide pas mal.

Bon courage. :)

Re: Maîtrise du pseudo aléatoire

par diabless6 » 17 janv. 2010, 14:01

oui ton exemple est bien représentatif du code illisible mais court et qui dit illisible n'est pas forcément incompréhensible !
Et dieu merci, mon approche ne passera pas par là. Mais pour moi, c'est juste une question de clarté et de ne pas rajouter d'éléments superflus.

Merci :wink:

Re: Maîtrise du pseudo aléatoire

par AB » 17 janv. 2010, 03:31

Juste le

Code : Tout sélectionner

echo implode('.',$tab);
ça fait plus court ;)
C'est ça, fait la maline :P

En fait on essai souvent dans la mesure du possible, de faire tout le traitement php dans la partie php, pour n'avoir (toujours si possible) que le minimum de traitement à faire dans l'affichage, et echo fait normalement partie de l'affichage.

Et puis faire plus court n'est pas souvent une bonne solution. Dans ton exemple ça peut aller, mais si l'on complique un peu, ça devient vite illisible six mois plus tard si tu dois reprendre le code; tu constateras toi-même avec l'expérience :)

Pour info (et donc pas pour exemple) le maximum court que l'on peut faire avec ton exemple est :
$tab = range(1,49);

shuffle($tab);

echo implode('.',array_slice($tab,0,5));
...ce qui reste encore assez facilement compréhensible, mais on charge de code php la partie affichage, ce qui n'est pas son rôle, alors que dans ce cas on peut faire tout le traitement dans la partie php.

Aller bonne chance pour la suite :wink:

Re: Maîtrise du pseudo aléatoire

par diabless6 » 17 janv. 2010, 00:04

oui j'ai vu EDIT.... :wink:

J'ai pigé ! C'est tout bête ! Mais c'est mieux expliqué sur le site que sur mon livre !
Donc en faite, ton exemple c'est simpliste-ment radicale =D>

Comme quoi, que l'on peut apprendre quasiement toutes les fonctions rien qu'avec le même script ! Et c'est vachement enrichissant :wink:

Bon mes exemples sont enregistrés et je vais maintenant m'attaqué au même style mais un peut différent :

-Partir d'un .csv ou un xlt
-le mettre dans un array
-traiter avec des conditions
-sortir le résultat

Souhaitez moi bonne chance :mrgreen:

Re: Maîtrise du pseudo aléatoire

par AB » 16 janv. 2010, 23:46

As-tu vu l' EDIT de mon message précédent ?

A part ça pour array_slice, c'est indiqué dans le manuel http://fr2.php.net/array_slice. L'offset c'est l'index de l'élément du tableau et les index d'un tableau numérique commence à 0 ce qui explique ton exemple. Lis attentivement le manuel (et les exemples sous l'explication de la fonction), c'est une mine d'or.

Re: Maîtrise du pseudo aléatoire

par diabless6 » 16 janv. 2010, 23:39

Ha! oui! Je cherchais justement à utiliser count et array_unique, mais j'avais pas encore trouvé.
Alors déjà que je suis la reine des boucles infinies, je fuie le while :mrgreen:

Mais c'est vrai qu'il est joli cet exemple et facile à traduire par rapport à mon code farfelue. :roll:

Et pour l'exemple avec array_slice, je suis bluffée !
-elle permet d'extraire un sous tableau du tableau $tab.

J'ai des exemples dans mon livre, mais je ne saisie pas du tout:

Code : Tout sélectionner

$tab=array(1,2,3,4,5,6,7,8,9); $tab2=array_slice($tab,2,2); print_r($tab2);
résultat 3 & 4
je ne comprends pas comment la découpe se fait ! #-o

Juste le

Code : Tout sélectionner

echo implode('.',$tab);
ça fait plus court ;)

Re: Maîtrise du pseudo aléatoire

par AB » 16 janv. 2010, 23:08

Sinon concernant la solution 1 tu pourrais faire ceci pour récupérer les cinq premiers éléments, ça n'apporte pas grand chose, sauf d'avoir un tableau final de cinq éléments, et de t'apprendre une autre fonction :wink:
$nombre_valeur_a_retourner = 5;

$tab = range(1,49);
shuffle($tab);

$tab = array_slice($tab,0,$nombre_valeur_a_retourner);

echo '<pre>';
print_r($tab);
echo '</pre>';

EDIT
Ah oui pendant qu'on y est, pour formater ta liste de nombre avec un point séparateur, étant donné qu'avec cette solution tu as maintenant un tableau avec uniquement les valeurs nécessaires, tu peux faire à la suite du code ci-dessus un "implode" sur le tableau

$nombre_valeur_a_retourner = 5;

$tab = range(1,49);
shuffle($tab);

$tab = array_slice($tab,0,$nombre_valeur_a_retourner);

$liste = implode('.',$tab);
echo $liste;
Allez ça fait une fonction de tableau en plus utilisée :)

Re: Maîtrise du pseudo aléatoire

par AB » 16 janv. 2010, 22:42

Suivant ton principe tu peux faire ceci
$nombre_valeur_a_retourner = 50;

$resultat = array();

while (count($resultat) < $nombre_valeur_a_retourner)
{
$resultat[] = mt_rand(0,49);
$resultat = array_unique($resultat);
}

echo '<pre>';
print_r($resultat);
echo '</pre>';
Remarque bien que ce n'est pas optimisé par rapport à la solution 1 de ton livre.

J'ai fait exprès de mettre 50 pour que tu puisse voir le nombre de boucles nécessaire à l'élaboration de la liste en regardant simplement l'index du dernier élément du tableau. Théoriquement avec pas de chance tu pourrais même avoir un temps de réponse infini d'autant plus que tu te rapproche du nombre d'éléments maximum.

Donc cette solution même si elle est écrite plus simplement que tes essais (avec le même principe) est à proscrire.

Bon allez, arrête de faire mumuse avec les nombres aléatoires et passe à la suite. La route est longue et si tu t'amuses à chercher tout ce qu'il ne faut pas faire, t'es pas rendue (comme on dit) :wink:

Re: Maîtrise du pseudo aléatoire

par diabless6 » 16 janv. 2010, 21:01

J'ai 2 livres et je compte bien les usés.... :mrgreen:
for ($en_six=0;$en_six<=5;$en_six++){
$resultat=array();
//print_r($numbers);
for($i=0;$i<=49;$i++)
{
    $numbers= range(1, $i);
    shuffle($numbers);
    for ($a=0;$a<=43;$a++)
    {unset($numbers[$a]);}//retire 43 numéro à partir de la fin
    if (in_array($numbers,$resultat))
    {$en_six--;$a--;}
    else{$resultat=$numbers;}

}
echo implode(".",$numbers).'<br/>';}
//var_dump($numbers);
//print_r($resultat);
?>
C'est pas là aussi, mais c'est un peu tordu :twisted:

Re: Maîtrise du pseudo aléatoire

par AB » 16 janv. 2010, 05:48

Et pour générer un identifiant unique (ce n'est pas le sujet mais ça peut servir), il y a uniqid http://php.net/manual/fr/function.uniqid.php