[..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

[..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#1

Message par A2Energie »

Bonjour a vous amis autoitiens, :D

Je vous propose un petit défit intellectuel. :idea:
J'ai plus trop de neurones en ce moment, :arrow:

Le but est de lister les possibilités incrémentales d'un tableau 1Dimension.
par exemple :
$Retour = ""
$Temp = ""
Dim $tableau[5] = [4 _
   , "1" _
   , "2" _
   , "3" _
   , "4" _
   ]
; La valeur $Retour doit indiquer les possibilités :
; (l'ordre n'a pas d'importance)
; (le tableau aura un nombre important de valeurs)
; 1
; 12
; 123
; 124
; 13
; 134
; 14
; 2
; 23
; 234
; 24
; 3
; 34
; 4
For $i = 1 To $tableau[0]
     $Temp = $tableau[$i]
   For $ii = $i To $tableau[0]
       If $tableau[$i] <> $tableau[$ii] Then $Temp &= $tableau[$ii]
     For $iii = $ii To $tableau[0]
       If $tableau[$ii] <> $tableau[$iii] Then $Temp &= $tableau[$iii]
       $Retour &= @CRLF & $Temp
     Next
   Next
Next
MsgBox(0, "", $Retour)
Exit
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#2

Message par A2Energie »

Hum hum....

Peut être une nouvelle piste qui me semble plus fiable :
For $i = 1 To $tableau[0]
   $Temp = $tableau[$i]
   For $ii = $i To $tableau[0]
     If $tableau[$i] = $tableau[$ii] Then ContinueLoop
     $Temp &= $tableau[$ii]
   Next
   For $ii = 1 To StringLen($Temp)
     $Retour &= @CRLF & StringLeft($Temp, $ii)
   Next
Next
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D  

#3

Message par jchd »

Code : Tout sélectionner

#include <Array.au3>

Local $tableau = [ _
	"1", _
	"2", _
	"3", _
	"4", _
	"", "", "" _
]
Local $retour = _ArrayCombinations($tableau, Int((UBound($tableau) / 2) + 1))
_ArrayDelete($retour, 0)
$retour = _ArrayUnique($retour)
_ArrayDelete($retour, 0)
_ArraySort($retour)
_ArrayDisplay($retour)
On ajoute N-1 chaînes vides au tableau d'origine de taille N, et zou !

Plutôt que "possibilités incrémentales" on parle de combinaisons.

(L'éditeur m'en veut aujourd'hui... )
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#4

Message par A2Energie »

Arg... :oops:

J'y ais passé tellement de temps, que je n'ose pas le dire...

J'vais prendre le temps de décortiquer tout ceci, pour mieux comprendre,
Merci pour ta réponse jchd :mrgreen: :bisou:
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#5

Message par jchd »

La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#6

Message par A2Energie »

Waa...

J'avais dis au début que je n'avais plus trop de neurones en ce moment,
Mais là j'viens de perdre ceux qu'il me restait :lol: :lol:
C'est sure qu'il faut être bien matheux pour savoir que la combinatoire existe.

Bon Wiki m'a un peu aidé à comprendre les grosses lignes et le décorticage de _ArrayCombinations commence a porter ces fruits.
En tout cas, je te remercie pour ton aide. J'pense pas que j'aurais pu y arriver facilement seul.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#7

Message par jchd »

Bien matheux ? Pas tant que ça que je sache : arrangements et permutations sont étudiés en seconde ou au pire en première, avec les probabilités.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
A2Energie
Niveau 5
Niveau 5
Messages : 140
Enregistré le : ven. 15 nov. 2013 20:22
Status : Hors ligne

Re: [..] Problème de logique, lister les possibilités incrémentales d'un tableau 1D

#8

Message par A2Energie »

Salut, :D

Bon après une pause intellectuelle j'ai trouvé une solution à base de binaire.
L'histoire combinatoire était trop compliquée pour moi. :mrgreen:
$Retour = ""
$Temp = ""
Dim $tableau = [4 _
   , "1" _
   , "2" _
   , "3" _
   , "4" _
   ]
Dim $tableauBinaire[UBound($tableau)]
While 1
   For $i = 1 To $tableau[0]
     If $tableauBinaire[$i] = 0 Then ExitLoop
     $tableauBinaire[$i] = 0
   Next
   If $i > $tableau[0] Then ExitLoop
   $tableauBinaire[$i] = 1
   $Temp = ""
   For $i = 1 To $tableau[0]
     If $tableauBinaire[$i] = 1 Then $Temp &= $tableau[$i]
   Next
   $Retour &= @CRLF & $Temp
WEnd
MsgBox(0, "", $Retour)
Exit
Répondre