# PBinfo #3598 – Beaufort – Rezolvare C++

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

## Enunț

Beaufort
Cifrul Beaufort este un cifre ce foloseste o matrice cu litere de marimea 26x26 iar liniile si coloanele vor avea asociata o litera (linia si coloana 1 le vom nota cu A, linia si coloana 2 cu B …, linia si coloana 26 cu Z).
Matricea se va forma asa:


Pe linia 1 se pun literele A, B, C… Z
Pe linia 2 se pun literele B, C, D… Z, A
Pe linia 3 se pun literele C, D, E… Z, A, B
linia 4 se pun literele D, E, F … Z, A, B, C
…
Pe linia 26 se pun literele Z, A, B, C, … Y
Cu alte cuvinte, pentru fiecare linie i (1≤i≤26), se vor lua primele i-1 litere din alfabet si se pun la sfarsitul acestuia.
Cifrul mai foloseste o cheie si un mesaj. Cheia o putem considera un vector C care are n litere si incepe de pe pozitia 0 iar mesajul il vom considera un vector M care incepe si el de pe pozitia 0.
pentru fiecare litera M[i], cautam pe coloana M[i] litera C[i%n] si afisam pe ce linie se afla, 0 ≤ i < lungimea mesajului.

Cerința

    Dandu-se o cheie si un mesaj, sa se afle cum va arata mesajul dupa o codificare.

Date de intrare
Fișierul de intrare beaufort.in conține pe prima linie cheia iar pe a doua linie un mesaj.

Date de ieșire
Fișierul de ieșire beaufort.out va conține pe prima linie mesajul dupa o codificare.

Restricții și precizări

1≤lungimea mesajului, lungimea cheii≤10000

Exemplul 1:
beaufort.in

FORTIFICATION
DEFENDTHEEASTWALLOFTHECASTLE
beaufort.out

CKMPVCPVWPIWUJOGIUAPVWRIWUUK
Exemplul 2:
beaufort.in

FORTIFICATION
CKMPVCPVWPIWUJOGIUAPVWRIWUUK
beaufort.out

DEFENDTHEEASTWALLOFTHECASTLE
Explicație
Matricea arata asa:

#   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#   ---------------------------------------------------
A   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B   B C D E F G H I J K L M N O P Q R S T U V W X Y Z A
C   C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D   D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E   E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F   F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G   G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H   H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I   I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J   J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K   K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L   L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M   M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N   N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O   O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P   P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q   Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R   R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S   S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T   T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U   U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V   V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W   W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X   X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y   Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z   Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
Pentru primul exemplu, prima pereche de litere(litera F si D), pe coloana D cautam litera F. Aceasta se afla pe linia 3 adica linia C.

## Cod sursă C++

```cpp
#include <fstream>
using namespace std;
char v[27][27];
char v1[27][27];
int main()
{
    ifstream cin ("beaufort.in");
    ofstream cout ("beaufort.out");
    int cnt=0;
    for(char a='A';a<='Z';a++)
    {
        for(char b=a;b<='Z';b++)
        {
            cnt++;
            v[cnt][b-'A'+1]=a;
        }
        for(char b='A';b<a;b++)
        {
            cnt++;
            v[cnt][b-'A'+1]=a;
        }
        cnt=0;
    }
    string key;
    string cuv;
    cin>>key>>cuv;
    for(int i=0;i<cuv.size();i++)
        cout<<v[cuv[i]-'A'+1][(key[i%key.size()])-'A'+1];
    return 0;
}
```

## Resurse

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