@shmostertoster

Как распределить числа в случайном порядке в матрицу?

Здравствуйте!
Есть 45 плиток (по 4 в ряд) с геометрическим рисунком (3 вида, но так как можно перевернуть = 6)
# Вид 1
a = ("A") #7 (кол-во плиток)
b = ("B") #8
# Вид 2
c = ("C") #7
d = ("D") #8
# Вид 3
e = ("E") #7
f = ("F") #8


Нужно распределить буквы в случайном не повторяющемся порядке в матрицу по 4 в ряд (знаю что равномерно не получится).
Например:
первый ряд - A, C, E, B
второй ряд - D, F, A, C
третий .... Так, чтобы "Виды" не находились один под другим или рядом (слева-справа)

Генератор случайных чисел сделал
import random

a = ("A")
b = ("B")
c = ("C")
d = ("D")
e = ("E")
f = ("F")
print(random.sample((a, b, c, d, e, f),6))

но когда делаю цикл на 14 проходов некоторые буквы появляются большее кол-во раз, чем надо (например А появляется 10 раз, а его максимум 7)
Нужен какой-то счетчик, который отнимал бы значения после каждого прохода, но не могу сообразить как это провернуть...
Натолкните на правильный путь.
Вот такое практическое применение в ремонте)
Спасибо)
  • Вопрос задан
  • 349 просмотров
Решения вопроса 2
@fireSparrow
Ну, решение "в лоб" - использовать Counter.

from collections import Counter

cntr = Counter({"A": 7, "B": 8, "C": 7, "D": 8, "E": 7, "F": 8})


Теперь у вас есть счётчик cntr.
Вы можете проверить, остались ли в нём пункты для определённого ключа:

x = "A"
if cntr[x]:
    # Условие выполнится, только если счётчик для "А" больше нуля


А когда вы один раз использовали какую-то букву, вы можете вычесть из её счётчика один пункт:
x = "A"
cntr.subtract( {x: 1} )    # Счётчик для "A" уменьшится на единицу


Ещё множество примеров по работе с Counter вы легко найдёте в гугле. Это очень полезный класс. Когда вы его освоите, вы довольно часто захотите его применять.
Ответ написан
Комментировать
@napa3um
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы