IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

tirage aléatoire en utilisant le temps


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut tirage aléatoire en utilisant le temps
    Bonjour,
    J'ai besoin d'aide pour implémenter une fonction de tirage aléatoire qui utilise le temps en millisecondes et qui retournerait un nombre compris entre 1 et 78.
    Pour finir, je récupère ce nombre pour ouvrir une certaine page (avec un nom du type maPage73.php si le tirage a retourné 73). Est-ce possible?

    Il s'agit en fait d'un jeu de tarot qui ouvre une certaine page en fonction de l'instant ou l'on a cliqué.

  2. #2
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var t=Math.Ceil(new Date().getMilliseconds()*77/1000)
     
    alert(t)

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(new Date().getMilliseconds()%77 +1)
    Un poil moins équitable au niveau de la distribution, le 78 ayant 7.69 % moins de chances de sortir que des chiffres de 1 à 76

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(new Date().getMilliseconds()%77 +1)
    Un poil moins équitable au niveau de la distribution, le 78 ayant 7.69 % moins de chances de sortir que des chiffres de 1 à 76
    j'ai rien compris

    loin de moi l'idée de me mêler des questions mathématiques

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par florian9600 Voir le message
    J'ai besoin d'aide pour implémenter une fonction de tirage aléatoire qui utilise le temps en millisecondes et qui retournerait un nombre compris entre 1 et 78.
    Pourquoi ?

    Quel problème poserait l'utilisation de Math.random() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function de(max) {
       if (max < 1) return 0;
       return Math.round((Math.random() * max) + .5);
    }
     
    var tonNombreEntre1Et78 = de(78);

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    C'était pourtant une perche qui t'étais destinée JT :mrgeein:

    je suis parti sur le modulo de 77
    qui varie donc de 0 à 77
    auquel j'ajoute 1 pour avoir l'intervalle 1 à 78

    Mais 1000 / 77 = 12,987012987012987012987012987013

    12*77=924
    donc tous les chiffres de 0 à 77 ont autant de chance de sortir de 0 à 924 millisecondes
    reste 76
    sur le modulo restant 77 ne sortira jamais
    donc une fois sur 13 le 77 ne sort pas 1/13=0,076923076923076923076923076923077
    soit 7.96 %

    C'est un raisonnement tout personnel, et je compte sur toi pour le rectifier

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    d'accord avec RomainVALERI, Math.random utilise l'horloge, par contre pour une meilleur probabilité de tirage il est conseillé de l'utiliser avec Math.floor
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var numMax = 78;
    var tirage = Math.floor( Math.random() * numMax) +1;
    cas ou l'on démarre à 1, et pour un cas général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tirage = Math.floor( Math.random() * (numMax - numMin + 1) + numMin);
    PS: c'est garanti j'ai eu à traiter le cas.

  8. #8
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Romain, c'est rigolo de pas utiliser Math.random() aussi

    et en plus on maîtrise d'où vient le résultat!

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    C'était pourtant une perche qui t'étais destinée JT :mrgeein:

    je suis parti sur le modulo de 77
    qui varie donc de 0 à 77
    auquel j'ajoute 1 pour avoir l'intervalle 1 à 78

    Mais 1000 / 77 = 12,987012987012987012987012987013

    12*77=924
    donc tous les chiffres de 0 à 77 ont autant de chance de sortir de 0 à 924 millisecondes
    reste 76
    sur le modulo restant 77 ne sortira jamais
    donc une fois sur 13 le 77 ne sort pas 1/13=0,076923076923076923076923076923077
    soit 7.96 %

    C'est un raisonnement tout personnel, et je compte sur toi pour le rectifier
    T'es cinglé, mec!
    tu crois pas que je vais vérifier ni même essayer de comprendre ce chose truc einsteinien

    sincèrement, je me contente de ma ptite règle de 3
    (si toutefois, ça s'appelle comme ça)

  10. #10
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    d'accord avec RomainVALERI, Math.random utilise l'horloge, par contre pour une meilleur probabilité de tirage il est conseillé de l'utiliser avec Math.floor
    ...
    PS: c'est garanti j'ai eu à traiter le cas.
    Tu peux détailler ?
    Les deux méthodes me semblaient équivalentes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function de_NS(max) {
       if (max < 1) return 0;
       return Math.floor( Math.random() * max) +1;
    }
    function de_RV(max) {
       if (max < 1) return 0;
       return Math.round((Math.random() * max) + .5);
    }
     
    function statRandom() {
       var i = 0, FACES = 10, JETS = 10000;
       var resultats_RV = [], resultats_NS = [];
       while (i++ < FACES) {
          resultats_RV.push(0);
          resultats_NS.push(0);
       }
       var message_RV = "Résultats (RV) :\n\n";
       var message_NS = "Résultats (NS) :\n\n";
       for (i = 0; i < JETS; ++i) {
          ++resultats_RV[de_RV(FACES) - 1];
          ++resultats_NS[de_NS(FACES) - 1];
       }
       for (i = 0; i < FACES ; ++i) {
          message_RV += "Nombre de \"" + (i + 1) + "\" obtenus : " + resultats_RV[i] + "\n";
          message_NS += "Nombre de \"" + (i + 1) + "\" obtenus : " + resultats_NS[i] + "\n";
       }
       alert(message_RV);
       alert(message_NS);
    }
    statRandom();

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Tu peux détailler ?
    Les deux méthodes me semblaient équivalentes...
    1000 excuses je n'avais bien visualisé le + .5 et pris pour +1, les fréquences des sorties sont identiques.

  12. #12
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    1000 excuses je n'avais bien visualisé le + .5 et pris pour +1, les fréquences des sorties sont identiques.
    Ah ben non aucun problème, je préfère ça, tu m'avais fait un peu peur faut avouer

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Désolé de répondre si tard mais je pensais qu'on recevait un mail quand on avait une réponse, bref...

    Merci à tout le monde pour vos réponses concernant le tirage aléatoire. Effectivement, je préfère faire ma fonction random, donc merci pour vos conseils.

    Par contre je voulais aussi savoir comment je peux utiliser le résultat du tirage pour ouvrir une certaine photo, exemple: le tirage du numéro 37 me permettrait d'afficher l'image maPhoto_37.jpg .

  14. #14
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Pour que tu puisse recevoir un mail lors d'un nouveau message, active le dans ton tableau de bord.
    Pour ton besoin, modifie seulement le src d'un image.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("idImage").src="maPhoto_"+nombre+".jpg";
    Citation Envoyé par SpaceFrog
    je suis parti sur le modulo de 77
    qui varie donc de 0 à 77
    c'est de 0 à 76 .

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    oui mes mains ont gallopé sur le clavier numérique

    je pensais bien à 0 - 76 d'ou le +1 qui décalle l'ointervalle de 1 a 77

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, je vais essayer ça.

  17. #17
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    désolé, ça fait presque un mois que tu as ouvert ce sujet et ça fait presque un mois qu'une question me ronge de l'intérieur : POURQUOI ?

    pourquoi ne pas utiliser la fonction "random" qui existe et vouloir utiliser le "time" qui n'a, à la base, pas ce rôle de fonction aléatoire ?

Discussions similaires

  1. tirage aléatoire
    Par uloaccess dans le forum Access
    Réponses: 10
    Dernier message: 22/02/2006, 18h02
  2. Tirage aléatoire dans une base donnée
    Par leloup84 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/01/2006, 16h13
  3. Qui utilise le TEMP ?
    Par Débéa dans le forum Oracle
    Réponses: 3
    Dernier message: 19/01/2006, 13h14
  4. Utilisation JProgressBar & temps de traitement incconu
    Par greg1602 dans le forum Composants
    Réponses: 22
    Dernier message: 30/11/2005, 20h52
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo