АВТ
Language:

Remote Training on Programming

Problems On-line status Contests FAQ
For authors:
Register  ||  Login
 
Hello, Guest! Login or register.

689. C - base64

Time Limit: 1 seconds
Memory Limit:65535KB
Points:10
View Problem Statistics Submit Problem added Undefined

Требуется написать конвертор в формат 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=

 


View Problem Statistics Submit Author/source: InterUni Contest, Vologda,2009
Problems from Contests / Vologda Students Contests / XII InterUni Contest 2009 /
687. B - Spiral 689. 690. D - Shelf 691. E - Restaurants 692. F - Reverse
We can all benefit by doing occasional "toy" programs, when artificial restrictions are set up, so that we are forced to push our abilities to the limit. The art of tackling miniproblems with all our energy will sharpen our talents for the real problems. Donald E. Knuth.
time generating 0.093 sec.
© Copyright VSTU, AVT, Nosov D.A.