base64

Time limit: 0.1s
Memory limit: 2MB
Input: base64.in
Output: base64.out

Convertirea unui text ASCII la Base64

Să luăm spre exemplu șirul aB. Trebuie să transformăm fiecare caracter din acest șir în reprezentarea binară a codurilor lor ASCII (tabelul de mai sus). Caracterul a are codul ASCII 97, deci reprezentarea în baza 2 este 01100001. Pentru caracterul B reprezentarea în baza 2 este 01000010. Acum formăm un șir din aceste reprezentări, concatenându-le în ordine: 0110000101000010.

Următorul pas este să împărțim noul șir în grupe de câte 6 biți. Dacă ultima grupă are mai puțin de 6 biți, adăugăm zerouri la sfârșit până se vor face 6 biți. Grupele sunt 011000, 010100, 001000.

Următorul pas este să transformăm aceste numere în baza 10, apoi să le transformăm în caractere din codificarea Base64 folosind tabelul de mai jos. Prima grupă (2424) se transformă în caracterul Y, a doua grupă (2020) se transformă în caracterul U, iar ultima grupă în caracterul I. Combinăm rezultatele și rezultă șirul YUI.

Următorul și ultimul pas este să adăugăm caractere = la sfârșitul acestui șir până lungimea acestuia devine un multiplu de 44.
Acest pas nu este respectat în unele cazuri, șirul rămânând la forma YUI în loc de YUI=, însă la această problemă vom adăuga caractere = la sfârșit.

Pentru neclarități, consultați site-ul acesta.

Cerință

Implementați două funcții care transformă un text scris în codificarea ASCII într-un text scris în codificarea Base64 și invers.
Funcțiile au următoarele antete:

std::string ASCII_to_Base64(std::string s);
std::string Base64_to_ASCII(std::string s);

Restricții și precizări

  • Lungimea șirului ss este mai mică strict decât 100 001100 \ 001.
  • Pentru 50 de puncte trebuie să implementați corect funcția ASCII_to_Base64(), iar pentru alte 50 de puncte funcția Base64_to_ASCII().
  • Este garantat că ss conține doar caractere care aparțin codificării respective (pentru codificarea ASCII caracterele din primul tabel, iar pentru codificarea Base64 caracterele din al doilea tabel, la care se mai adaugă și =).
  • Este garantat că textul scris în codificarea Base64 conține doar caractere valide pentru codificarea ASCII atunci când este transformat.
  • Atenție! Cerința este să implementați funcțiile menționate anterior. Codul pe care îl veți trimite nu va conține funcția main() — aceasta va fi înlocuită de cele două funcții. Iată un exemplu de un program valid:
#include <string>
using namespace std;
string ASCII_to_Base64(string s) { return "QSB2ZW5pdCBBbGV4IQ=="; }
string Base64_to_ASCII(string s) { return ":))"; }

Problem info

ID: 260

Editor: ezluci

Author:

Tags:

Attachments

Log in or sign up to be able to send submissions!