Le compte est bon

Contenu du snippet

Jeu "Le compte est bon" en javascript.................................................................................................................

Source / Exemple :

<html><head><title>Des chiffres</title>
<script language="JavaScript">
<!--

function n7()
{
 hasard=Math.random()*898;
 hasard=parseInt(Math.round(hasard));
 return hasard;
}

function n1()
{
 hasard=Math.random()*13;
 hasard=parseInt(Math.round(hasard));
 return hasard;
}

function Debut()
{
 document.liste.D1.selectedIndex=n1();
 document.liste.D2.selectedIndex=n1();
 document.liste.D3.selectedIndex=n1();
 document.liste.D4.selectedIndex=n1();
 document.liste.D5.selectedIndex=n1();
 document.liste.D6.selectedIndex=n1();
 document.liste.D7.selectedIndex=n7();
 document.liste.T1.value="";
}

var x,k,r,z,ss1,ss2,ss3;
var mi=new Array(5);
var mj=new Array(5);
var mop=new Array(5);
var si=new Array(5);
var sj=new Array(5);
var sop=new Array(5);

function sauve()
{
 if(r>x)k=r-x;else k=x-r; 
 if(k<ss2){ss1=5;ss2=k;ss3=r;}
 if((k==ss2)&&(ss1>z))
 {
  si[0]=mi[0];sj[0]=mj[0];sop[0]=mop[0];
  si[1]=mi[1];sj[1]=mj[1];sop[1]=mop[1];
  si[2]=mi[2];sj[2]=mj[2];sop[2]=mop[2];
  si[3]=mi[3];sj[3]=mj[3];sop[3]=mop[3];
  si[4]=mi[4];sj[4]=mj[4];sop[4]=mop[4];
  ss1=z;
 }
}

function add(i,j)
{
// if(j>0)//(i<2147483648)
 {
  r=i+j;mi[z]=i;mj[z]=j;mop[z]='+';sauve();return -1;
 }
 return 0;
}

function sub(i,j)
{
 if(i!=j)
 {
  r=i-j;if(r!=j){mop[z]='-';mi[z]=i;mj[z]=j;sauve();return -1;}
 }
 return 0;
}

function mul(i,j)
{
 if((i<65536)&&(j>1))
 {
  r=i*j;mop[z]='×';mi[z]=i;mj[z]=j;sauve();return -1;
 }
 return 0;
}

function div(i,j)
{
 if(j>1)
 {
  r=parseInt(i/j);
  if((r*j==i)&&(r!=j)){mop[z]=':';mi[z]=i;mj[z]=j;sauve();return -1;}
 }
 return 0;
}

function suite4(a,b)
{
 z=4;
 if(a<b){k=a;a=b;b=k;}
 add(a,b);
 sub(a,b);
 mul(a,b);
 div(a,b);
 z=3;
}

function lasuite4(a,b,c)
{
 if(add(a,b))suite4(r,c);
 if(sub(a,b))suite4(r,c);
 if(mul(a,b))suite4(r,c);
 if(div(a,b))suite4(r,c);
}

function suite3(a,b,c)
{
 z=3;
 if(a<b){k=a;a=b;b=k;}
 if(a<c){k=a;a=c;c=k;}
 lasuite4(a,b,c);
 if(c!=b)lasuite4(a,c,b);
 if(b!=a)lasuite4(b,c,a);
 z=2;
}

function lasuite3(a,b,c,d)
{
 if(add(a,b))suite3(r,c,d);
 if(sub(a,b))suite3(r,c,d);
 if(mul(a,b))suite3(r,c,d);
 if(div(a,b))suite3(r,c,d);
}

function suite2(a,b,c,d)
{
 z=2;
 if(a<b){k=a;a=b;b=k;}
 if(a<c){k=a;a=c;c=k;}
 if(a<d){k=a;a=d;d=k;}
 lasuite3(a,b,c,d);
 if(c!=b)lasuite3(a,c,b,d);
 if((d!=b)&&(d!=c))lasuite3(a,d,b,c);
 if(b!=a)
 {
  lasuite3(b,c,a,d);
  if(d!=c)lasuite3(b,d,a,c);
 }
 if((c!=a)&&(c!=b))lasuite3(c,d,a,b);
 z=1;
}

function lasuite2(a,b,c,d,e)
{
 if(add(a,b))suite2(r,c,d,e);
 if(sub(a,b))suite2(r,c,d,e);
 if(mul(a,b))suite2(r,c,d,e);
 if(div(a,b))suite2(r,c,d,e);
}

function suite1(a,b,c,d,e)
{
 z=1;
 if(a<b){k=a;a=b;b=k;}
 if(a<c){k=a;a=c;c=k;}
 if(a<d){k=a;a=d;d=k;}
 if(a<e){k=a;a=e;e=k;}
 lasuite2(a,b,c,d,e);
 if(c!=b)lasuite2(a,c,b,d,e);
 if((d!=b)&&(d!=c))lasuite2(a,d,b,c,e);
 if((e!=b)&&(e!=c)&&(e!=d))lasuite2(a,e,b,c,d);
 if(b!=a)
 {
  lasuite2(b,c,a,d,e);
  if(d!=c)lasuite2(b,d,a,c,e);
  if((e!=c)&&(e!=d))lasuite2(b,e,a,c,d);
 }
 if((c!=a)&&(c!=b))
 {
  lasuite2(c,d,a,b,e);
  if(e!=d)lasuite2(c,e,a,b,d);
 }
 if((d!=a)&&(d!=b)&&(d!=c))lasuite2(d,e,a,b,c);
 z=0;
}

function lasuite1(a,b,c,d,e,f)
{
 if(add(a,b))suite1(r,c,d,e,f);
 if(sub(a,b))suite1(r,c,d,e,f);
 if(mul(a,b))suite1(r,c,d,e,f);
 if(div(a,b))suite1(r,c,d,e,f);
}

function suite0(a,b,c,d,e,f)
{
 z=0;
 if(a<b){k=a;a=b;b=k;}
 if(a<c){k=a;a=c;c=k;}
 if(a<d){k=a;a=d;d=k;}
 if(a<e){k=a;a=e;e=k;}
 if(a<f){k=a;a=f;f=k;}
 if(b<c){k=b;b=c;c=k;}
 if(b<d){k=b;b=d;d=k;}
 if(b<e){k=b;b=e;e=k;}
 if(b<f){k=b;b=f;f=k;}
 if(c<d){k=c;c=d;d=k;}
 if(c<e){k=c;c=e;e=k;}
 if(c<f){k=c;c=f;f=k;}
 if(d<e){k=d;d=e;e=k;}
 if(d<f){k=d;d=f;f=k;}
 if(e<f){k=e;e=f;f=k;}
 lasuite1(a,b,c,d,e,f);
 if(c!=b)lasuite1(a,c,b,d,e,f);
 if((d!=b)&&(d!=c))lasuite1(a,d,b,c,e,f);
 if((e!=b)&&(e!=c)&&(e!=d))lasuite1(a,e,b,c,d,f);
 if((f!=b)&&(f!=c)&&(f!=d)&&(f!=e))lasuite1(a,f,b,c,d,e);
 if(b!=a)
 {
  lasuite1(b,c,a,d,e,f);
  if(d!=c)lasuite1(b,d,a,c,e,f);
  if((e!=c)&&(e!=d))lasuite1(b,e,a,c,d,f);
  if((f!=c)&&(f!=d)&&(f!=e))lasuite1(b,f,a,c,d,e);
 }
 if((c!=a)&&(c!=b))
 {
  lasuite1(c,d,a,b,e,f);
  if(e!=d)lasuite1(c,e,a,b,d,f);
  if((f!=d)&&(f!=e))lasuite1(c,f,a,b,d,e);
 }
 if((d!=a)&&(d!=b)&&(d!=c)){
 lasuite1(d,e,a,b,c,f);
 if(f!=e)lasuite1(d,f,a,b,c,e);
 }
 if((e!=a)&&(e!=b)&&(e!=c)&&(e!=d))lasuite1(e,f,a,b,c,d);
}

function LeCalcul(a,b,c,d,e,f,y)
{
 ss2=2147483647;
 a=parseInt(a+1);if(a>10)a=(a-10)*25;
 b=parseInt(b+1);if(b>10)b=(b-10)*25;
 c=parseInt(c+1);if(c>10)c=(c-10)*25;
 d=parseInt(d+1);if(d>10)d=(d-10)*25;
 e=parseInt(e+1);if(e>10)e=(e-10)*25;
 f=parseInt(f+1);if(f>10)f=(f-10)*25;
 x=parseInt(y);x+=101;
 suite0(a,b,c,d,e,f);
 if(ss3==x)kk=x+" trouvé :nn";else kk=ss3+" trouvé à "+ss2+" près de "+x+" :nn";
 for(n=0;n<=ss1;n++)
 {
  switch(sop[n])
  {
 case '+':r=si[n]+sj[n];break;
 case '-':r=si[n]-sj[n];break;
 case ':':r=si[n]/sj[n];break;
 default:r=si[n]*sj[n];break;
  }
  kk=kk+si[n]+" "+sop[n]+" "+sj[n]+" = "+r+"n";
 }
// alert(kk);
 document.liste.T1.value=kk;
}

//-->
</script>
</head>
<body onload="JavaScript:Debut();">
  <center><form name="liste">
  <p> </p><p><select size="1" name="D1">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
  <select size="1" name="D2">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
  <select size="1" name="D3">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
  <select size="1" name="D4">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
  <select size="1" name="D5">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
  <select size="1" name="D6">
<option>1</option><option>2</option><option>3</option><option>4</option><option>5</option>
<option>6</option><option>7</option><option>8</option><option>9</option><option>10</option>
<option>25</option><option>50</option><option>75</option><option>100</option></select>
         
  <select size="1" name="D7">
<script><!--
for(var n=101;n<1000;n++)document.write("<option>"+n+"</option>");
//--></script>
</select></p>
 <p><input type="button" value="Chercher" name="B1" title="Approcher le résultat au plus près" onclick="JavaScript:LeCalcul(
  document.liste.D1.selectedIndex,
  document.liste.D2.selectedIndex,
  document.liste.D3.selectedIndex,
  document.liste.D4.selectedIndex,
  document.liste.D5.selectedIndex,
  document.liste.D6.selectedIndex,
  document.liste.D7.selectedIndex);" /> 
  <input type="button" value="Hasard" name="B2" title="Tire les nombres au hasard" onclick="JavaScript:Debut();" /></p>
 <p><TEXTAREA NAME="T1" COLS=45 ROWS=8 WRAP=physical style="text-align: center"></TEXTAREA></p>
  </form></center>
</body>
</html>

<!--
une recherche plus lisible :

'use strict';
var plaques=[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,25,25,50,50,75,75,100,100];

var a=[];//6 plaques
var t;// nombre à chercher
var r=200000;//trouvé à r prés de t (on part de loin...)
var best=[];

function rnd(x){return Math.floor(x*Math.random());}
for(let n=0;n<6;n++)
{
	let x=rnd(plaques.length);
	a[n]=plaques[x];
	plaques.splice(x,1);//on supprime la plaque de la pioche
}
t=101+rnd(899);//entre [101 et 999]

function test(a,jeu=[])
{
	let i,j,k,x,y,z,b,op;
	a.sort(function(u,v){return u-v;});//on classe par ordre croissant 
	for(i=0;i<a.length-1;i++)//toutes les plaques moins la dernière
	{
		y=a[i];
		for(j=i+1;j<a.length;j++)//toutes les plaques moins celle déjà prise
		{
			x=a[j];
			for(k=0;k<4;k++)//les 4 opérations
			{
				switch(k)
				{
					case 0:z=x+y;op=x+" + "+y+" = "+z;break;// + plus
					case 1:z=x-y;if((z==0)||(z==x)||(z==y))continue;op=x+" - "+y+" = "+z;break;// - moins
					case 2:z=x*y;if((z==x)||(z==y))continue;op=x+" × "+y+" = "+z;break;// * multiplié
					case 3:if(x%y==0){z=x/y;if((z==x)||(z==y))continue;op=x+" ÷ "+y+" = "+z;}// / divisé
							else continue;//pas de division réussie
				}
				jeu.push(op);// on stocke l'opération
				if(Math.abs(z-t)<=Math.abs(r))// c'est mieux ou pareil
				{
					if(Math.abs(z-t)<Math.abs(r))// c'est mieux
						best=jeu.slice();
					else if(best.length>jeu.length)
						best=jeu.slice();// on a trouvé mieux plus "vite" (solution plus courte)
					r=z-t;
					if(r==0){jeu.pop();continue;}//on a trouvé, on continue pour d'autres résultats  
				}
				b=[z];// "nouvelle plaque"
				for(let n=0;n<a.length;n++)//les plaques qui restent + la nouvelle
					if((n!=i)&&(n!=j))b.push(a[n]);
				if(b.length>1)test(b,jeu.slice());//on teste avec les nouvelles plaques (et l'historique)
				jeu.pop();//on remet en place
			}
		}
	}
}

function affiche(best)
{
	document.write("<table>");
	for(let n=0;n<best.length;n++)
	{
		document.write("<tr>");
		let s=best[n].split(" ");
		for(let u=0;u<5;u++)
			document.write("<td>"+s[u]+"</td>");
		document.write("</tr>");
	}
	document.write("</table>");
}

var d=new Date().getTime();
test(a.slice());// ou test(a); si on veut classer a pour l'affichage de a
document.write(((new Date().getTime()-d)/1000)+"" de recherchennPlaques = "+a+"n");
document.write("n"+t+" à cherchern");
if(r==0)document.write(t+" trouvénn");
else document.write((t+r)+" trouvé à "+Math.abs(r)+" prés de "+t+"nn");
affiche(best);

-->

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.