2246 - Adobe
Cerința
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
Programul citește de la tastatură șirul de caractere.
Date de ieșire
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
- Șirul va avea cel mult
100 000
de caractere și nu conține alte caractere în afara celor precizate în enunț.
Exemplu 1
- Intrare
- ebodaE+m***++
- Ieșire
- Datele de intrare corespund restricțiilor impuse.
- 4
Explicație
Cele patru subsecvențe sunt: eboda
, bodaE
, odaE+
și ***++
.
Exemplu 2
- Intrare
- e1b2o3d4a5E6+7m8*9*0*9+8+76
- Ieșire
- Datele de intrare nu corespund restricțiilor impuse.
Rezolvare
# 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)