# PBinfo #3669 – Bacon – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Bacon
Cifrul Bacon funcţionează așa:


se citește un mesaj
fiecare litera este înlocuită cu un cod: A-0, B-1, C-2, ... Z-25.
codul fiecarei litere este scris în baza 2 cu exact 5 cifre: A-00000, B-00001, C-00010, … Z-11001
fiecare cifră de 0 este înlocuită cu litera A
fiecare cifră de 1 este înlocuită cu litera B

Cerința
Pentru un număr c:

dacă c=1, se dă un mesaj ce trebuie codificat
dacă c=2, se dă un mesaj ce trebuie decodificat


Date de intrare
Fișierul de intrare bacon.in conține pe prima linie numărul c, iar pe a doua linie un mesaj

Date de ieșire
Fișierul de ieșire bacon.out va conține pe prima linie mesajul codificat, dacă c=1 sau mesajul decodificat in caz contrar

Restricții și precizări

1 ≤ lungimea mesajului necodificat ≤ 10000
mesajul necodificat va conține numai litere mari ale alfabetului englez

Exemplul 1:
bacon.in

1
PBINFO
bacon.out

ABBBBAAAABABAAAABBABAABABABBBA
Exemplul 2:
bacon.in

2
ABBBBAAAABABAAAABBABAABABABBBA
bacon.out

PBINFO

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
int v[130];
char v2[130];
int main()
{
    ifstream cin ("bacon.in");
    ofstream cout ("bacon.out");
    int cer;
    cin>>cer;
    char ch;
    cin.get(ch);
    if(cer==1)
    {
        while(cin.get(ch) && ch!='\n')
        {
            int val=ch-'A';
            string l="";
            for(int i=1;i<=5;i++)
            {
                if(val%2==0)
                    l=l+'A';
                else
                    l=l+'B';
                val/=2;
            }
            for(int i=4;i>=0;i--)
                cout<<l[i];
        }
    }
    else
    {
        char c;
        int ok=0,val=0;
        while(cin.get(c) && c!='\n')
        {
            if(ok!=5)
            {
                if(c=='A')
                    val=val*2;
                else if(c=='B')
                    val=val*2+1;
                ok++;
            }
            else
            {
                cout<<(char)('A'+val);
                ok=1;
                if(c=='A')
                    val=0;
                else
                    val=1;
            }
        }
        cout<<(char)('A'+val);
    }
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3669)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3669/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3669/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
