JS. La fonction kCombinaisons retourne les combinaisons sans doublons
par
, 17/11/2019 à 21h25 (1305 Affichages)
Cette fonction utilise la fonction kGetType du fichier dvjhUtilities et elle sera ajoutée dans une prochaine version de ce fichier.
kCombinaisons prend deux paramètres : un array dans le paramètre ar, et un nombre entier dans le paramètre n.
- Si n < 2, kCombinaisons retourne toutes les possibilités de combinaisons.
- Si n > 2 et n < ar.length, kCombinaisons retourne les combinaisons de n éléments.
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 /** * Retourne les combinaisons sans doublons. * Si n < 2, retourne toutes les possibilités * Si n > 2 et n < ar.length retourne les * combinaisons de n éléments. * @param {array} ar * @param {number} n */ const kCombinaisons = (ar, n) => { n = parseInt(n, 10); if (kGetType(ar) === 'array' && kGetType(n) === 'number' && ar.length >= 1) { const kFn = (n, ar_s, ar_c, ar_t) => { if (n == 0) { if (ar_c.length > 0) { ar_t[ar_t.length] = ar_c; } return; } for (let j = 0; j < ar_s.length; j++) { kFn(n - 1, ar_s.slice(j + 1), ar_c.concat(ar_s[j]), ar_t); } return; }; let ar_t = []; for (var i = 0; i < ar.length; i++) { kFn(i, ar, [], ar_t); } ar_t.push(ar); if (n >= 2 && n < ar.length) { let result = ar_t.filter(item => { if (item.length === n) { return item; } }); return result; } else { return ar_t; } } else { throw `Erreur dans les paramètres`; } };
Exemple
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 console.log(kCombinaisons(['bou', 'bo', 'ba', 'bi', 'bu'], 3)); /* 0: (3) ["bou", "bo", "ba"] 1: (3) ["bou", "bo", "bi"] 2: (3) ["bou", "bo", "bu"] 3: (3) ["bou", "ba", "bi"] 4: (3) ["bou", "ba", "bu"] 5: (3) ["bou", "bi", "bu"] 6: (3) ["bo", "ba", "bi"] 7: (3) ["bo", "ba", "bu"] 8: (3) ["bo", "bi", "bu"] 9: (3) ["ba", "bi", "bu"] */
Licence Creative Commons Attribution 2.0 Belgique