1346 - PbInfo
Cerinţa[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 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[edit | edit source]
- pbinfoin.txt
//htttp:www.pbinfo.ro 3 hacked gogu htttp
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. DA
Exemplul 2[edit | edit source]
- pbinfoin.txt
//http:www.pbinfo.ro 3 hacked gogu htttp
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. NU
Exemplul 3[edit | edit source]
- pbinfoin.txt
//http:www.pbinfo.virus.ro 1 gogu
- pbinfoout.txt
Datele de intrare corespund restrictiilor impuse. DA
Exemplul 4[edit | edit source]
- pbinfoin.txt
//http:www.pbinfo.virus.ro 223 hacked gogu
- pbinfoout.txt
Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 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")
</syntaxhighlight>