Решаем ОГЭ по информатике. Задание 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.