Каждое изделие, изготовленное на предприятии, получает уникальный код, состоящий из 30 символов. Каждый символ кода может быть латинской буквой (заглавной или строчной), десятичной цифрой или специальным символом из особого технического набора.
В базе данных хранится таблица, содержащая все уже использованные коды. При этом используется посимвольное кодирование, каждый символ кодируется одинаковым минимально возможным числом бит, а для хранения каждого кода в целом отводится одинаковое минимально возможное число байт.
Известно, что для хранения списка из 4700 кодов выделено не более 180 Кбайт. Какое наибольшее количество специальных символов может входить в особый технический набор?
Для хранения каждого из 4700 кодов потребовалось:
Для хранения каждого из 30 символов потребовалось:
Заметим, что k бит позволяют кодировать 2k символов.
Всего символов в таблице может быть 210 = 1024.
Так как, среди символов могут быть десятичные цифры и 52 латинские буквы (с учётом регистра), то количество специальных символов равно 1024 - 52 - 10 = 962
Ответ: 962.
Приведём решение Юрия Красильникова на языке Python.
for b in range(100,0,-1): # бит в коде одного символа
bits = b*30 # длина кода в битах
bytes = bits//8
if bits%8 != 0:
bytes += 1 # длина кода в байтах
if bytes*4700 <= 180*1024:
break # если 4700 кодов занимают не более 180К
print(2**b - 2*26 - 10) # вычитаем количество букв и цифр

