aNNiPAk, по сути надо разработать общий скрипт для вариантов. а именно для твоего случая, за то время что здесь идёт обсуждение, можно было бы уже на бумажке все перебрать руками)
Чтобы легче было, можете этот пароль ptayyjp/p2k7 с оригиналом сравнивать(PTaYyJp/p2k7). Код reaper, не генерирует оригинал(PTaYyJp/p2k7) вот этого ptayyjp/p2k7 , поэтому тема еще актуальна. Хотя он ближе всех подошел к пьедесталу
Понял, почему мой вариант не до конца подходит. Там интервал между символами ещё надо учитывать. Короче надо подумать и переделать алгоритм. Ну или нагуглить какой-нибудь существующий.
aNNiPAk, набыдлокодил что то ))
$original = 'ptayyjp/p2k7';
#$original = 'qw3er4t';
$array = str_split($original, 2);
if ((sizeof($array) % 2) != 0) {
$array[] = '';
}
function pr_start($str) {
if ($str == '') {
return $str;
} else {
$res = array();
$res[] = strtolower($str);
$res[] = strtoupper($str);
if (strlen($str) > 1) {
$pice = array();
$pice[] = $str[0];
$pice[] = $str[1];
$res[] = strtoupper($pice[0]) . strtolower($pice[1]);
$res[] = strtolower($pice[0]) . strtoupper($pice[1]);
}
return array_unique($res);
}
}
function pr_merge($a, $b) {
if (strlen($a[0]) < 3) {
$a = pr_start($a);
$b = pr_start($b);
}
if ($b == '') {
return $a;
}
$res = array();
foreach ($a as $c) {
foreach ($b as $d) {
$res[] = $c . $d;
}
}
return array_unique($res);
}
function run($array) {
$cnt = sizeof($array);
$res = array();
$rs = array();
$i = 0;
$a = 0;
$b = 1;
while ($i < $cnt / 2) {
$res[] = array_unique(pr_merge($array[$a], $array[$b]));
$i++; $a+=2; $b+=2;
}
if (sizeof($res) >= 2) {
run($res);
} else {
return print_r($res[0]);
#return $res[0];
}
}
$rs = run($array);
echo $rs;
Koenig, А в один столбик, и только пароли, без номера по счету-можно?
aNNiPAk, хз, по другому не выводится, хрень какая то, если возвращаю массив, то пусто, рекурсия мать её...
но можно другим велосипедом превратить Гг
reaper, сам писал
смысл алгоритма такой, делим строку на массив по два символа (1 символ если нечетное количество крайний элемент массива)
потом маленькими группами по два символа собираем все возможные вариации из этих символов
потом просто результат (массив) от перебора собираем в более длинные строки
как то так