Создайте карту массивов, используя существующий массив номеров, при соблюдении условий / правил в PHP - PullRequest
0 голосов
/ 28 апреля 2020

ПРИМЕЧАНИЕ - Пожалуйста, сначала прочтите информацию, поскольку она содержит важную информацию для понимания проблемы.

Правила →

• Есть 9 столбцов (C1, C2, C3, C4, C5, C6, C7, C8, C9) [ Макс. Столбцы будут 9 ]

• Количество рядов может варьироваться от 3,6,9,12,15,18 (макс.) В этом случае количество рядов должно быть 12

количество рядов = количество билетов (максимально допустимое 6) x рядов за билет (максимально допустимое 3) . Таким образом, Макс. Рядов может быть 18

• Для каждого Строка требуется заполнить 4 пробела и 5. с числами

• Необходимо использовать все числа, доступные в массиве столбцов

• Эта конфигурация должна создать матрицу из 9 столбцов & 12 строк ( 3 x 4 билета ), что составляет 108 МАТРИЧНЫХ БЛОКОВ , где можно заполнить только максимум 60 номеров из 108 доступных блоков случайным образом с соблюдением вышеуказанных условий 100%.

• Числа в столбце должны быть упорядочены / отсортированы в ПОСЛЕДУЮЩИЙ ЗАКАЗ (Для кодирования логи c цель , как только номер будет присвоен новому MATRIX MAP , используйте array_shift () или unset () номер, чтобы избежать повторения

Пример - Строка 1 и Столбец 1 должен сгенерировать MATRIX BLOCK - R1C1

Строка 3 * 1 068 * и Столбец 7 должен генерировать МАТРИЧНЫЙ БЛОК - R3C7

Матричный блок также может называться Matrix Cell для вашего удобства (при необходимости)

ОСНОВНОЙ НАБОР Массива с номерами

array( 
    "C1"=> array( 1, 2, 3, 5, 6, 7, 9 ), //7 Numbers
    "C2"=> array( 13, 14, 15, 17, 18, 19 ), //6 Numbers
    "C3"=> array( 21, 22, 23, 24, 25, 26, 30 ), //7 Numbers
    "C4"=> array( 31, 33, 34, 36, 37, 38, 39 ), //7 Numbers
    "C5"=> array( 41, 42, 46, 47, 48, 49, 50 ), //7 Numbers
    "C6"=> array( 51, 52, 53, 54, 55, 57, 58 ), //7 Numbers
    "C7"=> array( 61, 62, 64, 65, 69, 70 ), //6 Numbers
    "C8"=> array( 71, 74, 75, 76, 77, 78 ), //6 Numbers
    "C9"=> array( 82, 83, 85, 87, 88, 89, 90 ) //7 Numbers
    );

Приведенный выше массив содержит 60 чисел для заполнения из 108 MATRIX BLOCK / CELL , что соответствует условию, что для FULL BLOCK , содержащего 4 МИНИ-БЛОКА С 3 СТРОКАМИ (макс. разрешено) КАЖДЫЙ

Мне удалось создать это без каких-либо проблем, отвечающих всем условиям Столбцы

Мой Матрица размещения Массив будет выглядеть как

array(
    "R1"=> array(
        "C1"=> true, // Means that MATRIX BLOCK R1C1 will be NOT EMPTY
        "C2"=> false, // Means that MATRIX BLOCK R1C2 will be EMPTY
        "C3"=> true,
        "C4"=> false,
        "C5"=> true,
        "C6"=> false,
        "C7"=> true,
        "C8"=> true,
        "C9"=> false
    ),
    "R2"=> array(
        "C1"=> false,
        "C2"=> true,
        "C3"=> false,
        "C4"=> true,
        "C5"=> false,
        "C6"=> true,
        "C7"=> true,
        "C8"=> true,
        "C9"=> false
    ),
    "R3"=> array(
        "C1"=> true,
        "C2"=> true,
        "C3"=> true,
        "C4"=> true,
        "C5"=> false,
        "C6"=> false,
        "C7"=> false,
        "C8"=> false,
        "C9"=> true
    ),
    "R4"=> array(
        "C1"=> true,
        "C2"=> true,
        "C3"=> true,
        "C4"=> false,
        "C5"=> true,
        "C6"=> true,
        "C7"=> false,
        "C8"=> false,
        "C9"=> false
    ),
    "R5"=> array(
        "C1"=> false,
        "C2"=> false,
        "C3"=> false,
        "C4"=> false,
        "C5"=> true,
        "C6"=> true,
        "C7"=> true,
        "C8"=> true,
        "C9"=> true
    ),
    "R6"=> array(
        "C1"=> true,
        "C2"=> true,
        "C3"=> false,
        "C4"=> true,
        "C5"=> false,
        "C6"=> true,
        "C7"=> false,
        "C8"=> false,
        "C9"=> true
    ),
    "R7"=> array(
        "C1"=> false,
        "C2"=> false,
        "C3"=> true,
        "C4"=> false,
        "C5"=> true,
        "C6"=> false,
        "C7"=> true,
        "C8"=> true,
        "C9"=> true
    ),
    "R8"=> array(
        "C1"=> true,
        "C2"=> false,
        "C3"=> false,
        "C4"=> true,
        "C5"=> false,
        "C6"=> false,
        "C7"=> true,
        "C8"=> true,
        "C9"=> true
    ),
    "R9"=> array(
        "C1"=> true,
        "C2"=> false,
        "C3"=> true,
        "C4"=> false,
        "C5"=> true,
        "C6"=> true,
        "C7"=> false,
        "C8"=> false,
        "C9"=> true
    ),
    "R10"=> array(
        "C1"=> false,
        "C2"=> true,
        "C3"=> true,
        "C4"=> true,
        "C5"=> true,
        "C6"=> false,
        "C7"=> true,
        "C8"=> false,
        "C9"=> false
    ),
    "R11"=> array(
        "C1"=> false,
        "C2"=> true,
        "C3"=> false,
        "C4"=> true,
        "C5"=> true,
        "C6"=> true,
        "C7"=> false,
        "C8"=> true,
        "C9"=> false
    ),
    "R12"=> array(
        "C1"=> true,
        "C2"=> false,
        "C3"=> true,
        "C4"=> true,
        "C5"=> false,
        "C6"=> true,
        "C7"=> false,
        "C8"=> false,
        "C9"=> true
    )
);

В приведенном выше массиве R означает строку , C для столбца , TRUE / FALSE (логическое значение) означает, что если TRUE , то число может быть заполнено в результирующем MATRIX BLOCK / CELL ( Row [Number] столбец [Number] ), иначе, если FALSE MATRIX BLOCK / CELL должен быть EMPTY

Результат для вышеупомянутого должен быть This is the Manual Allocation done on a Spreadsheet

ПРОБЛЕМА :

Я не могу понять, что должно быть логами c & l oop, используемыми здесь для создания MATRIX ALLOCATION MAP , как показано выше

Я пробовал while, foreach & for , но не смог определить идеальную комбинацию, которая отвечала бы условиям.

(Пробовал все также с помощью Nested Loops)

...