Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Полный перебор символов (https://javascript.ru/forum/misc/73637-polnyjj-perebor-simvolov.html)

j0hnik 02.05.2018 16:40

Aetae,
А если ему потом понадобится то же самое из 6 или более символов уже пирамида упавшая на бок получится.

чем жуток код рони? :(

VSEM-DOBRA 02.05.2018 16:43

рони,
Спасибо работает.

Aetae,
мне не для препода, хучу как раз сделать что-то типа брутфорса строки.

j0hnik,
Тоже думал про циклы но не получилось

j0hnik 02.05.2018 16:56

VSEM-DOBRA,
все проще простого

var arr = ['A','B','C','D','E'], a =[], x=[];

for(var k = 0; k<arr.length; k++){
	a[0] = arr[k];
	for(var l = 0; l<arr.length; l++){
		a[1] = arr[l];
		for(var m = 0; m<arr.length; m++){
			a[2] = arr[m];
			for(var n = 0; n<arr.length; n++){
				a[3] = arr[n];
				x.push(a.join(''));
			}
		}
	}
}
console.log(x);

j0hnik 02.05.2018 17:02

VSEM-DOBRA,
брутфорс ваш будет быстрей работать не со строками, а с массивом.
и лучше не пушить, а проверять на лету и успешно забывать если не тот.

1) берем вашу строку делаем из нее массив,
2) генерируем с помощью цикла новый массив сверяем его с текущем, если не подходит, успешно забываем. если подходит останавливаем цикл.

рони 02.05.2018 17:08

:write: шифровка из центра ...
<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),
            a = k - b.length;
        if (0 > a) {
            break;
        }
        0 < a && (b = Array(++a).join("0") + b);
        for (var h = "", d = 0; d < k; d++) {
            a = parseInt(b[d], c), h += e[a];
        }
        f.push(h);
    }
    return f;
};
document.write(fn(arr, 4).join('<br>'));
  </script>

VSEM-DOBRA 02.05.2018 17:47

рони,
Спасибо
j0hnik,
Да, вы правы, буду над этим работать.

рони 02.05.2018 18:08

:) :write:
<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")].reduce((a,d) => (d = parseInt(d, c), a + e[d]),"");
        f.push(b);
    }
    return f;
};
document.write(fn(arr, 4).join('<br>'));
  </script>

j0hnik 02.05.2018 18:21

<script>
var arr = ['A','B','C','D','E'];
var x = 0;
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")].reduce((a,d) => {
        	x++;
        	return (d = parseInt(d, c), a + e[d]);
        },"");
        f.push(b);
    }
    console.log(x);
    return f;

}
document.write(fn(arr, 4).join('<br>'));


</script>


Рони, не многовато ли итераций??
как то можно ведь оптимизировать?

рони 02.05.2018 18:30

j0hnik,
один цикл, куда ещё оптимальней?
как преобразовать строку "0000" в "AAAA" можешь предложить своё решение, знаю только replace, не уверен что это оптимально.

j0hnik 02.05.2018 18:33

рони,
да цикл то один, а циклические методы не считаете?


Часовой пояс GMT +3, время: 14:30.