# PBinfo #2246 – adobe – Rezolvare C++

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

## Enunț

Domnul Eboda dorește să se angajeze la firma Adobe. La interviu el primește următoarea problemă. 

Cerința
Se dă un șir de caractere format din litere și caracterele *, + și -. Domnul Eboda trebuie să determine câte subsecvențe de lungime 5 sunt anagrame ale cuvântului ADOBE. Regulile suplimentare sunt că nu se face distincție între literele mari și cele mici și în plus, caracterul + poate suplini oricare consoană, caracterul - suplinește orice vocală, iar * suplinește orice literă. Cu aceste reguli putem spune că următoarele secvențe de cinci caractere sunt anagrame ale cuvântului adobe: aeobd, dBoAE, db---, Ae-++, *****, ++---, ad*-+.

Date de intrare
Programul citește de la tastatură șirul de caractere.

Date de ieșire
Programul va afișa pe ecran un singur număr natural reprezentând numărul de subsecvențe de lungime 5 care sunt anagrame ale cuvântului ADOBE.

Restricții și precizări

Șirul va avea cel mult 100 000 de caractere și nu conține alte caractere în afara celor precizate în enunț.

Exemplu:
Intrare

ebodaE+m***++
Ieșire

4
Explicație
Cele patru subsecvențe sunt: eboda, bodaE, odaE+ și ***++.

## Cod sursă C++

```cpp
#include <iostream>
#include <string.h>
using namespace std;
int n, i, nr, nra, nrd, nro, nrb, nre;
char a[100001], cc[6];
int main() {
    cin >> a;
    n = strlen(a);
    while (n >= 5) {
        strcpy(cc, a + (n - 5));
        nra = nrd = nro = nrb = nre = 0;
        for (i = 0; i <= 4; i++) {
            if (cc[i] == 'a'||cc[i] == 'A') nra = 1;
            if (cc[i] == 'd'||cc[i] == 'D') nrd = 1;
            if (cc[i] == 'o'||cc[i] == 'O') nro = 1;
            if (cc[i] == 'b'||cc[i] == 'B') nrb = 1;
            if (cc[i] == 'e'||cc[i] == 'E') nre = 1;
        } for (i = 0; i <= 4; i++) {
            if (cc[i] == '+') {
                if (nrd == 0) nrd = 1;
                else if (nrb == 0) nrb = 1;
            } if (cc[i] == '-') {
                if (nra == 0)
                	nra = 1;
                else {
                    if (nro == 0)
                    	nro = 1;
                    else if(nre == 0)
                    	nre = 1;
                }
            }
        } for (i = 0; i <= 4; i++) {
            if (cc[i] == '*') {
                if (nra == 0)
                	nra = 1;
                else {
                    if (nrd == 0)
                    	nrd = 1;
                    else {
                        if (nro == 0)
                        	nro = 1;
                        else {
                            if (nrb == 0)
                            	nrb = 1;
                            else if (nre == 0)
                            	nre = 1;
                        }
                    }
                }
            }
        } if (nra && nrd && nro && nrb && nre)
        	nr++;
        a[n - 1] = 0;
        n--;
    } cout << nr;
    return 0;
}
```

## Resurse

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