АВТ
Язык:

Дистанционный практикум по программированию

Задачи Online статус Соревнования
Новости Справка СДО
 
Здравствуйте, Гость! Войдите с паролем или зарегистрируйтесь.

689. Base64

Ограничение времени: 1 сек.
Ограничение памяти:65536 КБайт
Баллы:100
Статистика Послать на проверку Задачу добавил Игорь Андрианов

Требуется написать конвертор в формат base64 и из формата base64.

Кодирование в формат base64 происходит следующим образом:

1. Если длина исходного текста в байтах не делится на 3, то он дополняется минимальным количеством нулевых байтов так, чтобы длина делилась на 3, количество добавленных байтов запоминается.

2. Текст разбивается на группы по 3 байта. Каждая группа кодируется отдельно.

3. Из трёх байтов получается 24-битное число. Первый байт тройки является старшим, третий — младшим.

4. 24-битное число разбивается на четыре 6-битные группы. Старшие 6 бит определяют первый символ кодирующей четвёрки, младшие 6 бит — последний и т.п.

5. Шестёрки битов кодируются символами следующего набора:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Номер 0 кодируется буквой 'A', номер 1 буквой 'B', номер 63 символом '/'.

6. Полученные четвёрки символов записываются друг за другом в том же порядке, в каком шли тройки, из которых они были получены.

7. Вспоминается, сколько нулевых символов было добавлено в конец исходного текста на шаге 1, и столько последних символов закодированного текста меняются на '='.

8. Текст разбивается на группы по 76 символов (в последней может быть меньше) и каждая такая группа записывается в отдельной строчке. Каждая непустая строка должна заканчиваться переводом строки (символы 13 10).

В первой строке входного файла содержится тип информации во входном файле, вторая строка пустая, далее следует информация, которую нужно закодировать или раскодировать.

Если требуется закодировать текст, то файл начинается символами
'
Content-Transfer-Encoding: 8bit', за которыми следует 4 символа 13 10 13 10 — и весь остаток файла — набор байтов, подлежащий кодированию. Объём кодируемого текста ("текст" может быть двоичными данными) не превышает 100 000 байт.

Если требуется декодировать текст, то файл начинается символами
'
Content-Transfer-Encoding: base64', за которыми следует 4 символа 13 10 13 10 — и весь остаток файла — текст, закодированный base64. Кодированный текст получен из исходного, не превышающего 100 000 байт.

Выведите в выходной файл строку с противоположным типом информации, затем пустую строку, затем результат кодирования или декодирования.

Если требовалось закодировать текст, то выходные данные должны начинаться символами 'Content-Transfer-Encoding: base64', за которыми должны следовать 4 символа 13 10 13 10 — и далее до конца файла должен содержаться текст, закодированный base64.

Если требовалось раскодировать текст, то выходные данные должны начинаться символами 'Content-Transfer-Encoding: 8bit', за которыми должны следовать 4 символа 13 10 13 10 — и далее до конца файла должен содержаться раскодированный текст.

Пример

Входные данные

Выходные данные

Content-Transfer-Encoding: 8bit

 

Vologda SPU

Content-Transfer-Encoding: base64

 

Vm9sb2dkYSBTUFU=

 


Статистика Послать на проверку Обсуждение задачи Автор/источник:
Задачи с соревнований и сборов / Межвузовские олимпиады / XII Межвузовская олимпиада 2009 /
687. B - Спираль 689. 690. D - Полка 691. E - Рестораны 692. F - Перевёртыш
 
время генерации 0.109 сек.
© Copyright ВоГУ, АВТ, Носов Д.А., Андрианов И.А.