Size: 3690
Comment:
|
Size: 4166
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 11: | Line 11: |
* Известно, что неоднозначная перекодировка (в которой более одного входного символа соответствует одному выходному) не производилась | * Известно, что неоднозначная перекодировка (в которой более одного входного символа соответствует одному выходному) ''не производилась'' |
Line 20: | Line 20: |
* Спойлер. Я решал задачу так: /* Составил таблицу всех допустимых (не вызывающих исключение и однозначных) на данном алфавите перекодировок длины не больше 4. Для удобства в начало алфавита поместил букву "П" (от слова "ПРОЦ", с которого начинается процедура). В действительности таблица была сначала для длины 1, и проверял я по ней, потом на её основе — длины 2 и т. д. Проверял так: если перекодированные алфавит в таблице начинается на тот же байт, что и закодированная процедура, надо попытаться перекодировать её обратно по соответствующей цепочке перекодировок. Если получилось, да ещё результат состоит из больших букв, начинается на "ПРОЦ ", а заканчивается на "КНЦ;", шанс, что мы ошиблись, нулевой. */ | * Подсказка 3 (от К. О.): текст процедуры выводится в кодировке utf-8, а не в КОИ8-Р (спасибо, Кэп!) * Спойлер. Я решал задачу так: /* Составил таблицу всех допустимых (не вызывающих исключение и однозначных) на данном алфавите перекодировок длины не больше 4. Для удобства в начало алфавита поместил букву "П" (от слова "ПРОЦ", с которого начинается процедура). В действительности таблица была сначала для длины 1, и проверял я по ней, потом на её основе — длины 2 и т. д. Проверял так: если перекодированные алфавит в таблице начинается на тот же байт, что и закодированная процедура, надо попытаться перекодировать её обратно по соответствующей цепочке перекодировок. Если получилось, да ещё результат состоит из больших букв, начинается на "ПРОЦ ", а заканчивается на "КНЦ;", шанс, что мы ошиблись, нулевой. Данный пример может получаться путём разных перекодировок; вот соответствующее значение из таблицы моего решения: `('CP1251', 'koi8-r'), ('ISO8859-5', 'CP1251'), ('CP866', 'utf8'), ('cp1140', 'ISO8859-1')` */ |
Текст процедуры на языке Рапира в кодировке koi8-r был несколько (не более четырёх раз) раз перекодирован, причём перекодировщику сообщали совершенно произвольную исходную и целевую кодировку (например, из CP866 в latin1). Восстановить предполагаемый текст процедуры.
- В первой строке ввода — возможные кодировки, не более 8 (через пробел)
- Во второй строке ввода — последовательность шестнадцатеричных цифр — это байты закодированной процедуры
- На выходе — исходный текст процедуры.
- Для упрощения будет считать, что в программе на языке Рапира могут присутствовать только
Заглавные русские и латинские буквы (строчных нет)
Цифры и символы из набора ()[]+-*/%;.,>=<"
- Пробелы, табуляции и переводы строки
Известно, что неоднозначная перекодировка (в которой более одного входного символа соответствует одному выходному) не производилась
utf8 koi8-r CP1251 CP866 ISO8859-1 ISO8859-5 mac-arabic cp1140 4a624a644ad8536ebf804a65536e6c536e764a64536e6c88899b8e808080804afe4afd4afe4ad8536e719a80824ab1536e714a64536e764afe4a65536e6c4afe536ea1536f688c80536fb0536df04a6481829b8e536f64536fd8536ebf9b8e
Подсказка: на входе процедура на языке Рапира, и только она. Не забудьте о возможных переводах строки в конце неё (то ли они есть, то ли нет).
Подсказка 2 (мелкая): у типа bytes есть удобный метод…
- Подсказка 3 (от К. О.): текст процедуры выводится в кодировке utf-8, а не в КОИ8-Р (спасибо, Кэп!)
Спойлер. Я решал задачу так:
ПРОЦ СТАРТ(); ВЫВОД: "ЗДРАВСТВУЙ, МИР!"; КНЦ;