(Aquest problema fa servir la funció base64\_to\_char del problema "Codificar en Base64 (1)".)
Es tracta de fer un programa que, donada una seqüència de bytes a l’entrada (naturals entre 0 i 255), la codifiqui en base 64. La codificació funciona de la següent manera, i treballa amb tripletes de 3 bytes:
Primer, cada 3 bytes d’entrada B1, B2 i B3, construïm un enter x en base 256 de la següent manera:
| x = (B1 · 256 + B2) · 256 + B3 |
| x = ((d1 · 64 + d2) · 64 + d3) · 64 + d4 |
(Cal recordar que el procés d’extracció de xifres treballat a PRO1 produeix les xifres al revés, és a dir, començant per d4.)
base64_to_char convertim d1, d2, d3 i d4 en caràcters i els mostrem a la sortida en aquest ordre.Si la seqüència d’entrada no té un llargada múltiple de 3, just al final, tindrem un grup de només 1 o 2 bytes:
=’.
=’.
Entrada
L’entrada consisteix en diverses seqüències de bytes. Cadascuna comença amb un enter n que indica el nombre de bytes que segueixen i després hi ha n bytes, a on cadascún és només un nombre natural entre 0 i 255 (ambdós inclosos).
Sortida
La sortida ha de ser una línia per a cada cas amb la codificació en base 64 de la seqüència de bytes de l’entrada, sense espais entre els caràcters.
Observacions
Aquest problema té com a centre d’interès la correctesa i la llegibilitat. Sobre la llegibilitat, es valorarà que el programa utilitzi funcions per evitar repetició i separar les diverses tasques.
base64_to_char i el Jutge us l’ha acceptat, useu-la directament. Si no, copieu la següent definició:
char base64_to_char(int d) {
static char _syms[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
return _syms[d];
}
Input
3 0 0 0 3 1 1 1 3 2 2 2 3 255 255 255 1 0 2 0 0 1 1 2 1 1 4 100 100 100 100 5 10 0 20 0 30 6 255 255 255 0 0 0
Output
AAAA AQEB AgIC //// AA== AAA= AQ== AQE= ZGRkZA== CgAUAB4= ////AAAA
Input
1 44 1 38 1 150 1 74 1 221 1 50 1 71 1 54 1 5 1 76 1 162
Output
LA== Jg== lg== Sg== 3Q== Mg== Rw== Ng== BQ== TA== og==
Input
2 246 161 2 198 147 2 111 211 2 13 73 2 8 125 2 172 240 2 145 41 2 193 95 2 109 8 2 102 246
Output
9qE= xpM= b9M= DUk= CH0= rPA= kSk= wV8= bQg= ZvY=
Input
3 187 86 98 3 171 169 241 3 52 145 94 3 182 60 181 3 212 26 182 3 253 228 97 3 171 64 63 3 216 173 75 3 0 213 97 3 122 15 167
Output
u1Zi q6nx NJFe tjy1 1Bq2 /eRh q0A/ 2K1L ANVh eg+n