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
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|