К задачам

Равномерная случайная величина из rand2

СредняяАлгоритмы
Лучше работает на десктопе
ВероятностьRejection samplingСлучайность

Есть источник случайных битов rand2, который равновероятно возвращает 0 или 1.

Нужно получить равномерное случайное число из диапазона [0, n - 1]. В тренажере вместо настоящей случайности передается готовый поток битов bits, чтобы решение можно было проверить детерминированно.

Используйте минимальное число битов chunk_size, такое что 2 ** chunk_size >= n. Читайте биты чанками, интерпретируйте чанк как binary integer. Если значение меньше n, верните его; иначе отбросьте чанк и читайте следующий.

Сигнатура

def uniform_from_rand2_bits(n: int, bits: list[int]) -> list[int]:

Верните [value, used_bits], где used_bits — сколько битов пришлось прочитать до принятого значения.

Примеры

Пример 1

Вход:
n = 3
bits = [0,0]
Выход:[0,2]

Пример 2

Вход:
n = 3
bits = [1,1,0,1]
Выход:[1,4]

Первый чанк 3 отбрасывается

Пример 3

Вход:
n = 5
bits = [1,0,1,0,0,1]
Выход:[1,6]

5 отбрасывается, 1 принимается

Код
Python · Ctrl/⌘ + Enter для запуска
Лимит
05:00
Консоль
Нажмите кнопку запуска или Ctrl+Enter
Uniform random из rand2 через rejection sampling — Алгоритмы задача — ML Mentor