Контрольные задания > В одной из кодировок Unicode каждый символ кодируется 16 бит. Вова написал текст (в нём нет лишних пробелов): «Чиж, грач, стриж, гагара, пингвин, ласточка, жаворонок, свиристель, буревестник, вертиголовка – птицы». Ученик вычеркнул из списка название одной птицы. Заодно он вычеркнул ставшие лишними запятые и пробелы — два пробела не должны идти подряд. При этом размер нового предложения в данной кодировке оказался на 18 байт меньше, чем размер исходного предложения. Напишите в ответе вычеркнутое название птицы.
Вопрос:
В одной из кодировок Unicode каждый символ кодируется 16 бит. Вова написал текст (в нём нет лишних пробелов): «Чиж, грач, стриж, гагара, пингвин, ласточка, жаворонок, свиристель, буревестник, вертиголовка – птицы». Ученик вычеркнул из списка название одной птицы. Заодно он вычеркнул ставшие лишними запятые и пробелы — два пробела не должны идти подряд. При этом размер нового предложения в данной кодировке оказался на 18 байт меньше, чем размер исходного предложения. Напишите в ответе вычеркнутое название птицы.
Ключевое условие: два пробела не должны идти подряд. Это значит, что после удаления слова, каждая запятая, которая была между словами, а также пробел перед и после неё, удаляются.
Рассмотрим варианты удаления:
Если удаляем слово из середины: Удаляется само слово (X букв) + 1 запятая перед ним + 1 пробел перед ним + 1 пробел после него + 1 запятая после него. Общее количество удаляемых символов: X + 4.
Если удаляем первое или последнее слово: Удаляется само слово (X букв) + 1 пробел после (или перед) него + 1 запятая после (или перед) него. Общее количество удаляемых символов: X + 2.
Поиск слова, удаление которого с запятыми и пробелами дает 9 символов:
Пробуем удалить «чиж» (3 буквы): 3 (слово) + 2 (запятая и пробел после) = 5 символов. Не подходит.
Пробуем удалить «грач» (4 буквы): 4 (слово) + 2 (запятая и пробел после) = 6 символов. Не подходит.
Пробуем удалить «стриж» (5 букв): 5 (слово) + 2 (запятая и пробел после) = 7 символов. Не подходит.
Пробуем удалить «гагара» (5 букв): 5 (слово) + 2 (запятая и пробел после) = 7 символов. Не подходит.
Пробуем удалить «пингвин» (6 букв): 6 (слово) + 2 (запятая и пробел после) = 8 символов. Не подходит.
Пробуем удалить «ласточка» (8 букв): 8 (слово) + 2 (запятая и пробел после) = 10 символов. Не подходит.
Пробуем удалить «жаворонок» (9 букв): 9 (слово) + 2 (запятая и пробел после) = 11 символов. Не подходит.
Пробуем удалить «свиристель» (10 букв): 10 (слово) + 2 (запятая и пробел после) = 12 символов. Не подходит.
Пробуем удалить «буревестник» (11 букв): 11 (слово) + 2 (запятая и пробел после) = 13 символов. Не подходит.
Пробуем удалить «вертиголовка» (12 букв): 12 (слово) + 2 (запятая и пробел после) = 14 символов. Не подходит.
Теперь пробуем удалить слово из середины. Например, «стриж». Удаляется «стриж» (5 букв), запятая перед ним, пробел перед ним, пробел после него, запятая после него. Всего: 5 (буквы) + 1 (запятая) + 1 (пробел) + 1 (пробел) + 1 (запятая) = 9 символов.
Проверим другие слова из середины:
«гагара» (5 букв): 5 + 4 = 9 символов.
«пингвин» (6 букв): 6 + 4 = 10 символов.
«ласточка» (8 букв): 8 + 4 = 12 символов.
Таким образом, удаленное слово может быть «стриж» или «гагара».
Условие: «два пробела не должны идти подряд». Это условие уже выполняется в исходном тексте, потому что между словами стоят только одиночные пробелы.
Перечитаем условие: «Заодно он вычеркнул ставшие лишними запятые и пробелы». Это означает, что после удаления слова, те запятые и пробелы, которые остались без слов, тоже удаляются.
Вернемся к примеру с «стриж»:
Исходный фрагмент: «грач, стриж, гагара»
После удаления «стриж»: «грач, гагара» (два пробела подряд).
Убираем один лишний пробел: «грач, гагара».
Удаленные символы: «стриж» (5 букв) + 1 запятая перед ним + 1 пробел перед ним + 1 пробел после него + 1 запятая после него = 9 символов.
Вернемся к примеру с «гагара»:
Исходный фрагмент: «стриж, гагара, пингвин»
После удаления «гагара»: «стриж, пингвин» (два пробела подряд).
Убираем один лишний пробел: «стриж, пингвин».
Удаленные символы: «гагара» (5 букв) + 1 запятая перед ним + 1 пробел перед ним + 1 пробел после него + 1 запятая после него = 9 символов.
Итак, вычеркнутое название птицы — либо «стриж», либо «гагара».
Дополнительное условие: «При этом размер нового предложения в данной кодировке оказался на 18 байт меньше». Это соответствует удалению 9 символов.
Условие «два пробела не должны идти подряд» также выполняется, так как после удаления лишних запятых и пробелов, между словами останется только один пробел.
Наиболее вероятный вариант — «стриж» или «гагара», так как при их удалении вместе с окружающими знаками препинания и пробелами, общее количество удаленных символов составит 9.
Итого: удалено 9 символов, что соответствует 18 байтам. Это достигается при удалении слова из 5 букв, которое было окружено запятой и пробелами с обеих сторон.