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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SIMPLE CHARGEMENTSIMPLE CHARGEMENT par carton99
Cliquez pour lire la suite par carton99
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|