1346 - PbInfo
De la Universitas MediaWiki
Cerinţa
Hacker-ul Gogu și-a neglijat serios activitatea în ultima vreme, așa că și-a propus să mai spargă încă un site, care, din întâmplare, este chiar www.pbinfo.ro.
Date de intrare
Pe prima linie se citește un șir reprezentând un link al site-ului PbInfo. Pe linia a doua, se citește un număr întreg n (1 <= n <= 20), iar pe următoarele n linii se citesc n cuvinte cheie. Scopul vostru este să aflați dacă hacker-ul Gogu s-a infiltrat și a schimbat link-ul original.
Date de ieşire
Dacă link-ul dat conține unul din cuvintele cheie precizate în fișierul de intrare sau conține cuvântul “virus”, afișați DA, altfel afișați NU.
Restricții și precizări
- cuvintele vor fi mai scurte decât link-ul precizat, iar link-ul va avea maxim 100 de caractere;
- hacker-ul Gogu nu este profesionist, așa că nu este nevoie să va alarmați;
- input-ul va conține numai litere mici ale alfabetului englez și separatorii ,.!?/:.
Exemplul 1
- pbinfoin.txt
//htttp:www.pbinfo.ro 3 hacked gogu htttp
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. DA
Exemplul 2
- pbinfoin.txt
//http:www.pbinfo.ro 3 hacked gogu htttp
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. NU
Exemplul 3
- pbinfoin.txt
//http:www.pbinfo.virus.ro 1 gogu
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. DA
Exemplul 4
- pbinfoin.txt
//http:www.pbinfo.virus.ro 223 hacked gogu
- pbinfoout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
# functia de validare verifica daca datele de intrare sunt in intervalul specificat
def validare(n_validare, link_validare, cuvinte_cheie_validare):
# verificam daca n este in intervalul 1-20
if n_validare <= 0 or n_validare > 20:
raise ValueError # ridicam o eroare daca n nu este in intervalul 1-20
# verificam daca lungimea link-ului este mai mica sau egala cu 100
if len(link_validare) > 100:
raise ValueError
for cuvant in cuvinte_cheie_validare: # parcurgem lista de cuvinte cheie
# verificam daca lungimea cuvantului este mai mica decat lungimea link-ului
if len(cuvant) >= len(link_validare):
raise ValueError
file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
# functia is_hacked verifica daca link-ul a fost spart
def is_hacked(link, cuvinte_cheie):
# verificam daca link-ul contine unul din cuvintele cheie sau cuvantul "virus"
return any(cuvant in link for cuvant in cuvinte_cheie) or "virus" in link
if __name__ == '__main__':
file_in = open("pbinfoin.txt", "r")
file_out = open("pbinfoout.txt", "w")
try:
# citim link-ul
link_main = file_in.readline().strip()
# citim numarul de cuvinte cheie
n_main = int(file_in.readline())
# citim cuvintele cheie
cuvinte_cheie_main = [file_in.readline().strip() for _ in range(n_main)]
# validam datele de intrare
validare(n_main, link_main, cuvinte_cheie_main)
# verificam daca link-ul a fost spart si scriem rezultatul in fisierul de iesire
file_out.write('DA\n' if is_hacked(link_main, cuvinte_cheie_main) else 'NU\n')
except ValueError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")
except IndexError:
file_out.write("Datele de intrare nu corespund restrictiilor impuse")