Accueil > Forum > > > > remplir un tableau comme un sudoku...
remplir un tableau comme un sudoku...
dimanche 11 septembre 2005 à 12:47:49 |
remplir un tableau comme un sudoku...

8livier
|
bonjour,
je commence tout juste le flash, et je me suis lancé un defit peut etre un peu trop grand pour commencer...mais voila...je suis tennace 
je crée un tableau de 9 colonnes et une ligne comprenant de facon aleatoire les chiffres de 1 à 9:
[code] ligne1= new Array(); creerTableau(ligne1); function creerTableau(table){//creation de tableaux avec des chiffres de 1 a 9 placés aleatoirement for(z=0;z<=8;z++){ table[z]=0; while(table[z]==10 or table[z]==0){ table[z]=Math.round(Math.random()*10); } for(j=0;j<z;j++){ while(table[z]==table[j] or table[z]==10 or table[z]==0 ){ j=0; table[z]=Math.round(Math.random()*10); } } } } [/code]
ensuite, je veux mattre ce tableau dans un autre de 9 lignes et de 9 colonnes en verifiant qu'il n'y ai pas deux fois le meme chiffre dans une meme colonne, ainsi que dans un bloc de trois par trois: tableau[0][0] tableau[0][1] tableau[0][2] tableau[1][0] tableau[1][1] tableau[1][2] tableau[2][0] tableau[2][1] tableau[2][2]
puis dans : tableau[0][3] tableau[0][4] tableau[0][5] tableau[1][3] tableau[1][4] tableau[1][5] tableau[2][3] tableau[2][4] tableau[2][5]...etc
ce qui donne:
[code] ligne1=new Array(8); creerTableau(8,ligne1); colonne1=new Array(8); creerTableau(8,colonne1); ligne2=new Array(8); creerTableau(8,ligne2); ligne3=new Array(8); creerTableau(8,ligne3); ligne4=new Array(8); creerTableau(8,ligne4); while(colonne1[0]!= ligne1[0] or colonne1[1]== ligne1[1] or colonne1[2]== ligne1[1] or colonne1[1]== ligne1[2] or colonne1[2]== ligne1[2]){ creerTableau(8,colonne1); } for(parcourLigne=0;parcourLigne<=2;parcourLigne++){ for(parcourColonne=0;parcourColonne<=2;parcourColonne++){ while( colonne1[1]!= ligne2[0] || ligne2[parcourLigne]==ligne1[parcourColonne] || ligne2[3+parcourLigne]==ligne1[3+parcourColonne] || ligne2[6+parcourLigne]== ligne1[6+parcourColonne] ){ creerTableau(8,ligne2);parcourLigne=0;parcourColonne=0; } } } for(test1=0;test1<=2;test1++){ for(test2=0;test2<=2;test2++){ while( colonne1[2]!= ligne3[0] || ligne3[test1]==ligne1[test2] || ligne3[3+test1]==ligne1[3+test2] || ligne3[6+test1]== ligne1[6+test2] || ligne3[test1]==ligne2[test2] || ligne3[3+test1]==ligne2[3+test2] || ligne3[6+test1]== ligne2[6+test2]){ creerTableau(8,ligne3);test1=0;test2=0; } } }
k=0; for(z=0;z<=8;z++){ tableau[0][z]=ligne1[k]; tableau[z][0]=colonne1[k]; tableau[1][z]=ligne2[k]; tableau[2][z]=ligne3[k]; k++; } [/code]
pour le moment il n' y a que qq lignes; mais deja la quand je teste l'animation flash m'arrete une fois sur deux en me disant que ca prend trop de temps... et quand il ne m'arrete pas le script, ca marche...Mais voila, des que j'ajoute une ligne...il m'arrete le script tout le temps... donc mes questions: Comment faire un tel truc sans que flash ne m'arrete le script? est il possiblede faire un tel truc avec action script? en clair besoin de petits conseils....
merci...en esperant avoir ete suffisamment clair...
|
|
dimanche 11 septembre 2005 à 14:41:07 |
Re : remplir un tableau comme un sudoku...

Slagt
|
Oui, ça n'est pas très optimisé tout ça !
Premièrement :
ligne1= new Array();
creerTableau(ligne1);
function creerTableau(table)
{
for(z=0;z<=8;z++)
{
table[z]=0;
while(table[z]==10 or table[z]==0)
{
table[z]=Math.round(Math.random()*10);
}
for(j=0;j<z;j++)
{
while(table[z]==table[j] or table[z]==10 or table[z]==0 ){
j=0;
table[z]=Math.round(Math.random()*10);
}
}
}
Alors, quelques optimisations :
// -----
table[z]=0;
while(table[z]==10 or table[z]==0)
{
table[z]=Math.round(Math.random()*10);
}
// -----
Au final, ça prend un nombre aléatoire entre 1 et 9 compris.
Ce serait plus simple de faire ça :
// -----
table[z] = Math.round ( Math.random() * 8 ) + 1;
// -----
Ce qui t'intéresse c'est que le plus petit soit 1, et le plus grand
soit 9. Donc, tu prend un nombre entre 0 et 8. Et tu ajoute 1. Ca
fonctionne parfaitement, et ça évite une boucle while, déjà !
Pour la suite, tu vérifies s'il n'est pas en double, et si c'est le
cas, tu refais un aléatoire jusqu'à ce qu'il ne le soit plus.
On dois pouvoir se démerder pour ne pas avoir à faire cette vérification non ?
Regardons :
L'idée serait de faire un tableau avec tous les chiffres de 1 à 9. Il
n'y en a pas bcp donc tu n'est pas obligé de créer le tableau avec une
boucle for :
var chiffre = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Ensuite, tu fais une boucle for, avec 9 passages, et à chaque passage, tu vas prendre un chiffre du tableau :
for (var i=0; i<9; i++)
{
var a = Math.round( Math.random() * 8); // On prend un nombre entre 0 et 8 inclut
table[i] =
chiffre[a];
// On met dans table[i] la valeur de chiffre à l'index "a"
chiffre.splice (a, 1);
// Et on enlève l'index "a" du tableau chiffre
}
Et voilà, avec ça, tu as un tableau contenant tous les chiffres de 1 à
9 incluent, et aucun en double. Et tout ça avec 1 seule boucle for,
contre 2 boucles for et 2 boucles while avec ta méthode.
Il reste des choses à corriger dans la deuxième partie (beaucoup même
!) mais c'est déjà pas mal, et maintenant que tu as pigé le truc (je
pense quand même), tu devrais pouvoir optimiser tout seul, même rien
qu'un peu, la suite.
|
|
dimanche 11 septembre 2005 à 15:54:42 |
Re : remplir un tableau comme un sudoku...

8livier
|
c'est vrai que ce n'etait pas dutout optimisé, mais ta solution me pose un petit pb!...
var chiffre = [1, 2, 3, 4, 5, 6, 7, 8, 9]; for (var i=0; i<9; i++) { var a = Math.round( Math.random() * 8); // On prend un nombre entre 0 et 8 inclut table[i] = chiffre[a]; // On met dans table[i] la valeur de chiffre à l'index "a" chiffre.splice (a, 1); // Et on enlève l'index "a" du tableau chiffre }
dans cette boucle, si on tombe deux fois sur la meme valeur pour "a", alors table[i] n'a aucune valeur au deuxieme tour...
|
|
dimanche 11 septembre 2005 à 17:36:08 |
Re : remplir un tableau comme un sudoku...

Slagt
|
Oops, petite erreur d'étourderie en effet
En effet avec ce code, on peut tombé sur l'index 8, alors qu'il n'existe plus. Voilà la correction, c'est... tout bête !
for (var i=0; i<9; i++)
{
var a = Math.round( Math.random() * (chiffre.length-1));
table[i] =
chiffre[a];
// On met dans table[i] la valeur de chiffre à
l'index "a"
chiffre.splice (a, 1);
// Et on enlève
l'index "a" du tableau chiffre
}
Comme ça, si le tableau a 9 entrées, ça prendra un nombre entre 0 et 8
incluent, et s'il n'a que 4 entrées, ça prendra un nombre entre 0 et 3
incluent.
Désolé, c'est bête de faire une erreur d'étourderie quand on propose une solution...
|
|
Cette discussion est classée dans : tableau, colonne1, ligne1, ligne2, ligne3
Répondre à ce message
Sujets en rapport avec ce message
url dynamique ? [ par creaman ]
je voudrais faire un top5 de site en flash. mais j'ai un probleme je sais comment faire pour changer le nom des sites dans le tableau a partir de donn
action sur tableau.. [ par nirousse ]
Voila, je vous explique.j'ai un tableau nommé x.Pour exemple, on va dire qu'il contient les valeurs suivantes : x=[3,2,1].Moi, en appelant 1 fonction,
txt vers tableau [ par Eren76 ]
Dans un programme en flash 5, j'ai un fichier txt avec une liste de données du type :&donnee1=KABOUL&&donnee2=PRETORIA&&donnee3=TIRANA&Je les récupère
txt vers tableau [ par Eren76 ]
Dans un programme en flash 5, j'ai un fichier txt avec une liste de données du type :&donnee1=KABOUL&&donnee2=PRETORIA&&donnee3=TIRANA&Je les récupère
créer un tableau [ par ihen ]
Salut,J'ai fait un jeu et j'aimerais faire un tableau qui effectue un classement des 10 meilleurs.mes variables à integrer au tableau sont pseudo et t
PROBLEME DE MENU DYNAMIQUE [ par zikaphil ]
J'ai un gros probleme, je souhaite créer un menu dynamique à partir d'un fichier XML, tout marchait correctement jusqu'a ce que je veuille y insérer d
catalogue énorme ! [ par sherka68 ]
Bonjour à tous,Je veux faire un catalogue avec Flash.La base exportée en XML contient environ 6000 références.Lorsque je charge le fichier XML et que
ASP et Flash [ par RayusgnaL ]
Bonjour,Voilà je viens demander de l'aide parce que je ne connais pas vraiment Flash et on m'a demandé de modifier un .fla de manière à le rendre dyna
les tableau [ par kodiask ]
kelkun peut maider jarrive pa a afficher les donnée d'un tableau parce que je comprend pas le fonctionnement ac i++ / i+++
Tableau de donnees [ par Ric38 ]
Salut,certains ont peut etre vu l animation sur la saison actuelle de Formule 1 disponible dans la categorie sports de Yahoo France.J aimerais reprodu
Livres en rapport
|
Derniers Blogs
MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|