Тип 11 № 17331 

Вычисление количества информации. Пароли с дополнительными сведениями
i
Каждый сотрудник предприятия получает электронный пропуск, на котором записаны личный код сотрудника, код подразделения и некоторая дополнительная информация. Личный код состоит из 18 букв. Для формирования кодов используется 15 различных букв, каждая из которых может быть заглавной или строчной. Для записи кода на пропуске отведено минимально возможное целое число байт. При этом используют посимвольное кодирование, все символы кодируют одинаковым минимально возможным количеством бит. Код подразделения — целое трёхзначное число, он записан на пропуске как двоичное число и занимает минимально возможное целое число байт. Всего на пропуске хранится 30 байт данных. Сколько байт выделено для хранения дополнительных сведений об одном сотруднике? В ответе запишите только целое число — количество байт.
Решение. k бит позволяют кодировать 2k символов, поэтому для кодирования 30-символьного алфавита требуется 5 бит (ведь
Для хранения 18 символов требуется
бит. Минимальное количество байт, вмещающее в себя 90 бит, — 12 байт (96 бит).
Код подразделения можно закодировать 2 байтами, поскольку в 1 байт помещаются только числа от 0 до 255, а в 2 байта — числа от 0 до 216 − 1, то есть для записи любого трехзначного числа достаточно двух байтов.
Для хранения данных об одном сотруднике требуется 30 байт данных. Из них 12 байт отводится на хранение личного кода, ещё 2 байта требуется для хранения номера подразделения. Следовательно, для хранения дополнительных сведений о сотруднике отводится 16 байт.
Ответ: 16.
Приведём решение Лева Андреева на языке Python.
from math import ceil, log2
l_lk = 18
n_lk = 30
l_np = 1
n_np = 999
v_all = 30
i_lk = ceil(log2(n_lk))
v_lk = ceil(l_lk*i_lk/8)
i_np = ceil(log2(n_np))
v_np = ceil(l_np*i_np/8)
print(v_lk, v_np, v_all)
print(v_all - v_np - v_lk)
Ответ: 16