лист "Вопросы" - с таблицей Тема-Вопрос-Сложность. Сложностей всего 3 - простой, сложный, обычный.
лист "Билеты" - в 3 столбце Курс, Дата, Количество вопросов в билете, Количество билетов, в 4 - значения соответственно
Надо:
составить в листе "Билеты" в первом столбце список билетов, распределяя вопросы так, чтобы 1. каждый вопрос был использован один раз, 2. одна тема была использована в билете один раз, 3. билеты были примерно равные по сложности.
Строки, в которых должны быть вопросы, я заполняю циклом для всех билетов; т.к. вопросов в билете n штук, то в цикле действует вложенный цикл, проходящий от 1 до n, собственно, подбирающий вопросы. Первое условие во вложенном цикле - проверка, был ли использован вопрос. С проверкой по сложности, в принципе, все понятно: каждый простой вопрос добавляет к суммарной сложности +1, обычный - +2, сложный - +3; в зависимости от суммы на момент текущего вопроса, добавляется либо простой, либо сложный, либо любой вопрос.
То есть условий достаточно много...
Думая над распределением по теме, я сначала думала написать ее еще одним условием: каждая использованная в билете тема записывается в массив; если тема выбранного вопроса есть в массиве, то ищем следующий вопрос. Но это добавляет еще один цикл на поиск элемента в массиве.
Другой вариант - распределить вопросы по субмассивам изначально так, что каждый субмассив - отдельная тема, чтобы затем при подборе вопросов исключать из выбора массивы, элемент которых уже использован. Индексу присваивается значение определенной ячейки. Но первый вопрос выбирается из списка (на листе "Вопросы"), а не из массивов, и его тема определяется как строковое значение. Поэтому чтобы определить, какому индексу соответствует тема, придется все равно выполнять поиск.
Собственно, вопрос:
1. права ли я?

2. если все так, то что выгоднее: проще, быстрее, экономичнее?
3. или если есть другой путь (проще, быстрее, экономичнее), то как?
Заранее спасибо всем, кто сможет в этих размышлениях хоть что-то понять!