Вывод 4-х значных комбинаций

165
13 августа 2018, 02:30

Пытаюсь реализовать вывод 4-х значных значений имея набор символов : $a = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');

Так как тут 36 символов, а знаков 4, то комбинаций должно выйти 1679616 (36^4 степени) Мне нужно в таком формате: 1111 1112 1113 .... 111z, далее, после 111z идет: 1121 1122 1123 .... 112z и т.д. Как написать подобный функционал? Спасибо!

Answer 1

Можно сделать свою реализацию счётчика с переносом: символ в последнем разряде заменяется на последующий, пока это возможно. Если символ 'z' (или индекс 35), то он сбрасывается в '1' (или индекс 0) и инкрементируется второй справа символ (если возможно, иначе сбрасываем разряд и идём дальше и т.д.).

Можно и просто сделать цикл от 0 до 1679615 и представлять счётчик цикла в 36-разрядной системе счисления.

Answer 2

Нууууу.... Как вариант, а там может быть кто-то и годнее предложит. Оптимизацией займетесь сами если она вам нужна.

function gen_comb(&$last_key, &$alphabet = array(), $a = 0, $b = 0, $c = 0, $d = 0) {
    $GEN = array($a,$b,$c,$d);
    //  RETURN
    var_dump($alphabet[$GEN[0]].$alphabet[$GEN[1]].$alphabet[$GEN[2]].$alphabet[$GEN[3]]);
    //  NEW
    $GEN[3]++;
    for ($i=3; $i >= 1; $i--) { 
        if ($GEN[$i] > $last_key) {
            $GEN[$i] = 0;
            $GEN[$i-1]++;
        }
    }
    //  REPEAT?
    if ($GEN[0] > $last_key) {
        return;
    }else{
        gen_comb($last_key, $alphabet, $GEN[0], $GEN[1], $GEN[2], $GEN[3]);
    }
}
$array = array(1,2,3,4,5,6);
end($array);
gen_comb(key($array), $array);
READ ALSO
Как работает конструкция (в описании) в php?

Как работает конструкция (в описании) в php?

В классе ORMe есть метод Read:

170
Объединение ключей массива по группам

Объединение ключей массива по группам

Имеется массив полей формы, где каждое поле представлено в виде уникального подмассива:

185
PHP сбрасывается число в кэше

PHP сбрасывается число в кэше

Сделал элементарный подсчёт просмотров страниц:

191
CMake не видит компилятора

CMake не видит компилятора

Поставил CMake (без CLang), добавил в переменную path путь к cmake-39

202