j0hnik,
<script> var arr = ['A','B','C','D','E']; function fn(e, k) { for (var f = [], c = e.length, g = 0;; g++) { var b = g.toString(c); if (b.length > k) break; b = b.padStart(k,"0").replace(/./g, d => (d = parseInt(d, c),e[d])); f.push(b); } return f; }; document.write(fn(arr, 4).join('<br>')); </script> |
toString --- поэтому длина массива не более 36, на всякий ...
|
рони,
Наверное есть более оптимальный алгоритм d = parseInt(d, c) - вот это не гуд вдруг var arr = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&`.split(''); |
рони,
Я в зал, приду напишу что нибудь полезное (если придумаю :lol: ) |
Цитата:
Цитата:
|
Можно было бы ограничиться рекурсивной переделкой варианта j0hnik:
function generate(arr, i, value, result){ if(!result){ return generate(arr, i, '', []); } if(!i--) { return result.push(value); }; for(var k = 0; k < arr.length; k++){ generate(arr, i, value + arr[k], result); } return result } console.log(generate(['A','B','C','D','E'], 4)) Но на самом деле тут просто нужно добавить капельку математики: function generate(arr, n){ var length = arr.length, result = new Array(Math.pow(length, n)); for(var i = result.length, temp = new Array(n), j; i--;){ j = n; while(j--){ temp[j] = arr[i / Math.pow(length, j) % length | 0]; } result[i] = temp.join(''); } return result } console.log(generate(['A','B','C','D','E'], 4)); |
Aetae,
j0hnik, рони, спасибо вам что помогаете, взял вот этот массив, var arr = `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&`.split(''); попробовал подбирать на лету, потому что массив засоряет память до 6 символов в принципе реально подбирается. как думаете реально до 8 символов? |
Цитата:
|
рони,
я и говорю что от этого уже отошел, теперь во время уперся =( |
VSEM-DOBRA,
времени все равно много займет, зависит от проца и самого пароля, тут еще есть куда ускоряться! |
Часовой пояс GMT +3, время: 04:21. |