Алгоритм генерации паттернов Android на PHP

У меня есть случайное целое число (6 цифр, например 568215), и я хочу сгенерировать из него действительный путь для шаблона Android. Предположим, что:
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
Как вы знаете, например, 4-1-3-6 недействителен, потому что строка 1-3 проходит через ключ 2, который мы не можем перейти к 3, или, в другом примере, мы не можем выбрать узел дважды, поэтому в качестве примера 546512 недействителен, потому что 5 дублируется и многие другие пути, подобные этому. Таким образом, эти пути недействительны:
(11, 22, 33, 44, 55, 66, 77, 88, 99, 13, 16, 17, 18, 19, 27, 28, 29, 34, 37, 38, 39, 46, 49, 67, 79 )

Я написал функцию, которая работает хорошо, но ее проблема в том, что я не знаю, как избежать создания дублирующихся узлов.

Here is what I've tried:

$notValidWalk = array(11, 22, 33, 44, 55, 66, 77, 88, 99, 13, 16, 17, 18, 19, 27, 28, 29, 34, 37, 38, 39, 46, 49, 67, 79);
$key = 562458;

function makeValidWalks($key, $notValidWalk)
{
    $array = array_map('intval', str_split($key));

    $section1 = false;
    $section2 = false;
    $section3 = false;
    $section4 = false;
    $section5 = false;


    while ($section1 == false) {
        if ($array[0] == 9 && $array[1] == 9) {
            $array[0] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if ($array[0] == 0) {
            $array[0] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (in_array($array[0] . $array[1], $notValidWalk) || in_array($array[1] . $array[0], $notValidWalk)) {
            $section1 = false;
            $tmp = ($array[0] . $array[1]) + 1;
            $key = $tmp . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (!in_array($array[0] . $array[1], $notValidWalk) && !in_array($array[1] . $array[0], $notValidWalk)) {
            $section1 = true;
        }
    }



    while ($section2 == false) {
        if ($array[1] == 9 && $array[2] == 9) {
            $array[1] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if ($array[1] == 0) {
            $array[1] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (in_array($array[1] . $array[2], $notValidWalk) || in_array($array[2] . $array[1], $notValidWalk)) {
            $section2 = false;
            $tmp = ($array[1] . $array[2]) + 1;
            $key = $array[0] . $tmp . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (!in_array($array[1] . $array[2], $notValidWalk) && !in_array($array[2] . $array[1], $notValidWalk)) {
            $section2 = true;
        }
    }


    while ($section3 == false) {
        if ($array[2] == 9 && $array[3] == 9) {
            $array[2] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if ($array[2] == 0) {
            $array[2] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (in_array($array[2] . $array[3], $notValidWalk) || in_array($array[3] . $array[2], $notValidWalk)) {
            $section3 = false;
            $tmp = ($array[2] . $array[3]) + 1;
            $key = $array[0] . $array[1] . $tmp . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (!in_array($array[2] . $array[3], $notValidWalk) && !in_array($array[3] . $array[2], $notValidWalk)) {
            $section3 = true;
        }
    }


    while ($section4 == false) {
        if ($array[3] == 9 && $array[4] == 9) {
            $array[3] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if ($array[3] == 0) {
            $array[3] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (in_array($array[3] . $array[4], $notValidWalk) || in_array($array[4] . $array[3], $notValidWalk)) {
            $section4 = false;
            $tmp = ($array[3] . $array[4]) + 1;
            $key = $array[0] . $array[1] . $array[2] . $tmp . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (!in_array($array[3] . $array[4], $notValidWalk) && !in_array($array[4] . $array[3], $notValidWalk)) {
            $section4 = true;
        }
    }


    while ($section5 == false) {
        if ($array[4] == 9 && $array[5] == 9) {
            $array[4] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if ($array[4] == 0) {
            $array[4] = 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];
            $array = array_map('intval', str_split($key));
        }
        if (in_array($array[4] . $array[5], $notValidWalk) || in_array($array[5] . $array[4], $notValidWalk)) {
            $section5 = false;
            $tmp = ($array[4] . $array[5]) + 1;
            $key = $array[0] . $array[1] . $array[2] . $array[3] . $tmp;
            $array = array_map('intval', str_split($key));
        }
        if (!in_array($array[4] . $array[5], $notValidWalk) && !in_array($array[5] . $array[4], $notValidWalk)) {
            $section5 = true;
        }
    }
    return $array = $array[0] . $array[1] . $array[2] . $array[3] . $array[4] . $array[5];

}

Вы хотите создать действительную прогулку или проверить, действительна прогулка или нет?

Chin Leung 17.05.2018 16:28

Я хочу создать действительную базу прогулок из случайных 6-значных чисел.

Eмαd 17.05.2018 16:30

Итак, вы хотите, чтобы он генерировал действительную прогулку на основе 6 цифр, которые вы передаете функции?

Chin Leung 17.05.2018 16:50

Да, точно....

Eмαd 17.05.2018 17:01

Прогулка не обязательно будет шестизначной, верно? Например, если передать ему 546512, чего вы ожидаете в результате?

Chin Leung 17.05.2018 17:09

Да это правильно. но я ожидаю, что последний ключ будет состоять не менее чем из 4 цифр, потому что я думаю, что менее 4 узлов легко угадать. поэтому для 546512 я ожидаю, что он изменится на число, которое следует правилам для шаблона Android и не имеет повторяющихся цифр . (моя функция работает хорошо, но в некоторых случаях ее алгоритм генерирует повторяющиеся цифры.)

Eмαd 17.05.2018 17:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
6
66
0

Другие вопросы по теме