2246 - Adobe
Cerința[edit | edit source]
Domnul Eboda dorește să se angajeze la firma Adobe. La interviu el primește următoarea problemă.
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[edit | edit source]
Programul citește de la tastatură șirul de caractere.
Date de ieșire[edit | edit source]
Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."
Pe următoarea linie se va afișa un singur număr natural reprezentând numărul de subsecvențe de lungime 5
care sunt anagrame ale cuvântului ADOBE
.
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."
Restricții și precizări[edit | edit source]
- Șirul va avea cel mult
100 000
de caractere și nu conține alte caractere în afara celor precizate în enunț.
Exemplu 1[edit | edit source]
- Intrare
- ebodaE+m***++
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 4
Explicație[edit | edit source]
Cele patru subsecvențe sunt: eboda
, bodaE
, odaE+
și ***++
.
Exemplu 2[edit | edit source]
- Intrare
- e1b2o3d4a5E6+7m8*9*0*9+8+76
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1">
- 2246 - Adobe
import re
def conditii(sir):
if re.match("^[a-zA-Z*+-]*$", sir): return True
def adobe(sir):
# Șirul este case-insensitive, deci poate fi convertit în litere mici sir = sir.lower() # Ținem cont de subsecvențe nr_subsecvente = 0
# Pentru fiecare grupare de 5 caractere for i in range(0, len(sir)-5): # Dacă este anagramă a cuvântului "adobe"... if sorted(sir[i:i + 5]) == sorted("adobe"): # ...creștem numărul de subsecvențe nr_subsecvente += 1 continue # Altfel... else: subsir = sir[i:i + 5] # Inițializăm numărul de consoane, vocale și litere lipsă # "Adobe" conține 2 consoane, 3 vocale; în total 5 litere consoane_lipsa, vocale_lipsa, litere_lipsa = 2, 3, 5 # Pentru fiecare caracter din subsir... for caracter in subsir: # ...dacă caracterul este *... if caracter == "*": # ...scădem numărul de vocale, consoane și litere lipsă litere_lipsa -= 1 vocale_lipsa -= 1 consoane_lipsa -= 1 continue # ...dacă caracterul este vocală sau -... if caracter in ("a", "o", "e", "-"): # ...scădem numărul de vocale și litere lipsă vocale_lipsa -= 1 litere_lipsa -= 1 continue # ...dacă caracterul este consoană sau +... if caracter in ("b", "d", "+"): # ...scădem numărul de consoane și litere lipsă consoane_lipsa -= 1 litere_lipsa -= 1 continue
# Dacă nu mai lipsesc consoane, vocale sau litere... if consoane_lipsa+vocale_lipsa+litere_lipsa == 0: # ...creștem numărul de subsecvențe nr_subsecvente += 1
print(nr_subsecvente)
if __name__ == "__main__":
sir = input()
if not conditii(sir): print("Datele de intrare nu corespund restricțiilor impuse.") else: print("Datele de intrare corespund restricțiilor impuse.") adobe(sir)
</syntaxhighlight>