У вас уже есть все шаги:
n биты из 0:
status = 0
Каждый студент, заканчивающий экзаменнажимает 1, начиная справа.
status = status << 1 # push previous to left
status = status | 1 # set the lowest bit
Все байты, состоящие из 1, указывают на закрытие.
allOnes = (1<<num_students) -1
closure = (status == allOnes)
Есть ли более эффективныйспособ достижения этого?
@ Комментарий Алена верен: метод, который вы описываете, является просто менее эффективным способом подсчета от 1 до n.Почему бы вместо этого не использовать простой счетчик?
takers +=1
completed = (takers == num_students)
Для хранения данных потребуется lg (n) бит вместо n бит.В любом случае будет цикл загрузки / изменения / тестирования / сохранения для каждого получателя, поэтому существенной экономии времени не будет.Единственная причина, по которой я мог бы использовать битовое поле, заключается в том, что вы обеспокоены тем, что один человек может сдать тест дважды и сбросить счет.