CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Combinaisons Possible dans un tableau

Archipel
Archipel
Niveau 5
30 juillet 2007 à 20:27:35

bonjour a tous,

J´ai de gros problemes avec les algorythmes qui me donnent des maux de tetes.

J´ai un tableau t bidimensionnel
t[a][b]

a>=0 et 0<=b<=20

Je souhaiterai avoir un tableau avec la liste des combinaisons possibles tels que :
Pour chaque a : il existe un b (c´est sur, je verifie ca juste avant dans le code)
2 a differents ne peuvent pas avoir le meme b

Un exemple pour clarifier :
t[0][3]
t[0][6]
t[1][0]
t[2][1]
t[2][6]

la liste des combinaisons serait
ListeCombinaisons[0] = [3,0,1]
ListeCombinaisons[1] = [3,0,6]
ListeCombinaisons[2] = [6,0,1]
ListeCombinaisons[3] = [6,0,6] -> impossible car il y a deux fois 6

Je sais tester la valabilité d´une combinaison (si il n´y a pas deux fois la meme entrée) mais pour creer la liste des combinaisons alors la :ouch:
Je vient de finir ma premiere donc je ne verrai les algorythmes que l´année prochaine en sp math.

Aussi j´ai chercher sur google mais j´ai pas trouvé ce dont j´avais besoin (parmi les quelques algorythmes que j´arrivais un peu a comprendre)

Bonne chance a quiconque veut m´aider :)

Lapintade
Lapintade
Niveau 30
30 juillet 2007 à 21:21:57

J´avoue ne rien avoir compris.

Pour resourdre ton probleme, il faudrait deja que tu puisse l´enoncer clairement.

Ensuite un conseil : Pour resoudre un probleme complexe, decoupe les en plusieurs problemes simples.

Archipel
Archipel
Niveau 5
30 juillet 2007 à 22:36:02

J´avoue que quand je me relis, je ne comprends rien non plus xD

mais bon, je vais essayer de simplifier :

Je suis en train de programmer une IA pour mon jeu de cartes.
Avant de jouer un sort, l´IA determine les cibles pour chaque effet du sort.

Ainsi si le sort comporte 3 effets A B et C
(je les aient appelé ABC pour simplifier, en vrai c´est 0,1 et 2)
pour l´effet A, il a trouver 3 cibles potentielles : 2 4 et 9
pour l´effet B, ------------ 1 cible possible : 9
pour l´effet C, ------------ 2 cibles possibles : 5 et 9

ce qui fait dans mon tableau t de tout a l´heure
t[A][2]; t[A][4]; t[A][9]; t[B][9]; t[C][5]; t[C][9];

ou alors un tableau comme ca (c´est comme vous voulez)
t[A][2,4,9]; t[B][9]; t[C][5,9]

------------
C´est la ou l´algorythme qui creer la liste des combinaisons possible intervient :
Pour chaque effet (A,B et C), il choisit une cible :
combinaison 1 = A:2, B:9, C:5
combinaison 2 = A:2, B:9, C:9
...
------------

Pour suivre le conseil de lapintade et faire vraiment plus simple, (je me debrouillerai aprés)
Je vais prendre un exemple qui n´a rien a voir :

J´ai x balles (entre 1 et 6) dans mon revolver en face de moi j´ai 10 personnes.
Je ne tire pas 2 fois sur la meme personne.

Si j´ai 3 balles,
je peux tuer la personne 1 puis la 2 puis la 3
mais aussi la 2 puis la 1 puis la 4
mais aussi la 6, la 9 et la 5
Dans tout les cas, je dois utiliser toutes mes balles

Je veux donc un tableau qui liste toutes les combinaisons, dans l´exemple :
[1,2,3]
[2,1,4]
[6,9,5]

J´espere avoir été clair ce qui n´est pas toujours mon fort d´autant plus que je suis fatigué...

Bonne nuit a tous

Lapintade
Lapintade
Niveau 30
30 juillet 2007 à 22:43:09

Pour eviter de choisir deux fois la meme "cible", il faut retirer les cibles choisis de ton tableau de choix.

Par exemple si t´as 10 cibles :

0 1 2 3 4 5 6 7 8 9

Tu dois en tirer 6.

Tu en choisi une au hasard, par exemple 5. Tu la retire de la liste.

Il reste

0 1 2 3 4 6 7 8 9

Tu en choisi une autre, par exemple 2 et tu la retire de la liste et ainsi de suite.

-----------------------------

Sinon autre methode si tu veux garder une liste unique de depart.

Tu choisi une cible. Par exemple 5.

Ensuite tu tire a nouveau des cibles et pour chaque tu dis : "Tantque cible pas deja selectionné, en tirer une au hasard"
(en gros tu verifie que la cible est pas deja dans ta selection, si oui, tu retire au hasard, jusqu´a en trouver une qu´est pas dans ton tirage).

Bref y a plein de facon de resoudre ca. L´important c´est d´etre clair sur ce que tu veux et la facon dont sont stocké tes infos.

Le piege c´est de pas raisonner et d´essayer de toute de suite trouver une solution technique genre "bon je prends un tableau a 2 dimensions ... et je mets quoi dedans ? euh ...."

Archipel
Archipel
Niveau 5
31 juillet 2007 à 09:34:36

Non, ce n´est toujours pas ca...
je vais tenter une enieme explication :)

pour reprendre l´exemple de tout a l´heure : J´ai x balles (entre 1 et 6) dans mon revolver en face de moi j´ai 10 personnes. (0 1 2 3 4 5 6 7 8 9)

Pour moi, la liste de toutes les combinaisons possibles serait :
[0,1,2] mais aussi [0,2,1],[1,0,2]...
[0,1,3]... jusqu´a [7,8,9]

en gros toutes les combinaisons possible (je me répete) donc pas de selection au hasard !

"Le piege c´est de pas raisonner et d´essayer de toute de suite trouver une solution technique genre "bon je prends un tableau a 2 dimensions ... et je mets quoi dedans ? euh ....""
-> tu me conseilles quoi ?

godrik
godrik
Niveau 30
31 juillet 2007 à 10:47:10

ah, j´ai compris.
tu joue a un loto bizarre, tu dois cocher des un numéros sur chaque ligne.
Mais sur chaque ligne, il n´y a pas les meme numeros.
sachant qu´il n´y a qu´un numero gagnant, ca ne sert a rien de cocher le meme numero sur deux lignes différentes.

Tu cherches a savoir combien il y a de facon de cocher les numéros, c´est a dire le nombre de grille différente.

Posons: la taille de la ligne 1 est L1, la taille de la ligne 2 est L2... et il y a k lignes
il y a moins de BS=L1*L2*L3*...*Lk combinaisons.
Mais dans toutes ses combinaisons, toutes ne sont pas valides. Le nombres de combinaisons a retirer dépends de la structure de la grille. Il n´y a pas de formules closes qui te la donnes. Par contre il est facile d´ecrire un algorithme qui les énumères.

Finalement, j´ai cru comprendre que ton probleme de base est un probleme d´intelligence artificielle.
Je me permet de rappeler le nombre de combinaison augmente rapidement. L´énumération des possibles n´est donc pas une méthode qui passe a l´echelle. C´est a dire qu´a chaque fois que tu vas rajouter une ligne, l´espace des possible va etre multiplier!

Archipel
Archipel
Niveau 5
31 juillet 2007 à 11:19:46

C´est exactement ca godrik ;) , or je ne veux pas le nombre de combinaisons mais les combinaisons elles-memes !

j´ai fait des recherches plus approfondi sur internet et il me semble qu´il faut que je me serve de la récursivite (une fonction qui s´appelle elle meme) :ouch:

"L´énumération des possibles n´est donc pas une méthode qui passe a l´echelle."
-> je sais mais il n´y aura en moyenne que 2-3 lignes dans mon loto

je vais continuer mes recherches en attendant qu´un pro de la recusivité m´apporte une réponse :)

godrik
godrik
Niveau 30
31 juillet 2007 à 11:38:04

en effet, si tu n´as que 2, 3 lignes ca va aller ! :)

En effet, la récursivité ira bien a ton probleme. Mais on va te laisser le faire et te guider plutot, comme ca tu apprendras! :)
L´idée est de dire "quelles sont les combinaisons possibles sachant qu´il me reste 2 lignes a traiter et que j´ai pris les décisions TrucBidule avant ?"

Archipel
Archipel
Niveau 5
31 juillet 2007 à 11:58:15

Je voulais qu´on me donne le code directement :snif:

Mais bon, je pense que c´est mieux comme ca :) , meme si je pense que je n´en aurai besoin qu´une fois dans mon jeu.

J´y reflechirais cette aprés-midi, je vous préciserez quand je coince.

Lapintade
Lapintade
Niveau 30
31 juillet 2007 à 15:55:08

T´apprendrai rien si on te donnait le code.

Par contre ce qui est TRES important, c´est de d´abord trouver ton algo (en ecrivant sur une feuille de papier) et ensuite tu le programme.

Comme je dis plus haut, t´as aucune chance de trouver la solution a ton probleme si tu essaie de la programmer en meme temps que tu y reflechi.

Ton truc c´est de l´algorithmique, le plus dur se passe avant de programmer, la recherche de l´algo.

Archipel
Archipel
Niveau 5
31 juillet 2007 à 20:57:22

C´est bon, j´ai réussi ! :)
(ca fait un moment que j´ai réussi mais j´arrivais plus a poster...

:merci: a vous pour vos petits conseils

Pour ce qui veulent savoir comment j´ai fait (c´est du flash) :

_global.d = 0;
_global.listecombinaisons = new Array();

function combinaisons(tableau:Array, etape:Number, combi_en_cours:Array) {
if (etape<tableau.length) {
for (var index = 0; index<tableau[etape].length; index++) {
if (tableau[etape][index] != null) {
combi_en_cours.splice(etape, tableau.length);
combi_en_cours.push(index);
combinaisons(tableau, etape+1, combi_en_cours);
}
}
} else {
_global.listecombinaisons[_global.d++] = combi_en_cours.slice();
}
}

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment