Дуэль / Алгоритм лотереи

Как создать метод лотереи, если любая лотерея обещает хороший билет?

Я нахожу способ создания лотереи, в котором участнику назначается билет с серией случайных чисел.
Любая лотерея имеет N участников, и должно быть одинаковое количество лотерейных билетов, билет на одного пользователя.
Пользователь, который понимает свои номера билетов перед розыгрышем, потому что он может следить за розыгрышем и может подсчитать, обогнал ли он.
В любой лотерее есть хотя бы один победитель.
Некоторые лотереи могут иметь два или более успешных билета, в то время как любой может выиграть билет только один раз. Победитель удаляется из текущей лотереи.
Если доступны более успешные билеты, это должно произойти до начала розыгрыша.
Нельзя рисовать пробелы.

Как вы можете создать лотерею с такими свойствами. Или, более конкретно:

Как мы можем генерировать лотерейные номера и билеты как таковые, чтобы любая лотерея имела успешный билет или (1N) обещанный билет. Как мы можем избежать пробелов?

Псевдокод будет хорошим и / или большим количеством подсказок, возможно популярных методов, которые решают подобные проблемы.