Перестановка с повторяющимися элементами и разделенными пробелами (можно оставить один раз пустым) - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть несколько повторяющихся элементов и разделенных пробелов:

# Elements
people = [0, 0, 1]
# Index
seats = ['a', 'a', 'b', 'b', 'c', 'd']

Количество элементов не может превышать номера индекса.Если количество элементов меньше номера индекса, индекс каждого типа можно оставить один индекс пустым.

from collections import Counter


def _is_elem_valid(people, seats) -> bool:
    """Valid elements check."""
    counter = 0
    for seat, c in Counter(seats).items():
        if c > 1:
            counter += 1

    # "True" is valid.
    # In this case is 6 >= 3 >= 2.
    return len(seats) >= len(people) >= counter

Индекс такого же типа неупорядоченный и непрерывно .В остальном правила такие же, как у обычной перестановки.

Таким образом, результаты будут выглядеть следующим образом:

# None represent blank seats.
# Sorry about PEP8.
# Actual elements: (filled to the length of index)
[0, 0, 1, None, None, None]

# Index:
['a', 'a', 'b', 'b', 'c', 'd']
# Correspond to normal index:
[[0], [0], [1], [1], [2], [3]]

# For all 'a'
[ 0,   0,   1,  None,None,None]
[ 0,   1,   0,  None,None,None]
# For all 'b'
[ 0,  None, 0,   1,  None,None]
[ 1,  None, 0,   0,  None,None]
# For 'c'
[ 0,  None, 1,  None, 0,  None]
[ 1,  None, 0,  None, 0,  None]
[ 0,  None, 0,  None, 1,  None]
# For 'd'
[ 0,  None, 1,  None,None, 0  ]
[ 1,  None, 0,  None,None, 0  ]
[ 0,  None, 0,  None,None, 1  ]

Я не очень знаком с алгоритмом перестановки.Есть ли здесь эффективное решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...