11524 sujets
JavaScript, DOM et API Web HTML5
Bon, voilà ce que j'ai fait :
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)
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)
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:
C'est vrai que c'est pas autant optimisé que ton code (enfin je pense) mais pour un rand(0-50) ça marche bien
<!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
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.
Modifié par Changaco (15 Jan 2011 - 14:19)
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)