Decodificar Base64 (2)

(Aquest problema fa servir la funció char\_to\_base64 del problema "Decodificar Base64 (1)".)

Es tracta de fer un programa que, donada una seqüència de caràcters a l’entrada (un dels 64 que representen els dígits de base 64), la decodifiqui en els seus bytes. La decodificació funciona de la següent manera:

  1. Primer, per a cada grup de 4 caràcters (o quartet) de l’entrada c1c_1, c2c_2, c3c_3 i c4c_4, els transformem en els seus dígits corresponents. d1d_1, d2d_2, d3d_3, d4d_4, usant la funció char_to_base64.

  2. Després, amb els 4 dígits did_i reconstruim el natural xx aplicant la fórmula:

    x=((d164+d2)64+d3)64+d4x = ((d_1 \cdot 64 + d_2) \cdot 64 + d_3) \cdot 64 + d_4

  3. Tot seguit, reinterpretem xx en base 256, i n’extraiem les xifres, que ara són 3: B1B_1, B2B_2, i B3B_3. El procés és totalment anàleg a extreure les xifres d’un nombre en base 10, però en base 256. El que haurem fet és calcular els dígits BiB_i de la fórmula següent:

    x=(B1256+B2)256+B3x = (B_1 \cdot 256 + B_2) \cdot 256 + B_3

    (Cal recordar que el procés d’extracció de les xifres treballat a PRO1 produeix les xifres al revés, començant per B3B_3)

  4. Finalment, mostrem B1B_1, B2B_2 i B3B_3 com a nombres naturals per pantalla, en aquest ordre.

La codificació en base 64 sempre té un nombre de caràcters múltiple de 4, però just al final de la seqüència pot haver-hi ’=’ o ’==’, que ens diu que el número de bytes de l’últim quartet són 2 o 1, i no 3:

Si l’últim quartet té algun ’=’ al final:

Entrada

L’entrada consisteix en diversos casos, a on cada cas és una seqüència de caràcters acabada en punt en una línia.

Sortida

La sortida ha de ser una línia per a cada cas amb els bytes com a nombres naturals. Abans de cada byte, inclòs el primer, hi ha d’haver un espai.

Observació

Informació del problema

Autoria: Pau Fernández

Generació: 2026-01-25T12:55:34.913Z

© Jutge.org, 2006–2026.
https://jutge.org