1000 - CNP: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: ==Cerința== 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...
 
No edit summary
 
Line 29: Line 29:


;cnp.out
;cnp.out
:Date invalide: Nu exista CNP-uri valide in fisierul de intrare.
:0


==Rezolvare==
==Rezolvare==
Line 58: Line 58:
       fout.write("Date invalide: Fisierul de intrare nu poate fi citit.")
       fout.write("Date invalide: Fisierul de intrare nu poate fi citit.")
     return
     return
 
 
   # Verificare dacă fișierul de intrare este gol
   # Verificare dacă fișierul de intrare este gol
   if os.path.getsize(nume_fisier_intrare) == 0:
   if os.path.getsize(nume_fisier_intrare) == 0:
Line 64: Line 64:
       fout.write("Date invalide: Fisierul de intrare este gol.")
       fout.write("Date invalide: Fisierul de intrare este gol.")
     return
     return
   
 
    with open(nume_fisier_intrare, 'r') as fin:
  with open(nume_fisier_intrare, 'r') as fin:
      text = fin.read()
    text = fin.read()
   
 
    cnp_list = extrage_cnp(text)
  cnp_list = extrage_cnp(text)
   
 
    if cnp_list:
  if cnp_list:
      with open(nume_fisier_iesire, 'w') as fout:
    with open(nume_fisier_iesire, 'w') as fout:
        for cnp in cnp_list:
      for cnp in cnp_list:
          fout.write(cnp + '\n')
        fout.write(cnp + '\n')
    else:
  else:
      with open(nume_fisier_iesire, 'w') as fout:
    with open(nume_fisier_iesire, 'w') as fout:
        fout.write("Date invalide: Nu exista CNP-uri valide in fisierul de intrare.")
      fout.write("0")


if __name__ == "__main__":
if __name__ == "__main__":
   main()
   main()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 12:40, 13 May 2024

Cerința[edit]

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]

Fișierul de intrare cnp.in conține informațiile date.

Date de ieșire[edit]

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]

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]

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]

<syntaxhighlight lang="python" line>

  1. 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>