1600 - S P C 2
Cerința[edit | edit source]
Scrieţi un program care citeşte din fişierul de intrare şiruri de caractere de forma tip#cuvânt, unde cuvânt este un şir oarecare de litere iar tip poate fi una din literele S, P sau C, semnificaţia fiind subiect, predicat sau complement. Programul va afişa, în ordine lexicografică (după subiect, predicat, complement), toate propoziţiile având structura subiect predicat complement ce pot fi formate cu ajutorul cuvintelor citite.
Date de intrare[edit | edit source]
Fișierul de intrare s_p_c_2.in conține pe prima linie mai multe şiruri de caractere de forma tip#cuvânt, separate printr-un spaţiu.
Date de ieșire[edit | edit source]
Fișierul de ieșire s_p_c_2.out va conține toate propoziţiile având structura descrisă mai sus, câte una pe linie.
Restricții și precizări[edit | edit source]
- sunt cel mult 100 de subiecte, 100 de predicate şi 100 de complemente
- fiecare cuvânt are cel mult 40 de caractere, litere mari şi mici ale alfabetului englez
- în fişier există cel puţin un subiect, cel puţin un predicat şi cel puţin un complement.
Exemplu 1:[edit | edit source]
- intrare
- S#Ion S#Vasile P#alearga C#repede P#scrie C#incet
- iesire
- Ion alearga incet
- Ion alearga repede
- Ion scrie incet
- Ion scrie repede
- Vasile alearga incet
- Vasile alearga repede
- Vasile scrie incet
- Vasile scrie repede
Exemplu 2:[edit | edit source]
- intrare
- S#IonS#VasileP#aleargaC#repedeP#scrieC#incet
- ieșire
- Eroare în citirea primului rând din fișierul de intrare. Formatul nu este conform cerințelor.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1600 s_p_c_2
from itertools import product
def citeste_date_intrare(nume_fisier):
subiecte = [] predicate = [] complemente = []
with open(nume_fisier, 'r') as file: try: line = next(file).strip() cuvinte = line.split() for cuvant in cuvinte: tip, valoare = cuvant.split('#') if tip == 'S': subiecte.append(valoare) elif tip == 'P': predicate.append(valoare) elif tip == 'C': complemente.append(valoare) except (StopIteration, ValueError): print("Eroare în citirea primului rând din fișierul de intrare. Formatul nu este conform cerințelor.")
for line_number, line in enumerate(file, start=2): try: tip, cuvant = line.strip().split('#') if tip == 'S': subiecte.append(cuvant) elif tip == 'P': predicate.append(cuvant) elif tip == 'C': complemente.append(cuvant) except ValueError: print(f"Eroare la linia {line_number} în fișierul de intrare. Linia nu respectă formatul așteptat.")
return subiecte, predicate, complemente
def genereaza_propozitii(subiecte, predicate, complemente):
propozitii = []
for combinatie in product(subiecte, predicate, complemente): propozitie = ' '.join(combinatie) propozitii.append(propozitie)
return sorted(propozitii)
def scrie_date_iesire(nume_fisier, propozitii):
with open(nume_fisier, 'w') as file: for propozitie in propozitii: file.write(propozitie + '\n')
if __name__ == "__main__":
nume_fisier_intrare = "s_p_c_2.in" nume_fisier_iesire = "s_p_c_2.out"
subiecte, predicate, complemente = citeste_date_intrare(nume_fisier_intrare) propozitii = genereaza_propozitii(subiecte, predicate, complemente) scrie_date_iesire(nume_fisier_iesire, propozitii)
</syntaxhighlight>