Решаем ОГЭ по информатике. Задание 1.
В одной из кодировок Unicode каждый символ кодируется 16 битами. Ваня написал текст (в нём нет лишних пробелов):
«Казань, Самара, Томск, Курск, Ярославль, Сочи, Петрозаводск — города России».
Ученик вычеркнул из списка название одного из городов. Заодно он вычеркнул ставшие лишними запятые и пробелы — два пробела не должны идти подряд.
При этом размер нового предложения в данной кодировке оказался на 18 байта меньше, чем размер исходного предложения. Напишите в ответе вычеркнутое название города России.
Решение:
Исходный текст состоит из 43 символов (включая пробелы и знаки препинания). Каждый символ кодируется 16 битами, то есть 2 байтами. Значит, размер исходного текста в данной кодировке равен 43 * 2 = 86 байт.
Новый текст состоит из 42 - x символов, где x — количество символов в вычеркнутом названии города. Размер нового текста в данной кодировке равен (42 - x) * 2 байт.
По условию задачи, размер нового текста на 18 байт меньше, чем размер исходного текста. Значит, можно составить уравнение:
(42 - x) * 2 = 86 - 18
Решая уравнение, получаем:
84 - 2x = 68
-2x = -16
x = 8
Значит, вычеркнутое название города состоит из 8 символов. Из списка такое название только одно — Петрозаводск. Это и есть ответ на задание.
Пример решения на Питоне
# Исходный текст
text = "Казань, Самара, Томск, Курск, Ярославль, Сочи, Петрозаводск — города России"
# Размер исходного текста в байтах
size = len(text.encode("utf-16"))
# Список городов
cities = text.split(", ")
# Цикл по городам
for city in cities:
# Удаляем город из списка
new_cities = cities.copy()
new_cities.remove(city)
# Склеиваем список в новый текст
new_text = ", ".join(new_cities)
# Размер нового текста в байтах
new_size = len(new_text.encode("utf-16"))
# Если разница в размерах равна 18 байт, то нашли ответ
if size - new_size == 18:
print(f"Вычеркнутое название города: {city}")
break
Решаем ОГЭ по информатике. Задание 3.