Широкий круг вопросов

В одной из кодировок КОИ-8 каждый символ кодируется 8 битами. Дима написал текст (в нём нет лишних п

Автор Cashoutmaster, Апр. 27, 2024, 20:11

« назад - далее »

Cashoutmaster

Возник вопрос. В одной из кодировок КОИ-8 каждый символ кодируется 8 битами. Дима написал текст (в нём нет лишних пробелов):
«J, Cg, Cat, Ruby, Swift, Delphi, Haskell — языки программирования».
Задание No 31
  Задание No 41
 
Ученик вычеркнул из списка название одного из языков программирования. Заодно он вычеркнул ставшие лишними запятые и пробелы — два пробела не должны идти подряд.
При этом размер нового предложения в данной кодировке оказался на 9 байт меньше, чем размер исходного предложения. Какое название языка программирования стало вычеркнуто? Запишите подробное решение задачи, и ответ на вопрос.


Денис

Поскольку на кодировку одного символа необходимо 1 байт информации, то он зачеркнул 9 символов. Вычитаем запятую и пробел:

9 - 2 = 7 символов.

Язык Haskell.

-------
Haskell
8 бит = 1 байт. (1 символ)
Запятая и пробел = 2 символа( 2 байта)
(9-2):1 = 7 символов.

-------
Переведем исходное предложение в кодировку КОИ-8:
«J, Cg, Cat, Ruby, Swift, Delphi, Haskell — языки программирования»
4A 2C 20 43 67 2C 20 43 61 74 2C 20 52 75 62 79 2C 20 53 77 69 66 74 2C 20 44 65 6C 70 68 69 2C 20 48 61 73 6B 65 6C 6C 20 97 9D 8E 8A 89 45 20 8D 82 97 89 8E

Пусть вычеркнутое слово имеет длину n. Тогда новое предложение будет иметь длину 9 байт меньше, то есть длину исходного предложения минус 9. Так как каждый символ кодируется 8 битами, то новое предложение будет иметь длину (44 - n) байт.

Уберем лишние запятые и пробелы из исходного предложения:
«J Cg Cat Ruby Swift Delphi Haskell — языки программирования»
4A 20 43 67 20 43 61 74 20 52 75 62 79 20 53 77 69 66 74 20 44 65 6C 70 68 69 20 48 61 73 6B 65 6C 6C 20 97 9D 8E 8A 89 45 20 8D 82 97 89 8E

Предположим, что вычеркнутое слово начинается с символа i и заканчивается на символе j. Тогда новое предложение будет иметь вид:
«J Cg Cat Ruby Swift Delphi Haskelliзыки программирования»
4A 20 43 67 20 43 61 74 20 52 75 62 79 20 53 77 69 66 74 20 44 65 6C 70 68 69 20 48 61 73 6B 65 6C 6C 69 j 8E 8A 89 45 20 8D 82 97 89 8E

Размер нового предложения равен 44 - n - 9 = 35 - n байт. Так как каждый символ кодируется 8 битами, то получаем уравнение:
35 - n = (количество символов в слове i) + 4 + (количество символов в слове j)

Заметим, что количество символов в слове j равно 1 или 2 (если j - это язык с двумя словами, например, Visual Basic). Подставляя возможные значения для j, получаем:
- Если j - однобуквенное слово, то (количество символов в слове i) + 4 = 35 - n - 1 = 34 - n. Подставляем возможные значения для n (1, 2, 3, 4, 5, 6, 7, 8):
    * Если n = 1, то (количество символов в слове i) = 30. Но в списке языков программирования нет слов, длина которых равна 30 символам, значит, это невозможно.
    * Если n = 2, то (количество символов в слове i) = 29. Но в списке языков программирования нет слов, длина которых равна 29 символам, значит, это невозможно.
    * Если n = 3, то (количество символов в слове i) = 28. Но в списке языков программирования нет слов, длина которых равна 28 символам, значит, это невозможно.
    * Если n = 4, то (количество символов в слове i) = 27. Но в списке языков программирования нет слов, длина которых равна 27 символам, значит, это невозможно.
    * Если n = 5, то (количество символов в слове i) = 26. Но в списке языков программирования нет слов, длина которых равна 26 символам, значит, это невозможно.
    * Если n = 6, то (количество символов в слове i) = 25. Но в списке языков программирования нет слов, длина которых равна 25 символам, значит, это невозможно.
    * Если n = 7, то (количество символов в слове i) = 24. Но в списке языков программирования нет слов, длина которых равна 24 символам, значит, это невозможно.
    * Если n = 8, то (количество символов в слове i) = 23. Единственное слово программирования, длина которого равна 23 символам, - это «Assembler». Проверяем:
        4A 20 43 67 20 43 61 74 20 52 75 62 79 20 53 77 69 66 74 20 44 65 6C 70 68 69 20 48 61 73 6B 65 6C 6C 20 41 73 73 65 6D 62 6C 65 72 20 8D 82 97 89 8E
        Размер нового предложения = 35 - 8 - 1 = 26 байт. В новом предложении нет лишних пробелов, значит, это верный ответ.
- Если j - это двубуквенное слово, то (количество символов в слове i) + 4 = 35 - n - 2 = 33 - n. Подставляем возможные значения для n (1, 2, 3, 4, 5, 6, 7):
    * Если n = 1, то (количество символов в слове i) = 28. Но в списке языков программирования нет слов, длина которых равна 28 символам, значит, это невозможно.
    * Если n = 2, то (количество символов в слове i) = 27. Но в списке языков программирования нет слов, длина которых равна 27 символам, значит, это невозможно.
    * Если n = 3, то (количество символов в слове i) = 26. Но в списке языков программирования нет слов, длина которых равна 26 символам, значит, это невозможно.
    * Если n = 4, то (количество символов в слове i) = 25. Но в списке языков программирования нет слов, длина которых равна 25 символам, значит, это невозможно.
    * Если n = 5, то (количество символов в слове i) = 24. Но в списке языков программирования нет слов, длина которых равна 24 символам, значит, это невозможно.
    * Если n = 6, то (количество символов в слове i) = 23. Но в списке языков программирования нет слов, длина которых равна 23 символам, значит, это невозможно.
    * Если n = 7, то (количество символов в слове i) = 22. Единственное слово программирования, длина которого равна 22 символам, - это «Visual Basic». Проверяем:
        4A 20 43 67 20 43 61 74 20 52 75 62 79 20 53 77 69 66 74 20 44 65 6C 70 68 69 20 56 69 73 75 61 6C 20 42 61 73 69 63 8E 8A 89 45 20 8D 82 97 89 8E
        Размер нового предложения = 35 - 7 - 2 = 26 байт. В новом предложении нет лишних пробелов, значит, это верный ответ.

Ответ: вычеркнутое слово - "Assembler" или "Visual Basic".