11484 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Ça y est moi c'est fait.
Modifié par Changaco (02 Dec 2007 - 10:15)
Bon, voilà ce que j'ai fait :
function randomNumbers(listLength, minNumber, maxNumber, floatPrecision, enableDoubles){

 var aNumbers = new Array(listLength);
 var randomNumber = new Number();
 var i=0;
 
 if(!floatPrecision) floatPrecision=0;

 if(Math.abs(minNumber)>Math.abs(maxNumber)) var realMaxNumber = Math.abs(minNumber);
 else var realMaxNumber = Math.abs(maxNumber);
 var randomNumberLength = String(Math.abs(realMaxNumber)).length+floatPrecision;

 if(minNumber==0){
  if(listLength>((Math.pow(10, (floatPrecision-1))+1)*(maxNumber-minNumber))&&enableDoubles===false){
   alert('Impossible !');
   return false;
  }
 }
 else{
  if(listLength>((Math.pow(10, (floatPrecision-1)))*(maxNumber-minNumber))&&enableDoubles===false) return false;
 }

 while(i<listLength){
  i++;
  randomNumber = String(Math.random()).slice(0, (randomNumberLength+4));
  randomNumber = Math.round(randomNumber*(((maxNumber-minNumber)*Math.pow(10, randomNumberLength))/(1-Math.pow(10, (-(randomNumberLength+4))))))*Math.pow(10, (-randomNumberLength))-((maxNumber-minNumber)/2)+((maxNumber+minNumber)/2);
  if(floatPrecision===0){
   if(randomNumber<0) randomNumber = String(randomNumber).slice(0, (String(Math.abs(Math.round(randomNumber))).length+floatPrecision+1));
   else randomNumber = String(randomNumber).slice(0, (String(Math.abs(Math.round(randomNumber))).length+floatPrecision));
  }
  else {
   if(randomNumber<0) randomNumber = String(randomNumber).slice(0, (String(Math.abs(Math.round(randomNumber))).length+floatPrecision+2));
   else randomNumber = String(randomNumber).slice(0, (String(Math.abs(Math.round(randomNumber))).length+floatPrecision+1));
  }

  if(enableDoubles===false){
   if(isDouble(aNumbers, String(randomNumber), floatPrecision)===true){
    i--;
   }
   else{
    aNumbers[i-1] = Number(randomNumber);
   }
  }
  else {
   aNumbers[i-1] = Number(randomNumber);
  }
 }

 alert('Result : '+aNumbers);

}
function isDouble(aNumbers, randomNumber, floatPrecision){
 if(randomNumber==='0'&&floatPrecision!=0) return true;
 for(var j=0; j<aNumbers.length; j++){
  if(aNumbers[j]==randomNumber){
   return true;
  }
 }
 return false;
}


J'attends les critiques des modérateurs ( et des autres membres du forum bien sûr ).

Note : Ça ne fonctionne pas sur IE 7 chez moi, ça donne quoi chez vous ?
Modifié par Changaco (02 Dec 2007 - 10:16)
Heu... pour faire des random entier j'utilise ça moi... ça marche bien mais je sais pas, c'est peut-être pas propre ou autre?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function test()
{
	temp=Math.random();
	temp=temp*1000;
	temp=Math.floor(temp);
	temp=temp%50;
	temp=temp+1;
alert (temp);
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Rand</title>
</head>

<body>
<a href="javascript:test();">Rand!</a>
</body>
</html>
Ça m'a l'air bien c'est juste que ma fonction a plus d'arguments et de possibilités ...

Après quand on veut juste un truc tout con c'est sûr qu'on en revient au problème des librairies, il y a plein de trucs qui ne servent à rien ...

Édit : En fait ma fonction est plus "mathématiquement logique" que la tienne ...
Modifié par Changaco (02 Dec 2007 - 10:16)
Bah moi j'utilise pour simuler de dés, on peu sans soucis y rajouter des paramètres:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function jetdé(nbdé,dé)
{
	var res = 0;
	for(var i=0;i<nbdé;i++)
	{
		temp=Math.random();
		temp=temp*1000;
		temp=Math.floor(temp);
		temp=temp%dé;
		temp=temp+1;
		res+=temp;
	}
alert ("Résultat de "+nbdé+"D"+dé+" : "+res);
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Rand</title>
</head>

<body>
<a href="javascript:jetdé(2,6);">Rand! 2D6</a><br />
<a href="javascript:jetdé(5,4);">Rand! 5D4</a>

</body>
</html>

C'est vrai que c'est pas autant optimisé que ton code (enfin je pense) mais pour un rand(0-50) ça marche bien Smiley smile
Je sais pas si mon code est optimisé mais il a plus de fonctionnalités comme les doublons, les nombres flottants et un intervalle donné ( y compris en nombres négatifs ).

Je n'ai plus qu'à attendre les critiques des modérateurs ...
Modifié par CNeo (13 Jan 2007 - 17:21)
Je repensais à ce topic l'autre jour et je me suis rappelé qu'au final il n'avait pas débouché sur un post dans le topic des scripts utiles ...

Je viens donc raviver la flamme en postant une version améliorée du script que j'avais posté à l'époque.

function isDouble(aNumbers, randomNumber, floatPrecision){
 if(randomNumber==='0'&&floatPrecision!=0) return true;
 for(var j=0; j<aNumbers.length; j++){
  if(aNumbers[j]==randomNumber){
   return true;
  }
 }
 return false;
}
function randomNumbers(listLength, minNumber, maxNumber, floatPrecision, enableDoubles){

 var aNumbers = new Array(listLength);
 var randomNumber = new Number();
 var i=0;

 if(!floatPrecision) floatPrecision=0;

 if(enableDoubles===false){
  if(floatPrecision==0 && listLength>(maxNumber-minNumber+1) || floatPrecision!=0 && listLength>((Math.pow(10, (floatPrecision)))*(maxNumber-minNumber)+maxNumber-minNumber)){
   alert('Impossible !');
   return false;
  }
 }

 while(i<listLength){
  i++;
  randomNumber=Math.floor(Math.random()*((maxNumber-minNumber)*Math.pow(10, floatPrecision)+1))*Math.pow(10, -floatPrecision)+minNumber;
  if(floatPrecision===0) randomNumber = String(randomNumber).slice(0, String(Math.floor(randomNumber)).length);
  else randomNumber = String(randomNumber).slice(0, String(Math.floor(randomNumber)).length+floatPrecision+1);

  if(enableDoubles===false){
   if(isDouble(aNumbers, String(randomNumber), floatPrecision)===true){
    i--;
    continue;
   }
  }
  aNumbers[i-1] = Number(randomNumber);
 }
 alert('Result : '+aNumbers);
}

Modifié par Changaco (15 Jan 2011 - 14:19)
Je repasserais demain soir pour poster ma solution dans le topic des scripts utiles si personne n'a mieux à proposer ...

Édit : Bon bah je post mon script ...
Modifié par Changaco (03 Dec 2007 - 19:45)
Pages :