0089 - Palindrom Propozitie

From Bitnami MediaWiki

Un cuvânt este palindrom dacă se citește la fel în ambele direcții. De exemplu, capac este palindrom.

O propoziție este palindromică dacă prin eliminarea spațiilor și a altor semne de punctuație devine palindrom. De exemplu, propoziția ele fac cafele este palindromică.

Cerinţa[edit | edit source]

Să se scrie un program care citește mai multe propoziții și determină despre fiecare dacă este palindromică.

Date de intrare[edit | edit source]

Fișierul de intrare palindromin.txt conține pe prima linie un număr natural n, iar pe următoarele n linii câte o propoziție alcătuita din litere mici ale alfabetului englez și spații.

Date de ieşire[edit | edit source]

Fișierul de ieșire palindromout.txt va conține n linii. Linia i va conține valoarea 1 dacă pe linia i+1 din fișierul de intrare se află o propoziție palindromică, și 0 în caz contrar.

Restricții și precizări[edit | edit source]

  • 0<n<100
  • fiecare propoziție va conține cel mult 200 de caractere.

Exemplul 1[edit | edit source]

palindromin.txt
4
capac
ele fac cafele
ale nu fac cafele
aerare
palindromout.txt
Datele de intrare corespund restrictiilor impuse.
1
1
0
0


Exemplul 2[edit | edit source]

palindromin.txt
101KKGKKG
palindromout.txt
Datele de intrare nu corespund restrictiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. functia de validare verifica daca datele de intrare sunt in intervalul specificat

def validare(n_validare, propozitii_validare):

   # verificam daca n este in intervalul 0-100
   if n_validare <= 0 or n_validare > 100:
       raise ValueError  # ridicam o eroare daca n nu este in intervalul 0-100
   for propozitie_validare in propozitii_validare:    # parcurgem lista de propozitii
       # verificam daca lungimea propozitiei este mai mica sau egala cu 200
       if len(propozitie_validare) > 200:
           raise ValueError
       for caracter in propozitie_validare:    # parcurgem fiecare caracter din propozitie
           # verificam daca caracterul este o litera mica a alfabetului englezesc
           if not caracter.islower() and not caracter.isspace():
               raise ValueError
   file_out.write("datele de intrare corespund restrictiilor impuse\n")


  1. functia is_palindrome verifica daca o propozitie este palindromica

def este_palindrom(propozitie_palindrom):

   # eliminam spatiile din propozitie si verificam daca este palindrom
   propozitie_fara_spatii = propozitie_palindrom.replace(' ', )
   return propozitie_fara_spatii == propozitie_fara_spatii[::-1]


if __name__ == '__main__':

   file_in = open("palindromin.txt", "r")
   file_out = open("palindromout.txt", "w")
   try:
       # citim numarul de propozitii
       n_main = int(file_in.readline())
       # citim propozitiile
       propozitii_main = [linie.strip() for linie in file_in]
       # validam datele de intrare
       validare(n_main, propozitii_main)
       # pentru fiecare propozitie, verificam daca este palindromica si scriem rezultatul in fisierul de iesire
       for propozitie in propozitii_main:
           file_out.write('1\n' if este_palindrom(propozitie) else '0\n')
   # daca datele de intrare nu sunt valide, afisam un mesaj de eroare
   except ValueError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
   # daca datele de intrare sunt incomplete, afisam un mesaj de eroare
   except IndexError:
       file_out.write("Datele de intrare nu corespund restrictiilor impuse.")


</syntaxhighlight>