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