Заполнение массива в соответствии с условиями

Есть массив x*y (строка, столбец)

Данный массив заполняется циклом отдельно по одной ячейке в строке значениями 1 или 0. Условия:

  1. Значения заполняются рандомно, но в итоге все должно заполниться 1.
  2. Если по х (в строке) все 0, берется первое значение. Если уже были попытки заполнения, то берется ячейка, с самой первой попыткой заполнения.
  3. Переход к заполнению ячеек в новой строке происходит, только если в предыдущей строке есть не менее 2-х ячеек со значением 1.
  4. Ячейки новой строки заполняются только для ячеек, у которых в предыдущей строке стоит 1, и это не может быть столбец, куда вносилась 1 предыдущей итерации.

Подскажите какой использовать алгоритм, или к каким алгоритмам присмотреться. Просто не хватает немного знаний в этой области. Реализация будет на python3


Ответы (1 шт):

Автор решения: Михаил Никифоров

В принципе задача решается если к заполняемым данным добавить временные метки, например: (1, 29.09.2022_12:20)

Действие алгоритма на примере: есть матрица 3*3, все значения none

none,none,none
none,none,none
none,none,none

Запускаем цикл. Каждая итерация цикла должна проходить по новой строке, но у нас условие, переход на новую строку, как только в строке появятся две единицы, иначе мы проходим по всем none, а потом и по всем 0, пока не будет выполнено наше условие, получаем

1, 0, 1
none,none,none
none,none,none

Теперь проходим ко второй строчке, но только в первый столбец, т.к. там мы раньше всех получили 1. Следующей итерацией переходим в первую строку в столбец 2(в 3 не переходим, т.к. не выполняется условие, 2 единицы), и там тоже получаем единицу, получаем:

1, 1, 1
1, none, none
none,none,none

Теперь переходим ко второй строчке в столбец 3, т.к. там в предыдущей ячейке получили раьше всех единицу. Если получаем там едицицу, то идём к третей строке столбец один. И каждая следующая итеррация прыгает между этими строками. Как только заполнится вторая строка, цикл работает между оставшимися ячейками третьей строки.

Это упрощенная модель, по факту матрица будет больше, и данные будут отбрасываться назад (если после единицы мы получаем 0, то ячейка с единицей этого столбца получает тоже ноль)

→ Ссылка