1000 - CNP
Cerința[edit | edit source]
Se consideră un fişier care conţine informaţii despre mai multe persoane, sub o formă nestructurată. Informaţiile sunt dispuse pe linii de maxim 200 de caractere şi pot conţine CNP-uri valide. Ştiind că CNP-ul unei persoane este un şir de exact 13 cifre consecutive, scrieţi un program care determină şi scrie în fişierul de ieșire, pe linii distincte, toate CNP-urile extrase din text. Dacă în fișierul de intrare nu se află niciun CNP, în fișierul de ieșire se va afișa numai valoarea 0.
Date de intrare[edit | edit source]
Fișierul de intrare cnp.in conține informațiile date.
Date de ieșire[edit | edit source]
Fișierul de ieșire cnp.out va conține CNP-urile determinate, câte unul pe o linie, sau valoarea 0 dacă în fișierul de intrare nu există CNP-uri.
Exemplul 1[edit | edit source]
- cnp.in
- Popescu Grigore, 14 ani, 1991212122334;
- Gigel Banu - 1031102453435, Bujorului 7;
- Dana Marin: 2690405358687, fara viza, 2450609987654 -
- Jane Doe
- cnp.out
- 1991212122334
- 1031102453435
- 2690405358687
- 2450609987654
Exemplul 2[edit | edit source]
- cnp.in
- Popescu Grigore, 14 ani, 1991212134;
- Gigel Banu - 103110245Bujorului 7;
- Dana Marin: 269-04-05-358687, fara viza, 2+450609+987654 -
- Jane Doe
- cnp.out
- 0
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1000 CNP
import re import os
def extrage_cnp(text):
regex = r'\b\d{13}\b' # căutăm grupuri de exact 13 cifre return re.findall(regex, text)
def verifica_date_intrare(nume_fisier):
if not os.path.exists(nume_fisier): return False if not os.path.isfile(nume_fisier): return False if not os.access(nume_fisier, os.R_OK): return False return True
def main():
nume_fisier_intrare = 'cnp.in' nume_fisier_iesire = 'cnp.out'
if not verifica_date_intrare(nume_fisier_intrare): with open(nume_fisier_iesire, 'w') as fout: fout.write("Date invalide: Fisierul de intrare nu poate fi citit.") return
# Verificare dacă fișierul de intrare este gol if os.path.getsize(nume_fisier_intrare) == 0: with open(nume_fisier_iesire, 'w') as fout: fout.write("Date invalide: Fisierul de intrare este gol.") return with open(nume_fisier_intrare, 'r') as fin: text = fin.read() cnp_list = extrage_cnp(text) if cnp_list: with open(nume_fisier_iesire, 'w') as fout: for cnp in cnp_list: fout.write(cnp + '\n') else: with open(nume_fisier_iesire, 'w') as fout: fout.write("0")
if __name__ == "__main__":
main()
</syntaxhighlight>