(Este problema utiliza la función char\_to\_base64 del problema "Decodificar Base64 (1)".)
Se trata de hacer un programa que, dada una secuencia de caracteres en la entrada (uno de los 64 que representan los dígitos de base 64), la decodifique en sus bytes. La decodificación funciona de la siguiente manera:
Primero, para cada grupo de 4 caracteres (o cuarteto) de la entrada c1, c2, c3 y c4, los transformamos en sus dígitos correspondientes d1, d2, d3, d4, usando la función
char_to_base64.
| x = ((d1 · 64 + d2) · 64 + d3) · 64 + d4 |
| x = (B1 · 256 + B2) · 256 + B3 |
(Hay que recordar que el proceso de extracción de las cifras trabajado en PRO1 produce las cifras al revés, comenzando por B3)
La codificación en base 64 siempre tiene un número de caracteres múltiplo de 4, pero justo al final de la secuencia puede haber ’=’ o ’==’, que nos dice que el número de bytes del último cuarteto son 2 o 1, y no 3:
Si el último cuarteto tiene algún ’=’ al final:
==’: el número de bytes será 1; asignamos d3 = 0 y d4 = 0, decodificamos según los pasos anteriores, pero solo mostramos B1 por pantalla.
=’: el número de bytes es 2; asignamos d4 = 0, decodificamos según los pasos anteriores, pero solo mostramos B1 y B2 por pantalla.
Entrada
La entrada consiste en varios casos, donde cada caso es una secuencia de caracteres base 64 en la misma línea y con un punto al final.
Salida
La salida debe ser una línea para cada caso con los bytes como números naturales. Antes de cada byte, incluido el primero, debe haber un espacio.
Observación
char_to_base64 y el Juez os la ha aceptado, usadla directamente. Si no, copiad la siguiente definición, (y añadid #include <algorithm>):int char_to_base64(char c) {
static char _syms[65] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
return std::find(_syms, _syms + 64, c) - _syms;
}
Input
AAAA. AQEB. AgIC. ////. AA==. AAA=. AQ==. AQE=. ZGRkZA==. CgAUAB4=. ////AAAA.
Output
0 0 0 1 1 1 2 2 2 255 255 255 0 0 0 1 1 1 100 100 100 100 10 0 20 0 30 255 255 255 0 0 0
Input
LA==. Jg==. lg==. Sg==. 3Q==. Mg==. Rw==. Ng==. BQ==. TA==. og==.
Output
44 38 150 74 221 50 71 54 5 76 162
Input
9qE=. xpM=. b9M=. DUk=. CH0=. rPA=. kSk=. wV8=. bQg=. ZvY=.
Output
246 161 198 147 111 211 13 73 8 125 172 240 145 41 193 95 109 8 102 246
Input
u1Zi. q6nx. NJFe. tjy1. 1Bq2. /eRh. q0A/. 2K1L. ANVh. eg+n.
Output
187 86 98 171 169 241 52 145 94 182 60 181 212 26 182 253 228 97 171 64 63 216 173 75 0 213 97 122 15 167