print1395. base64

printbase64

Ограничения: время – 1s/2s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Требуется написать конвертор в формат 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 символов (в последней может быть меньше) и каждая такая группа записывается в отдельной строчке. Каждая непустая строка должна заканчиваться символом новой строки.
В первой строке входного файла содержится тип информации во входном файле, вторая строка пустая, далее следует информация, которую нужно закодировать или раскодировать.
Если требуется закодировать текст, то файл начинается символами 'Content-Transfer-Encoding: 8bit', за которыми следует 2 символа новой строки – и весь остаток файла – набор байтов, подлежащий кодированию. Объём кодируемого текста ("текст" может быть двоичными данными) не превышает 100 000 байт.
Если требуется декодировать текст, то файл начинается символами 'Content-Transfer-Encoding: base64', за которыми следует 2 символа новой строки – и весь остаток файла – текст, закодированный base64. Кодированный текст получен из исходного, не превышающего 100 000 байт.
Выведите в выходной файл строку с противоположным типом информации, затем пустую строку, затем результат кодирования или декодирования.
Если требовалось закодировать текст, то выходные данные должны начинаться символами 'Content-Transfer-Encoding: base64', за которыми должны следовать 2 символа новой строки – и далее до конца файла должен содержаться текст, закодированный base64.
Если требовалось раскодировать текст, то выходные данные должны начинаться символами 'Content-Transfer-Encoding: 8bit', за которыми должны следовать 2 символа новой строки – и далее до конца файла должен содержаться раскодированный текст.

Пример ввода

Content-Transfer-Encoding: 8bit

Vologda SPU

Пример вывода

Content-Transfer-Encoding: base64

Vm9sb2dkYSBTUFU=
Источник: XII Межвузовская олимпиада, г. Вологда, 2009
loading