Чтобы решить задачу, давайте сначала разберемся с кодировкой и размерами символов в байтах.
Понимание кодировки: Кодировка, в которой каждый символ занимает 16 бит, означает, что каждый символ занимает 2 байта (так как 1 байт = 8 бит).
Подсчет символов: Давайте сначала подсчитаем общее количество символов в тексте "J, Cg, Cat, Ruby, Swift, Haskell".
- "J" - 1 символ
- "," - 1 символ
- " " - 1 пробел
- "Cg" - 2 символа
- "," - 1 символ
- " " - 1 пробел
- "Cat" - 3 символа
- "," - 1 символ
- " " - 1 пробел
- "Ruby" - 4 символа
- "," - 1 символ
- " " - 1 пробел
- "Swift" - 5 символов
- "," - 1 символ
- " " - 1 пробел
- "Haskell" - 7 символов
Теперь посчитаем все символы:
- Всего символов: 1 + 1 + 1 + 2 + 1 + 1 + 3 + 1 + 1 + 4 + 1 + 1 + 5 + 1 + 1 + 7 = 21 символ
Важно отметить, что если мы уберем одно название языка, мы также удалим соответствующую запятую и пробел до этого слова, если он был.
Общая длина исходного текста: Количество байтов, занимаемое текстом, можно рассчитать как:
- Количество символов (21) * 2 байта = 42 байта.
Понижение размера: По условию, новый размер предложения оказался на 18 байт меньше. То есть новый размер составит:
- 42 байта - 18 байт = 24 байта.
Поиск вычеркнутого языка: Теперь нужно выяснить, какой из языков можно вычеркнуть, чтобы размер уменьшился на 18 байт. Каждое название языка также требует учёта запятой и пробела, если есть.
- J: 1 символ → 2 байта, ", " 2 байта → 4 байта (вычеркнув "J", размер уменьшится на 4 байта)
- Cg: 2 символа → 4 байта, ", " 2 байта → 6 байт (вычеркнув "Cg", размер уменьшится на 6 байт)
- Cat: 3 символа → 6 байт, ", " 2 байта → 8 байт (вычеркнув "Cat", размер уменьшится на 8 байт)
- Ruby: 4 символа → 8 байт, ", " 2 байта → 10 байт (вычеркнув "Ruby", размер уменьшится на 10 байт)
- Swift: 5 символов → 10 байт, ", " 2 байта → 12 байт (вычеркнув "Swift", размер уменьшится на 12 байт)
- Haskell: 7 символов → 14 байт, ", " 2 байта → 16 байт (вычеркнув "Haskell", размер уменьшится на 16 байт)
Нам нужно найти такое название, которое в сумме с запятой и пробелами даёт уменьшение на 18 байт. В данной ситуации видно, что вычеркнуть ни один язык не может дать прямое уменьшение на 18 байт.
Разбираем размер на 18 байт: Если в списке остаётся не менее 2 языков, при удалении (например, "J, Cg" иметь общую "долю", чтобы обеспечить 18 байт). Подсчет "по запятой и пробелу" может звучать сначала запутанно, но более высшее: так как от последнего вычеркнутого можно быть.
Итак, пробуем: От 42 байтов, вычеркнув "Haskell", получаем 16 байтов : 42 - 2 = 34, с минимума 2 байта дает на 18 общих с 34.
Таким образом, вычеркнутое название языка программирования - Haskell.